소스에서 Bazel 컴파일

7.3 · 7.2 · 7.1 · 7.0 · 6.5

이 페이지에서는 소스에서 Bazel을 설치하는 방법을 설명하고 일반적인 문제에 대한 문제 해결 도움말을 제공합니다.

소스에서 Bazel을 빌드하려면 다음 중 하나를 실행합니다.

Bazel을 사용하여 Bazel 빌드

요약

  1. GitHub 출시 페이지에서 또는 Bazelisk를 사용하여 최신 Bazel 출시 버전을 가져옵니다.

  2. GitHub에서 Bazel 소스를 다운로드하여 어딘가에 추출합니다. 또는 https://github.com/bazelbuild/bazel에서 소스 트리를 git 클론할 수 있습니다.

  3. 부트스트랩과 동일한 기본 요건을 설치합니다(Unix 계열 시스템 또는 Windows 참고).

  4. Bazel을 사용하여 Bazel 개발 빌드를 빌드합니다. bazel build //src:bazel-dev (Windows의 경우 bazel build //src:bazel-dev.exe)

  5. 결과 바이너리는 bazel-bin/src/bazel-dev(Windows의 경우 bazel-bin\src\bazel-dev.exe)에 있습니다. 원하는 위치에 복사하고 추가 설치 없이 즉시 사용할 수 있습니다.

자세한 안내는 다음과 같습니다.

1단계: 최신 Bazel 출시 버전 가져오기

목표: Bazel의 출시 버전을 설치하거나 다운로드합니다. 터미널에 bazel를 입력하여 실행할 수 있는지 확인합니다.

이유: GitHub 소스 트리에서 Bazel을 빌드하려면 기존 Bazel 바이너리가 필요합니다. 패키지 관리자에서 패키지를 설치하거나 GitHub에서 다운로드할 수 있습니다. Bazel 설치를 참고하세요. (또는 처음부터 빌드 (부트스트랩)할 수 있습니다.)

문제해결:

  • 터미널에 bazel를 입력하여 Bazel을 실행할 수 없는 경우 다음 단계를 따르세요.

    • Bazel 바이너리의 디렉터리가 PATH에 없을 수 있습니다.

      큰 문제는 아닙니다. bazel 대신 전체 경로를 입력해야 합니다.

    • Bazel 바이너리 자체가 bazel (Unix) 또는 bazel.exe (Windows)라고 호출되지 않을 수 있습니다.

      큰 문제는 아닙니다. 바이너리의 이름을 변경하거나 bazel 대신 바이너리의 이름을 입력할 수 있습니다.

    • 바이너리가 실행 파일이 아닐 수 있습니다(Unix의 경우).

      chmod +x /path/to/bazel를 실행하여 바이너리를 실행 가능하게 만들어야 합니다.

2단계: GitHub에서 Bazel 소스 다운로드

Git에 익숙하다면 git clone https://github.com/bazelbuild/bazel을 실행합니다.

그 이외의 경우

  1. 최신 소스를 zip 파일로 다운로드합니다.

  2. 어딘가에 콘텐츠를 추출합니다.

    예를 들어 홈 디렉터리 아래에 bazel-src 디렉터리를 만들고 여기에 추출합니다.

3단계: 기본 요건 설치

부트스트랩과 동일한 기본 요건(아래 참고)을 설치합니다. JDK, C++ 컴파일러, MSYS2(Windows에서 빌드하는 경우) 등

4a단계: Ubuntu Linux, macOS, 기타 유닉스 계열 시스템에서 Bazel 빌드

Windows의 경우 Windows에서 Bazel 빌드하기를 참고하세요.

목표: Bazel을 실행하여 맞춤 Bazel 바이너리 (bazel-bin/src/bazel-dev)를 빌드합니다.

안내:

  1. Bash 터미널 시작

  2. cd를 Bazel 소스를 추출(또는 클론)한 디렉터리로 이동합니다.

    예를 들어 홈 디렉터리 아래에 소스를 추출한 경우 다음을 실행합니다.

    cd ~/bazel-src
    
  3. 소스에서 Bazel 빌드:

    bazel build //src:bazel-dev
    

    또는 bazel build //src:bazel --compilation_mode=opt를 실행하여 더 작은 바이너리를 생성할 수 있지만 빌드 속도가 더 느립니다.

    --stamp --embed_label=X.Y.Z 플래그로 빌드하여 바이너리의 Bazel 버전을 삽입하여 bazel --version가 지정된 버전을 출력하도록 할 수 있습니다.

  4. 출력은 bazel-bin/src/bazel-dev (또는 bazel-bin/src/bazel)에 있습니다.

