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 |
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",
)