Oluşturma Kuralları Kılavuzu

Giriş

Sandboxed API (SAPI), Google'ın Bazel derleme sistemiyle veya popüler CMake meta derleme sistemiyle kullanılabilir. Bu sayfada Bazel'e odaklanılsa da aynı özellikler CMake için de kullanılabilir. Bazel, önerilen derleme sistemidir ve entegrasyonu en kolay olanıdır.

BUILD.bazel dosyanızda, ana makine kodunuzu oluşturmak için bir derleme kuralı bulunur. Ana makine kodunun bir 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ı alana alınmış kitaplık, ana makine kodu hedefi olarak normal cc_library'nin yerini alır. zlib_sapi.bin ve korumalı alan bağımlılıklarından oluşur.
  • name.interface: Oluşturulan kitaplık arayüzü.
  • name.embed: Korumalı alan uygulamasını ikili programa yerleştirmek için kullanılan cc_embed_data() hedefi. bazel/embed_data.bzl dosyasına bakın.
    • name.bin: Sandboxee ikili programı, küçük bir iletişim taslağından ve korumalı alana alınan kitaplıktan oluşur.

Bağımsız değişkenler

Özellikler
ad

Name; zorunlu

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

deps

Etiket listesi; isteğe bağlıdır.

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

srcs

Etiket listesi; isteğe bağlıdır.

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 üstbilgi dosyalarıdır.

Daha fazla bilgi için cc_library belgelerindeki srcs özelliğinin açıklamasına bakın.

hdrs

Etiket listesi; isteğe bağlıdır.

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

Korumalı alan tanımının (sandbox.h) yerleştirilmesi gereken yer burasıdır. Yerleştirilmiş SAPI kitaplığı kullanılıyorsa ve varsayılan korumalı alan yapılandırması (DefaultConfig, DefaultPolicyBuilder, DefaultFlags, DefaultEnvironmentVariables ve DefaultLimits kullanır) yeterliyse boş bırakın.

embed

Boole; isteğe bağlı; varsayılan değer True'dur.

Doğru ise korumalı alan kitaplığı, ana makine koduna yerleştirilmelidir. Bu, SAPI korumalı alanının ::sapi::Sandbox::Sandbox(FileToc*) oluşturucusuyla başlatılmasına olanak tanır.

functions

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

C/C++ kitaplığındaki işlevlerin listesi. Bu işlevlerin korumalı alana alınmış bir sürümü oluşturulur ve daha sonra ana makine kodunda kullanılabilir.

Boş bir liste, kitaplıkta bulunan tüm işlevleri dışa aktarmaya ve sarmalamaya çalışır.

lib

Dize; zorunlu

Korumalı alan kitaplığı olacak C/C++ kitaplığı hedefinin adı.

Bu, projede C/C++ kitaplığı için bir cc_library derleme kuralınızın olmasını gerektirir.

lib_name

Dize; zorunlu

Kitaplık işlevlerini işlevler özelliğinden proxy yapmak için kullanılan SAPI nesnesinin adı. Koruma alanındaki kitaplıkta işlev çağrısı, SAPI nesnesi üzerinden yapılır.

input_files

Etiketlerin 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şturucu, 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 değer sapigen'dir.

lib_name tarafından tanımlanan SAPI nesnesini yerleştirmek için kullanılan bir C++ ad alanı tanımlayıcısı.

Varsayılan ad alanı sapigen'dir.

başlık

Dize; isteğe bağlı

Oluşturulan üstbilgi dosyası yerine kullanılacak üstbilgi dosyasının adı.

Kodu otomatik olarak üretmek istiyorsanız bu özelliği kullanmayın.

add_default_deps

Boole; isteğe bağlı; varsayılan değer True'dur.

DEPRECATED

limit_scan_depth

Boole; isteğe bağlı; varsayılan değer False'tur.

Karmaşık kitaplıklarda Bazel için dosya sayısı sınırına ulaşılabilir ve derleme işlemi başarılı olmaz. Bu özellik, bu karmaşık durumlar için bir kaçış yoludur. Gerekli olmadığı sürece kullanmayın.

Etiketler

Etiketler için Bazel belgelerine bakın.

görünürlük

Görünürlük için Bazel belgelerine bakın.

Örnek Kullanım

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

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 configuration (DefaultConfig) is sufficient.
    embed = True,  # This is the default
    functions = [
        "deflateInit_",
        "deflate",
        "deflateEnd",
    ],
    lib = "@zlib//:zlibonly",
    lib_name = "Zlib",
    namespace = "sapi::zlib",
)