본문 바로가기

building system/bazel

DefaultInfo 프로바이더 이해하기

반응형

DefaultInfo

모든 bazel의 rule은 implementation 함수에서 DefaultInfo 프로바이더를 명시적으로 반환하지 않더라도 암묵적으로 DefaultInfo 프로바이더를 갖는다. DefaultInfotarget의 결과 파일 정보뿐만 아니라, 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

DefaultInfobuild:실행 파일의 File 객체를 반환한다.

File FilesToRunProvider.repo_mapping_manifest

DefaultInfobuild:repo_mapping 파일의 File 객체를 반환한다.

File FilesToRunProvider.runfiles_manifest

DefaultInforun:runfiles_manifest 파일의 File 객체를 반환한다.

728x90
반응형

'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