working stage2 and initial stage3

This commit is contained in:
Lance Vick 2024-01-22 11:44:49 -08:00
parent 016a9d4c5c
commit b6d50d7124
Signed by: lrvick
GPG Key ID: 8E47A1EC35A1551D
3 changed files with 129 additions and 18 deletions

View File

@ -2,7 +2,8 @@
bootstrap: \
out/stage0.tgz \
out/stage1.tgz \
out/stage2.tgz
out/stage2.tgz \
out/stage3.tgz
out/stage0.tgz:
$(call build,bootstrap,stage0)
@ -12,3 +13,6 @@ out/stage1.tgz: out/stage0.tgz
out/stage2.tgz: out/stage1.tgz
$(call build,bootstrap,stage2)
out/stage3.tgz: out/stage2.tgz
$(call build,bootstrap,stage3)

View File

@ -1,7 +1,7 @@
ARG REGISTRY=local
FROM ${REGISTRY}/live-bootstrap:latest as live-bootstrap
FROM ${REGISTRY}/stage1:latest as stage1
FROM live-bootstrap as base
FROM stage1 as base
ENV TARGET=x86_64-linux-musl
ENV GCC_VERSION 13.1.0
ENV GCC_FILE gcc-$GCC_VERSION.tar.xz
@ -24,6 +24,10 @@ ENV BINUTILS_VERSION 2.41
ENV BINUTILS_SITE https://ftp.gnu.org/gnu/binutils
ENV BINUTILS_FILE binutils-${BINUTILS_VERSION}.tar.xz
ENV BINUTILS_HASH ae9a5789e23459e59606e6714723f2d3ffc31c03174191ef0d015bdf06007450
ENV BINUTILS_DIR ${HOME}/build-binutils
ENV GCC_DIR ${HOME}/build-gcc
ENV MUSL_DIR ${HOME}/build-musl
ENV SYSROOT_DIR ${HOME}/build-sysroot
FROM base as fetch
WORKDIR ${HOME}
@ -53,10 +57,6 @@ RUN set -eux; \
./contrib/download_prerequisites
FROM extract as build
ENV BINUTILS_DIR ${HOME}/build-binutils
ENV GCC_DIR ${HOME}/build-gcc
ENV MUSL_DIR ${HOME}/build-musl
ENV SYSROOT_DIR ${HOME}/build-sysroot
# Phase 1: Build cross binutils in build-binutils
WORKDIR ${BINUTILS_DIR}
@ -122,10 +122,10 @@ RUN set -eux; \
WORKDIR ${MUSL_DIR}
RUN set -eux; \
../musl-${MUSL_VERSION}/configure \
CC="${GCC_DIR}/gcc/xgcc -B ${HOME}/build-gcc/gcc" \
CC="${GCC_DIR}/gcc/xgcc -B ${GCC_DIR}/gcc" \
LIBCC="${GCC_DIR}/${TARGET}/libgcc/libgcc.a" \
--prefix= \
--host=x86_64-linux-musl; \
--host=${TARGET}; \
make DESTDIR=${SYSROOT_DIR} install-headers
# Phase 5: Compile libgcc
@ -142,18 +142,31 @@ RUN set -eux; \
# Phase 6: Compile remaining gcc targets
WORKDIR ${GCC_DIR}
RUN make
FROM build as package
RUN make all
FROM build as install
WORKDIR ${HOME}
USER 0:0
COPY --from=stage1 . /rootfs/
RUN set -eux; \
env -C build-musl make DESTDIR=${SYSROOT_DIR} install; \
env -C build-gcc make DESTDIR=${SYSROOT_DIR} install; \
env -C build-binutils make DESTDIR=${SYSROOT_DIR} install; \
find ${SYSROOT_DIR} -exec touch -hcd "@0" "{}" +
rm /rootfs/lib; \
env -C build-musl make DESTDIR=/rootfs/${TARGET} install; \
env -C build-gcc make DESTDIR=/rootfs/ install; \
env -C build-binutils make DESTDIR=/rootfs/ install; \
ln -s /usr/lib/ld-musl-i386.so.1 /rootfs/lib/libc.so; \
ln -s /usr/lib/ld-musl-i386.so.1 /rootfs/lib/ld-musl-i386.so.1; \
ln -s /${TARGET}/lib/ld-musl-x86_64.so.1 /rootfs/lib/ld-musl-x86_64.so.1; \
find /rootfs -exec touch -hcd "@0" "{}" +
FROM live-bootstrap as package
COPY --from=install ${SYSROOT_DIR} /${TARGET}
FROM scratch as package
COPY --from=install /rootfs/ /
USER 1000:1000
ENTRYPOINT ["/bin/bash"]
ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV USER=user
ENV HOME=/home/user
ENV TZ=UTC
ENV LANG=C.UTF-8
ENV SOURCE_DATE_EPOCH=1
ENV KCONFIG_NOTIMESTAMP=1
ENV PS1="stage2 $ "

