参照元から Bazel をコンパイルする

問題を報告する ソースを表示

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

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

Bazel を使用した Bazel のビルド

まとめ

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

  2. GitHub から Bazel のソースをダウンロードして、どこかに展開します。または、https://github.com/bazelbuild/bazel から git クローンを作成します。

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

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

  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 を実行してバイナリを小さくすることもできますが、ビルドは遅くなります。

  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 を実行してバイナリを小さくすることもできますが、ビルドは遅くなります。

  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、その他の Unix 系システムで Bazel をブートストラップする

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

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

  • Bash

  • zip、解凍

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

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

  • Python。バージョン 2 と 3 がサポートされています。いずれかをインストールすれば十分です。

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

sudo apt-get install build-essential openjdk-11-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 に配置されます。これは、自己完結型の Bazel バイナリで、JDK が埋め込まれていません。任意の場所にコピーすることも、インプレースで使用することもできます。便宜上、このバイナリを PATH 上のディレクトリ(Linux の場合は /usr/local/bin など)にコピーします。

再現可能な方法で bazel バイナリをビルドするには、「コンパイル スクリプトを実行する」のステップで SOURCE_DATE_EPOCH も設定します。

ステップ 2b: Windows で Bazel をブートストラップする

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

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

  • MSYS2 シェル

  • zip および解凍用の MSYS2 パッケージ。MSYS2 シェルで次のコマンドを実行します。

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

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

  • 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 に設定しないでください。(Windows Subsystem for Linux をインストールした場合はこのファイルがあります)。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/jdk1.8.0_112"
    

    または(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/jdk1.8.0_112"
    
  3. cd は、配布アーカイブを解凍したディレクトリに移動します。

  4. コンパイル スクリプトを実行します。env EXTRA_BAZEL_ARGS="--tool_java_runtime_version=local_jdk" ./compile.sh

コンパイルされた出力は output/bazel.exe に配置されます。これは、自己完結型の Bazel バイナリで、JDK が埋め込まれていません。任意の場所にコピーすることも、インプレースで使用することもできます。便宜上、このバイナリを PATH 上のディレクトリにコピーします。

再現可能な方法で bazel.exe バイナリをビルドするには、「コンパイル スクリプトを実行する」のステップで SOURCE_DATE_EPOCH も設定します。

MSYS2 シェルから Bazel を実行する必要はありません。Bazel は、コマンド プロンプト(cmd.exe)または PowerShell から実行できます。