Cómo compilar Bazel desde la fuente

Informar un problema Ver fuente

En esta página, se describe cómo instalar Bazel desde la fuente y se proporcionan sugerencias para solucionar problemas comunes.

Para compilar Bazel desde el código fuente, puedes realizar una de las siguientes acciones:

Compila Bazel con Bazel

Resumen

  1. Obtén la versión más reciente de Bazel desde la página de versiones de GitHub o con Bazelisk.

  2. Descarga las fuentes de Bazel desde GitHub y extráelas en alguna parte. Como alternativa, puedes clonar el árbol de fuentes con git desde https://github.com/bazelbuild/bazel

  3. Instala los mismos requisitos previos que para la inicialización (consulta para sistemas similares a Unix o para Windows).

  4. Compila una compilación de desarrollo de Bazel con Bazel: bazel build //src:bazel-dev (o bazel build //src:bazel-dev.exe en Windows)

  5. El objeto binario resultante está en bazel-bin/src/bazel-dev (o bazel-bin\src\bazel-dev.exe en Windows). Puedes copiarlo donde quieras y usarlo de inmediato sin más instalación.

A continuación, encontrarás instrucciones detalladas.

Paso 1: Obtén la versión más reciente de Bazel

Objetivo: Instalar o descargar una versión de actualización de Bazel. Asegúrate de poder ejecutarlo. Para ello, escribe bazel en una terminal.

Motivo: Para compilar Bazel a partir de un árbol de fuentes de GitHub, necesitas un objeto binario de Bazel preexistente. Puedes instalar una desde un administrador de paquetes o descargar una desde GitHub. Consulta Instala Bazel. (O puedes compilar desde cero).

Solución de problemas:

  • Si no puedes ejecutar Bazel, escribe bazel en una terminal:

    • Es posible que el directorio del objeto binario de Bazel no esté en PATH.

      Esto no es un gran problema. En lugar de escribir bazel, deberás escribir la ruta de acceso completa.

    • Es posible que el objeto binario de Bazel no se llame bazel (en Unix) ni bazel.exe (en Windows).

      Esto no es un gran problema. Puedes cambiar el nombre del objeto binario o escribir su nombre en lugar de bazel.

    • Tal vez el objeto binario no sea ejecutable (en Unix).

      Para hacer que el objeto binario sea ejecutable, ejecuta chmod +x /path/to/bazel.

Paso 2: Descarga las fuentes de Bazel desde GitHub

Si estás familiarizado con Git, solo debes usar git clone https://github.com/bazelbuild/bazel

En caso contrario:

  1. Descarga las fuentes más recientes como un archivo ZIP.

  2. Extrae el contenido en alguna parte.

    Por ejemplo, crea un directorio bazel-src en tu directorio principal y extráelo.

Paso 3: Instala los requisitos previos

Instala los mismos requisitos previos que para la inicialización (consulta a continuación): JDK, compilador de C++, MSYS2 (si compilas en Windows), etcétera.

Paso 4a: Compila Bazel en Ubuntu Linux, macOS y otros sistemas similares a Unix

Si quieres obtener instrucciones para Windows, consulta Compila Bazel en Windows.

Objetivo: Ejecutar Bazel para compilar un objeto binario de Bazel personalizado (bazel-bin/src/bazel-dev)

Instrucciones:

  1. Inicia una terminal de Bash

  2. cd en el directorio donde extrajiste (o clonaste) las fuentes de Bazel.

    Por ejemplo, si extrajiste las fuentes de tu directorio principal, ejecuta lo siguiente:

    cd ~/bazel-src
    
  3. Compila Bazel desde la fuente:

    bazel build //src:bazel-dev
    

    También puedes ejecutar bazel build //src:bazel --compilation_mode=opt para producir un objeto binario más pequeño, pero su compilación es más lenta.

  4. El resultado se mostrará en bazel-bin/src/bazel-dev (o bazel-bin/src/bazel).

Paso 4b: Compila Bazel en Windows

Si quieres obtener instrucciones para sistemas similares a Unix, consulta Ubuntu Linux, macOS y otros sistemas similares a Unix.

Objetivo: Ejecutar Bazel para compilar un objeto binario personalizado de Bazel (bazel-bin\src\bazel-dev.exe)

Instrucciones:

  1. Iniciar el símbolo del sistema (Menú > Ejecutar > "cmd.exe")

  2. cd en el directorio donde extrajiste (o clonaste) las fuentes de Bazel.

    Por ejemplo, si extrajiste las fuentes de tu directorio principal, ejecuta lo siguiente:

    cd %USERPROFILE%\bazel-src
    
  3. Compila Bazel desde la fuente:

    bazel build //src:bazel-dev.exe
    

    Como alternativa, puedes ejecutar bazel build //src:bazel.exe --compilation_mode=opt para generar un objeto binario más pequeño, pero su compilación es más lenta.

  4. El resultado estará en bazel-bin\src\bazel-dev.exe (o bazel-bin\src\bazel.exe).

Paso 5: Instala el objeto binario compilado

En realidad, no debes instalar nada.

El resultado del paso anterior es un objeto binario de Bazel autónomo. Puedes copiarlo en cualquier directorio y usarlo de inmediato. (Resulta útil si ese directorio se encuentra en tu RUTA DE ACCESO para que puedas ejecutar “bazel” en todas partes).


