En esta página, se proporcionan detalles sobre el contenido del contenedor de Bazel, cómo compilar el proyecto abseil-cpp con Bazel dentro del contenedor y cómo compilar este proyecto directamente desde la máquina anfitrión mediante el contenedor de Bazel con activación de directorios.
Compila el proyecto Abseil desde tu máquina anfitrión con la activación del directorio
Las instrucciones de esta sección te permiten compilar con el contenedor de Bazel con las fuentes de salida en tu entorno de host. Se inicia un contenedor para cada comando de compilación que ejecutas. Los resultados de la compilación se almacenan en caché en tu entorno de host para que puedan volver a usarse entre compilaciones.
Clone el proyecto en un directorio de su máquina anfitrión.
git clone https://github.com/abseil/abseil-cpp.git /src/workspace
Crea una carpeta que tenga resultados almacenados en caché que se compartirán entre las compilaciones.
mkdir -p /tmp/build_output/
Usa el contenedor de Bazel para compilar el proyecto y hacer que los resultados de la compilación estén disponibles en la carpeta de salida de tu máquina anfitrión.
docker run \
-e USER="$(id -u)" \
-u="$(id -u)" \
-v /src/workspace:/src/workspace \
-v /tmp/build_output:/tmp/build_output \
-w /src/workspace \
gcr.io/bazel-public/bazel:latest \
--output_user_root=/tmp/build_output \
build //absl/...
Compila el proyecto con desinfectantes. Para ello, agrega la marca de compilación --config=asan|tsan|msan
a fin de seleccionar AddressSanitizer (asan), ThreadSanitizer (tsan) o MemorystoreSanitizer (msan) según corresponda.
docker run \
-e USER="$(id -u)" \
-u="$(id -u)" \
-v /src/workspace:/src/workspace \
-v /tmp/build_output:/tmp/build_output \
-w /src/workspace \
gcr.io/bazel-public/bazel:latest \
--output_user_root=/tmp/build_output \
build --config={asan | tsan | msan} -- //absl/... -//absl/types:variant_test
Compilar un proyecto de Abseil desde el interior del contenedor
Las instrucciones de esta sección te permiten compilar con el contenedor de Bazel con las fuentes dentro del contenedor. Si se inicia un contenedor al comienzo de tu flujo de trabajo de desarrollo y realizas cambios en el orden de entrada dentro del contenedor, los resultados de la compilación se almacenarán en caché.
Inicia una shell en el contenedor de Bazel:
docker run --interactive --entrypoint=/bin/bash gcr.io/bazel-public/bazel:latest
Cada ID de contenedor es único. En las siguientes instrucciones, el contenedor era 5a99103747c6.
Clona el proyecto.
root@5a99103747c6:~# git clone https://github.com/abseil/abseil-cpp.git && cd abseil-cpp/
Realiza una compilación normal.
root@5a99103747c6:~/abseil-cpp# bazel build //absl/...
Compila el proyecto con desinfectantes. Para ello, agrega la marca de compilación --config=asan|tsan|msan
a fin de seleccionar AddressSanitizer (asan), ThreadSanitizer (tsan) o MemorystoreSanitizer (msan) según corresponda.
root@5a99103747c6:~/abseil-cpp# bazel build --config=--config={asan | tsan | msan} -- //absl/... -//absl/types:variant_test
Explora el contenedor de Bazel
Si aún no lo hiciste, inicia una shell interactiva dentro del contenedor de Bazel.
docker run -it --entrypoint=/bin/bash gcr.io/bazel-public/bazel:latest
root@5a99103747c6:/#
Explore el contenido del contenedor.
root@5a99103747c6:/# clang --version clang version 8.0.0 (trunk 340178) Target: x86_64-unknown-linux-gnu Thread model: posix InstalledDir: /usr/local/bin
root@5a99103747c6:/# java -version openjdk version "1.8.0_181" OpenJDK Runtime Environment (build 1.8.0_181-8u181-b13-0ubuntu0.16.04.1-b13) OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
root@5a99103747c6:/# python -V Python 2.7.12
root@5a99103747c6:/# python3 -V Python 3.6.6
root@5a99103747c6:/# bazel version Extracting Bazel installation... Build label: 6.0.0 Build target: bazel-out/k8-opt/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar Build time: Mon Dec 19 15:52:35 2022 (1671465155) Build timestamp: 1671465155 Build timestamp as int: 1671465155