blob: 1d600627ade42e7e154dce89e18ed22a399762c4 (
plain) (
blame)
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
# shellcheck shell=sh disable=SC2046,SC2091,SC2086,SC2155
# NOTE: $(VAR) in this file is MAKE syntax, not shell substitution.
export TARGET=x86_64-unknown-uefi
export PROFILE=debug
export OUT_DIR=target/$(TARGET)/$(PROFILE)
export ESP_DIR=esp
export KERNEL=$(OUT_DIR)/rsdos.efi
export BZIMAGE=$(ESP_DIR)/bzImage
export INITRD=$(ESP_DIR)/initramfs.cpio.gz
export BOOTLOADER=rsboot/rsboot.efi
export OVMF=/usr/share/edk2/x64/OVMF.4m.fd
export BOOT_EFI=$(ESP_DIR)/EFI/BOOT/BOOTX64.EFI
.PHONY: all run run-gui clean image debug release fmt bootloader boot-image
# ---- Build ---------------------------------------------------------------
all: $(BZIMAGE) $(INITRD)
release: PROFILE=release
release: export PROFILE=release
release: export OUT_DIR=target/$(TARGET)/release
release: CARGO_FLAGS=--release
release: all
# shellcheck disable=SC2034
CARGO_FLAGS=
$(OUT_DIR)/rsdos.efi: $(shell find rsnix shell rsdos -name '*.rs') Cargo.toml rsnix/Cargo.toml shell/Cargo.toml rsdos/Cargo.toml
cargo build --package rsdos --target $(TARGET) $(CARGO_FLAGS)
$(BZIMAGE): $(KERNEL) | $(ESP_DIR)
cp "$<" "$@"
$(ESP_DIR):
mkdir -p $(ESP_DIR)
$(INITRD): | $(ESP_DIR)
printf '' | gzip > "$@"
# ---- QEMU runners --------------------------------------------------------
run: all
qemu-system-x86_64 \
-bios $(OVMF) \
-drive file=fat:rw:$(ESP_DIR),format=raw \
-serial stdio \
-m 256M \
-machine q35 \
-cpu qemu64 \
-no-reboot \
-display none
run-gui: all
qemu-system-x86_64 \
-bios $(OVMF) \
-drive file=fat:rw:$(ESP_DIR),format=raw \
-serial stdio \
-m 256M \
-machine q35 \
-cpu qemu64 \
-no-reboot \
-vga std
# GDB stub on :1234
debug: all
qemu-system-x86_64 \
-bios $(OVMF) \
-drive file=fat:rw:$(ESP_DIR),format=raw \
-serial stdio \
-m 256M \
-machine q35 \
-cpu qemu64 \
-no-reboot \
-display none \
-s -S
# Boot from a raw disk image (delegates to boot-image.sh which builds the
# full chain if the image doesn't exist yet)
run-image: all
./scripts/boot-image.sh rs-dos.img
# ---- Full boot chain -----------------------------------------------------
# Build bootloader only (rsboot submodule)
bootloader:
./scripts/build-bootloader.sh
# Build the full boot chain disk image (kernel + bootloader)
image: all
./scripts/build-image.sh rs-dos.img
# Boot the full chain disk image (builds it first if needed)
boot-image: all
./scripts/boot-image.sh rs-dos.img
# ---- Utilities -----------------------------------------------------------
fmt:
cargo fmt
clean:
cargo clean
rm -rf $(ESP_DIR) rs-dos.img
help:
@echo "rs-dos — Make targets"
@echo ""
@echo " make build kernel + ESP (default)"
@echo " make release build with --release (smaller binary)"
@echo " make bootloader build rsboot from source"
@echo " make image build full chain disk image (bootloader + kernel)"
@echo " make boot-image build + boot full chain via QEMU"
@echo " make run QEMU serial console (direct boot, no bootloader)"
@echo " make run-gui QEMU with graphical window (GOP/PS2)"
@echo " make debug QEMU + GDB stub on :1234"
@echo " make clean remove build artifacts"
@echo " make fmt format Rust source"
@echo ""
@echo "Scripts:"
@echo " ./scripts/boot.sh quick direct boot (dev loop)"
@echo " ./scripts/boot-image.sh boot full chain (builds if needed)"
@echo " ./scripts/build-image.sh build full chain disk image"
@echo " ./scripts/build-bootloader.sh build rsboot from source"
@echo " ./scripts/qemu.sh flexible QEMU launcher"
@echo " ./scripts/debug-kernel.py GDB plugin (attach after 'make debug')"
|