View File

@ -0,0 +1,94 @@
ARG REGISTRY=local
FROM ${REGISTRY}/stage2 as stage2
FROM stage2 as base
ENV TARGET=x86_64-linux-musl
ENV BUILD=i386-unknown-linux-musl
ENV MUSL_VERSION 1.2.4
ENV MUSL_SITE http://musl.libc.org/releases
ENV MUSL_FILE musl-${MUSL_VERSION}.tar.gz
ENV MUSL_HASH 7a35eae33d5372a7c0da1188de798726f68825513b7ae3ebe97aaaa52114f039
ENV MUSL_DIR=${HOME}/build-musl
ENV BASH_SITE=https://ftp.gnu.org/gnu/bash
ENV BASH_VERSION_=5.2.21
ENV BASH_HASH c8e31bdc59b69aaffc5b36509905ba3e5cbb12747091d27b4b977f078560d5b8
ENV BASH_FILE bash-${BASH_VERSION_}.tar.gz
ENV BASH_DIR=${HOME}/build-bash
ENV COREUTILS_SITE=https://ftp.gnu.org/gnu/coreutils
ENV COREUTILS_VERSION=9.4
ENV COREUTILS_HASH 5f600d9093973b0afe25393d9bc18c44f2232657f4ca0d95ea31c702eb66b739
ENV COREUTILS_FILE coreutils-${COREUTILS_VERSION}.tar.gz
ENV COREUTILS_DIR=${HOME}/build-coreutils
FROM base as fetch
WORKDIR /home/user
RUN set -eux; \
curl --insecure -OJ ${MUSL_SITE}/${MUSL_FILE}; \
echo "${MUSL_HASH} ${MUSL_FILE}" | sha256sum -c; \
curl --insecure -OJ ${BASH_SITE}/${BASH_FILE}; \
echo "${BASH_HASH} ${BASH_FILE}" | sha256sum -c; \
curl --insecure -OJ ${COREUTILS_SITE}/${COREUTILS_FILE}; \
echo "${COREUTILS_HASH} ${COREUTILS_FILE}" | sha256sum -c
FROM fetch as build
RUN set -eux; \
tar -xzf ${MUSL_FILE}; \
tar -xzf ${BASH_FILE}; \
tar -xzf ${COREUTILS_FILE}
WORKDIR ${MUSL_DIR}
RUN set -eux; \
../musl-${MUSL_VERSION}/configure \
--prefix= \
--build=${BUILD} \
--host=${TARGET}; \
make
WORKDIR ${BASH_DIR}
RUN set -eux; \
echo "${BASH_VERSION_}"; \
../bash-${BASH_VERSION_}/configure \
--build=${BUILD} \
--host=${TARGET} \
--prefix=/usr \
--bindir=/bin \
--mandir=/usr/share/man \
--infodir=/usr/share/info \
--disable-nls \
--enable-readline \
--without-curses \
--without-bash-malloc; \
make
WORKDIR ${COREUTILS_DIR}
RUN set -eux; \
echo "${COREUTILS_VERSION}"; \
../coreutils-${COREUTILS_VERSION}/configure \
--build=${BUILD} \
--host=${TARGET} \
--prefix=/usr \
--bindir=/bin \
--mandir=/usr/share/man \
--infodir=/usr/share/info \
--disable-nls \
--enable-single-binary=symlinks; \
make
FROM build as install
USER 0:0
RUN set -eux; \
env -C ${MUSL_DIR} make DESTDIR=/rootfs install; \
env -C ${BASH_DIR} make DESTDIR=/rootfs install; \
env -C ${COREUTILS_DIR} make DESTDIR=/rootfs install; \
find /rootfs -exec touch -hcd "@0" "{}" +
FROM scratch as package
COPY --from=install /rootfs /
USER 1000:1000
ENTRYPOINT ["/bin/bash"]
ENV PATH=/x86_64-linux-musl/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV USER=user
ENV HOME=/home/user
ENV TZ=UTC
ENV LANG=C.UTF-8
ENV SOURCE_DATE_EPOCH=1
ENV KCONFIG_NOTIMESTAMP=1
ENV PS1="stage3 $ "