-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
99 lines (77 loc) · 3.28 KB
/
Makefile
File metadata and controls
99 lines (77 loc) · 3.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# NullBox Build System
#
# Targets:
# make test — Run all Rust unit tests
# make build — Build all Rust crates (debug)
# make release — Build all crates for release (static musl)
# make kernel — Build KSPP-hardened Linux kernel
# make initramfs — Build initramfs (needs kernel + nulld)
# make squashfs — Build SquashFS rootfs (needs release binaries)
# make iso — Build bootable x86_64 ISO
# make qemu-kernel — Boot kernel only in QEMU (validation)
# make qemu — Boot kernel+initramfs in QEMU
# make qemu-iso — Boot full ISO in QEMU
# make all — Build everything
# make clean — Remove build artifacts
SHELL := /bin/bash
NULLBOX_ROOT := $(shell pwd)
TARGET := x86_64-unknown-linux-musl
ARCH := x86_64
.PHONY: test build release kernel initramfs squashfs iso all clean \
qemu-kernel qemu qemu-iso deps-check
# === Development ===
test:
cargo test --workspace
build:
cargo build --workspace
release:
cargo build --workspace --exclude cage --target $(TARGET) --release
cargo build -p cage --release
# === Kernel ===
kernel:
@chmod +x kernel/scripts/build-kernel.sh
ARCH=$(ARCH) kernel/scripts/build-kernel.sh
# === Image Pipeline ===
initramfs: release
@chmod +x image/scripts/build-initramfs.sh
image/scripts/build-initramfs.sh
squashfs: release
@chmod +x image/scripts/build-squashfs.sh
TARGET=$(TARGET) image/scripts/build-squashfs.sh
iso: kernel initramfs
@chmod +x image/scripts/build-iso.sh
image/scripts/build-iso.sh
# === QEMU Testing ===
qemu-kernel:
@chmod +x image/scripts/test-qemu.sh
image/scripts/test-qemu.sh kernel
qemu: kernel initramfs
@chmod +x image/scripts/test-qemu.sh
image/scripts/test-qemu.sh initramfs
qemu-iso: iso
@chmod +x image/scripts/test-qemu.sh
image/scripts/test-qemu.sh iso
# === Full Build ===
all: test release kernel squashfs initramfs iso
# === Dependencies Check ===
deps-check:
@echo "Checking NullBox build dependencies..."
@command -v cargo >/dev/null && echo " ✓ cargo" || echo " ✗ cargo (pacman -S rust)"
@command -v clang >/dev/null && echo " ✓ clang" || echo " ✗ clang (pacman -S clang)"
@command -v lld >/dev/null && echo " ✓ lld" || echo " ✗ lld (pacman -S lld)"
@command -v llvm-ar >/dev/null && echo " ✓ llvm" || echo " ✗ llvm (pacman -S llvm)"
@command -v bc >/dev/null && echo " ✓ bc" || echo " ✗ bc (pacman -S bc)"
@command -v flex >/dev/null && echo " ✓ flex" || echo " ✗ flex (pacman -S flex)"
@command -v bison >/dev/null && echo " ✓ bison" || echo " ✗ bison (pacman -S bison)"
@command -v mksquashfs >/dev/null && echo " ✓ mksquashfs" || echo " ✗ mksquashfs (pacman -S squashfs-tools)"
@command -v xorriso >/dev/null && echo " ✓ xorriso" || echo " ✗ xorriso (pacman -S xorriso)"
@command -v grub-mkrescue >/dev/null && echo " ✓ grub-mkrescue" || echo " ✗ grub-mkrescue (pacman -S grub)"
@command -v qemu-system-x86_64 >/dev/null && echo " ✓ qemu" || echo " ✗ qemu (pacman -S qemu-full)"
@[[ -e /dev/kvm ]] && echo " ✓ KVM" || echo " ✗ KVM (enable in BIOS)"
@echo ""
@echo "For musl target: rustup target add $(TARGET)"
@echo " (or: pacman -S rust-musl)"
# === Clean ===
clean:
cargo clean
rm -rf build/