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