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, barındırıcı kodunuzu oluşturmak için bir derleme kuralı bulunur. Barındırıcı kodunun bir kitaplığın korumalı alan sürümünü kullanabilmesi için barındırıcı kodunuzun kullanacağı bir derleme hedefi hazırlamanız gerekir.

SAPI Build Rules

  • 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: Normal cc_library'nin yerine Host Code hedefi olarak kullanılan, korumalı alan kitaplığı. zlib_sapi.bin ve sandbox bağımlılıklarından oluşur.
  • name.interface: Oluşturulan kitaplık arayüzü.
  • name.embed: cc_embed_data() Sandboxee'yi ikili programa yerleştirmek için kullanılan hedef. bazel/embed_data.bzl adresini inceleyin.
    • name.bin: Sandboxee ikilisi, küçük bir iletişim saplaması ve korumalı alan oluşturulan kitaplıktan oluşur.

Bağımsız değişkenler

Özellikler
ad

Ad: zorunlu

Bu hedef için benzersiz bir ad. Bu, korumalı alan C/C++ kitaplığını tanımlar. Name-sapi çıkış hedefi bölümüne bakın.

deps

Etiketler 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

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

Koruma alanına 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 srcs özelliğinin açıklamasına bakın.

hdrs

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

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

Bu, korumalı alan tanımının (sandbox.h) yerleştirilmesi gereken yerdir. Yerleştirilmiş SAPI kitaplığı kullanılıyorsa ve varsayılan korumalı alan politikası yeterliyse boş bırakın.

yerleştirme

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

Doğruysa korumalı alan kitaplığı, ana makine kodunun içine 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ıdır.

C/C++ kitaplığındaki işlevlerin listesi. Bu işlevler için korumalı alan sürümü oluşturulur ve bu sürüm daha sonra ana makine kodunda kullanılabilir.

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

lib

Dize; zorunlu

Koruma alanına alınmış kitaplık olacak C/C++ kitaplık hedefinin adı.

Bu, projede C/C++ kitaplığı için bir cc_library derleme kuralınız olduğunu varsayar.

lib_name

Dize; zorunlu

Kitaplık işlevlerini işlevler özelliğinden proxy yapmak için kullanılan SAPI nesnesinin adı. Koruma alanına alınmış kitaplıktaki işlevlere yapılan tüm çağrılar SAPI nesnesi üzerinden gerçekleşir.

input_files

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

sapi_interface kuralının dahili olarak çalıştırılması sırasında işlenen C ve C++ dosyalarının listesi. Oluşturucu, bu dosyaları C/C++ kitaplığının işlev bildirimleri için 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 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 değeri; 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. Gerekmedikçe 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.

Kullanım örneği

zlib örneği, sapi_library build 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 policy is sufficient.
    embed = True,  # This is the default
    functions = [
        "deflateInit_",
        "deflate",
        "deflateEnd",
    ],
    lib = "@zlib//:zlibonly",
    lib_name = "Zlib",
    namespace = "sapi::zlib",
)