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