소개
샌드박스 처리된 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 바이너리로, 작은 통신 스텁과 샌드박스 처리되는 라이브러리로 구성됩니다.
인수
| 속성 | |
|---|---|
| 이름 |
이름(필수) 이 대상의 고유한 이름입니다. 샌드박스 처리된 C/C++ 라이브러리를 식별합니다. name-sapi 출력 대상을 참고하세요. |
| deps |
라벨 목록(선택사항) 샌드박스 처리된 C/C++ 라이브러리에 연결할 다른 라이브러리 목록입니다. |
| srcs |
라벨 목록(선택사항) 샌드박스 처리된 C/C++ 라이브러리를 만들기 위해 처리되는 C 및 C++ 파일 목록입니다. 생성되지 않은 (일반 소스 코드) 또는 생성된 C/C++ 소스 및 헤더 파일입니다. 자세한 내용은 cc_library 문서의 srcs 속성 설명을 참고하세요. |
| hdrs | 라벨 목록(선택사항) 샌드박스 처리된 C/C++ 라이브러리를 만들기 위해 처리되는 헤더 파일 목록입니다. 샌드박스 정의 (sandbox.h)가 여기에 있어야 합니다. 삽101} 입된 SAPI 라이브러리가 사용되고 기본 샌드박스101} 구성 (DefaultConfig,101} |
| embed | 불리언(선택사항, 기본값은 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의 파일 수에 도달할 수 있으며 빌드 프로세스가 성공하지 못합니다. 이 속성은 이러한 복잡한 상황을 해결하는 데 도움이 됩니다. 필요한 경우를 제외하고 사용하지 마세요. |
| 태그 | 태그에 관한 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 configuration (DefaultConfig) is sufficient.
embed = True, # This is the default
functions = [
"deflateInit_",
"deflate",
"deflateEnd",
],
lib = "@zlib//:zlibonly",
lib_name = "Zlib",
namespace = "sapi::zlib",
)