ソースから Bazel をコンパイルする

このページでは、ソースから Bazel をインストールする方法と、 一般的な問題のトラブルシューティングのヒントについて説明します。

ソースから Bazel をビルドするには、次のいずれかを行います。

Bazel を使用して Bazel をビルドする

概要

  1. GitHub リリースページまたは Bazelisk から最新の Bazel リリースを入手します。

  2. GitHub から Bazel のソースをダウンロード し、任意の場所に抽出します。 または、https://github.com/bazelbuild/bazel からソースツリーを git clone することもできます。

  3. ブートストラップと同じ前提条件をインストールします( Unix 系システムの場合は、または Windows の場合はを参照してください)。

  4. Bazel を使用して Bazel の開発ビルドを作成します: bazel build //src:bazel-devbazel build //src:bazel-dev.exe Windows の場合は )

  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、その他の Unix 系システムで 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 をビルドする

Unix 系システムの手順については、 Ubuntu Linux、macOS、その他の Unix 系システムをご覧ください。

目標: 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

    注意:

    • 単一のアーキテクチャに依存しない 配布アーカイブがあります。 アーキテクチャ固有または OS 固有の配布アーカイブはありません。
    • これらのソースは GitHub ソースツリーと同じではありません。Bazel をブートストラップするには、配布アーカイブを使用する必要があります。GitHub からクローンされたソースツリーは 使用できません。(配布アーカイブには ブートストラップに必要な生成されたソースファイルが含まれており、通常の Git ソースツリーには含まれていません )。
  2. 配布アーカイブをディスク上の任意の場所に解凍します。

    Bazel の リリースキー 3D5919B448457EE0 で作成された署名を確認する必要があります。

ステップ 2a: Ubuntu Linux、macOS、その他の Unix 系システムで Bazel をブートストラップする

Windows の手順については、Windows で Bazel をブートストラップするをご覧ください。

2.1. 前提条件をインストールする

  • Bash

  • zip、unzip

  • C++ ビルド ツールチェーン

  • JDK 。バージョン 21 が必要です。

  • Python。バージョン 3 が必要です。

たとえば、Ubuntu Linux では、次のコマンドを使用してこれらの要件をインストールできます。

sudo apt-get install build-essential openjdk-21-jdk python3 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 をブートストラップする

Unix 系システムの手順については、 Ubuntu Linux、macOS、その他の Unix 系システムで Bazel をブートストラップするをご覧ください。

2.1. 前提条件をインストールする

  • MSYS2 シェル

  • zip と unzip の MSYS2 パッケージ 。MSYS2 シェルで次のコマンドを実行します。

    pacman -S zip unzip patch
    
  • Visual C++ コンパイラ 。Visual Studio 2015 以降の一部として Visual C++ コンパイラをインストールするか、Visual Studio 2017 用の最新のBuild Tools をインストールします

  • JDK 。バージョン 21 が必要です。

  • Python。バージョン 2 と 3 がサポートされています。どちらか 1 つをインストールすれば 十分です。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 )のパスに設定します。どちらか 1 つを設定すれば十分です。
    • 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 を実行できます。