toolchain/Dockerfile
Adrien Beaudouin 3ff722bf9f
All checks were successful
/ build (push) Successful in 24s
init
2025-06-06 23:04:56 +02:00

170 lines
4.8 KiB
Docker

FROM gitea.okami101.io/okami101/stagex/core-binutils:latest AS binutils
FROM gitea.okami101.io/okami101/stagex/core-gcc:latest AS gcc
FROM gitea.okami101.io/okami101/stagex/core-make:latest AS make
FROM gitea.okami101.io/okami101/stagex/core-musl:latest AS musl
FROM gitea.okami101.io/okami101/stagex/core-busybox:latest AS busybox
FROM gitea.okami101.io/okami101/stagex/core-diffutils:latest AS diffutils
FROM scratch AS bootstrap-c-toolchain
COPY --from=binutils / /
COPY --from=gcc / /
COPY --from=make / /
COPY --from=musl / /
COPY --from=busybox / /
FROM bootstrap-c-toolchain AS build-make
ARG VERSION=4.4.1
WORKDIR /source
RUN wget https://ftp.gnu.org/gnu/make/make-${VERSION}.tar.gz -O make.tar.gz
RUN tar -xzf make.tar.gz --strip-components=1 && \
mkdir build && \
cd build && \
../configure --prefix=/usr --without-guile
RUN cd build && \
make -j$(nproc)
RUN cd build && \
make DESTDIR=/rootfs install
FROM bootstrap-c-toolchain AS build-binutils
ARG VERSION=2.44
WORKDIR /source
RUN wget https://ftp.gnu.org/gnu/binutils/binutils-${VERSION}.tar.xz -O binutils.tar.xz
RUN tar -xJf binutils.tar.xz --strip-components=1 && \
./configure \
--build=${BUILD} \
--host=${HOST} \
--prefix=/usr \
--disable-nls \
--disable-gdb \
--disable-gprofng \
--disable-werror \
--enable-deterministic-archives \
--enable-targets=aarch64-linux-musl,aarch64_be-linux-musl,i686-linux-musl,x86_64-linux-musl,x86_64-linux-muslx32,x86_64-pep
RUN make -j $(nproc)
RUN make DESTDIR=/rootfs install && \
rm -r /rootfs/usr/share/man
FROM bootstrap-c-toolchain AS build-gcc
ARG GCC_VERSION=14.2.0
ARG MPFR_VERSION=4.2.2
ARG GMP_VERSION=6.2.1
ARG MPC_VERSION=1.3.1
WORKDIR /source
RUN wget https://ftp.gnu.org/gnu/gcc/gcc-${GCC_VERSION}/gcc-${GCC_VERSION}.tar.xz -O gcc.tar.xz
RUN wget https://ftp.gnu.org/gnu/mpfr/mpfr-${MPFR_VERSION}.tar.xz -O mpfr.tar.xz
RUN wget https://ftp.gnu.org/gnu/gmp/gmp-${GMP_VERSION}.tar.xz -O gmp.tar.xz
RUN wget https://ftp.gnu.org/gnu/mpc/mpc-${MPC_VERSION}.tar.gz -O mpc.tar.gz
RUN mkdir mpfr && \
tar -xJf mpfr.tar.xz --strip-components=1 -C mpfr && \
mkdir gmp && \
tar -xJf gmp.tar.xz --strip-components=1 -C gmp && \
mkdir mpc && \
tar -xzf mpc.tar.gz --strip-components=1 -C mpc && \
tar -xJf gcc.tar.xz --strip-components=1 && \
mkdir build && \
cd build && \
cat ../gcc/limitx.h ../gcc/glimits.h ../gcc/limity.h > `dirname $(gcc -print-libgcc-file-name)`/include-fixed/limits.h && \
../configure \
--build=${BUILD} \
--host=${HOST} \
--prefix=/usr \
--libdir=/usr/lib \
--disable-multilib \
--disable-nls \
--enable-shared \
--enable-plugin \
--enable-languages=c,c++ \
--enable-__cxa_atexit \
--enable-c99 \
--enable-long-long \
--enable-threads=posix \
--enable-clocale=generic \
--enable-libstdcxx-time \
--enable-checking=release \
--enable-fully-dynamic-string \
--enable-default-pie \
--disable-symvers \
--disable-gnu-indirect-function \
--disable-libmudflap \
--disable-libsanitizer \
--disable-libmpx \
--disable-lto-plugin \
--disable-libssp \
--disable-bootstrap
RUN cd build && \
make -j $(nproc)
RUN cd build && \
make DESTDIR=/rootfs install-strip && \
ln -sv gcc /rootfs/usr/bin/cc && \
mv /rootfs/usr/lib64/* /rootfs/usr/lib/ && \
rm -rf /rootfs/usr/lib64
FROM bootstrap-c-toolchain AS build-linux-headers
ARG VERSION=6.12.21
WORKDIR /source
RUN wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-${VERSION}.tar.xz -O linux.tar.xz
RUN tar -xJf linux.tar.xz --strip-components=1
RUN make -j $(nproc) headers ARCH=x86_64 && \
find usr/include -name '.*' -delete && \
rm usr/include/Makefile
RUN mkdir -p /rootfs/usr/include && \
cp -rv usr/include/* /rootfs/usr/include
FROM bootstrap-c-toolchain AS build-musl
COPY --from=diffutils / /
ENV CFLAGS=""
ENV CXXFLAGS=""
ENV LDFLAGS=""
ARG VERSION=1.2.5
WORKDIR /source
RUN wget https://www.musl-libc.org/releases/musl-${VERSION}.tar.gz -O musl.tar.gz
RUN tar -xzf musl.tar.gz --strip-components=1 && \
mkdir build && \
cd build && \
../configure --prefix=/usr
RUN cd build && \
make -j $(nproc)
RUN cd build && \
make DESTDIR=/rootfs install && \
ARCH=$(uname -m) && \
mkdir -p /rootfs/usr/bin /rootfs/usr/lib && \
rm -rf /rootfs/lib && \
ln -sf /usr/lib/ld-musl-${ARCH}.so.1 /rootfs/usr/bin/ldd && \
mv -f /rootfs/usr/lib/libc.so /rootfs/usr/lib/ld-musl-${ARCH}.so.1 && \
ln -sf ld-musl-${ARCH}.so.1 /rootfs/usr/lib/libc.musl-${ARCH}.so.1 && \
ln -sf /usr/lib/ld-musl-${ARCH}.so.1 /rootfs/usr/lib/libc.so
FROM busybox AS final
COPY --from=build-make /rootfs/ /
COPY --from=build-binutils /rootfs/ /
COPY --from=build-gcc /rootfs/ /
COPY --from=build-linux-headers /rootfs/ /
COPY --from=build-musl /rootfs/ /