stagex/packages/gcc/Containerfile
2024-08-26 23:51:27 -07:00

80 lines
2.3 KiB
Docker

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/. /