221 lines
6.4 KiB
Docker
221 lines
6.4 KiB
Docker
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
|
|
|
|
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=core-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 core-busybox AS build-go
|
|
COPY --from=core-go / /
|
|
ARG VERSION=1.24.2
|
|
ENV GOROOT_FINAL=/rootfs/go
|
|
USER root
|
|
|
|
WORKDIR /source
|
|
|
|
RUN wget https://dl.google.com/go/go${VERSION}.src.tar.gz -O 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 / /
|