DefaultInfo
모든 bazel
의 rule은 implementation
함수에서 DefaultInfo
프로바이더를 명시적으로 반환하지 않더라도 암묵적으로 DefaultInfo
프로바이더를 갖는다. DefaultInfo
는 target
의 결과 파일 정보뿐만 아니라, transitive file
정보도 files
멤버로 포함하고 있다.
실행 시간에 필요한 데이터 정보는 default_runfiles
멤버가 포함하고 있다. 일반적으로 default_runfiles
정보가 다른 rule
에 참여하면, runfiles
필드 항목을 통해 또다시 포워딩해야 한다.
DefaultInfo
멤버
DefaultInfo // 생성자 함수
files // 멤버 변수
files_to_run // 멤버 변수
data_runfiles // 사용 금지
default_runfiles // 멤버 변수
DefaultInfo
생성자 함수
DefaultInfo(
files = None,
runfiles = None,
data_runfiles = None, // 사용 금지
default_runfiles = None, // 사용 금지
executable = None)
bazel build //...
구문은 target를 build
하는 명령이다.bazel run //...
구문은 target를 run
하는 명령으로 필요하면 build
수행하고, 별도 runfiles
폴더에 build
결과물을 복사해 수행한다. bazel의 모든 rule는 build
설정과 run
설정으로 크게 구분한다.
files
항목은 build
과정에 필요한 미리 선언한 File
객체 목록을 depset
타입 객체로 변환한 후 할당한다. 실제 build
를 수행하면, action
를 통해 미리 선언한 File
객체를 실제 생성한다.
runfiles
항목은 run
과정이나 tool
dependency 설정으로 인해 target를 run
해야 할 때, 필요한 runfiles
타입의 객체를 할당한다. 실제 run
를 수행하면, runfiles
의 mapping 정보를 통해서 필요한 target를 먼저 build
한다.
executable
항목은 target를 run
하는데 필요한 파일의 File
객체를 할당한다. executable rule
이나 test rule
의 function에 대한 attrs
dict 객체에서 output
type 항목에 대응하는 미리 선언된 ctx.outputs.executable
를 일반적으로 그대로 포워딩한다.
files
멤버 변수
depset DefaultInfo.files
DefaultInfo
생성자의 files
항목으로 설정한 depset
객체를 반환한다.
default_runfiles
멤버 변수
DefaultInfo
생성자의 runfiles
항목으로 설정한 runfiles
객체를 반환한다.
files_to_run
멤버 변수
FilesToRunProvider DefaultInfo.files_to_run
DefaultInfo
실행 결과를 FilesToRunProvider
객체로 반환한다.build
결과는 실행 파일과 repo_mapping
파일이고,run
결과는 runfiles_manifest
파일이다.
FilesToRunProvider
의 멤버 변수
File FilesToRunProvider.executable
DefaultInfo
의 build
:실행 파일의 File
객체를 반환한다.
File FilesToRunProvider.repo_mapping_manifest
DefaultInfo
의 build
:repo_mapping
파일의 File
객체를 반환한다.
File FilesToRunProvider.runfiles_manifest
DefaultInfo
의 run
:runfiles_manifest
파일의 File
객체를 반환한다.
'building system > bazel' 카테고리의 다른 글
Depsets 이해하기 (0) | 2024.02.27 |
---|---|
nasm_library 구현해보기 (0) | 2024.02.20 |
msvc 환경에서 bazel /MD 모드로 컴파일하기 (1) | 2024.02.01 |
generated file 활용하기 (0) | 2024.01.30 |
platforms module 사용하기 (0) | 2024.01.29 |