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 \
        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

RUN apk add --no-cache byacc=20260126-r0

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 /
