#!/bin/sh
set -eu

script_dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
repo_dir=$(dirname "$script_dir")
source_dir=${MOUSE_SOURCE_DIR:-"$repo_dir/sources"}
build_dir=${MOUSE_BUILD_DIR:-"$repo_dir/build"}
kernel_version=6.18.35
kernel_archive="$source_dir/linux-$kernel_version.tar.xz"
kernel_source="$build_dir/kernel/linux-$kernel_version"
kernel_output="$build_dir/kernel/output"
kernel_config="$repo_dir/kernel/x86_64.config"
jobs=${MOUSE_BUILD_JOBS:-$(getconf _NPROCESSORS_ONLN 2>/dev/null || printf '1\n')}

if [ ! -f "$kernel_archive" ]; then
    printf '%s\n' "missing $kernel_archive; run scripts/fetch-sources.sh first" >&2
    exit 1
fi

if [ ! -f "$kernel_config" ]; then
    printf '%s\n' "missing MOUSE kernel config: $kernel_config" >&2
    exit 1
fi

mkdir -p "$build_dir/kernel"
rm -rf "$kernel_source" "$kernel_output"
tar -C "$build_dir/kernel" -xf "$kernel_archive"
mkdir -p "$kernel_output"
install -m 0644 "$kernel_config" "$kernel_output/.config"

make -C "$kernel_source" \
    O="$kernel_output" \
    ARCH=x86_64 \
    LLVM=1 \
    olddefconfig

make -C "$kernel_source" \
    O="$kernel_output" \
    ARCH=x86_64 \
    LLVM=1 \
    KBUILD_BUILD_USER=mouse \
    KBUILD_BUILD_HOST=mouse \
    -j"$jobs" \
    bzImage

install -m 0644 \
    "$kernel_output/arch/x86/boot/bzImage" \
    "$build_dir/vmlinuz-virt"

printf '%s\n' "built Linux $kernel_version with $kernel_config"
