Como compilar o Bazel a partir da origem

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

Para criar o Bazel a partir da origem, você pode realizar uma das seguintes 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 (links em inglês).

  2. Faça o download das fontes do Bazel no GitHub e extraia em algum lugar. Como alternativa, você pode 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 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). Você pode copiá-lo onde quiser e usar imediatamente, sem precisar de instalação.

Confira as instruções detalhadas abaixo.

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. Digite bazel em um terminal para verificar se ele pode ser executado.

Motivo: para criar o Bazel de uma árvore de origem do GitHub, você precisa de um binário do Bazel pré-existente. Você pode instalar um de um gerenciador de pacotes ou fazer o download de um do GitHub. Consulte Como instalar o Bazel. Ou você pode 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 PATH.

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

    • Talvez o binário do Bazel não seja chamado de bazel (em Unixes) 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 Unixes).

      Para tornar o binário executável, execute chmod +x /path/to/bazel.

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

Se você estiver familiarizado com o Git, execute o comando git clone em https://github.com/bazelbuild/bazel

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

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

  2. Extraia o conteúdo.

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

Etapa 3: instalar pré-requisitos

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

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

Para instruções para Windows, consulte Criar 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 origens do Bazel.

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

    cd ~/bazel-src
    
  3. Crie o Bazel 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 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 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 origens do Bazel.

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

    cd %USERPROFILE%\bazel-src
    
  3. Crie o Bazel 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 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

Não é preciso instalar nada.

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


Criar o Bazel do zero (bootstrapping)

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

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 da arquitetura. Não há arquivos de distribuição específicos da arquitetura ou do SO.
    • Essas origens não são iguais à árvore de origem do GitHub (link em inglês). 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 o bootstrapping 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 versão 3D5919B448457EE0 do Bazel.

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

Para instruções para Windows, consulte Inicialização do Bazel no Windows.

2.1. Instalar os pré-requisitos

  • Bash

  • compactar, 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, mas instalar 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. Inicializar o Bazel no Unix

  1. Abra um shell ou uma janela de terminal.

  2. cd ao 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 independente do Bazel, 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 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 "Executar o script de compilação".

Etapa 2b: inicializar o Bazel no Windows

Para instruções para sistemas semelhantes ao Unix, consulte Inicializar Bazel no Ubuntu Linux, macOS e outros sistemas semelhantes ao Unix.

2.1. Instalar os pré-requisitos

  • Shell MSYS2

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

    pacman -S zip unzip patch
    
  • O compilador do Visual C++. Instale o compilador do Visual C++ como parte do Visual Studio 2015 ou mais recente ou instalando a versão mais recente do Build Tools for Visual Studio 2017.

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

  • Python As versões 2 e 3 são compatíveis, mas instalar 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 do MSYS2.

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

    • BAZEL_VS ou BAZEL_VC (não são a mesma coisa): defina 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 do MSYS2. Confira o comando nos exemplos abaixo.

      Não o defina como C:\Windows\System32\bash.exe. Esse arquivo estará disponível se você tiver instalado o Windows Subsystem para Linux. O Bazel não oferece suporte a essa versão do bash.exe.

    • PATH: adicione o diretório do 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 ao 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 independente do Bazel, 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 esteja 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 pelo shell MSYS2. É possível executar o Bazel no prompt de comando (cmd.exe) ou no PowerShell.