packages/

gcc

Details
Source
FROM scratch AS base
ENV VERSION=13.1.0
ENV SRC_FILE=gcc-$VERSION.tar.xz
ENV SRC_SITE=https://mirrors.kernel.org/gnu/gcc/gcc-${VERSION}/${SRC_FILE}
ENV SRC_HASH=61d684f0aa5e76ac6585ad8898a2427aade8979ed5e7f85492286c4dfc13ee86
ENV DEP_SITE=https://gcc.gnu.org/pub/gcc/infrastructure/
ENV GMP_FILE=gmp-6.2.1.tar.bz2
ENV GMP_HASH=eae9326beb4158c386e39a356818031bd28f3124cf915f8c5b1dc4c7a36b4d7c
ENV MPFR_FILE=mpfr-4.1.0.tar.bz2
ENV MPFR_HASH=feced2d430dd5a97805fa289fed3fc8ff2b094c02d05287fd6133e7f1f0ec926
ENV MPC_FILE=mpc-1.2.1.tar.gz
ENV MPC_HASH=17503d2c395dfcf106b622dc142683c1199431d095367c6aacba6eec30340459
ENV ISL_FILE=isl-0.24.tar.bz2
ENV ISL_HASH=fcf78dd9656c10eb8cf9fbd5f59a0b6b01386205fe1934b3b287a0a1898145c0

FROM base AS fetch
ADD --checksum=sha256:${SRC_HASH} ${SRC_SITE} .
ADD --checksum=sha256:${GMP_HASH} ${DEP_SITE}/${GMP_FILE} .
ADD --checksum=sha256:${MPFR_HASH} ${DEP_SITE}/${MPFR_FILE} .
ADD --checksum=sha256:${MPC_HASH} ${DEP_SITE}/${MPC_FILE} .
ADD --checksum=sha256:${ISL_HASH} ${DEP_SITE}/${ISL_FILE} .

FROM fetch AS build
COPY --from=stagex/stage3 . /
RUN tar -xf ${SRC_FILE}
WORKDIR /gcc-${VERSION}
RUN --network=none <<-EOF
	set -eux
	mv ../*.tar.* .
	./contrib/download_prerequisites
	./configure \
		--target=x86_64-linux-musl \
		--build=x86_64-linux-musl \
		--host=x86_64-linux-musl \
		--prefix=/usr \
		--mandir=/usr/share/man \
		--infodir=/usr/share/info \
		--libdir=/usr/lib \
		--disable-cet \
		--disable-fixed-point \
		--disable-libstdcxx-pch \
		--disable-multilib \
		--disable-libsanitizer \
		--disable-nls \
		--disable-werror \
		--enable-__cxa_atexit \
		--enable-default-pie \
		--enable-default-ssp \
		--enable-languages=c,c++ \
		--enable-link-serialization=2 \
		--enable-linker-build-id
	make -j "$(nproc)"
EOF

FROM build AS install
RUN --network=none <<-EOF
	set -eux
	make DESTDIR=/rootfs install-strip
	ln -s gcc /rootfs/usr/bin/cc
	mv /rootfs/usr/lib64/* /rootfs/usr/lib/
	rm -rf /rootfs/usr/lib64
EOF

FROM scratch AS test
COPY --from=stagex/busybox . /
COPY --from=stagex/binutils . /
COPY --from=stagex/musl . /
COPY --from=install /rootfs/. /
COPY <<-EOF test.c
#include <stdio.h>
int main() { printf("Success\n"); return 0; }
EOF
RUN <<-EOF
	set -eux
	gcc test.c -static -o main
	./main | grep "Success"
EOF

FROM stagex/filesystem AS package
COPY --from=install /rootfs/. /