はじめに
サンドボックス API(SAPI)は、Google の Bazel ビルドシステム、または一般的な CMake メタビルドシステムで使用できます。このページでは Bazel を中心に説明しますが、CMake でも同じ機能を使用できます。Bazel は推奨されるビルドシステムであり、最も簡単に統合できます。
BUILD.bazel ファイルには、ホストコードをビルドするためのビルドルールがあります。ホストコードでサンドボックス化されたバージョンのライブラリを使用するには、ホストコードで使用するビルド ターゲットを準備する必要があります。
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)
出力ターゲット
sapi_library() ビルドルールは、次のターゲットを生成します。
- name-sapi: サンドボックス化されたライブラリ。ホストコード ターゲットとして通常の cc_library を置き換えます。
zlib_sapi.binとサンドボックスの依存関係で構成されます。 - name.interface: 生成されたライブラリ インターフェース。
- name.embed: Sandboxee をバイナリに埋め込むために使用される
cc_embed_data()ターゲット。bazel/embed_data.bzl を参照してください。- name.bin: Sandboxee バイナリ。小さな通信スタブとサンドボックス化されるライブラリで構成されます。
引数
| 属性 | |
|---|---|
| name |
Name(必須) このターゲットの一意の名前。これにより、サンドボックス化された C/C++ ライブラリが特定されます。name-sapi 出力ターゲットを参照してください。 |
| 依存関係 |
ラベルのリスト(省略可) サンドボックス化された C/C++ ライブラリにリンクされる他のライブラリのリスト。 |
| srcs |
ラベルのリスト(省略可) サンドボックス化された C/C++ ライブラリを作成するために処理される C ファイルと C++ ファイルのリスト。これらは C/C++ のソースファイルとヘッダー ファイルで、生成されていないもの(通常のソースコード)または生成されたものです。 詳細については、 cc_library のドキュメントの srcs 属性の説明をご覧ください。 |
| hdrs | ラベルのリスト(省略可) サンドボックス化された C/C++ ライブラリを作成するために処理されるヘッダー ファイルのリスト。 ここにサンドボックス定義(sandbox.h)を配置します。埋め込み SAPI ライブラリを使用し、デフォルトのサンドボックス構成(DefaultConfig。 |
| 埋め込み | ブール値。省略可。デフォルトは True True の場合、サンドボックス化されたライブラリをホストコード内に埋め込む必要があります。これにより、SAPI サンドボックスを |
| 関数 | 関数名のリスト(省略可) サンドボックス化されたバージョンが生成され、ホストコードで使用できる C/C++ ライブラリの関数のリスト。 リストが空の場合、ライブラリで見つかったすべての関数をエクスポートしてラップしようとします。 |
| lib | 文字列。必須 サンドボックス化されたライブラリになる C/C++ ライブラリ ターゲットの名前。 この場合、プロジェクトの C/C++ ライブラリに cc_library ビルドルールがあることが前提となります。 |
| lib_name | 文字列、必須 functions 属性からライブラリ関数をプロキシするために使用される SAPI オブジェクトの名前。サンドボックス化されたライブラリ内の関数への呼び出しは、SAPI オブジェクトを介して行われます。 |
| input_files | ラベルのリスト(省略可) sapi_interface ルールの内部実行中に処理される C ファイルと C++ ファイルのリスト。ジェネレータは、これらのファイルで C/C++ ライブラリの関数宣言をスキャンします。 C/C++ ライブラリのエクスポートされたヘッダーは常にスキャンされるため、ほとんどの場合、これは必要ありません。 |
| 名前空間 | 文字列。省略可。デフォルトは sapigen lib_name で定義された SAPI オブジェクトを配置する C++ 名前空間識別子。 デフォルトの Namespace は sapigen です。 |
| header | 文字列、省略可 生成されたヘッダー ファイルの代わりに使用するヘッダー ファイルの名前。 コードを自動生成する場合は、この属性を使用しないでください。 |
| add_default_deps | ブール値。省略可。デフォルトは True です。 非推奨 |
| limit_scan_depth | ブール値、省略可、デフォルトは False 複雑なライブラリの場合、Bazel のファイル数の上限に達し、ビルドプロセスが成功しないことがあります。この属性は、このような複雑な状況を回避するためのものです。必要な場合を除き、使用しないでください。 |
| tags | タグについては、Bazel のドキュメントをご覧ください。 |
| visibility | 可視性については、Bazel のドキュメントをご覧ください。 |
使用例
zlib の例は、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",
)