Nothing to see here, move along
1#!/usr/bin/env bash
2set -euo pipefail
3
4SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
6
7KERNEL_BIN="$ROOT/target/x86_64-lancer-none/debug/lancer-kernel"
8ISO_DIR="$ROOT/target/iso"
9ISO_FILE="$ROOT/target/lancer.iso"
10LIMINE_DIR="$ROOT/target/limine"
11OVMF_VARS="$ROOT/target/ovmf/OVMF_VARS_4M.fd"
12OVMF_CODE="/usr/share/OVMF/OVMF_CODE_4M.fd"
13
14echo "Building test kernel"
15cargo build --manifest-path "$ROOT/Cargo.toml" -p lancer-kernel --features test-kernel
16
17echo "Creating ISO"
18rm -rf "$ISO_DIR"
19mkdir -p "$ISO_DIR/boot/limine" "$ISO_DIR/EFI/BOOT"
20cp "$KERNEL_BIN" "$ISO_DIR/boot/kernel"
21cat > "$ISO_DIR/boot/limine/limine.conf" <<'LIMINEEOF'
22timeout: 0
23serial: yes
24
25/Lancer Test
26 protocol: limine
27 kernel_path: boot():/boot/kernel
28LIMINEEOF
29cp "$LIMINE_DIR/limine-bios.sys" "$ISO_DIR/boot/limine/"
30cp "$LIMINE_DIR/limine-bios-cd.bin" "$ISO_DIR/boot/limine/"
31cp "$LIMINE_DIR/limine-uefi-cd.bin" "$ISO_DIR/boot/limine/"
32cp "$LIMINE_DIR/BOOTX64.EFI" "$ISO_DIR/EFI/BOOT/"
33cp "$LIMINE_DIR/BOOTIA32.EFI" "$ISO_DIR/EFI/BOOT/"
34xorriso -as mkisofs \
35 -b boot/limine/limine-bios-cd.bin \
36 -no-emul-boot -boot-load-size 4 -boot-info-table \
37 --efi-boot boot/limine/limine-uefi-cd.bin \
38 -efi-boot-part --efi-boot-image --protective-msdos-label \
39 "$ISO_DIR" -o "$ISO_FILE"
40"$LIMINE_DIR/limine" bios-install "$ISO_FILE"
41
42mkdir -p "$(dirname "$OVMF_VARS")"
43cp /usr/share/OVMF/OVMF_VARS_4M.fd "$OVMF_VARS"
44
45echo "Running test kernel in QEMU"
46set +e
47timeout 60s qemu-system-x86_64 \
48 -M q35,accel=kvm:tcg,kernel-irqchip=split \
49 -cpu host \
50 -m 512M \
51 -drive if=pflash,format=raw,readonly=on,file="$OVMF_CODE" \
52 -drive if=pflash,format=raw,file="$OVMF_VARS" \
53 -cdrom "$ISO_FILE" \
54 -serial stdio \
55 -display none \
56 -no-reboot \
57 -device intel-iommu,intremap=on,caching-mode=on \
58 -device virtio-net-pci,netdev=net0 \
59 -netdev user,id=net0 \
60 -device isa-debug-exit,iobase=0x501,iosize=0x04 \
61 < /dev/null
62QEMU_EXIT=$?
63set -e
64
65case $QEMU_EXIT in
66 33)
67 exit 0
68 ;;
69 35)
70 echo ""
71 echo "TESTS FAILED"
72 exit 1
73 ;;
74 124|137)
75 echo ""
76 echo "TIMEOUT"
77 exit 1
78 ;;
79 *)
80 echo ""
81 echo "UNEXPECTED EXIT CODE: $QEMU_EXIT"
82 exit 1
83 ;;
84esac