Como compilar o Bazel a partir da origem

Informar um problema Ver fonte Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

Esta página descreve como instalar o Bazel da origem e oferece dicas para solucionar problemas comuns.

Para criar o Bazel da origem, faça uma destas ações:

Criar o Bazel usando o Bazel

Resumo

  1. Acesse a versão mais recente do Bazel na página de lançamento do GitHub ou com o Bazelisk.

  2. Faça o download das fontes do Bazel no GitHub e extraia em algum lugar. Como alternativa, é possível clonar a árvore de origem em https://github.com/bazelbuild/bazel

  3. Instale os mesmos pré-requisitos do bootstrapping (consulte para sistemas semelhantes ao 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 copiar e colar em qualquer lugar e usar imediatamente sem precisar instalar nada.

Confira abaixo as instruções detalhadas.

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

Objetivo: instalar ou baixar uma versão de lançamento do Bazel. Verifique se você pode executar o comando digitando bazel em um terminal.

Motivo: para criar o Bazel em uma árvore de origem do GitHub, você precisa de um binário do Bazel pré-existente. É possível instalar um gerenciador de pacotes ou fazer o download de um no GitHub. Consulte Como instalar o Bazel. Ou 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 seu binário do Bazel não esteja no PATH.

      Isso não é um grande problema. Em vez de digitar bazel, digite o caminho completo.

    • Talvez o próprio binário do Bazel não seja chamado de bazel (em Unix) ou bazel.exe (no Windows).

      Isso não é um grande problema. Você pode renomear o binário ou digitar o nome dele em vez de bazel.

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

      Execute chmod +x /path/to/bazel para tornar o binário executável.

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

Se você conhece o Git, basta executar 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 principal e extraia os arquivos nele.

Etapa 3: instalar pré-requisitos

Instale os mesmos pré-requisitos do bootstrapping (veja 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 no Windows, consulte Criar o Bazel no Windows.

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

Instruções

  1. Iniciar um terminal Bash

  2. cd no diretório em que você extraiu (ou clonou) as fontes do Bazel.

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

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

    bazel build //src:bazel-dev
    

    Outra opção é executar bazel build //src:bazel --compilation_mode=opt para gerar um binário menor, mas o build é mais lento.

    É possível criar com a flag --stamp --embed_label=X.Y.Z para incorporar uma versão do Bazel para o binário, de modo que bazel --version gere a versão especificada.

  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 sobre sistemas semelhantes ao Unix, consulte Ubuntu Linux, macOS e outros sistemas semelhantes ao 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 no diretório em que você extraiu (ou clonou) as fontes do Bazel.

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

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

    bazel build //src:bazel-dev.exe

    Outra opção é executar bazel build //src:bazel.exe --compilation_mode=opt para gerar um binário menor, mas o build é mais lento.

    É possível criar com a flag --stamp --embed_label=X.Y.Z para incorporar uma versão do Bazel para o binário, de modo que bazel --version gere a versão especificada.

  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 independente do Bazel. Você pode copiar para qualquer diretório e usar imediatamente. É útil se esse diretório estiver no PATH para que você possa executar "bazel" em qualquer lugar.


Criar o Bazel do zero (bootstrap)

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

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

Essa etapa é igual para todas as plataformas.

  1. Faça o download de bazel-<version>-dist.zip no GitHub, por exemplo, bazel-0.28.1-dist.zip.

    Atenção:

    • Há um único arquivo de distribuição independente da arquitetura. Não há arquivos de distribuição específicos para arquitetura ou SO.
    • Essas fontes não são as mesmas que a árvore de origem do GitHub. Você precisa usar o arquivo de distribuição para fazer o bootstrap do 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 no 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 no Windows, consulte Inicializar o Bazel no Windows.

2.1. Instalar os pré-requisitos

  • Bash

  • zip, unzip

  • Cadeia de ferramentas de build do C++

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

  • Python. As versões 2 e 3 são compatíveis, e basta instalar uma delas.

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 o Bazel no Unix

  1. Abra uma janela do shell ou do 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. Este é um binário independente do Bazel, sem um JDK incorporado. Você pode copiar e colar em qualquer lugar ou usar no lugar. Para facilitar, copie esse binário para um diretório no seu PATH, como /usr/local/bin no Linux.

Para criar o binário bazel de maneira 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 sobre sistemas semelhantes ao Unix, consulte Inicializar o Bazel no Ubuntu Linux, macOS e outros sistemas semelhantes ao Unix.

2.1. Instalar os pré-requisitos

  • Shell do MSYS2

  • Os pacotes MSYS2 para zip e unzip. Execute o comando a seguir no shell do MSYS2:

    pacman -S zip unzip patch
    
  • O compilador do Visual C++. Instale o compilador Visual C++ como parte do Visual Studio 2015 ou mais recente ou instalando as Ferramentas de build para Visual Studio 2017 mais recentes.

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

  • Python. As versões 2 e 3 são compatíveis, e basta instalar uma delas. Você precisa da versão nativa do Windows, que pode ser baixada 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 do MSYS2.

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

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

      Não defina como C:\Windows\System32\bash.exe. Você terá esse arquivo se tiver instalado o subsistema Windows para Linux. O Bazel não é compatível com esta versão do bash.exe.

    • PATH: adicione o diretório do Python.

    • JAVA_HOME: defina como o diretório do 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. Este é um binário independente do Bazel, sem um JDK incorporado. Você pode copiar e colar em qualquer lugar ou usar no lugar. Para facilitar, copie esse binário para um diretório no seu PATH.

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

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