Panduan Aturan Build

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 ::sapi::Sandbox::Sandbox(FileToc*).

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