從來源編譯 Bazel

回報問題 查看原始碼 Nightly · 7.4 . 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 複製原始碼樹狀結構

  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 (在 Unixes 上) 或 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、unzip

  • 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 專用 Build Tools 來完成。

  • JDK。必須使用 11 版。

  • Python。系統支援版本 2 和 3,只要安裝其中一個即可。您需要 Windows 原生版本 (可從 https://www.python.org 下載)。透過 MSYS2 以 MSYS2 安裝的版本將無法運作。

2.2. 在 Windows 上啟動 Bazel

  1. 開啟 MSYS2 殼層。

  2. 設定下列環境變數:

    • BAZEL_VSBAZEL_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/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。您可以透過命令提示字元 (cmd.exe) 或 PowerShell 執行 Bazel。