Blob: Containerfile
Raw · Blame
FROM alpine@sha256:28bd5fe8b56d1bd048e5babf5b10710ebe0bae67db86916198a6eec434943f8b AS toolchain
RUN apk add --no-cache \
bc=1.08.2-r1 \
build-base=0.5-r4 \
clang22=22.1.3-r2 \
cpio=2.15-r0 \
curl=8.21.0-r0 \
diffutils=3.12-r0 \
elfutils-dev=0.195-r0 \
file=5.47-r2 \
findutils=4.10.0-r1 \
gawk=5.3.2-r2 \
lld22=22.1.3-r0 \
linux-headers=7.0.0-r1 \
llvm=22-r0 \
patch=2.8-r0 \
perl=5.42.2-r0 \
python3=3.14.5-r0 \
rustup=1.29.0-r0 \
rsync=3.4.3-r1 \
openssl-dev=3.5.7-r0 \
xz=5.8.3-r0
RUN apk add --no-cache flex=2.6.4-r8
ENV RUSTUP_HOME=/opt/rustup
ENV CARGO_HOME=/opt/cargo
ENV PATH=/opt/cargo/bin:/usr/lib/llvm22/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
RUN rustup-init -y \
--profile minimal \
--default-toolchain 1.94.0 \
--target x86_64-unknown-linux-musl \
&& chmod -R a+rX /opt/rustup /opt/cargo
WORKDIR /work/mouse-src
COPY mouse-src/sources.lock mouse-src/scripts/fetch-sources.sh /work/mouse-src/
RUN mkdir -p /work/mouse-src/scripts \
&& mv /work/mouse-src/fetch-sources.sh /work/mouse-src/scripts/fetch-sources.sh \
&& MOUSE_SOURCE_DIR=/opt/mouse-sources /work/mouse-src/scripts/fetch-sources.sh
COPY mouse-src/ /work/mouse-src/
COPY cheesed/ /work/cheesed/
FROM toolchain AS kernel-builder
RUN apk add --no-cache bison=3.8.2-r3
RUN MOUSE_SOURCE_DIR=/opt/mouse-sources \
/work/mouse-src/scripts/build-kernel.sh
FROM toolchain AS rootfs-builder
# util-linux's Meson setup requires a program named bison even when its only
# enabled target, agetty, does not use the parser generator. NetBSD curses does
# require Berkeley Yacc, and Alpine makes the two packages conflict.
RUN apk add --no-cache byacc=20260126-r0 \
&& ln -s /usr/bin/byacc /usr/local/bin/bison
RUN MOUSE_SKIP_KERNEL=1 \
MOUSE_SOURCE_DIR=/opt/mouse-sources \
CHEESED_DIR=/work/cheesed \
/work/mouse-src/scripts/build-image.sh
FROM scratch AS artifacts
COPY --from=kernel-builder /work/mouse-src/build/vmlinuz-virt /
COPY --from=rootfs-builder /work/mouse-src/build/mouse-initramfs.cpio.gz /