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 --depth 1 --branch 20220623.1 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.
ubuntu@5a99103747c6:~$ git clone --depth 1 --branch 20220623.1 https://github.com/abseil/abseil-cpp.git && cd abseil-cpp/
Faça um build regular.
ubuntu@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).
ubuntu@5a99103747c6:~/abseil-cpp$ bazel build --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
ubuntu@5a99103747c6:~$
Analise o conteúdo do contêiner.
ubuntu@5a99103747c6:~$ gcc --version gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0 Copyright (C) 2019 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
ubuntu@5a99103747c6:~$ java -version openjdk version "1.8.0_362" OpenJDK Runtime Environment (build 1.8.0_362-8u372-ga~us1-0ubuntu1~20.04-b09) OpenJDK 64-Bit Server VM (build 25.362-b09, mixed mode)
ubuntu@5a99103747c6:~$ python -V Python 3.8.10
ubuntu@5a99103747c6:~$ bazel version WARNING: Invoking Bazel in batch mode since it is not invoked from within a workspace (below a directory having a WORKSPACE file). Extracting Bazel installation... Build label: 6.2.1 Build target: bazel-out/k8-opt/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar Build time: Fri Jun 2 16:59:58 2023 (1685725198) Build timestamp: 1685725198 Build timestamp as int: 1685725198