Como compilar o Bazel a partir da origem

Informar um problema Acessar fonte

Nesta página, descrevemos como instalar o Bazel a partir da origem e fornecemos dicas de solução de problemas comuns.

Para criar o Bazel a partir da origem, você tem as seguintes opções:

Criar o Bazel usando o Bazel

Resumo

  1. Confira a versão mais recente do Bazel na página de lançamento do GitHub ou com o Bazelisk (links em inglês).

  2. Faça o download das origens do Bazel no GitHub e extraia-as em algum lugar. Se preferir, clone a árvore de origem por git em https://github.com/bazelbuild/bazel

  3. Instale os mesmos pré-requisitos da inicialização. Consulte Para sistemas parecidos com Unix ou para Windows.

  4. Crie um build de desenvolvimento do Bazel usando o Bazel: bazel build //src:bazel-dev (ou bazel build //src:bazel-dev.exe no Windows).

  5. O binário resultante está em bazel-bin/src/bazel-dev (ou bazel-bin\src\bazel-dev.exe no Windows). Você pode copiá-lo onde quiser e usar imediatamente, sem precisar de outras instalações.

Confira as instruções detalhadas abaixo.

Etapa 1: acessar a versão mais recente do Bazel

Objetivo: instalar ou fazer o download de uma versão de lançamento do Bazel. Verifique se é possível executá-lo digitando bazel em um terminal.

Motivo: para criar o Bazel usando uma árvore de origem do GitHub, você precisa de um binário do Bazel pré-existente. É possível instalar um em um gerenciador de pacotes ou fazer o download de um no GitHub. Consulte Como instalar o Bazel. Também é possível criar do zero (bootstrap).

Solução de problemas:

  • Se não for possível executar o Bazel digitando bazel em um terminal:

    • Talvez o diretório do binário do Bazel não esteja no caminho.

      Isso não é um grande problema. Em vez de digitar bazel, você precisará digitar o caminho completo.

    • Talvez o binário em si não seja chamado de bazel (em Unix) ou bazel.exe (no Windows).

      Isso não é um grande problema. É possível renomear o binário ou digitar o nome dele em vez de bazel.

    • Talvez o binário não seja executável (em Unix).

      Torne o binário executável executando chmod +x /path/to/bazel.

Etapa 2: fazer o download das origens do Bazel no GitHub

Se você já conhece o Git, use o git clone https://github.com/bazelbuild/bazel

Se esse não for seu caso, faça o seguinte:

  1. Faça o download das origens mais recentes como um arquivo ZIP.

  2. Extraia o conteúdo em algum lugar.

    Por exemplo, crie um diretório bazel-src no diretório inicial e extraia-o nele.

Etapa 3: instalar pré-requisitos

Instale os mesmos pré-requisitos usados no bootstrap (confira abaixo): JDK, compilador C++, MSYS2 (se você estiver criando no Windows) etc.

Etapa 4a: criar o Bazel no Ubuntu Linux, macOS e outros sistemas semelhantes ao Unix

Para instruções para o Windows, consulte Build Bazel no Windows.

Objetivo: executar o Bazel para criar um binário personalizado do Bazel (bazel-bin/src/bazel-dev).

Instruções

  1. Inicie um terminal Bash

  2. cd para o diretório em que você extraiu (ou clonou) as origens do Bazel.

    Por exemplo, se você extraiu as origens no seu diretório principal, execute:

    cd ~/bazel-src
    
  3. Crie o Bazel pela origem:

    bazel build //src:bazel-dev
    

    Como alternativa, você pode executar bazel build //src:bazel --compilation_mode=opt para gerar um binário menor, mas a criação é mais lenta.

  4. A saída será bazel-bin/src/bazel-dev (ou bazel-bin/src/bazel).

Etapa 4b: criar o Bazel no Windows

Para instruções para sistemas semelhantes ao Unix, consulte Ubuntu Linux, macOS e outros sistemas do tipo Unix.

Objetivo: executar o Bazel para criar um binário personalizado do Bazel (bazel-bin\src\bazel-dev.exe).

Instruções

  1. Inicie o prompt de comando (Menu Iniciar > Executar > "cmd.exe")

  2. cd para o diretório em que você extraiu (ou clonou) as origens do Bazel.

    Por exemplo, se você extraiu as origens no seu diretório principal, execute:

    cd %USERPROFILE%\bazel-src
    
  3. Crie o Bazel pela origem:

    bazel build //src:bazel-dev.exe
    

    Como alternativa, você pode executar bazel build //src:bazel.exe --compilation_mode=opt para gerar um binário menor, mas a criação é mais lenta.

  4. A saída será bazel-bin\src\bazel-dev.exe (ou bazel-bin\src\bazel.exe).

Etapa 5: instalar o binário criado

Na verdade, não é preciso instalar nada.

A saída da etapa anterior é um binário autônomo do Bazel. É possível copiá-lo para qualquer diretório e usá-lo imediatamente. Ele é útil se esse diretório estiver no seu PATH para que você possa executar "bazel" em qualquer lugar.


