Pengantar
Sandboxed API (SAPI) dapat digunakan dengan sistem build Bazel Google, atau dengan sistem build meta CMake yang populer. Halaman ini berfokus pada Bazel, tetapi fitur yang sama juga tersedia untuk CMake. Bazel adalah sistem build yang direkomendasikan dan paling mudah diintegrasikan.
Dalam file BUILD.bazel, Anda akan memiliki aturan build untuk membangun Kode Host. Agar Kode Host dapat menggunakan library versi sandbox, Anda perlu menyiapkan target build yang akan digunakan oleh Kode Host Anda.
Aturan Build SAPI
- 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)
Target Output
Aturan build sapi_library() menghasilkan target berikut:
- name-sapi: Library sandbox, menggantikan cc_library normal sebagai
target Kode Host. Terdiri dari
zlib_sapi.bindan dependensi sandbox. - name.interface: Antarmuka library yang dihasilkan.
- name.embed: Target
cc_embed_data()yang digunakan untuk menyematkan Sandboxee dalam biner. Lihat bazel/embed_data.bzl.- name.bin: Biner Sandboxee, terdiri dari stub komunikasi kecil dan pustaka yang sedang di-sandbox.
Argumen
| Atribut | |
|---|---|
| nama |
Nama; wajib Nama unik untuk target ini. Tindakan ini akan mengidentifikasi library C/C++ yang di-sandbox, lihat target output name-sapi. |
| deps |
Daftar label; opsional Daftar library lain yang akan ditautkan ke library C/C++ dalam sandbox. |
| srcs |
Daftar label; opsional Daftar file C dan C++ yang diproses untuk membuat library C/C++ dengan sandbox. File ini adalah file header dan sumber C/C++, baik yang tidak dibuat (kode sumber normal) maupun yang dibuat. Untuk mengetahui informasi selengkapnya, lihat penjelasan atribut srcs dalam dokumentasi cc_library. |
| hdrs | Daftar label; opsional Daftar file header yang diproses untuk membuat library C/C++ dengan sandbox. Di sinilah definisi sandbox (sandbox.h) harus ditempatkan; biarkan kosong jika library SAPI tersemat digunakan, dan konfigurasi sandbox default (DefaultConfig, yang menggunakan |
| embed | Boolean; opsional; defaultnya adalah True Jika True, library dengan sandbox harus disematkan di dalam kode
host. Hal ini memungkinkan SAPI Sandbox diinisialisasi dengan konstruktor
|
| functions | Daftar nama fungsi; opsional Daftar fungsi dari library C/C++ yang versi sandbox-nya dihasilkan dan kemudian dapat digunakan dalam Kode Host. Daftar kosong akan mencoba mengekspor dan menggabungkan semua fungsi yang ditemukan di library. |
| lib | String; wajib diisi Nama target library C/C++ yang akan menjadi library dengan sandbox. Hal ini mengharapkan Anda memiliki aturan build cc_library untuk library C/C++ dalam project. |
| lib_name | String; wajib Nama objek SAPI yang digunakan untuk memproksi fungsi library dari atribut fungsi. Setiap panggilan ke fungsi di library dengan sandbox akan terjadi melalui Objek SAPI. |
| input_files | Daftar label; opsional Daftar file C dan C++ yang diproses selama jalannya aturan sapi_interface secara internal. Generator memindai file ini untuk deklarasi fungsi library C/C++. Hal ini sebagian besar tidak diperlukan karena header yang diekspor library C/C++ selalu dipindai. |
| namespace | String; opsional; defaultnya adalah sapigen ID namespace C++ untuk menempatkan objek SAPI yang ditentukan oleh lib_name. Namespace default adalah sapigen. |
| header | String; opsional Nama file header yang akan digunakan, bukan file header yang dihasilkan. Jika Anda ingin membuat kode secara otomatis, jangan gunakan atribut ini |
| add_default_deps | Boolean; opsional; defaultnya adalah True TIDAK DIGUNAKAN LAGI |
| limit_scan_depth | Boolean; opsional; default-nya adalah False Untuk library yang kompleks, jumlah file untuk Bazel mungkin tercapai dan proses build tidak akan berhasil. Atribut ini adalah jalan keluar untuk situasi kompleks ini. Jangan gunakan kecuali diperlukan. |
| tags | Lihat dokumentasi Bazel untuk tag. |
| visibilitas | Lihat dokumentasi Bazel untuk visibilitas |
Contoh Penggunaan
Contoh zlib adalah project referensi yang baik yang menunjukkan cara penggunaan aturan build sapi_library:
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",
)