빌드 규칙 가이드

소개

샌드박스 처리된 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} DefaultPolicyBuilder, DefaultFlags,101} DefaultEnvironmentVariables, DefaultLimits를 사용하는101} )이 충분한 경우 비워 둡니다.

embed

불리언(선택사항, 기본값은 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++ 네임스페이스 식별자입니다.

기본 네임스페이스는 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",
)