Nesta página, você verá detalhes sobre o conteúdo do contêiner do Bazel, como criar o projeto abseil-cpp usando o Bazel dentro do contêiner dele e como criar esse projeto diretamente na máquina host usando o contêiner do Bazel com montagem de diretório.
Crie um projeto do Abseil na sua máquina host com montagem de diretório.
Com as instruções desta seção, você pode criar usando o contêiner do Bazel com as origens verificadas no ambiente do host. Um contêiner é inicializado para cada comando de build que você executa. Os resultados da versão são armazenados em cache no seu ambiente de host para que possam ser reutilizados em todas as versões.
Clone o projeto em um diretório na máquina host.
git clone https://github.com/abseil/abseil-cpp.git /src/workspace
Crie uma pasta que terá os resultados armazenados em cache para compartilhar entre builds.
mkdir -p /tmp/build_output/
Use o contêiner do Bazel para criar o projeto e disponibilizar as saídas de compilação na pasta de saída da máquina host.
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/...
Crie o projeto com limpadores adicionando a flag de build --config=asan|tsan|msan
para selecionar AddressSanitizer (asan), ThreadSanitizer (tsan) ou
MemorySanitizer (msan).
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
Crie o projeto do Abseil de dentro do contêiner
As instruções nesta seção permitem criar usando o contêiner do Bazel com as origens dentro dele. Ao iniciar um contêiner no início do fluxo de trabalho de desenvolvimento e fazer alterações no espaço de trabalho dentro dele, os resultados da versão serão armazenados em cache.
Inicie um shell no contêiner do Bazel:
docker run --interactive --entrypoint=/bin/bash gcr.io/bazel-public/bazel:latest
Cada ID de contêiner é exclusivo. Nas instruções abaixo, o contêiner era 5a99103747c6.
Clone o projeto.
root@5a99103747c6:~# git clone https://github.com/abseil/abseil-cpp.git && cd abseil-cpp/
Faça um build regular.
root@5a99103747c6:~/abseil-cpp# bazel build //absl/...
Crie o projeto com limpadores adicionando a flag de build --config=asan|tsan|msan
para selecionar AddressSanitizer (asan), ThreadSanitizer (tsan) ou
MemorySanitizer (msan).
root@5a99103747c6:~/abseil-cpp# bazel build --config=--config={asan | tsan | msan} -- //absl/... -//absl/types:variant_test
conheça o contêiner do Bazel
Inicie um shell interativo no contêiner do Bazel, caso ainda não tenha feito isso.
docker run -it --entrypoint=/bin/bash gcr.io/bazel-public/bazel:latest
root@5a99103747c6:/#
Analise o conteúdo do contêiner.
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