4b단계: Windows에서 Bazel 빌드

유닉스 계열 시스템에 관한 안내는 Ubuntu Linux, macOS, 기타 유닉스 계열 시스템을 참고하세요.

목표: Bazel을 실행하여 맞춤 Bazel 바이너리(bazel-bin\src\bazel-dev.exe)를 빌드합니다.

안내:

  1. 명령 프롬프트를 시작합니다(시작 메뉴 > 실행 > 'cmd.exe').

  2. cd를 Bazel 소스를 추출(또는 클론)한 디렉터리로 이동합니다.

    예를 들어 홈 디렉터리 아래에 소스를 추출한 경우 다음을 실행합니다.

    cd %USERPROFILE%\bazel-src
    
  3. 소스에서 Bazel 빌드:

    bazel build //src:bazel-dev.exe

    또는 bazel build //src:bazel.exe --compilation_mode=opt를 실행하여 더 작은 바이너리를 생성할 수 있지만 빌드 속도가 느립니다.

    --stamp --embed_label=X.Y.Z 플래그로 빌드하여 바이너리의 Bazel 버전을 삽입하면 bazel --version가 지정된 버전을 출력합니다.

  4. 출력은 bazel-bin\src\bazel-dev.exe(또는 bazel-bin\src\bazel.exe)에 있습니다.

5단계: 빌드된 바이너리 설치

실제로 설치할 것은 없습니다.

이전 단계의 출력은 독립형 Bazel 바이너리입니다. 원하는 디렉터리에 복사하여 즉시 사용할 수 있습니다. 이 디렉터리가 PATH에 있으면 어디서나 'bazel'을 실행할 수 있으므로 유용합니다.


Bazel을 처음부터 빌드(부트스트랩)

기존 Bazel 바이너리를 사용하지 않고 처음부터 Bazel을 빌드할 수도 있습니다.

1단계: Bazel 소스 (배포 보관 파일) 다운로드

이 단계는 모든 플랫폼에서 동일합니다.

  1. GitHub에서 bazel-<version>-dist.zip를 다운로드합니다(예: bazel-0.28.1-dist.zip).

    주의:

    • 단일의 아키텍처 독립형 배포 보관 파일이 있습니다. 아키텍처별 또는 OS별 배포 보관 파일은 없습니다.
    • 이러한 소스는 GitHub 소스 트리와 다릅니다. Bazel을 부트스트랩하려면 배포 보관 파일을 사용해야 합니다. GitHub에서 클론한 소스 트리는 사용할 수 없습니다. 배포 보관 파일에는 부트스트랩에 필요한 생성된 소스 파일이 포함되어 있으며 이는 일반 Git 소스 트리의 일부가 아닙니다.
  2. 디스크의 어딘가에 배포 보관 파일을 압축해제합니다.

    Bazel의 출시 키 3D5919B448457EE0로 생성된 서명을 확인해야 합니다.

2a단계: Ubuntu Linux, macOS, 기타 유닉스 계열 시스템에서 Bazel 부트스트랩

Windows의 경우 Windows에서 Bazel 부트스트랩을 참고하세요.

2.1. 기본 요건 설치

  • Bash

  • zip, unzip

  • C++ 빌드 도구 모음

  • JDK. 버전 21이 필요합니다.

  • Python. 버전 2 및 3이 지원되며 둘 중 하나를 설치하면 됩니다.

예를 들어 Ubuntu Linux에서는 다음 명령어를 사용하여 이러한 요구사항을 설치할 수 있습니다.

sudo apt-get install build-essential openjdk-21-jdk python zip unzip

2.2. Unix에서 Bazel 부트스트랩

  1. 셸 또는 터미널 창을 엽니다.

  2. cd를 배포 보관 파일을 압축해제한 디렉터리로 이동합니다.

  3. 컴파일 스크립트 env EXTRA_BAZEL_ARGS="--tool_java_runtime_version=local_jdk" bash ./compile.sh를 실행합니다.