Compila Bazel desde cero (arranque)

También puedes compilar Bazel desde cero, sin usar un objeto binario de Bazel existente.

Paso 1: Descarga las fuentes de Bazel (archivo de distribución)

(Este paso es el mismo para todas las plataformas).

  1. Descarga bazel-<version>-dist.zip desde GitHub, por ejemplo bazel-0.28.1-dist.zip.

    Atención:

    • Hay un archivo de distribución único e independiente de la arquitectura. No hay archivos de distribución específicos del SO o de la arquitectura.
    • Estas fuentes no son las mismas que el árbol de fuentes de GitHub. Debes usar el archivo de distribución para iniciar Bazel. No puedes usar un árbol de fuentes clonado desde GitHub. (El archivo de distribución contiene archivos de origen generados que son necesarios para el arranque y no forman parte del árbol de fuentes normal de Git).
  2. Extrae el archivo de distribución en algún lugar del disco.

    Debes verificar la firma realizada por la clave de lanzamiento 3D5919B448457EE0 de Bazel.

Paso 2a: Inicia Bazel en Ubuntu Linux, macOS y otros sistemas similares a Unix

Para obtener instrucciones para Windows, consulta Cómo iniciar Bazel en Windows.

2.1. Instala los requisitos previos

  • Bash

  • zip y descomprimir

  • Cadena de herramientas de compilación de C++

  • JDK. La versión 11 es obligatoria.

  • Python. Las versiones 2 y 3 son compatibles, por lo que instalar una de ellas es suficiente.

Por ejemplo, en Ubuntu Linux, puedes instalar estos requisitos con el siguiente comando:

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

2.2. Inicia Bazel en Unix

  1. Abre un shell o una ventana de terminal.

  2. cd al directorio en el que descomprimiste el archivo de distribución.

  3. Ejecuta la secuencia de comandos de compilación: env EXTRA_BAZEL_ARGS="--tool_java_runtime_version=local_jdk" bash ./compile.sh.

El resultado compilado se coloca en output/bazel. Es un objeto binario de Bazel autónomo, sin un JDK incorporado. Se puede copiar en cualquier lugar o usarlo in situ. Para mayor comodidad, copia este objeto binario a un directorio que esté en tu PATH (como /usr/local/bin en Linux).

Para compilar el objeto binario bazel de manera reproducible, configura también SOURCE_DATE_EPOCH en el paso "Ejecuta la secuencia de comandos de compilación".

Paso 2b: Inicia Bazel en Windows

Si quieres obtener instrucciones para sistemas similares a Unix, consulta Cómo iniciar Bazel en Ubuntu Linux, macOS y otros sistemas similares a Unix.

2.1. Instala los requisitos previos

  • Shell de MSYS2

  • Los paquetes de MSYS2 para comprimir y descomprimir. Ejecuta el siguiente comando en la shell de MSYS2:

    pacman -S zip unzip patch
    
  • El compilador de Visual C++. Instala el compilador de Visual C++ como parte de Visual Studio 2015 o de una versión posterior, o instalando las herramientas de compilación para Visual Studio 2017 más recientes.

  • JDK. La versión 11 es obligatoria.

  • Python. Las versiones 2 y 3 son compatibles, por lo que instalar una de ellas es suficiente. Necesitas la versión nativa de Windows (se puede descargar desde https://www.python.org). Las versiones instaladas a través de Pacman en MSYS2 no funcionarán.

2.2. Inicia Bazel en Windows

  1. Abre la shell de MSYS2.

  2. Configura las siguientes variables del entorno:

    • BAZEL_VS o BAZEL_VC (no son lo mismo): establece en la ruta de acceso al directorio de Visual Studio (BAZEL_VS) o al directorio de Visual C++ (BAZEL_VC). Configurar una de ellas es suficiente.
    • BAZEL_SH: Ruta del bash.exe de MSYS2. Consulta el comando en los ejemplos a continuación.

      No la establezcas como C:\Windows\System32\bash.exe. (Tienes ese archivo si instalaste el Subsistema de Windows para Linux). Bazel no es compatible con esta versión de bash.exe.

    • PATH: Agrega el directorio de Python.

    • JAVA_HOME: Establece el directorio del JDK.

    Ejemplo (con 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"
    

    o (con 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 al directorio en el que descomprimiste el archivo de distribución.

  4. Ejecuta la secuencia de comandos de compilación: env EXTRA_BAZEL_ARGS="--tool_java_runtime_version=local_jdk" ./compile.sh.

El resultado compilado se coloca en output/bazel.exe. Es un objeto binario de Bazel autónomo, sin un JDK incorporado. Se puede copiar en cualquier lugar o usarlo in situ. Para mayor comodidad, copia este objeto binario en un directorio que esté en tu PATH.

Para compilar el objeto binario bazel.exe de manera reproducible, configura también SOURCE_DATE_EPOCH en el paso "Ejecuta la secuencia de comandos de compilación".

No es necesario que ejecutes Bazel desde la shell de MSYS2. Puedes ejecutar Bazel desde el símbolo del sistema (cmd.exe) o PowerShell.