From b054a8424dbc78628a1b44e9092cfe4690973a7e Mon Sep 17 00:00:00 2001 From: Ayaz Salikhov Date: Mon, 23 Jun 2025 12:07:44 +0100 Subject: [PATCH] refactor: Refactor GCC image to make upgrades easier (#2246) Work on: https://github.com/XRPLF/clio/issues/2047 --- docker/compilers/gcc/Dockerfile | 82 ++++++++++++++++++++++----------- docker/compilers/gcc/README.md | 4 +- docker/compilers/gcc/control.m4 | 3 +- 3 files changed, 59 insertions(+), 30 deletions(-) diff --git a/docker/compilers/gcc/Dockerfile b/docker/compilers/gcc/Dockerfile index f18901cd..548dd606 100644 --- a/docker/compilers/gcc/Dockerfile +++ b/docker/compilers/gcc/Dockerfile @@ -1,10 +1,19 @@ -FROM ubuntu:20.04 AS build +ARG UBUNTU_VERSION=20.04 + +ARG GCC_MAJOR_VERSION=12 + +FROM ubuntu:$UBUNTU_VERSION AS build + +ARG UBUNTU_VERSION + +ARG GCC_MAJOR_VERSION +ARG GCC_MINOR_VERSION=3 +ARG GCC_PATCH_VERSION=0 +ARG GCC_VERSION=${GCC_MAJOR_VERSION}.${GCC_MINOR_VERSION}.${GCC_PATCH_VERSION} +ARG BUILD_VERSION=5 ARG DEBIAN_FRONTEND=noninteractive ARG TARGETARCH -ARG UBUNTU_VERSION=20.04 -ARG GCC_VERSION=12.3.0 -ARG BUILD_VERSION=4 RUN apt-get update \ && apt-get install -y --no-install-recommends --no-install-suggests \ @@ -18,18 +27,21 @@ RUN apt-get update \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* +WORKDIR / RUN wget --progress=dot:giga https://gcc.gnu.org/pub/gcc/releases/gcc-$GCC_VERSION/gcc-$GCC_VERSION.tar.gz \ - && tar xf gcc-$GCC_VERSION.tar.gz \ - && cd /gcc-$GCC_VERSION && ./contrib/download_prerequisites + && tar xf gcc-$GCC_VERSION.tar.gz -RUN mkdir /${TARGETARCH}-gcc-12 -WORKDIR /${TARGETARCH}-gcc-12 +WORKDIR /gcc-$GCC_VERSION +RUN ./contrib/download_prerequisites + +RUN mkdir /gcc-build +WORKDIR /gcc-build RUN /gcc-$GCC_VERSION/configure \ --with-pkgversion="clio-build-$BUILD_VERSION https://github.com/XRPLF/clio" \ --enable-languages=c,c++ \ --prefix=/usr \ --with-gcc-major-version-only \ - --program-suffix=-12 \ + --program-suffix=-${GCC_MAJOR_VERSION} \ --enable-shared \ --enable-linker-build-id \ --libexecdir=/usr/lib \ @@ -53,38 +65,54 @@ RUN /gcc-$GCC_VERSION/configure \ --enable-cet \ --disable-multilib \ --without-cuda-driver \ - --enable-checking=release \ - && make -j "$(nproc)" \ - && make install-strip DESTDIR=/gcc-$GCC_VERSION-$BUILD_VERSION-ubuntu-$UBUNTU_VERSION \ + --enable-checking=release + +RUN make -j "$(nproc)" + +RUN make install-strip DESTDIR=/gcc-$GCC_VERSION-$BUILD_VERSION-ubuntu-$UBUNTU_VERSION \ && mkdir -p /gcc-$GCC_VERSION-$BUILD_VERSION-ubuntu-$UBUNTU_VERSION/usr/share/gdb/auto-load/usr/lib64 \ - && mv /gcc-$GCC_VERSION-$BUILD_VERSION-ubuntu-$UBUNTU_VERSION/usr/lib64/libstdc++.so.6.0.30-gdb.py /gcc-$GCC_VERSION-$BUILD_VERSION-ubuntu-$UBUNTU_VERSION/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.30-gdb.py + && mv \ + /gcc-$GCC_VERSION-$BUILD_VERSION-ubuntu-$UBUNTU_VERSION/usr/lib64/libstdc++.so.6.0.30-gdb.py \ + /gcc-$GCC_VERSION-$BUILD_VERSION-ubuntu-$UBUNTU_VERSION/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.30-gdb.py # Generate deb WORKDIR / COPY control.m4 / -COPY ld.so.conf /gcc-$GCC_VERSION-$BUILD_VERSION-ubuntu-$UBUNTU_VERSION/etc/ld.so.conf.d/1-gcc-12.conf +COPY ld.so.conf /gcc-$GCC_VERSION-$BUILD_VERSION-ubuntu-$UBUNTU_VERSION/etc/ld.so.conf.d/1-gcc-${GCC_MAJOR_VERSION}.conf RUN mkdir /gcc-$GCC_VERSION-$BUILD_VERSION-ubuntu-$UBUNTU_VERSION/DEBIAN \ - && m4 -P -DUBUNTU_VERSION=$UBUNTU_VERSION -DVERSION=$GCC_VERSION-$BUILD_VERSION -DTARGETARCH=$TARGETARCH control.m4 > /gcc-$GCC_VERSION-$BUILD_VERSION-ubuntu-$UBUNTU_VERSION/DEBIAN/control \ - && dpkg-deb --build --root-owner-group /gcc-$GCC_VERSION-$BUILD_VERSION-ubuntu-$UBUNTU_VERSION /gcc12.deb + && m4 \ + -P \ + -DUBUNTU_VERSION=$UBUNTU_VERSION \ + -DVERSION=$GCC_VERSION-$BUILD_VERSION \ + -DTARGETARCH=$TARGETARCH \ + control.m4 > /gcc-$GCC_VERSION-$BUILD_VERSION-ubuntu-$UBUNTU_VERSION/DEBIAN/control \ + && dpkg-deb \ + --build \ + --root-owner-group \ + /gcc-$GCC_VERSION-$BUILD_VERSION-ubuntu-$UBUNTU_VERSION \ + /gcc${GCC_MAJOR_VERSION}.deb # Create final image -FROM ubuntu:20.04 -COPY --from=build /gcc12.deb / +FROM ubuntu:$UBUNTU_VERSION -# Make gcc-12 available but also leave gcc12.deb for others to copy if needed +ARG GCC_MAJOR_VERSION + +COPY --from=build /gcc${GCC_MAJOR_VERSION}.deb / + +# Install gcc-${GCC_MAJOR_VERSION}, but also leave gcc${GCC_MAJOR_VERSION}.deb for others to copy if needed RUN apt-get update \ && apt-get install -y --no-install-recommends --no-install-suggests \ binutils \ libc6-dev \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* \ - && dpkg -i /gcc12.deb + && dpkg -i /gcc${GCC_MAJOR_VERSION}.deb -RUN update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 100 \ - && update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++-12 100 \ - && update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 100 \ - && update-alternatives --install /usr/bin/cc cc /usr/bin/gcc-12 100 \ - && update-alternatives --install /usr/bin/gcov gcov /usr/bin/gcov-12 100 \ - && update-alternatives --install /usr/bin/gcov-dump gcov-dump /usr/bin/gcov-dump-12 100 \ - && update-alternatives --install /usr/bin/gcov-tool gcov-tool /usr/bin/gcov-tool-12 100 +RUN update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-${GCC_MAJOR_VERSION} 100 \ + && update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++-${GCC_MAJOR_VERSION} 100 \ + && update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${GCC_MAJOR_VERSION} 100 \ + && update-alternatives --install /usr/bin/cc cc /usr/bin/gcc-${GCC_MAJOR_VERSION} 100 \ + && update-alternatives --install /usr/bin/gcov gcov /usr/bin/gcov-${GCC_MAJOR_VERSION} 100 \ + && update-alternatives --install /usr/bin/gcov-dump gcov-dump /usr/bin/gcov-dump-${GCC_MAJOR_VERSION} 100 \ + && update-alternatives --install /usr/bin/gcov-tool gcov-tool /usr/bin/gcov-tool-${GCC_MAJOR_VERSION} 100 diff --git a/docker/compilers/gcc/README.md b/docker/compilers/gcc/README.md index 44261c93..5cc3a9cb 100644 --- a/docker/compilers/gcc/README.md +++ b/docker/compilers/gcc/README.md @@ -1,3 +1,3 @@ -# gcc compiler +# GCC compiler -This image contains gcc compiler to build . +This image contains GCC compiler to build . diff --git a/docker/compilers/gcc/control.m4 b/docker/compilers/gcc/control.m4 index 878ea935..050fec61 100644 --- a/docker/compilers/gcc/control.m4 +++ b/docker/compilers/gcc/control.m4 @@ -2,5 +2,6 @@ Package: gcc-12-ubuntu-UBUNTUVERSION Version: VERSION Architecture: TARGETARCH Maintainer: Alex Kremer -Description: Gcc VERSION build for ubuntu UBUNTUVERSION +Uploaders: Ayaz Salikhov +Description: GCC VERSION build for ubuntu UBUNTUVERSION Depends: binutils, libc6-dev