gcc
Source
FROM scratch AS build
ARG VERSION
ARG APORTS_VERSION
ARG TARGETARCH
COPY --from=stagex/core-busybox . /
COPY --from=stagex/core-musl . /
COPY --from=stagex/core-llvm . /
COPY --from=stagex/core-make . /
COPY --from=stagex/core-binutils . /
COPY --from=stagex/core-libucontext . /
COPY --from=stagex/core-libzstd . /
COPY --from=stagex/core-flex . /
COPY --from=stagex/core-bison . /
COPY --from=stagex/core-perl . /
COPY --from=stagex/core-texinfo . /
COPY --from=stagex/core-gawk . /
COPY --from=stagex/core-zlib . /
COPY --from=stagex/core-gmp . /
COPY --from=stagex/core-isl . /
COPY --from=stagex/core-mpc . /
COPY --from=stagex/core-mpfr . /
COPY --from=stagex/core-libatomic_ops /usr/lib/libatomic_ops.so /usr/lib/libatomic.so
ADD fetch/gcc-${VERSION}.tar.xz .
ADD fetch/aports-${APORTS_VERSION}.tar.gz .
WORKDIR /gcc-${VERSION}
RUN --network=none <<-EOF
set -eux
[[ "$TARGETARCH" == "amd64" ]] \
&& ARCH="x86_64"
[[ "$TARGETARCH" == "arm64" ]] \
&& ARCH="aarch64"
TARGET=$ARCH-unknown-linux-musl
LDFLAGS="-L/usr/lib/clang/20/lib/$ARCH-unknown-linux-musl"
LDFLAGS_FOR_TARGET="-L/usr/lib/clang/20/lib/$ARCH-unknown-linux-musl"
cp /aports-${APORTS_VERSION}/main/gcc//*.patch .
patch -p1 < 0001-posix_memalign.patch
patch -p1 < 0002-gcc-poison-system-directories.patch
patch -p1 < 0003-specs-turn-on-Wl-z-now-by-default.patch
patch -p1 < 0004-Turn-on-D_FORTIFY_SOURCE-2-by-default-for-C-C-ObjC-O.patch
patch -p1 < 0005-On-linux-targets-pass-as-needed-by-default-to-the-li.patch
patch -p1 < 0006-Enable-Wformat-and-Wformat-security-by-default.patch
patch -p1 < 0007-Enable-Wtrampolines-by-default.patch
patch -p1 < 0008-gcc-disable-SSP-on-ffreestanding-nostdlib-and-nodefa.patch
patch -p1 < 0009-gcc-params-set-default-ssp-buffer-size-to-4.patch
patch -p1 < 0010-Ensure-that-msgfmt-doesn-t-encounter-problems-during.patch
patch -p1 < 0011-Don-t-declare-asprintf-if-defined-as-a-macro.patch
patch -p1 < 0013-libgcc_s.patch
patch -p1 < 0014-nopie.patch
patch -p1 < 0016-build-fix-CXXFLAGS_FOR_BUILD-passing.patch
patch -p1 < 0017-add-fortify-headers-paths.patch
patch -p1 < 0019-DP-Use-push-state-pop-state-for-gold-as-well-when-li.patch
patch -p1 < 0023-x86_64-disable-multilib-support.patch
patch -p1 < 0025-always-build-libgcc_eh.a.patch
patch -p1 < 0029-configure-Add-enable-autolink-libatomic-use-in-LINK_.patch
patch -p1 < 0030-configure-fix-detection-of-atomic-builtins-in-libato.patch
patch -p1 < 0031-libstdc-do-not-throw-exceptions-for-non-C-locales-on.patch
patch -p1 < 0032-gdc-unconditionally-link-libgphobos-against-libucont.patch
patch -p1 < 0033-druntime-link-against-libucontext-on-all-platforms.patch
patch -p1 < 0035-libphobos-do-not-use-LFS64-symbols.patch
patch -p1 < 0037-loongarch-disable-multilib-support.patch
patch -p1 < 0038-static-PIE-ensure-static-reaches-the-linker.patch
patch -p1 < 0039-except-Don-t-use-the-cached-value-of-the-gcc_except_.patch
export TARGET=`echo ${TARGETARCH} | sed 's/amd64/x86_64/' | sed 's/arm64/aarch64/'`-linux-musl
export LDFLAGS="-L/usr/lib/clang/20/lib/${TARGET}"
./configure \
--target=${TARGET} \
--build=${TARGET} \
--host=${TARGET} \
--prefix=/usr \
--mandir=/usr/share/man \
--infodir=/usr/share/info \
--libdir=/usr/lib \
--disable-cet \
--disable-fixed-point \
--disable-nls \
--disable-libsanitizer \
--disable-libssp \
--disable-libstdcxx-pch \
--disable-libquadmath \
--disable-libquadmath-support \
--disable-multilib \
--disable-symvers \
--disable-target-libiberty \
--disable-vtable-verify \
--disable-werror \
--enable-checking=release \
--enable-autolink-libatomic \
--enable-__cxa_atexit \
--enable-default-pie \
--enable-default-ssp \
--enable-languages=c,c++ \
--enable-linker-build-id \
--enable-link-serialization=2 \
--enable-threads \
--enable-shared \
--enable-tls \
--with-gmp \
--with-gnu-as \
--with-gnu-ld \
--with-isl \
--with-mpc \
--with-mpfr \
--with-system-zlib \
--with-system-zstd \
--with-linker-hash-style=gnu \
--with-gxx-include-dir=/usr/include/c++/15.2.0 \
--with-gxx-libcxx-include-dir=/usr/include/c++/v1 \
libat_cv_have_ifunc=no
make -j "$(nproc)"
EOF
RUN make -j "$(nproc)" all-target-libgcc
RUN make DESTDIR=/rootfs install-strip install-target-libgcc
RUN [ ! -d /rootfs/usr/lib64 ] || ( mv /rootfs/usr/lib64/* /rootfs/usr/lib/ && rm -rf /rootfs/usr/lib64 )
FROM stagex/core-filesystem AS package
COPY --from=build /rootfs/ /Copied to clipboard!