Como compilar o Bazel do código-fonte

Informar um problema Ver código-fonte

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

Para criar o Bazel da origem, realize uma das ações a seguir:

Criar o Bazel usando o Bazel

Resumo

  1. Faça o download da versão mais recente do Bazel na página de versão do GitHub ou com o Bazelisk.

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

  3. Instalar os mesmos pré-requisitos do bootstrap (consulte para sistemas semelhantes a Unix ou para Windows)

  4. Crie uma versão 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). É possível copiá-lo onde quiser e usar imediatamente sem instalação posterior.

Veja a seguir as instruções detalhadas.

Etapa 1: instalar 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. Para isso, digite bazel em um terminal.

Motivo: para criar o Bazel de 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 deles pelo GitHub. Consulte Como instalar o Bazel. Ou crie 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.

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

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

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

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

      É necessário tornar o binário executável executando chmod +x /path/to/bazel.

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

Se você conhece o Git, é só clicar em git clone https://github.com/bazelbuild/bazel

Caso contrário:

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

  2. Extraia o conteúdo em algum lugar.

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

Etapa 3: instalar os pré-requisitos

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

Meta: 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 no diretório em que você extraiu (ou clonou) as fontes do Bazel.

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

    cd ~/bazel-src
    
  3. Crie o Bazel a partir da 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 o processo é mais lento.

  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.

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

Instruções

  1. Iniciar 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 origens do diretório principal, execute:

    cd %USERPROFILE%\bazel-src
    
  3. Crie o Bazel a partir da 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 o processo é mais lento.

  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 há nada para instalar.

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


Criar o Bazel do zero (inicialização)

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

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, por exemplo, bazel-0.28.1-dist.zip.

    Atenção:

    • Há um arquivo de distribuição único e independente de 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. Você precisa 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 no disco.

    É necessário verificar a assinatura feita pela chave de lançamento 3D5919B448457EE0 do Bazel.

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

Para instruções sobre o Windows, consulte Bootstrap Bazel no Windows.

2.1. Instalar os pré-requisitos

  • Bash

  • zip, descompactar

  • Conjunto de ferramentas de build C++

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

  • Python As versões 2 e 3 são compatíveis. 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-11-jdk python zip unzip

2.2. Bootstrap Bazel no Unix

  1. Abra um shell ou janela do terminal.

  2. cd para o diretório no qual 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 do Bazel autônomo, sem um JDK incorporado. É possível copiá-lo em qualquer lugar ou usá-lo no local. Por conveniência, copie esse binário para um diretório que esteja no 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 "Run the script script".

Etapa 2b: bootstrap Bazel no Windows

Para instruções sobre sistemas semelhantes ao Unix, consulte Bootstrap 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 descompactação Execute o seguinte comando no shell MSYS2:

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

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

  • Python As versões 2 e 3 são compatíveis. 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. Bootstrap Bazel no Windows

  1. Abra o shell MSYS2.

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

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

      Não o defina como C:\Windows\System32\bash.exe. Você tem esse arquivo se instalou o Windows Subsystem para Linux. O Bazel não é compatível com esta versão da bash.exe.

    • PATH: adicione o diretório Python.

    • JAVA_HOME: definido 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/jdk1.8.0_112"
    

    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/jdk1.8.0_112"
    
  3. cd para o diretório no qual 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 do Bazel autônomo, sem um JDK incorporado. É possível copiá-lo em qualquer lugar ou usá-lo no local. Por conveniência, copie esse binário para um diretório que esteja no PATH.

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

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