Oluşturma Kuralları Kılavuzu
Koleksiyonlar ile düzeninizi koruyun
İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
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(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.
|
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",
)
Aksi belirtilmediği sürece bu sayfanın içeriği Creative Commons Atıf 4.0 Lisansı altında ve kod örnekleri Apache 2.0 Lisansı altında lisanslanmıştır. Ayrıntılı bilgi için Google Developers Site Politikaları'na göz atın. Java, Oracle ve/veya satış ortaklarının tescilli ticari markasıdır.
Son güncelleme tarihi: 2025-07-26 UTC.
[[["Anlaması kolay","easyToUnderstand","thumb-up"],["Sorunumu çözdü","solvedMyProblem","thumb-up"],["Diğer","otherUp","thumb-up"]],[["İhtiyacım olan bilgiler yok","missingTheInformationINeed","thumb-down"],["Çok karmaşık / çok fazla adım var","tooComplicatedTooManySteps","thumb-down"],["Güncel değil","outOfDate","thumb-down"],["Çeviri sorunu","translationIssue","thumb-down"],["Örnek veya kod sorunu","samplesCodeIssue","thumb-down"],["Diğer","otherDown","thumb-down"]],["Son güncelleme tarihi: 2025-07-26 UTC."],[[["\u003cp\u003eSandboxed API (SAPI) integrates with Bazel and CMake, with Bazel being the recommended build system.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003esapi_library\u003c/code\u003e rule in Bazel is used to build sandboxed versions of libraries.\u003c/p\u003e\n"],["\u003cp\u003e\u003ccode\u003esapi_library\u003c/code\u003e generates targets like \u003ccode\u003ename-sapi\u003c/code\u003e for the sandboxed library and \u003ccode\u003ename.embed\u003c/code\u003e for embedding the Sandboxee.\u003c/p\u003e\n"],["\u003cp\u003eSeveral arguments in \u003ccode\u003esapi_library\u003c/code\u003e allow customization such as \u003ccode\u003efunctions\u003c/code\u003e to specify functions to sandbox and \u003ccode\u003elib\u003c/code\u003e to define the library target.\u003c/p\u003e\n"],["\u003cp\u003eAn example using zlib demonstrates the practical application of the \u003ccode\u003esapi_library\u003c/code\u003e rule.\u003c/p\u003e\n"]]],[],null,["Introduction\n\nSandboxed API (SAPI) can be used with Google's [Bazel](https://bazel.build/)\nbuild system, or with the popular [CMake](https://cmake.org/) meta build system.\nThis page focuses on Bazel, but the same features are available for CMake. Bazel\nis the recommended build system and the easiest to integrate with.\n\nIn your BUILD.bazel file you will have a build rule to build your Host Code. For\nthe Host Code to use the sandboxed version of a library, you need to prepare a\nbuild target that your Host Code will make use of.\n\nSAPI Build Rules\n\n- sapi_library\n\nsapi_library \n\n```\nsapi_library(name, deps, srcs, hdrs, embed, functions, lib, lib_name, input_files, namespace, header, add_default_deps, limit_scan_depth, visibility)\n```\n\nOutput Targets\n\nThe `sapi_library()` build rule generates the following targets:\n\n- *name-sapi* : Sandboxed library, substitutes the normal cc_library as the Host Code target. Consists of `zlib_sapi.bin` and sandbox dependencies.\n- *name*.interface: Generated library interface.\n- *name* .embed: `cc_embed_data()` target used to embed the Sandboxee in the binary. See [bazel/embed_data.bzl](https://github.com/google/sandboxed-api/blob/main/sandboxed_api/bazel/embed_data.bzl).\n - *name*.bin: Sandboxee binary, consists of a small communication stub and the library that is being sandboxed.\n\nArguments\n\n| Attributes ||\n|------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| name | [Name](https://docs.bazel.build/versions/main/build-ref.html#name); required A unique name for this target. This will identify the sandboxed C/C++ library, see the name-sapi output target. |\n| deps | List of [labels](https://docs.bazel.build/versions/main/build-ref.html#labels); optional A list of other libraries to be linked into the sandboxed C/C++ library. |\n| srcs | List of [labels](https://docs.bazel.build/versions/main/build-ref.html#labels); optional A list of C and C++ files that are processed to create the sandboxed C/C++ library. These are C/C++ source and header files, either non-generated (normal source code) or generated. For more information, see the explanation of the attribute srcs in the [cc_library documentation](https://docs.bazel.build/versions/main/be/c-cpp.html#cc_library.srcs). |\n| hdrs | List of [labels](https://docs.bazel.build/versions/main/build-ref.html#labels); optional A list of header files that are processed to create the sandboxed C/C++ library. This is where the sandbox definition (sandbox.h) should go; leave empty if the embedded SAPI library is used, and the default sandbox policy is sufficient. |\n| embed | Boolean; optional; default is True If True, the sandboxed library should be embedded inside the host code. This allows the SAPI Sandbox to be initialized with the `::sapi::Sandbox::Sandbox(FileToc*)` constructor. |\n| functions | List of function names; optional A list of functions from the C/C++ library for which a sandboxed version is generated and that can then be used in the Host Code. An empty list will try to export and wrap all functions found in the library. |\n| lib | String; required The name of the C/C++ library target which is going to be the sandboxed library. This expects that you have a cc_library build rule for the C/C++ library in the project. |\n| lib_name | String; required The name of the SAPI object which is used to proxy the library functions from the functions attribute. Any call to the function in the sandboxed library will happen via the SAPI Object. |\n| input_files | List of [labels](https://docs.bazel.build/versions/main/build-ref.html#labels); optional A list of C and C++ files that are processed during the internal run of the sapi_interface rule. The generator scans these files for the C/C++ library's function declarations. This is mostly not needed as the C/C++ library's exported headers are always scanned. |\n| namespace | String; optional; default is sapigen A C++ namespace identifier to place the SAPI object defined by *lib_name* into. The default namespace is *sapigen*. |\n| header | String; optional The name of the header file to use instead of the generated header file. If you want to auto-generate the code, **do not use** this attribute |\n| add_default_deps | Boolean; optional; default is True **DEPRECATED** |\n| limit_scan_depth | Boolean; optional; default is False For complex libraries, the file-count for Bazel might be reached and the build process will not succeed. This attribute is an escape hatch for these complex situations. **Do not use** unless necessary. |\n| tags | See Bazel documentation for [tags](https://docs.bazel.build/versions/main/be/common-definitions.html#common.tags). |\n| visibility | See Bazel documentation for [visibility](https://docs.bazel.build/versions/main/be/common-definitions.html#common.visibility) |\n\nExample Use\n\nThe zlib example is a good reference project demonstrating how the sapi_library\nbuild rule is used: \n\n load(\n \"//sandboxed_api/tools/generator:sapi_generator.bzl\",\n \"sapi_library\",\n )\n\n sapi_library(\n name = \"zlib-sapi\",\n srcs = [], # Extra code compiled with the SAPI library\n hdrs = [], # Leave empty if embedded SAPI libraries are used, and the\n # default sandbox policy is sufficient.\n embed = True, # This is the default\n functions = [\n \"deflateInit_\",\n \"deflate\",\n \"deflateEnd\",\n ],\n lib = \"@zlib//:zlibonly\",\n lib_name = \"Zlib\",\n namespace = \"sapi::zlib\",\n )"]]