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 using clang + libc++
  • --config=clang means using clang + libstdc++
  • no config flag means using gcc + libstdc++

 

posted on 2025-06-06 20:17  toong  阅读(2)  评论(0)    收藏  举报