Введение
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: цель
cc_embed_data()
, используемая для встраивания Sandboxee в двоичный файл. См. bazel/embed_data.bzl . - name .bin: двоичный файл Sandboxee, состоящий из небольшой коммуникационной заглушки и библиотеки, которая помещается в песочницу.
Аргументы
Атрибуты | |
---|---|
имя | Имя ; необходимый Уникальное имя для этой цели. Это позволит идентифицировать изолированную библиотеку C/C++, см. целевой выходной файл name-sapi. |
глубины | Список ярлыков ; необязательный Список других библиотек, которые будут связаны с изолированной библиотекой C/C++. |
источники | Список ярлыков ; необязательный Список файлов C и C++, которые обрабатываются для создания изолированной библиотеки C/C++. Это исходные файлы и файлы заголовков C/C++, либо не созданные (обычный исходный код), либо сгенерированные. Для получения дополнительной информации см. объяснение атрибута srcs в документации cc_library . |
HDRS | Список ярлыков ; необязательный Список файлов заголовков, которые обрабатываются для создания изолированной библиотеки C/C++. Здесь должно находиться определение песочницы (sandbox.h); оставьте пустым, если используется встроенная библиотека SAPI и достаточно политики песочницы по умолчанию. |
вставлять | логическое значение; необязательный; по умолчанию — правда Если принимает значение True, изолированная библиотека должна быть встроена в основной код. Это позволяет инициализировать песочницу SAPI с помощью конструктора |
функции | Список названий функций; необязательный Список функций из библиотеки C/C++, для которых создается изолированная версия, которую затем можно использовать в хост-коде. Пустой список попытается экспортировать и обернуть все функции, найденные в библиотеке. |
библиотека | Нить; необходимый Имя целевой библиотеки C/C++, которая будет изолированной библиотекой. Предполагается, что у вас есть правило сборки cc_library для библиотеки C/C++ в проекте. |
имя_библиотеки | Нить; необходимый Имя объекта SAPI, который используется для проксирования библиотечных функций из атрибута функций. Любой вызов функции в изолированной библиотеке будет происходить через объект SAPI. |
входные_файлы | Список ярлыков ; необязательный Список файлов C и C++, которые обрабатываются во время внутреннего выполнения правила sapi_interface. Генератор сканирует эти файлы на наличие объявлений функций библиотеки C/C++. В большинстве случаев в этом нет необходимости, поскольку экспортированные заголовки библиотеки C/C++ всегда сканируются. |
пространство имен | Нить; необязательный; по умолчанию — Sapigen Идентификатор пространства имен C++, в который помещается объект SAPI, определенный lib_name . Пространство имен по умолчанию — sapigen . |
заголовок | Нить; необязательный Имя файла заголовка, который будет использоваться вместо сгенерированного файла заголовка. Если вы хотите автоматически генерировать код, не используйте этот атрибут. |
add_default_deps | логическое значение; необязательный; по умолчанию — правда УСТАРЕЛО |
лимит_сканирования_глубины | логическое значение; необязательный; по умолчанию — ложь Для сложных библиотек количество файлов для Bazel может быть достигнуто, и процесс сборки не удастся. Этот атрибут является запасным выходом в таких сложных ситуациях. Не используйте без необходимости. |
теги | См. документацию Bazel для получения информации о тегах . |
видимость | См. документацию 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",
)