Pengantar
API dengan sandbox (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 tersedia untuk CMake. Bazel adalah sistem build yang direkomendasikan dan paling mudah diintegrasikan.
Di file BUILD.bazel, Anda akan memiliki aturan pembuatan untuk membuat Kode Host. Agar Kode Host dapat menggunakan library versi sandbox, Anda harus 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 dengan sandbox, menggantikan cc_library normal sebagai target Kode Host. Terdiri dari
zlib_sapi.bin
dan 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 library yang sedang di-sandbox.
Argumen
Atribut | |
---|---|
name |
Name; wajib diisi Nama unik untuk target ini. Tindakan ini akan mengidentifikasi library C/C++ dalam sandbox, dan lihat target output name-sapi. |
dependensi |
Daftar label; opsional Daftar library lain yang akan ditautkan ke library C/C++ dengan sandbox. |
srcs |
Daftar label; opsional Daftar file C dan C++ yang diproses untuk membuat library C/C++ dengan sandbox. File ini adalah file sumber dan header C/C++, baik yang tidak dihasilkan (kode sumber normal) maupun yang dihasilkan. Untuk mengetahui informasi selengkapnya, lihat penjelasan atribut srcs dalam dokumentasi cc_library. |
HDR | Daftar label; opsional Daftar file header yang diproses untuk membuat library C/C++ dengan sandbox. Di sinilah definisi sandbox (sandbox.h) seharusnya ditempatkan; biarkan kosong jika library SAPI tersemat digunakan, dan kebijakan sandbox default sudah memadai. |
sematan | Boolean; opsional; defaultnya adalah True Jika Benar (True), library dalam sandbox harus disematkan di dalam kode
host. Hal ini memungkinkan Sandbox SAPI diinisialisasi dengan konstruktor |
functions | Daftar nama fungsi; opsional Daftar fungsi dari library C/C++ yang menjadi tujuan pembuatan versi dalam sandbox dan yang selanjutnya 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 sandbox. Oleh karena itu, Anda mungkin memiliki aturan build cc_library untuk library C/C++ dalam project. |
lib_name | String; wajib diisi Nama objek SAPI yang digunakan untuk melakukan proxy fungsi library dari atribut fungsi. Setiap panggilan ke fungsi dalam library dengan sandbox akan dilakukan melalui Objek SAPI. |
input_files | Daftar label; opsional Daftar file C dan C++ yang diproses selama menjalankan aturan sapi_interface secara internal. Generator akan memindai file ini untuk mendeteksi deklarasi fungsi library C/C++. Tindakan 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 ingin otomatis menghasilkan kode, jangan gunakan atribut ini |
add_default_deps | Boolean; opsional; defaultnya adalah True TIDAK DIGUNAKAN LAGI |
limit_scan_depth | Boolean; opsional; defaultnya 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 yang kompleks ini. Jangan gunakan kecuali jika diperlukan. |
tag | 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 policy is sufficient.
embed = True, # This is the default
functions = [
"deflateInit_",
"deflate",
"deflateEnd",
],
lib = "@zlib//:zlibonly",
lib_name = "Zlib",
namespace = "sapi::zlib",
)