Criar o Bazel do zero (bootstrap)

Também é possível compilar o Bazel do zero, sem usar um binário atual.

Etapa 1: fazer o download das origens do Bazel (arquivo de distribuição)

Essa etapa é a mesma para todas as plataformas.

  1. Faça o download de bazel-<version>-dist.zip no GitHub (em inglês). Por exemplo, bazel-0.28.1-dist.zip.

    Atenção:

    • Há um arquivo de distribuição único e independente da arquitetura. Não há arquivos de distribuição específicos da arquitetura ou do SO.
    • Essas fontes não são iguais à árvore de origem do GitHub. É necessário usar o arquivo de distribuição para inicializar o Bazel. Não é possível usar uma árvore de origem clonada do GitHub. O arquivo de distribuição contém arquivos de origem gerados que são necessários para a inicialização e não fazem parte da árvore de origem normal do Git.
  2. Descompacte o arquivo de distribuição em algum lugar do disco.

    Verifique a assinatura feita pela chave de lançamento 3D5919B448457EE0 do Bazel.

Etapa 2a: inicializar o Bazel no Ubuntu Linux, macOS e outros sistemas semelhantes ao Unix

Para instruções para o Windows, consulte Inicializar o Bazel no Windows.

2.1. Instale os pré-requisitos

  • Bash

  • zip, descompactar

  • Conjunto de ferramentas de build C++

  • JDK. A versão 21 é obrigatória.

  • Python. As versões 2 e 3 têm suporte, e a instalação de uma delas é suficiente.

Por exemplo, no Ubuntu Linux, é possível instalar esses requisitos usando o seguinte comando:

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

2.2. Inicializar Bazel no Unix

  1. Abra um shell ou uma janela de terminal.

  2. cd para o diretório em que você descompactou o arquivo de distribuição.

  3. Execute o script de compilação: env EXTRA_BAZEL_ARGS="--tool_java_runtime_version=local_jdk" bash ./compile.sh.

A saída compilada é colocada em output/bazel. Esse é um binário Bazel independente, sem um JDK incorporado. Você pode copiá-lo em qualquer lugar ou usá-lo no local. Por conveniência, copie esse binário para um diretório que está em seu PATH (como /usr/local/bin no Linux).

Para criar o binário bazel de forma reproduzível, defina também SOURCE_DATE_EPOCH na etapa "Executar o script de compilação".

Etapa 2b: inicializar o Bazel no Windows

Para instruções para sistemas como o Unix, consulte Inicializar o Bazel no Ubuntu Linux, macOS e outros sistemas do tipo Unix.

2.1. Instale os pré-requisitos

  • shell MSYS2

  • Os pacotes MSYS2 para compactar e descompactar. Execute o seguinte comando no shell MSYS2:

    pacman -S zip unzip patch
    
  • O compilador Visual C++. Instale o compilador do Visual C++ como parte do Visual Studio 2015 ou mais recente ou instalando a versão mais recente das Ferramentas de build para Visual Studio 2017 (link em inglês).

  • JDK. A versão 21 é obrigatória.

  • Python. As versões 2 e 3 têm suporte, e a instalação de uma delas é suficiente. Você precisa da versão nativa do Windows (disponível para download em https://www.python.org). As versões instaladas via pacman no MSYS2 não vão funcionar.

2.2. Inicializar o Bazel no Windows

  1. Abra o shell MSYS2.

  2. Configure as variáveis de ambiente a seguir:

    • BAZEL_VS ou BAZEL_VC (não são iguais): defina como o caminho para o diretório do Visual Studio (BAZEL_VS) ou para o diretório do Visual C++ (BAZEL_VC). Definir um deles é suficiente.
    • BAZEL_SH: caminho do bash.exe MSYS2. Confira o comando nos exemplos abaixo.

      Não defina como C:\Windows\System32\bash.exe. Você tem esse arquivo se instalou o Windows Subsystem para Linux. O Bazel não oferece suporte a essa versão de bash.exe.

    • PATH: adicione o diretório do Python.

    • JAVA_HOME: defina como o diretório JDK.

    Exemplo (usando 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"
    

    ou (usando 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 para o diretório em que você descompactou o arquivo de distribuição.

  4. Execute o script de compilação: env EXTRA_BAZEL_ARGS="--tool_java_runtime_version=local_jdk" ./compile.sh

A saída compilada é colocada em output/bazel.exe. Esse é um binário Bazel independente, sem um JDK incorporado. Você pode copiá-lo em qualquer lugar ou usá-lo no local. Por conveniência, copie esse binário para um diretório que está no seu PATH.

Para criar o binário bazel.exe de forma reproduzível, defina também SOURCE_DATE_EPOCH na etapa "Executar o script de compilação".

Não é necessário executar o Bazel pelo shell MSYS2. É possível executar o Bazel no Prompt de comando (cmd.exe) ou no PowerShell.