3737# especially important when the image is built from a cached layer.
3838RUN <<EOF
3939pkgs=()
40+ pkgs+=(bison) # Required build tool.
4041pkgs+=(ca-certificates) # Enable TLS verification for HTTPS connections by providing trusted root certificates.
4142pkgs+=(cmake) # Required build tool.
4243pkgs+=(curl) # Dependency for tools requiring downloading data.
44+ pkgs+=(flex) # Required build tool.
4345pkgs+=(git) # Required build tool.
4446pkgs+=(gpg) # Dependency for tools requiring signing or encrypting/decrypting.
4547pkgs+=(jq) # Pretty printing.
4648pkgs+=(libc6-dev) # Required build tool.
4749pkgs+=(ninja-build) # Required build tool.
4850pkgs+=(pipx) # Package manager for Python applications.
51+ pkgs+=(wget) # Required build tool.
4952apt update && apt install -y "${pkgs[@]}"
5053EOF
5154
@@ -68,24 +71,24 @@ FROM base AS gcc
6871COPY --from=gcc-src /usr/local/ /usr/local/
6972COPY --from=gcc-src /etc/ld.so.conf.d/*.conf /etc/ld.so.conf.d/
7073RUN <<EOF
71- set -ex
72- ldconfig -v
73- dpkg-divert --divert /usr/bin/gcc.orig --rename /usr/bin/gcc
74- dpkg-divert --divert /usr/bin/g++.orig --rename /usr/bin/g++
75- dpkg-divert --divert /usr/bin/gfortran.orig --rename /usr/bin/gfortran
76- update-alternatives --install /usr/bin/cc cc /usr/local/bin/gcc 999
77- update-alternatives --install \
78- /usr/bin/gcc gcc /usr/local/bin/gcc 100 \
79- --slave /usr/bin/g++ g++ /usr/local/bin/g++ \
80- --slave /usr/bin/gcc-ar gcc-ar /usr/local/bin/gcc-ar \
81- --slave /usr/bin/gcc-nm gcc-nm /usr/local/bin/gcc-nm \
82- --slave /usr/bin/gcc-ranlib gcc-ranlib /usr/local/bin/gcc-ranlib \
83- --slave /usr/bin/gcov gcov /usr/local/bin/gcov \
84- --slave /usr/bin/gcov-tool gcov-tool /usr/local/bin/gcov-tool \
85- --slave /usr/bin/gcov-dump gcov-dump /usr/local/bin/gcov-dump \
86- --slave /usr/bin/lto-dump lto-dump /usr/local/bin/lto-dump
87- update-alternatives --auto cc
88- update-alternatives --auto gcc
74+ set -ex
75+ ldconfig -v
76+ dpkg-divert --divert /usr/bin/gcc.orig --rename /usr/bin/gcc
77+ dpkg-divert --divert /usr/bin/g++.orig --rename /usr/bin/g++
78+ dpkg-divert --divert /usr/bin/gfortran.orig --rename /usr/bin/gfortran
79+ update-alternatives --install /usr/bin/cc cc /usr/local/bin/gcc 999
80+ update-alternatives --install \
81+ /usr/bin/gcc gcc /usr/local/bin/gcc 100 \
82+ --slave /usr/bin/g++ g++ /usr/local/bin/g++ \
83+ --slave /usr/bin/gcc-ar gcc-ar /usr/local/bin/gcc-ar \
84+ --slave /usr/bin/gcc-nm gcc-nm /usr/local/bin/gcc-nm \
85+ --slave /usr/bin/gcc-ranlib gcc-ranlib /usr/local/bin/gcc-ranlib \
86+ --slave /usr/bin/gcov gcov /usr/local/bin/gcov \
87+ --slave /usr/bin/gcov-tool gcov-tool /usr/local/bin/gcov-tool \
88+ --slave /usr/bin/gcov-dump gcov-dump /usr/local/bin/gcov-dump \
89+ --slave /usr/bin/lto-dump lto-dump /usr/local/bin/lto-dump
90+ update-alternatives --auto cc
91+ update-alternatives --auto gcc
8992EOF
9093
9194# Clean up unnecessary files to reduce image size.
@@ -110,13 +113,16 @@ FROM base AS clang
110113# base image.
111114ARG DEBIAN_VERSION
112115ARG CLANG_VERSION
113- RUN curl --no-progress-meter https://apt.llvm.org/llvm-snapshot.gpg.key | gpg --dearmor -o /etc/apt/keyrings/llvm.gpg && \
114- printf "%s\n %s\n " \
115- "deb [signed-by=/etc/apt/keyrings/llvm.gpg] https://apt.llvm.org/${DEBIAN_VERSION}/ llvm-toolchain-${DEBIAN_VERSION}-${CLANG_VERSION} main" \
116- "deb-src [signed-by=/etc/apt/keyrings/llvm.gpg] https://apt.llvm.org/${DEBIAN_VERSION}/ llvm-toolchain-${DEBIAN_VERSION}-${CLANG_VERSION} main" \
117- | tee /etc/apt/sources.list.d/llvm.list && \
118- apt update && \
119- apt install -t llvm-toolchain-${DEBIAN_VERSION}-${CLANG_VERSION} -y --no-install-recommends clang-${CLANG_VERSION} llvm-${CLANG_VERSION}
116+ RUN <<EOF
117+ set -ex
118+ curl --no-progress-meter https://apt.llvm.org/llvm-snapshot.gpg.key | gpg --dearmor -o /etc/apt/keyrings/llvm.gpg
119+ printf "%s\n %s\n " \
120+ "deb [signed-by=/etc/apt/keyrings/llvm.gpg] https://apt.llvm.org/${DEBIAN_VERSION}/ llvm-toolchain-${DEBIAN_VERSION}-${CLANG_VERSION} main" \
121+ "deb-src [signed-by=/etc/apt/keyrings/llvm.gpg] https://apt.llvm.org/${DEBIAN_VERSION}/ llvm-toolchain-${DEBIAN_VERSION}-${CLANG_VERSION} main" \
122+ | tee /etc/apt/sources.list.d/llvm.list
123+ apt update
124+ apt install -t llvm-toolchain-${DEBIAN_VERSION}-${CLANG_VERSION} -y --no-install-recommends clang-${CLANG_VERSION} llvm-${CLANG_VERSION}
125+ EOF
120126ENV CC=/usr/bin/clang-${CLANG_VERSION}
121127ENV CXX=/usr/bin/clang++-${CLANG_VERSION}
122128
@@ -133,6 +139,7 @@ RUN conan profile detect
133139RUN sed -i -e 's|^compiler\. cppstd=.*$|compiler.cppstd=20|' ~/.conan2/profiles/default
134140# To ensure compatibility with a range of Clang compilers, we must add extra
135141# flags that apply to certain versions of Clang.
142+ # TODO: Move this into the rippled repository as a custom Conan profile.
136143RUN <<EOF
137144if [[ $(clang-${CLANG_VERSION} --version | head -1 | grep -Po 'version \K [0-9]{2}' ) -ge 20 ]]; then
138145 cat >>~/.conan2/profiles/default <<EOT
0 commit comments