envoy 容器编译环境的制作方法
基础镜像
sudo docker pull openeuler/openeuler:24.03-lts
打造镜像
dnf install clang vim wget shadow-utils sudo util-linux findutils xz git libstdc++ libstdc++-static lld libcxx libcxx-devel patch libcxx-static libcxxabi-static clang-devel llvm-devel zlib-devel clang-tools-extra libffi-devel
wget -O /usr/local/bin/bazel https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-$([ $(uname -m) = "aarch64" ] && echo "arm64" || echo "amd64")
chmod +x /usr/local/bin/bazel
useradd -m builder
安装特定版本clang
tar zxvf clang+llvm-14.0.6-x86_64-linux-gnu-rhel-8.4.tar.xz
echo /home/builder/clang-14/lib > /etc/ld.so.conf.d/clang-14.conf
ldconfig
sudo mkdir -p /usr/lib/gcc/x86_64-linux-gnu
sudo ln -sf /usr/lib/gcc/x86_64-openEuler-linux/12 /usr/lib/gcc/x86_64-linux-gnu/12
sudo ldconfig
sudo ln -sf /usr/include/c++/12/x86_64-openEuler-linux /usr/include/c++/12/x86_64-linux-gnu
doceker命令
tong@T17 ~/S/e/s/builder (release/v1.32)> cat create.sh
sudo docker rm envoy_builder_builder
sudo docker create --name envoy_builder_builder \
-v /home/tong/Source/envoy-openssl/salb/builder/loop.sh:/usr/sbin/loop.sh \
-v /home/tong/Source/envoy-openssl/salb/builder/internal_build.sh:/home/builder/internal_build.sh \
-v /home/tong/Source/envoy-openssl:/home/builder/envoy-openssl \
-v /home/tong/Source/envoy-openssl/salb/builder/build_root:/home/builder/build_root \
-v /usr/local/openssl-3.0.16:/usr/local/openssl-3.0.16 \
-v /usr/local/openssl-3.0.8:/usr/local/openssl-3.0.8 \
envoy_builder_euler2403:1 \
/usr/bin/bash /usr/sbin/loop.sh
tong@T17 ~/S/e/s/builder (release/v1.32)> cat run.sh
sudo docker run --rm -it --name envoy_builder_rt \
--user builder:builder \
-v /home/tong/Source/envoy-openssl/salb/builder/internal_build.sh:/home/builder/internal_build.sh \
-v /home/tong/Source/envoy-openssl:/home/builder/envoy-openssl \
-v /home/tong/Source/envoy-openssl/salb/builder/build_root:/home/builder/build_root \
envoy_builder_euler2403:1 \
/usr/bin/bash /home/builder/internal_build.sh
运行
bazel --output_base=/home/builder/build_root/base/ build --repository_cache=/home/builder/repository_cache/ envoy
编译配置
指定 cmake 使用特定版本的clang
[builder@2bae772b644d ~]$ cat envoy-openssl/bssl-compat/CMakeLists.txt |grep clang
set(CMAKE_C_COMPILER "/home/builder/clang-14/bin/clang" CACHE STRING "C compiler" FORCE)
set(CMAKE_CXX_COMPILER "/home/builder/clang-14/bin/clang++" CACHE STRING "C++ compiler" FORCE)
指定 bazel 使用特定版本的clang
[builder@2bae772b644d ~]$ cat envoy-openssl/.bazelrc |grep clang-14
#build:clang --action_env=CC=/home/builder/clang-14/bin/clang --host_action_env=CC=/home/builder/clang-14/bin/clang
#build:clang --action_env=CXX=/home/builder/clang-14/bin/clang++ --host_action_env=CC=/home/builder/clang-14/bin/clang++
bazel对编译器与c++标准库的选择
Different config flags specify the compiler libraries:
--config=libc++means usingclang+libc++--config=clangmeans usingclang+libstdc++- no config flag means using
gcc+libstdc++
浙公网安备 33010602011771号