Oluşturma Kuralları Kılavuzu

Giriş

Korumalı Alana Sahip API (SAPI), Google'ın Bazel derleme sistemi veya popüler CMake meta derleme sistemiyle kullanılabilir. Bu sayfa Bazel'e odaklanmaktadır, ancak aynı özellikler CMake için de kullanılabilir. Bazel önerilen derleme sistemidir ve entegrasyonu en kolay olandır.

BUILD.bazel dosyanızda Ana Makine Kodunuzu oluşturmak için bir yapı kuralı bulunur. Ana Makine Kodunun, kitaplığın korumalı alan sürümünü kullanması için Ana Makine Kodunuzun kullanacağı bir derleme hedefi hazırlamanız gerekir.

SAPI Derleme Kuralları

  • sapi_library

sapi_library

sapi_library(name, deps, srcs, hdrs, embed, functions, lib, lib_name, input_files, namespace, header, add_default_deps, limit_scan_depth, visibility)

Çıkış Hedefleri

sapi_library() derleme kuralı, aşağıdaki hedefleri oluşturur:

  • name-sapi: Korumalı alanlı kitaplık, Ana Makine Kodu hedefi olarak normal cc_library değerini değiştirir. zlib_sapi.bin ve korumalı alan bağımlılıklarından oluşur.
  • name.interface: Oluşturulan kitaplık arayüzü.
  • name.embed: cc_embed_data() hedefi, Sandboxee'yi ikili programa yerleştirmek için kullanılır. bazel/embed_data.bzl sayfasına bakın.
  • name.bin: Sandboxee ikili programı, küçük bir iletişim saplaması ve korumalı alana alınan kitaplıktan oluşur.

Bağımsız değişkenler

Özellikler
ad

Ad; zorunlu

Bu hedef için benzersiz bir ad. Bu işlem, korumalı alana alınmış C/C++ kitaplığını tanımlar. Name-sapi çıkış hedefine bakın.

deps

Etiket listesi; isteğe bağlı

Korumalı alana alınmış C/C++ kitaplığına bağlanacak diğer kitaplıkların listesi.

src'ler

Etiket listesi; isteğe bağlı

Korumalı alana alınmış C/C++ kitaplığını oluşturmak için işlenen C ve C++ dosyalarının listesi. Bunlar, oluşturulmamış (normal kaynak kodu) veya oluşturulmuş C/C++ kaynak ve başlık dosyalarıdır.

Daha fazla bilgi için cc_library dokümanlarındaki src özelliği açıklamalarına bakın.

HDR'ler

Etiket listesi; isteğe bağlı

Korumalı alana alınmış C/C++ kitaplığını oluşturmak için işlenen başlık dosyalarının listesi.

Korumalı alan tanımının (sandbox.h) buraya eklenmesi gerekir. Yerleşik SAPI kitaplığı kullanılıyorsa ve varsayılan korumalı alan politikası yeterliyse boş bırakın.

yerleştir

Boole; isteğe bağlı; varsayılan Doğru'dur

Doğru değerine ayarlanırsa korumalı alana alınmış kitaplık, ana makine kodunun içine yerleştirilmelidir. Bu, SAPI Korumalı Alanı'nın ::sapi::Sandbox::Sandbox(FileToc*) oluşturucusu ile başlatılmasına olanak tanır.

işlevler

İşlev adlarının listesi; isteğe bağlı

Korumalı alana alınmış bir sürümün oluşturulduğu ve daha sonra Ana Makine Kodu'nda kullanılabilecek C/C++ kitaplığındaki işlevlerin listesi.

Boş bir liste, kitaplıkta bulunan tüm işlevleri dışa aktarıp sarmaya çalışır.

lib

Dize; zorunlu

Korumalı alana alınmış kitaplık olacak C/C++ kitaplık hedefinin adı.

Bu işlem, projedeki C/C++ kitaplığı için bir cc_library derleme kuralına sahip olmasını gerektirir.

lib_name

Dize; zorunlu

Kitaplık işlevlerine, işlevler özelliğinden proxy uygulamak için kullanılan SAPI nesnesinin adı. Korumalı alan kapsamındaki kitaplıktaki işleve yapılan tüm çağrılar SAPI Nesnesi aracılığıyla yapılır.

input_files

Etiket listesi; isteğe bağlı

sapi_interface kuralının dahili çalışması sırasında işlenen C ve C++ dosyalarının listesi. Oluşturma aracı, C/C++ kitaplığının işlev bildirimleri için bu dosyaları tarar.

C/C++ kitaplığının dışa aktarılan üstbilgileri her zaman tarandığından bu genellikle gerekli değildir.

ad alanı

Dize; isteğe bağlı; varsayılan: sapigen

lib_name tarafından tanımlanan SAPI nesnesinin yerleştirileceği bir C++ ad alanı tanımlayıcısı.

Varsayılan ad alanı sapigen'dir.

başlık

Dize; isteğe bağlı

Oluşturulan başlık dosyası yerine kullanılacak başlık dosyasının adı.

Kodu otomatik olarak oluşturmak istiyorsanız bu özelliği kullanmayın

add_default_deps

Boole; isteğe bağlı; varsayılan Doğru'dur

KULLANIMDAN KALDIRILDI

limit_scan_depth

Boole; isteğe bağlı; varsayılan değer Yanlış'tır

Karmaşık kitaplıklarda Bazel dosya sayısına ulaşılabilir ve derleme işlemi başarılı olmaz. Bu özellik, bu karmaşık durumlara yönelik bir kaçış yoludur. Gerekmedikçe kullanmayın.

etiketler

Etiketler için Bazel dokümanlarına bakın.

görünürlük

Görünürlük için Bazel dokümanlarına bakın

Örnek Kullanım

zlib örneği, sapi_library derleme kuralının nasıl kullanıldığını gösteren iyi bir referans projesidir:

load(
    "//sandboxed_api/tools/generator:sapi_generator.bzl",
    "sapi_library",
)

sapi_library(
    name = "zlib-sapi",
    srcs = [],     # Extra code compiled with the SAPI library
    hdrs = [],     # Leave empty if embedded SAPI libraries are used, and the
                   # default sandbox policy is sufficient.
    embed = True,  # This is the default
    functions = [
        "deflateInit_",
        "deflate",
        "deflateEnd",
    ],
    lib = "@zlib//:zlibonly",
    lib_name = "Zlib",
    namespace = "sapi::zlib",
)