name: Build on: push: branches: - master jobs: build-amd64-iso: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Build kernel (amd64) run: make -f Makefile.starkernel ARCH=amd64 - name: Pack El Torito ISO (amd64) run: | set -e BUILD_DIR=build/amd64/kernel mkdir -p "$BUILD_DIR/iso" dd if=/dev/zero of="$BUILD_DIR/iso/efi.img" bs=512 count=8192 mformat -i "$BUILD_DIR/iso/efi.img" :: mmd -i "$BUILD_DIR/iso/efi.img" ::/EFI mmd -i "$BUILD_DIR/iso/efi.img" ::/EFI/BOOT mcopy -i "$BUILD_DIR/iso/efi.img" "$BUILD_DIR/starkernel_loader.efi" ::/EFI/BOOT/BOOTX64.EFI xorriso -as mkisofs -r -J -e efi.img -no-emul-boot \ -o "$BUILD_DIR/starkernel.iso" "$BUILD_DIR/iso" - uses: actions/upload-artifact@v3 with: name: lithosananke-amd64-iso path: build/amd64/kernel/starkernel.iso build-aarch64-iso: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Build kernel (aarch64) env: PATH: /usr/lib/llvm-18/bin:/usr/bin:/bin run: make -f Makefile.starkernel ARCH=aarch64 - name: Pack El Torito ISO (aarch64) run: | set -e BUILD_DIR=build/aarch64/kernel mkdir -p "$BUILD_DIR/iso/EFI/BOOT" cp "$BUILD_DIR/starkernel_loader.efi" "$BUILD_DIR/iso/EFI/BOOT/BOOTAA64.EFI" printf "FS0:\\\\EFI\\\\BOOT\\\\BOOTAA64.EFI\r\n" > "$BUILD_DIR/iso/startup.nsh" dd if=/dev/zero of="$BUILD_DIR/iso/efi.img" bs=512 count=8192 mformat -i "$BUILD_DIR/iso/efi.img" :: mmd -i "$BUILD_DIR/iso/efi.img" ::/EFI mmd -i "$BUILD_DIR/iso/efi.img" ::/EFI/BOOT mcopy -i "$BUILD_DIR/iso/efi.img" "$BUILD_DIR/starkernel_loader.efi" ::/EFI/BOOT/BOOTAA64.EFI xorriso -as mkisofs -r -J -e efi.img -no-emul-boot \ -o "$BUILD_DIR/starkernel.iso" "$BUILD_DIR/iso" - uses: actions/upload-artifact@v3 with: name: lithosananke-aarch64-iso path: build/aarch64/kernel/starkernel.iso build-riscv64-img: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Build kernel (riscv64) run: make -f Makefile.starkernel ARCH=riscv64 - name: Pack GPT/FAT32 disk image (riscv64) # El Torito ISO and -bios QEMU mode don't work on riscv64 virt, # so this arch ships a raw GPT disk image instead of an ISO # (same distinction Makefile.starkernel's own qemu target makes). run: | set -e BUILD_DIR=build/riscv64/kernel DISK="$BUILD_DIR/starkernel_rv64.img" dd if=/dev/zero of="$DISK" bs=1M count=64 sgdisk -n 1:2048:131038 -t 1:ef00 -c 1:"EFI System" "$DISK" dd if=/dev/zero of="$BUILD_DIR/esp_rv64.img" bs=512 count=128991 mkfs.fat -F 32 -n "ESP" "$BUILD_DIR/esp_rv64.img" mmd -i "$BUILD_DIR/esp_rv64.img" ::/EFI mmd -i "$BUILD_DIR/esp_rv64.img" ::/EFI/BOOT mcopy -i "$BUILD_DIR/esp_rv64.img" "$BUILD_DIR/starkernel_loader.efi" ::/EFI/BOOT/BOOTRISCV64.EFI mcopy -i "$BUILD_DIR/esp_rv64.img" "$BUILD_DIR/starkernel_kernel.elf" ::/kernel.elf printf 'FS0:\\EFI\\BOOT\\BOOTRISCV64.EFI\r\n' > "$BUILD_DIR/startup.nsh" mcopy -i "$BUILD_DIR/esp_rv64.img" "$BUILD_DIR/startup.nsh" ::/startup.nsh dd if="$BUILD_DIR/esp_rv64.img" of="$DISK" bs=512 seek=2048 conv=notrunc - uses: actions/upload-artifact@v3 with: name: lithosananke-riscv64-img path: build/riscv64/kernel/starkernel_rv64.img