개요
올바른 옵션으로 컴파일러를 호출하려면 Bazel이 컴파일러 내부 요소에는 디렉터리 및 중요 플래그가 포함됩니다. 즉, Bazel이 코드를 해석하려면 간소화된 컴파일러 모델이 필요합니다. 작동한다는 것입니다.
Bazel은 다음 사항을 알아야 합니다.
- 컴파일러가 thinLTO, 모듈, 동적 링크 또는 PIC를 지원하는지 여부 (위치 독립 코드)
- gcc, ld, ar, objcopy 등 필수 도구의 경로
- 내장 시스템에는 디렉터리가 포함되어 있습니다. 이를 검증하려면 Bazel이
소스 파일에 포함된 모든 헤더가
BUILD
파일 - 기본 sysroot입니다.
- 컴파일, 연결, 보관처리에 사용할 플래그.
- 지원되는 컴파일 모드 (opt, dbg, fastbuild)에 사용할 플래그
- 컴파일러에 특별히 필요한 변수를 만듭니다.
컴파일러가 여러 아키텍처를 지원하는 경우 Bazel은 분리하는 것이 좋습니다
CcToolchainConfigInfo
는 API에 필요한 수준의
Bazel의 C++ 규칙의 동작을 구성하기 위한 세부사항 기본적으로
Bazel이 빌드용으로 CcToolchainConfigInfo
를 자동으로 구성하지만
수동으로 구성할 수 있는 옵션이 있습니다. 이를 위해서는 스타라크 법칙이 필요합니다.
CcToolchainConfigInfo
를 제공하며 개발자는
cc_toolchain
의 toolchain_config
속성을 규칙에 추가합니다.
다음을 호출하여 CcToolchainConfigInfo
를 만들 수 있습니다.
cc_common.create_cc_toolchain_config_info()
프로세스에 필요한 모든 구조체의 Starlark 생성자는 다음에서 찾을 수 있습니다.
@rules_cc//cc:cc_toolchain_config_lib.bzl
C++ 대상이 분석 단계에 진입하면 Bazel이 적절한 항목을 선택합니다.
BUILD
파일에 기반하여 cc_toolchain
타겟을 가져오고
지정된 대상의 CcToolchainConfigInfo
제공자
cc_toolchain.toolchain_config
속성 cc_toolchain
타겟
CcToolchainProvider
를 통해 이 정보를 C++ 타겟에 전달합니다.
예를 들어
cc_binary
또는 cc_library
에는 다음 정보가 필요합니다.
- 사용할 컴파일러 또는 링커
- 컴파일러/링커의 명령줄 플래그
--copt/--linkopt
옵션을 통해 전달되는 구성 플래그- 환경 변수
- 작업을 실행하는 샌드박스에 필요한 아티팩트
샌드박스에 필요한 아티팩트를 제외한 위의 모든 정보는
cc_toolchain
가 가리키는 Starlark 타겟에 지정됩니다.
샌드박스로 전달할 아티팩트는 cc_toolchain
에 선언됩니다.
있습니다. 예를 들어 cc_toolchain.linker_files
속성을 사용하면
링커 바이너리 및 도구 모음 라이브러리를 지정하여 샌드박스에 제공할 수 있습니다.
도구 모음 선택
도구 모음 선택 로직은 다음과 같이 작동합니다.
사용자가
BUILD
파일에서cc_toolchain_suite
대상을 지정하고 포인트 대상에게 Bazel을--crosstool_top
옵션.cc_toolchain_suite
타겟은 여러 도구 모음을 참조합니다. 이--cpu
및--compiler
플래그의 값에 따라--cpu
플래그 값에 따라서만 도구 모음을 선택하거나 공동--cpu | --compiler
값에 기반합니다. 선정 프로세스는 다음과 같습니다. 다음과 같습니다.--compiler
옵션을 지정하면 Bazel이cc_toolchain_suite.toolchains
의 해당 항목 속성을--cpu | --compiler
로 정의하세요. Bazel이 포드에서 오류가 발생합니다.--compiler
옵션을 지정하지 않으면 Bazel이 선택합니다.cc_toolchain_suite.toolchains
의 해당 항목 속성을--cpu
로 정의하면 됩니다.플래그를 지정하지 않으면 Bazel이 호스트 시스템을 검사하고 발견 항목을 기준으로
--cpu
값입니다. 자세한 내용은 검사 메커니즘 코드를 설치합니다.
도구 모음이 선택되면 상응하는 feature
및 action_config
Starlark 규칙의 객체는 빌드 구성을 제어합니다 (즉,
참조). 이러한 메시지를 통해
코드를 수정하지 않고도 Bazel에서 완전한 C++ 기능을
Bazel 바이너리 C++ 규칙은 자세히 설명된 여러 고유 작업을 지원합니다.
Bazel 소스 코드에 나와 있습니다.
기능
특성은 명령줄 플래그, 작업,
종속 항목 변경이 있을 수 있습니다. 특성
BUILD
파일이
플래그(예: treat_warnings_as_errors
)를 사용하거나 C++ 규칙과
다음과 같은 새로운 컴파일 작업 및 입력을 컴파일에 포함합니다.
header_modules
또는 thin_lto
입니다.
CcToolchainConfigInfo
에 특성 목록이 포함되는 것이 이상적입니다. 각 특성으로는
기능은 하나 이상의 플래그 그룹으로 구성되며 각각 플래그 목록을 정의합니다.
각 Bazel 작업에 적용됩니다
특성은 이름으로 지정되므로 Starlark가 완전히 분리될 수 있습니다.
규칙 구성을 사용할 수 있습니다 즉, Bazel 릴리스는
CcToolchainConfigInfo
구성의 동작에 영향을 미치지 않는 한
새로운 기능을 사용하지 않아도 됩니다
기능은 다음 중 한 가지 방법으로 사용 설정됩니다.
- 지형지물의
enabled
필드가true
로 설정됩니다. - Bazel 또는 규칙 소유자가 명시적으로 사용 설정합니다.
- 사용자가
--feature
Bazel 옵션 또는features
규칙을 통해 사용 설정합니다. 속성의 값을 제공합니다.
기능에 상호 종속 항목이 있을 수 있고 명령줄 플래그, BUILD
파일에 종속될 수 있음
설정할 수 있습니다
특성 관계
종속 항목은 일반적으로 Bazel을 통해 직접 관리되며 요구사항을 확인하고 기능의 특성에 내재된 충돌을 관리 확인할 수 있습니다 도구 모음 사양을 통해 확장 가능한 지형지물을 제어하는 Starlark 규칙 내에서 직접 사용하기 위한 제약 조건 지원 및 확장을 지원합니다 이는 다음과 같습니다.
제약조건 | 설명 |
requires = [ feature_set (features = [ 'feature-name-1', 'feature-name-2' ]), ] |
특성 수준. 이 기능은 지정된 필수 항목이 포함된 경우에만 지원됩니다.
기능이 사용 설정되었습니다. 예를 들어 지형지물이
특정 빌드 모드 (opt , dbg 또는
fastbuild )을 입력합니다. '필요'에 여러 개의 `feature_set`이 포함된 경우
`feature_set`중 하나라도 충족되면 특성이 지원됩니다.
(지정된 모든 기능이 사용 설정된 경우)
|
implies = ['feature'] |
특성 수준. 이 지형지물은 지정된 지형지물을 암시합니다. 또한 기능을 사용 설정하면 해당 기능을 사용하는 모든 기능도 암시적으로 사용 설정됩니다. 즉, 재귀적으로 작동합니다. 또한 시스템 내에서 기능의 공통 하위 집합을 인수 분해하는 새니타이저의 일반적인 부분과 같은 일련의 특성이 있습니다. 암시됨 기능을 사용 중지할 수 없습니다. |
provides = ['feature'] |
특성 수준. 이 지형지물이 상호 간에 존재하는 여러 기능 중 하나임을 나타냅니다.
독점적인 대체 기능을 제공합니다. 예를 들어 모든 새니타이저는
이렇게 하면 사용자가 요청하는 경우 대안을 나열하여 오류 처리를 개선합니다. 한 번에 두 개 이상의 상호 배타적인 기능에 대해 사용할 수 있습니다. |
with_features = [ with_feature_set( features = ['feature-1'], not_features = ['feature-2'], ), ] |
플래그 집합 수준 지형지물에서 여러 플래그 집합을 여러 개 지정할 수 있습니다.
with_features 가 지정되면 플래그 집합은
with_feature_set 가 1개 이상 있는 경우 빌드 명령어에 추가
지정된 features 의 모든 지형지물이
사용 설정되고 not_features 에 지정된 모든 기능이 사용 설정됨
사용 중지됩니다.
with_features 을 지정하지 않으면 플래그 집합은 다음과 같습니다.
무조건 적용됩니다.
|
작업
작업은 주어진 조건에 따라
어떤 작업을 실행할지 가정하지 않고 실행되는 것을 볼 수 있습니다.
action_config
는 작업이 호출하는 도구 바이너리를 지정하고
feature
는 도구가 작업을 수행하는 방법을 결정하는 구성 (플래그)을 지정합니다.
작업이 호출될 때 동작합니다.
어떤 Bazel 작업을 나타내는지 알려주는 기능 참조 작업
작업이 Bazel 작업 그래프를 수정할 수 있기 때문입니다. 이
CcToolchainConfigInfo
제공자에는 플래그와 도구가 있는 작업이 포함되어 있습니다.
연결되어 있습니다(예: c++-compile
). 플래그는 각 작업에 할당됨
특성과 연결합니다.
각 작업 이름은 Bazel이 수행한 단일 작업 유형을 나타냅니다. 예를 들면 다음과 같습니다.
컴파일하거나 연결할 수 있습니다. 그러나 이 데이터 세트와 모델 사이에는 다대일 관계가
actions, Bazel 작업 유형. 여기서 Bazel 작업 유형은 Java 클래스를 가리킴
작업을 구현하는 생성자 (예: CppCompileAction
) 특히
"어셈블러 작업" '컴파일러 작업'이 있습니다 아래 표에서
CppCompileAction
인 반면 링크 작업은 CppLinkAction
입니다.
어셈블러 작업
작업 | 설명 |
preprocess-assemble
|
사전 처리를 통해 조합 일반적으로 .S 파일의 경우
|
assemble
|
사전 처리 없이 조립 일반적으로 .s 파일의 경우
|
컴파일러 작업
작업 | 설명 |
cc-flags-make-variable
|
CC_FLAGS 를 genrule에 전파합니다.
|
c-compile
|
C로 컴파일합니다. |
c++-compile
|
C++로 컴파일합니다. |
c++-header-parsing
|
헤더 파일에서 컴파일러의 파서를 실행하여 헤더가 독립 실행형이며 그렇게 하지 않으면 컴파일 오류가 발생하기 때문입니다. 적용됨 툴체인에만 해당됩니다. |
링크 작업
작업 | 설명 |
c++-link-dynamic-library
|
모든 종속 항목이 포함된 공유 라이브러리를 연결합니다. |
c++-link-nodeps-dynamic-library
|
소스 cc_library 개만 포함된 공유 라이브러리를 연결합니다.
|
c++-link-executable
|
즉시 실행할 수 있는 최종 라이브러리를 연결합니다. |
AR 작업
AR 작업은 ar
를 통해 객체 파일을 보관 파일 라이브러리 (.a
파일)로 조합합니다.
이름에 의미 체계를 인코딩합니다.
작업 | 설명 |
c++-link-static-library
|
정적 라이브러리 (보관 파일)를 만듭니다. |
LTO 작업
작업 | 설명 |
lto-backend
|
비트코드를 네이티브 객체로 컴파일하는 ThinLTO 작업 |
lto-index
|
전역 색인을 생성하는 ThinLTO 작업 |
action_config 사용
action_config
는 Bazel을 설명하는 Starlark 구조체입니다.
작업을 수행하는 동안 호출할 도구 (바이너리)를 지정하여
플래그로 사용됩니다. 이러한 플래그는 작업의
실행할 수 있습니다
action_config()
생성자에는 다음과 같은 매개변수가 있습니다.
속성 | 설명 |
action_name
|
이 작업에 해당하는 Bazel 작업입니다. Bazel은 이 속성을 사용하여 작업별 도구와 실행을 탐색합니다. 요구사항을 충족해야 합니다 |
tools
|
호출할 실행 파일입니다. 작업에 적용되는 도구는 지형지물과 일치하는 특성 세트가 있는 목록의 첫 번째 도구 구성할 수 있습니다 기본값을 입력해야 합니다. |
flag_sets
|
작업 그룹에 적용되는 플래그 목록입니다. 다음과 동일 기능을 사용할 수 있습니다. |
env_sets
|
작업 그룹에 적용되는 환경 제약조건 목록입니다. 특성과 동일합니다. |
action_config
는 다른 특성을 요구하고 암시할 수 있으며
action_config
앞서 설명한 특성 관계입니다. 이 동작
특성과 유사합니다
마지막 두 속성은 페이지의 해당 속성과 중복됩니다.
일부 Bazel 작업에는 특정 플래그 또는
환경 변수이며 목표는 불필요한 사용을 피하는 것입니다. action_config
+feature
쌍. 일반적으로 여러 action_config
에서 단일 특성을 공유하는 것은
선호합니다.
동일한 action_name
으로 action_config
를 두 개 이상 정의할 수 없습니다.
사용할 수 있습니다 이렇게 하면 도구 경로의 모호성을 방지할 수 있습니다.
action_config
이면의 의도, 즉 작업의 속성이
도구 모음의 한 곳에 명확하게 설명되어 있습니다.
도구 생성자 사용
action_config
는 tools
매개변수를 통해 도구 집합을 지정할 수 있습니다.
tool()
생성자는 다음 매개변수를 사용합니다.
필드 | 설명 |
tool_path
|
해당 도구의 경로입니다 (현재 위치 기준). |
with_features
|
하나 이상이 충족되어야 하는 지형지물 집합의 목록 이 도구를 적용할 수 있습니다. |
지정된 action_config
에 단일 tool
만 적용됩니다.
도구 경로와 실행 요구사항을 Bazel 작업에 추가합니다. 도구가 선택됨
도구가 실행될 때까지 action_config
에서 tools
속성을 반복합니다.
기능 구성과 일치하는 with_feature
세트가 있는 발견됨
(이 페이지 앞부분의 특성 관계 참고)
를 참조하세요. 도구 목록을 종료할 때는
도구가 표시됩니다.
사용 예
기능과 작업을 함께 사용하여 Bazel 작업을 구현할 수 있음
사용할 수 있습니다 예를 들어
macOS의 경우 컴파일 작업에서 기호를 생성한 다음
전문화된 도구를 사용하여 압축된 dSYM 아카이브를 생성합니다.
그런 다음 이 보관 파일의 압축을 풀어 애플리케이션 번들을 생성하고 .plist
사용할 수 있습니다
Bazel을 사용하면 이 프로세스를 대신 다음과 같이 구현할 수 있습니다.
unbundle-debuginfo
가 Bazel 작업임:
load("@rules_cc//cc:defs.bzl", "ACTION_NAMES")
action_configs = [
action_config (
config_name = ACTION_NAMES.cpp_link_executable,
action_name = ACTION_NAMES.cpp_link_executable,
tools = [
tool(
with_features = [
with_feature(features=["generate-debug-symbols"]),
],
tool_path = "toolchain/mac/ld-with-dsym-packaging",
),
tool (tool_path = "toolchain/mac/ld"),
],
),
]
features = [
feature(
name = "generate-debug-symbols",
flag_sets = [
flag_set (
actions = [
ACTION_NAMES.c_compile,
ACTION_NAMES.cpp_compile
],
flag_groups = [
flag_group(
flags = ["-g"],
),
],
)
],
implies = ["unbundle-debuginfo"],
),
]
이 동일한 기능을 Linux에서 완전히 다르게 구현할 수 있습니다. Linux에는
fission
또는 .pdb
파일을 생성하는 Windows의 경우 예를 들어
fission
기반 디버그 기호 생성의 구현은 다음과 같이 표시될 수 있습니다.
다음과 같습니다.
load("@rules_cc//cc:defs.bzl", "ACTION_NAMES")
action_configs = [
action_config (
name = ACTION_NAMES.cpp_compile,
tools = [
tool(
tool_path = "toolchain/bin/gcc",
),
],
),
]
features = [
feature (
name = "generate-debug-symbols",
requires = [with_feature_set(features = ["dbg"])],
flag_sets = [
flag_set(
actions = [ACTION_NAMES.cpp_compile],
flag_groups = [
flag_group(
flags = ["-gsplit-dwarf"],
),
],
),
flag_set(
actions = [ACTION_NAMES.cpp_link_executable],
flag_groups = [
flag_group(
flags = ["-Wl", "--gdb-index"],
),
],
),
],
),
]
신고 그룹
CcToolchainConfigInfo
를 사용하면
특정 목적을 달성하는 데
도움이 됩니다 사전 정의된 변수를 사용하여 에 플래그를 지정할 수 있습니다.
는 플래그 값 내에 있으며, 플래그를
build 명령어를 사용하여 빌드됩니다 예를 들면 다음과 같습니다.
flag_group (
flags = ["%{output_file_path}"],
)
이 경우 플래그의 내용은 출력 파일 경로로 대체됩니다. 확인할 수 있습니다.
플래그 그룹은 표시된 순서대로 빌드 명령어로 확장됩니다. 위에서 아래로, 왼쪽에서 오른쪽으로 이동합니다.
빌드에 추가될 때 다른 값으로 반복해야 하는 플래그
명령어에서 플래그 그룹은 list
유형의 변수를 반복할 수 있습니다. 예를 들어
list
유형의 변수 include_path
:
flag_group (
iterate_over = "include_paths",
flags = ["-I%{include_paths}"],
)
include_paths
목록의 각 경로 요소에 관해 -I<path>
로 확장됩니다. 전체
플래그 그룹 선언 본문에 있는 플래그 (또는 flag_group
)는
생성합니다. 예를 들면 다음과 같습니다.
flag_group (
iterate_over = "include_paths",
flags = ["-I", "%{include_paths}"],
)
include_paths
목록의 각 경로 요소에 관해 -I <path>
로 확장됩니다.
변수는 여러 번 반복될 수 있습니다. 예를 들면 다음과 같습니다.
flag_group (
iterate_over = "include_paths",
flags = ["-iprefix=%{include_paths}", "-isystem=%{include_paths}"],
)
는 다음으로 확장됩니다.
-iprefix=<inc0> -isystem=<inc0> -iprefix=<inc1> -isystem=<inc1>
변수는 점 표기법을 사용하여 액세스할 수 있는 구조에 해당할 수 있습니다. 예를 들면 다음과 같습니다.
flag_group (
flags = ["-l%{libraries_to_link.name}"],
)
구조체는 중첩될 수 있으며 시퀀스를 포함할 수도 있습니다. 이름 충돌 방지 명시적으로 지정하려면 필드에 전체 경로를 지정해야 합니다. 예를 들면 다음과 같습니다.
flag_group (
iterate_over = "libraries_to_link",
flag_groups = [
flag_group (
iterate_over = "libraries_to_link.shared_libraries",
flags = ["-l%{libraries_to_link.shared_libraries.name}"],
),
],
)
조건부 확장
플래그 그룹은 특정 항목의 존재 여부에 따라 조건부 확장을 지원합니다.
변수 또는 필드(expand_if_available
, expand_if_not_available
사용)
expand_if_true
, expand_if_false
또는 expand_if_equal
속성 예를 들면 다음과 같습니다.
flag_group (
iterate_over = "libraries_to_link",
flag_groups = [
flag_group (
iterate_over = "libraries_to_link.shared_libraries",
flag_groups = [
flag_group (
expand_if_available = "libraries_to_link.shared_libraries.is_whole_archive",
flags = ["--whole_archive"],
),
flag_group (
flags = ["-l%{libraries_to_link.shared_libraries.name}"],
),
flag_group (
expand_if_available = "libraries_to_link.shared_libraries.is_whole_archive",
flags = ["--no_whole_archive"],
),
],
),
],
)
CcToolchainConfigInfo 참조
이 섹션에서는 빌드 변수, 기능, 기타 애플리케이션 빌드에 관해 필요한 모든 정보를 제공합니다.
CcToolchainConfigInfo 빌드 변수
다음은 CcToolchainConfigInfo
빌드 변수의 참조입니다.
변수 | 작업 | 설명 |
source_file
|
compile | 컴파일할 소스 파일입니다. |
input_file
|
strip | 제거할 아티팩트. |
output_file
|
compile | 컴파일 출력 |
output_assembly_file
|
compile | 어셈블리 파일을 내보냈습니다.
compile 작업은 일반적으로
--save_temps 플래그. 콘텐츠는
output_file
|
output_preprocess_file
|
compile | 사전 처리된 출력 컴파일에만 적용
소스 파일만 사전 처리하는 작업(일반적으로
--save_temps 플래그. 콘텐츠는
output_file
|
includes
|
compile | 컴파일러가 필수 파일 시퀀스 컴파일된 소스에 무조건 포함됩니다. |
include_paths
|
compile | 컴파일러가 위치한 시퀀스 디렉터리
#include<foo.h> 을 사용하여 포함된 헤더 검색
및 #include "foo.h"
|
quote_include_paths
|
compile | -iquote 의 시퀀스에 - 포함
디렉터리의 디렉터리는 컴파일러가
#include "foo.h" 입니다.
|
system_include_paths
|
compile | -isystem 의 시퀀스에 - 포함
디렉터리의 디렉터리는 컴파일러가
#include <foo.h> 입니다.
|
dependency_file
|
compile | 컴파일러에서 생성한 .d 종속 항목 파일
|
preprocessor_defines
|
compile | defines 의 시퀀스(예: --DDEBUG )
|
pic
|
compile | 출력을 위치 독립적 코드로 컴파일합니다. |
gcov_gcno_file
|
compile | gcov 적용 범위 파일
|
per_object_debug_info_file
|
compile | 객체별 디버그 정보 (.dwp ) 파일
|
stripotps
|
strip | stripopts 의 시퀀스
|
legacy_compile_flags
|
compile | 레거시의 플래그 시퀀스
CROSSTOOL 필드(예: compiler_flag ,
optional_compiler_flag , cxx_flag ,
optional_cxx_flag 입니다.
|
user_compile_flags
|
compile |
copt 규칙 속성 또는 --copt
--cxxopt 및 --conlyopt 플래그.
|
unfiltered_compile_flags
|
compile |
unfiltered_cxx_flag 기존 CROSSTOOL 필드 또는
unfiltered_compile_flags 기능 이는 다음을 기준으로 필터링되지 않습니다.
nocopts 규칙 속성
|
sysroot
|
sysroot
|
|
runtime_library_search_directories
|
링크 | 링커 런타임 검색 경로의 항목 (일반적으로
-rpath 플래그로 설정됨).
|
library_search_directories
|
링크 | 링커 검색 경로의 항목 (일반적으로
-L 플래그).
|
libraries_to_link
|
링크 | 링커 호출의 입력으로 연결할 파일을 제공하는 플래그입니다. |
def_file_path
|
링크 | MSVC를 사용하는 Windows에서 사용되는 def 파일의 위치입니다. |
linker_param_file
|
링크 | bazel이 생성한 링커 매개변수 파일의 위치 명령줄 길이 제한을 극복할 수 있습니다 |
output_execpath
|
링크 | 링커 출력의 Execpath입니다. |
generate_interface_library
|
링크 | 인터페이스 라이브러리가 있어야 하는지 여부에 따라 "yes" 또는 "no"
있습니다.
|
interface_library_builder_path
|
링크 | 인터페이스 라이브러리 빌더 도구의 경로입니다. |
interface_library_input_path
|
링크 | 인터페이스 라이브러리 ifso 빌더 도구의 입력입니다.
|
interface_library_output_path
|
링크 | ifso 빌더 도구를 사용하여 인터페이스 라이브러리를 생성하는 경로입니다.
|
legacy_link_flags
|
링크 | 기존 CROSSTOOL 필드에서 수신되는 링커 플래그입니다.
|
user_link_flags
|
링크 | --linkopt 에서 전송되는 링커 플래그
또는 linkopts 속성
|
symbol_counts_output
|
링크 | 기호 수를 쓸 경로입니다. |
linkstamp_paths
|
링크 | linktamp 경로를 제공하는 빌드 변수입니다. |
force_pic
|
링크 | 이 변수가 있으면 PIC/PIE 코드가 생성되어야 합니다 (Bazel 옵션 `--force_pic` 이 전달됨). |
strip_debug_symbols
|
링크 | 이 변수가 있으면 디버그 기호를 제거해야 합니다. |
is_cc_test
|
링크 | 현재 작업이 cc_test 인 경우 트러시
연결 작업, 그렇지 않으면 false입니다.
|
is_using_fission
|
컴파일, 링크 | 이 변수가 있으면 분열 (객체별 디버그 정보)이 발생했음을 나타냅니다.
활성화됩니다. 디버그 정보는 대신 .dwo 파일에 있음
.o 파일과 컴파일러와 링커가 이를 알아야 합니다.
|
fdo_instrument_path
|
컴파일, 링크 | FDO 계측 프로필을 저장하는 디렉터리의 경로입니다. |
fdo_profile_path
|
compile | FDO 프로필 경로입니다. |
fdo_prefetch_hints_path
|
compile | 캐시 미리 가져오기 프로필의 경로입니다. |
csfdo_instrument_path
|
컴파일, 링크 | 컨텍스트 인식 FDO가 저장되는 디렉터리 경로 계측 프로필 |
잘 알려진 기능
다음은 기능 및 활성화에 대한 참조입니다. 조건일 수 있습니다
기능 | 문서 |
opt | dbg | fastbuild
|
컴파일 모드에 따라 기본적으로 사용 설정됩니다. |
static_linking_mode | dynamic_linking_mode
|
연결 모드에 따라 기본적으로 사용 설정됩니다. |
per_object_debug_info
|
supports_fission 기능이 지정되고
현재 컴파일 모드는
--fission 플래그.
|
supports_start_end_lib
|
사용 설정되고 --start_end_lib 옵션이 설정된 경우 Bazel
정적 라이브러리에 대해 링크하지 않고 대신
객체에 연결하는 --start-lib/--end-lib 링커 옵션
바로 그것입니다. 이렇게 하면 Bazel이 빌드할 필요가 없으므로 빌드 속도가 빨라집니다.
정적 라이브러리를 제공합니다.
|
supports_interface_shared_libraries
|
--interface_shared_objects 옵션이 사용 설정된 경우
설정된 경우 Bazel은 linkstatic 가
공유된 인터페이스에 대해 false (기본적으로 cc_test 초)
제공합니다 이렇게 하면 점진적으로 다시 연결하는 속도가 더 빨라집니다.
|
supports_dynamic_linker
|
사용 설정하면 C++ 규칙은 도구 모음이 공유 객체를 생성할 수 있다는 것을 알게 됩니다. 제공합니다 |
static_link_cpp_runtimes
|
사용 설정하면 Bazel이 정적 연결에서 C++ 런타임을 정적으로 연결합니다.
동적 링크 모드에서 동적으로 사용할 수 있습니다. 아티팩트
cc_toolchain.static_runtime_lib 에 지정되거나
cc_toolchain.dynamic_runtime_lib 속성(
연결 모드)가 연결 작업에 추가됩니다.
|
supports_pic
|
이를 활성화하면 툴체인이 동적 라이브러리에 PIC 객체를 사용한다는 것을 알게 됩니다. PIC 컴파일이 필요할 때마다 `pic` 변수가 존재합니다. 사용 설정되지 않은 경우 `--force_pic` 이 전달되면 Bazel은 `supports_pic` 을 요청하고 이 기능이 사용 설정되어 있는지 확인합니다. 기능이 없거나 사용할 수 없는 경우 `--force_pic` 을 사용할 수 없습니다. |
static_linking_mode | dynamic_linking_mode
|
연결 모드에 따라 기본적으로 사용 설정됩니다. |
no_legacy_features
|
Bazel이 기존 기능을 C++ 구성이 있는 경우 전체 목록 보기 참조하세요. |
기존 기능 패치 로직
Bazel이 도구 모음의 기능에 다음 변경 사항을 이전 버전 적용 호환성:
legacy_compile_flags
기능을 도구 모음 상단으로 이동합니다.default_compile_flags
기능을 도구 모음 상단으로 이동합니다.- 도구 모음 상단에
dependency_file
기능 (없는 경우)을 추가합니다. - 도구 모음 상단에
pic
기능 (없는 경우)을 추가합니다. - 도구 모음 상단에
per_object_debug_info
기능 (없는 경우)을 추가합니다. - 도구 모음 상단에
preprocessor_defines
기능 (없는 경우)을 추가합니다. - 도구 모음 상단에
includes
기능 (없는 경우)을 추가합니다. - 도구 모음 상단에
include_paths
기능 (없는 경우)을 추가합니다. - 도구 모음 상단에
fdo_instrument
기능 (없는 경우)을 추가합니다. - 도구 모음 상단에
fdo_optimize
기능 (없는 경우)을 추가합니다. - 도구 모음 상단에
cs_fdo_instrument
기능 (없는 경우)을 추가합니다. - 도구 모음 상단에
cs_fdo_optimize
기능 (없는 경우)을 추가합니다. - 도구 모음 상단에
fdo_prefetch_hints
기능 (없는 경우)을 추가합니다. - 도구 모음 상단에
autofdo
기능 (없는 경우)을 추가합니다. - 도구 모음 상단에
build_interface_libraries
기능 (없는 경우)을 추가합니다. - 도구 모음 상단에
dynamic_library_linker_tool
기능 (없는 경우)을 추가합니다. - 도구 모음 상단에
symbol_counts
기능 (없는 경우)을 추가합니다. - 도구 모음 상단에
shared_flag
기능 (없는 경우)을 추가합니다. - 도구 모음 상단에
linkstamps
기능 (없는 경우)을 추가합니다. - 도구 모음 상단에
output_execpath_flags
기능 (없는 경우)을 추가합니다. - 도구 모음 상단에
runtime_library_search_directories
기능 (없는 경우)을 추가합니다. - 도구 모음 상단에
library_search_directories
기능 (없는 경우)을 추가합니다. - 도구 모음 상단에
archiver_flags
기능 (없는 경우)을 추가합니다. - 도구 모음 상단에
libraries_to_link
기능 (없는 경우)을 추가합니다. - 도구 모음 상단에
force_pic_flags
기능 (없는 경우)을 추가합니다. - 도구 모음 상단에
user_link_flags
기능 (없는 경우)을 추가합니다. - 도구 모음 상단에
legacy_link_flags
기능 (없는 경우)을 추가합니다. - 도구 모음 상단에
static_libgcc
기능 (없는 경우)을 추가합니다. - 도구 모음 상단에
fission_support
기능 (없는 경우)을 추가합니다. - 도구 모음 상단에
strip_debug_symbols
기능 (없는 경우)을 추가합니다. - 도구 모음 상단에
coverage
기능 (없는 경우)을 추가합니다. - 도구 모음 상단에
llvm_coverage_map_format
기능 (없는 경우)을 추가합니다. - 도구 모음 상단에
gcc_coverage_map_format
기능 (없는 경우)을 추가합니다. - 도구 모음 하단에
fully_static_link
기능 (없는 경우)을 추가합니다. - 도구 모음 하단에
user_compile_flags
기능 (없는 경우)을 추가합니다. - 도구 모음 하단에
sysroot
기능 (없는 경우)을 추가합니다. - 도구 모음 하단에
unfiltered_compile_flags
기능 (없는 경우)을 추가합니다. - 도구 모음 하단에
linker_param_file
기능 (없는 경우)을 추가합니다. - 도구 모음 하단에
compiler_input_flags
기능 (없는 경우)을 추가합니다. - 도구 모음 하단에
compiler_output_flags
기능 (없는 경우)을 추가합니다.
이는 긴 기능 목록입니다. 계획은 한 번 삭제하면
Starlark의 Crosstool은
완료되었습니다. 궁금한 점은
CppActionConfigs,
프로덕션 도구 모음의 경우 no_legacy_features
를 추가하여
도구 모음이 더 독립적이 되었습니다.