빌드 규칙 가이드

소개

샌드박스 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 문서에서 속성 src 설명을 참조하세요.

HDR

라벨 목록(선택사항)

샌드박스 처리된 C/C++ 라이브러리를 만들기 위해 처리되는 헤더 파일 목록입니다.

여기에 샌드박스 정의 (sandbox.h)가 있어야 합니다. 삽입된 SAPI 라이브러리를 사용하고 기본 샌드박스 정책으로 충분하다면 비워 두세요.

소스

부울, 선택사항. 기본값은 True입니다.

True인 경우 샌드박스 처리된 라이브러리가 호스트 코드 내에 삽입되어야 합니다. 이렇게 하면 SAPI 샌드박스를 ::sapi::Sandbox::Sandbox(FileToc*) 생성자로 초기화할 수 있습니다.

functions

함수 이름 목록(선택사항)

샌드박스 버전이 생성되어 호스트 코드에서 사용할 수 있는 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",
)