컴파일된 출력은 output/bazel에 배치됩니다. 삽입된 JDK가 없는 독립형 Bazel 바이너리입니다. 어디에나 복사하거나 원래 위치에서 사용할 수 있습니다. 편의를 위해 이 바이너리를 PATH에 있는 디렉터리 (예: Linux의 /usr/local/bin)에 복사합니다.

재현 가능한 방식으로 bazel 바이너리를 빌드하려면 '컴파일 스크립트 실행' 단계에서 SOURCE_DATE_EPOCH도 설정합니다.

2b단계: Windows에서 Bazel 부트스트랩

유닉스 계열 시스템에 관한 안내는 Ubuntu Linux, macOS, 기타 유닉스 계열 시스템에서 Bazel 부팅을 참고하세요.

2.1. 기본 요건 설치

  • MSYS2 셸

  • zip 및 unzip용 MSYS2 패키지 MSYS2 셸에서 다음 명령어를 실행합니다.

    pacman -S zip unzip patch
    
  • Visual C++ 컴파일러 Visual C++ 컴파일러를 Visual Studio 2015 이상 버전의 일부로 설치하거나 최신 Visual Studio 2017용 빌드 도구를 설치합니다.

  • JDK. 버전 21이 필요합니다.

  • Python. 버전 2 및 3이 지원되며 둘 중 하나를 설치하면 됩니다. Windows 네이티브 버전 (https://www.python.org에서 다운로드 가능)이 필요합니다. MSYS2에서 pacman을 통해 설치된 버전은 작동하지 않습니다.

2.2. Windows에서 Bazel 부트스트랩

  1. MSYS2 셸을 엽니다.

  2. 다음 환경 변수를 설정합니다.

    • BAZEL_VS 또는 BAZEL_VC (동일하지 않음): Visual Studio 디렉터리 (BAZEL_VS) 또는 Visual C++ 디렉터리 (BAZEL_VC) 경로로 설정합니다. 그 중 하나만 설정하면 됩니다.
    • BAZEL_SH: MSYS2 bash.exe의 경로입니다. 아래 예시에서 명령어를 참고하세요.

      C:\Windows\System32\bash.exe로 설정하지 마세요. Linux용 Windows 하위 시스템을 설치한 경우 이 파일이 있습니다. Bazel은 이 버전의 bash.exe를 지원하지 않습니다.

    • PATH: Python 디렉터리를 추가합니다.

    • JAVA_HOME: JDK 디렉터리로 설정합니다.

    (BAZEL_VS 사용):

    export BAZEL_VS="C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools"
    export BAZEL_SH="$(cygpath -m $(realpath $(which bash)))"
    export PATH="/c/python27:$PATH"
    export JAVA_HOME="C:/Program Files/Java/jdk-21"
    

    또는 (BAZEL_VC 사용):

    export BAZEL_VC="C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC"
    export BAZEL_SH="$(cygpath -m $(realpath $(which bash)))"
    export PATH="/c/python27:$PATH"
    export JAVA_HOME="C:/Program Files/Java/jdk-21"
    
  3. cd를 배포 보관 파일을 압축해제한 디렉터리로 이동합니다.

  4. 컴파일 스크립트 env EXTRA_BAZEL_ARGS="--tool_java_runtime_version=local_jdk" ./compile.sh를 실행합니다.

컴파일된 출력은 output/bazel.exe에 배치됩니다. 삽입된 JDK가 없는 독립형 Bazel 바이너리입니다. 어디서나 복사하거나 제자리에서 사용할 수 있습니다. 편의를 위해 이 바이너리를 PATH에 있는 디렉터리에 복사합니다.

재현 가능한 방식으로 bazel.exe 바이너리를 빌드하려면 '컴파일 스크립트 실행' 단계에서 SOURCE_DATE_EPOCH도 설정합니다.

MSYS2 셸에서 Bazel을 실행할 필요가 없습니다. 명령 프롬프트 (cmd.exe) 또는 PowerShell에서 Bazel을 실행할 수 있습니다.