소개
샌드박스 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: 샌드박스 처리된 바이너리로, 작은 통신 스텁과 샌드박스 처리되는 라이브러리로 구성됩니다.
인수
속성 | |
---|---|
이름 |
이름: 필수 이 타겟의 고유한 이름입니다. 샌드박스 처리된 C/C++ 라이브러리를 식별합니다. name-sapi 출력 타겟을 참고하세요. |
deps |
라벨 목록입니다(선택사항). 샌드박스 C/C++ 라이브러리에 연결할 다른 라이브러리 목록입니다. |
srcs |
라벨 목록입니다(선택사항). 샌드박스 C/C++ 라이브러리를 만들기 위해 처리되는 C 및 C++ 파일 목록입니다. 생성되지 않은 (일반 소스 코드) 또는 생성된 C/C++ 소스 및 헤더 파일입니다. 자세한 내용은 cc_library 문서의 srcs 속성 설명을 참고하세요. |
hdrs | 라벨 목록입니다(선택사항). 샌드박스 C/C++ 라이브러리를 만들기 위해 처리되는 헤더 파일 목록입니다. 여기에 샌드박스 정의 (sandbox.h)가 있어야 합니다. 삽입된 SAPI 라이브러리가 사용되고 기본 샌드박스 정책이 충분한 경우 비워 두세요. |
소스 | 불리언, 선택사항, 기본값은 True True인 경우 샌드박스 라이브러리가 호스트 코드 내에 삽입되어야 합니다. 이렇게 하면 SAPI 샌드박스를 |
함수 | 함수 이름 목록입니다(선택사항). 샌드박스 처리된 버전이 생성되고 호스트 코드에서 사용할 수 있는 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++ 네임스페이스 식별자입니다. 기본 네임스페이스는 sapigen입니다. |
헤더 | 문자열, 선택사항 생성된 헤더 파일 대신 사용할 헤더 파일의 이름입니다. 코드를 자동 생성하려면 이 속성을 사용하지 마세요. |
add_default_deps | 불리언, 선택사항, 기본값은 True 지원 중단됨 |
limit_scan_depth | 불리언, 선택사항, 기본값은 False 복잡한 라이브러리의 경우 Bazel의 파일 수가 제한에 도달하여 빌드 프로세스가 성공하지 못할 수 있습니다. 이 속성은 이러한 복잡한 상황을 위한 비상구입니다. 필요한 경우가 아니라면 사용하지 마세요. |
tags | 태그는 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",
)