FROM gitea.okami101.io/okami101/stagex/core-binutils:latest AS core-binutils FROM gitea.okami101.io/okami101/stagex/core-gcc:latest AS core-gcc FROM gitea.okami101.io/okami101/stagex/core-make:latest AS core-make FROM gitea.okami101.io/okami101/stagex/core-musl:latest AS core-musl FROM gitea.okami101.io/okami101/stagex/core-busybox:latest AS core-busybox FROM gitea.okami101.io/okami101/stagex/core-diffutils:latest AS core-diffutils FROM gitea.okami101.io/okami101/stagex/core-go:latest AS core-go FROM scratch AS bootstrap-c-toolchain ENV CFLAGS="-g0 -Os" ENV CXXFLAGS="-g0 -Os" ENV LDFLAGS="-s" COPY --from=core-binutils / / COPY --from=core-gcc / / COPY --from=core-make / / COPY --from=core-musl / / COPY --from=core-busybox / / FROM bootstrap-c-toolchain AS build-make ARG VERSION=4.4.1 WORKDIR /source ADD https://ftp.gnu.org/gnu/make/make-${VERSION}.tar.gz 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 ADD https://ftp.gnu.org/gnu/binutils/binutils-${VERSION}.tar.xz 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 ADD https://ftp.gnu.org/gnu/gcc/gcc-${GCC_VERSION}/gcc-${GCC_VERSION}.tar.xz gcc.tar.xz ADD https://ftp.gnu.org/gnu/mpfr/mpfr-${MPFR_VERSION}.tar.xz mpfr.tar.xz ADD https://ftp.gnu.org/gnu/gmp/gmp-${GMP_VERSION}.tar.xz gmp.tar.xz ADD https://ftp.gnu.org/gnu/mpc/mpc-${MPC_VERSION}.tar.gz 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 ADD https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-${VERSION}.tar.xz 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=core-diffutils / / ENV CFLAGS="" ENV CXXFLAGS="" ENV LDFLAGS="" ARG VERSION=1.2.5 WORKDIR /source ADD https://www.musl-libc.org/releases/musl-${VERSION}.tar.gz 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 core-busybox AS build-go COPY --from=core-go / / ARG VERSION=1.24.2 ENV GOROOT_FINAL=/rootfs/go USER root WORKDIR /source ADD https://dl.google.com/go/go${VERSION}.src.tar.gz go.src.tar.gz RUN tar -xzf go.src.tar.gz --strip-components=1 && \ rm go.src.tar.gz RUN cd src && sh make.bash RUN rm -rf pkg/obj && \ rm -rf pkg/bootstrap && \ rm -f pkg/tool/*/api && \ find src \( -type f -a -name "*_test.go" \) -exec rm -rf \{\} \+ && \ find src \( -type d -a -name "testdata" \) -exec rm -rf \{\} \+ && \ find src -type f -a \( -name "*.bash" -o -name "*.rc" -o -name "*.bat" \) -exec rm -rf \{\} \+ && \ mkdir -p "${GOROOT_FINAL}" && \ mv * "${GOROOT_FINAL}" && \ mkdir -p /rootfs/usr/bin && \ ln -s /go/bin/go /rootfs/usr/bin/go && \ ln -s /go/bin/gofmt /rootfs/usr/bin/gofmt FROM scratch AS final COPY --from=core-busybox / / COPY --from=build-binutils /rootfs/ / COPY --from=build-gcc /rootfs/ / COPY --from=build-linux-headers /rootfs/ / COPY --from=build-musl /rootfs/ / COPY --from=build-make /rootfs/ / COPY --from=build-go /rootfs/ / RUN mkdir -p /usr/bin /usr/lib && \ [ -L /bin ] && [ -d /bin ] && \ [ -L /lib ] && [ -d /lib ] && \ [ -L /lib64 ] && [ -d /lib64 ] && \ [ -L /usr/lib64 ] && [ -d /usr/lib64 ] && \ [ ! -e /sbin ] || [ -z "$(ls -A /sbin 2>/dev/null)" ] && \ [ ! -e /usr/sbin ] || [ -z "$(ls -A /usr/sbin 2>/dev/null)" ] && \ rm -rf /sbin && \ rm -rf /usr/sbin && \ ln -sT usr/bin /sbin && \ ln -sT bin /usr/sbin FROM scratch AS toolchain-musl COPY --from=build-musl /rootfs / FROM scratch AS toolchain COPY --from=final / /