ビルドルールガイド

はじめに

サンドボックス化された 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

名前(必須)

このターゲットの一意の名前。これにより、サンドボックス化された C/C++ ライブラリが識別され、name-sapi 出力ターゲットが表示されます。

deps

ラベルのリスト。省略可

サンドボックス化された C/C++ ライブラリにリンクする他のライブラリのリスト。

srcs

ラベルのリスト。省略可

サンドボックス化された C/C++ ライブラリを作成するために処理された C および C++ ファイルのリスト。これらは C/C++ ソースファイルとヘッダー ファイルであり、非生成ファイル(通常のソースコード)または生成されたものです。

詳細については、 cc_library のドキュメントで属性 srcs の説明をご覧ください。

HDR

ラベルのリスト。省略可

サンドボックス化された C/C++ ライブラリを作成するために処理されるヘッダー ファイルのリスト。

ここで、サンドボックス定義(sandbox.h)を記述します。埋め込み SAPI ライブラリが使用され、デフォルトのサンドボックス ポリシーで十分である場合は、空のままにします。

埋め込む

ブール値。省略可。デフォルトは True

True の場合、サンドボックス化されたライブラリはホストコード内に埋め込まれます。これにより、SAPI サンドボックスを ::sapi::Sandbox::Sandbox(FileToc*) コンストラクタで初期化できます。

関数

関数名のリスト(省略可)

サンドボックス化されたバージョンが生成され、ホストコードで使用できる C/C++ ライブラリの関数のリスト。

空のリストを指定すると、ライブラリ内のすべての関数をエクスポートしてラップしようとします。

lib

文字列、必須

サンドボックス化されたライブラリになる C/C++ ライブラリ ターゲットの名前。

これは、プロジェクト内の C/C++ ライブラリ用の cc_library ビルドルールがあることを前提としています。

lib_name

文字列、必須

関数属性からライブラリ関数をプロキシするために使用される SAPI オブジェクトの名前。サンドボックス化されたライブラリ内の関数の呼び出しは、SAPI オブジェクトを介して行われます。

input_files

ラベルのリスト。省略可

sapi_interface ルールの内部実行中に処理される C および C++ ファイルのリスト。ジェネレータはこれらのファイルをスキャンして、C/C++ ライブラリの関数宣言を確認します。

C/C++ ライブラリのエクスポートされたヘッダーは常にスキャンされるため、これは必要ありません。

名前空間

文字列。省略可。デフォルトは sapigen

lib_name で定義された SAPI オブジェクトを配置する C++ 名前空間 ID。

デフォルトの名前空間は 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 policy is sufficient.
    embed = True,  # This is the default
    functions = [
        "deflateInit_",
        "deflate",
        "deflateEnd",
    ],
    lib = "@zlib//:zlibonly",
    lib_name = "Zlib",
    namespace = "sapi::zlib",
)