Nothing to see here, move along
1target_dir := "target/x86_64-lancer-none/debug"
2kernel_bin := target_dir / "lancer-kernel"
3kernel_release := "target/x86_64-lancer-none/release/lancer-kernel"
4iso_dir := "target/iso"
5iso_file := "target/lancer.iso"
6limine_dir := "target/limine"
7ovmf_code := "/usr/share/OVMF/OVMF_CODE_4M.fd"
8ovmf_vars_src := "/usr/share/OVMF/OVMF_VARS_4M.fd"
9ovmf_vars := "target/ovmf/OVMF_VARS_4M.fd"
10
11boot_modules := "lancer-init:init lancer-serial-driver:serial lancer-fbconsole-driver:fbconsole lancer-ps2kbd-driver:ps2kbd lancer-virtio-net-driver:virtio-net lancer-nvme-driver:nvme lancer-lancerfs:lancerfs lancer-vfs:vfs lancer-ramfs:ramfs lancer-netstack:netstack lancer-remote-shell:remote-shell lancer-hello:hello lancer-ping:ping lancer-udp:udp lancer-resolve:resolve lancer-help:help lancer-echo:echo lancer-uptime:uptime lancer-ifconfig:ifconfig lancer-arp:arp lancer-netstat:netstat lancer-fstest:fstest lancer-ls:ls lancer-cat:cat lancer-mkdir:mkdir lancer-rm:rm lancer-write:write lancer-stat:stat lancer-tree:tree lancer-cp:cp lancer-mv:mv lancer-touch:touch lancer-df:df lancer-cd:cd lancer-shell:shell lancer-dmesg:dmesg lancer-thread-test:thread-test"
12nvme_disk := "target/nvme-disk.img"
13
14build:
15 cargo build --workspace
16
17build-kernel:
18 cargo build -p lancer-kernel
19
20build-init:
21 cargo build -p lancer-init
22
23build-serial:
24 cargo build -p lancer-serial-driver
25
26build-fbconsole:
27 cargo build -p lancer-fbconsole-driver
28
29build-ps2kbd:
30 cargo build -p lancer-ps2kbd-driver
31
32build-virtio-net:
33 cargo build -p lancer-virtio-net-driver
34
35build-nvme:
36 cargo build -p lancer-nvme-driver
37
38build-netstack:
39 cargo build -p lancer-netstack
40
41build-remote-shell:
42 cargo build -p lancer-remote-shell
43
44build-hello:
45 cargo build -p lancer-hello
46
47build-ping:
48 cargo build -p lancer-ping
49
50build-udp:
51 cargo build -p lancer-udp
52
53build-resolve:
54 cargo build -p lancer-resolve
55
56build-help:
57 cargo build -p lancer-help
58
59build-echo:
60 cargo build -p lancer-echo
61
62build-uptime:
63 cargo build -p lancer-uptime
64
65build-ifconfig:
66 cargo build -p lancer-ifconfig
67
68build-arp:
69 cargo build -p lancer-arp
70
71build-netstat:
72 cargo build -p lancer-netstat
73
74build-lancerfs:
75 cargo build -p lancer-lancerfs
76
77build-vfs:
78 cargo build -p lancer-vfs
79
80build-ramfs:
81 cargo build -p lancer-ramfs
82
83build-fstest:
84 cargo build -p lancer-fstest
85
86build-thread-test:
87 cargo build -p lancer-thread-test
88
89release:
90 cargo build --workspace --release
91
92clippy:
93 cargo clippy --workspace -- -W clippy::all
94
95fmt:
96 cargo fmt --check
97
98fmt-fix:
99 cargo fmt
100
101clean:
102 cargo clean
103 rm -rf {{iso_dir}} {{iso_file}}
104
105limine-fetch:
106 #!/usr/bin/env bash
107 if [ ! -d "{{limine_dir}}" ]; then
108 git clone --depth 1 --branch v9.x-binary https://github.com/limine-bootloader/limine.git {{limine_dir}}
109 make -C {{limine_dir}}
110 fi
111
112create-nvme-disk:
113 #!/usr/bin/env bash
114 if [ ! -f "{{nvme_disk}}" ]; then
115 ROOT="$(pwd)"
116 cd /tmp
117 cargo run --manifest-path "$ROOT/Cargo.toml" -p lancer-lancerfs --no-default-features --features host --target x86_64-unknown-linux-gnu --bin mkfs_host -- "$ROOT/{{nvme_disk}}" 64M
118 fi
119
120format-nvme-disk:
121 #!/usr/bin/env bash
122 ROOT="$(pwd)"
123 rm -f "{{nvme_disk}}"
124 cd /tmp
125 cargo run --manifest-path "$ROOT/Cargo.toml" -p lancer-lancerfs --no-default-features --features host --target x86_64-unknown-linux-gnu --bin mkfs_host -- "$ROOT/{{nvme_disk}}" 64M
126
127ovmf-setup:
128 #!/usr/bin/env bash
129 mkdir -p "$(dirname "{{ovmf_vars}}")"
130 cp "{{ovmf_vars_src}}" "{{ovmf_vars}}"
131
132iso: build limine-fetch
133 #!/usr/bin/env bash
134 set -euo pipefail
135 rm -rf {{iso_dir}}
136 mkdir -p {{iso_dir}}/boot/limine {{iso_dir}}/EFI/BOOT
137 cp {{kernel_bin}} {{iso_dir}}/boot/kernel
138 for entry in {{boot_modules}}; do
139 bin="${entry%%:*}"
140 name="${entry##*:}"
141 src="{{target_dir}}/${bin}"
142 if [ -f "$src" ]; then
143 cp "$src" "{{iso_dir}}/boot/${name}"
144 fi
145 done
146 cp limine.conf {{iso_dir}}/boot/limine/limine.conf
147 cp {{limine_dir}}/limine-bios.sys {{iso_dir}}/boot/limine/
148 cp {{limine_dir}}/limine-bios-cd.bin {{iso_dir}}/boot/limine/
149 cp {{limine_dir}}/limine-uefi-cd.bin {{iso_dir}}/boot/limine/
150 cp {{limine_dir}}/BOOTX64.EFI {{iso_dir}}/EFI/BOOT/
151 cp {{limine_dir}}/BOOTIA32.EFI {{iso_dir}}/EFI/BOOT/
152 xorriso -as mkisofs \
153 -b boot/limine/limine-bios-cd.bin \
154 -no-emul-boot -boot-load-size 4 -boot-info-table \
155 --efi-boot boot/limine/limine-uefi-cd.bin \
156 -efi-boot-part --efi-boot-image --protective-msdos-label \
157 {{iso_dir}} -o {{iso_file}}
158 {{limine_dir}}/limine bios-install {{iso_file}}
159
160run: iso ovmf-setup create-nvme-disk
161 qemu-system-x86_64 \
162 -M q35,accel=kvm:tcg,kernel-irqchip=split \
163 -cpu host \
164 -m 512M \
165 -drive if=pflash,format=raw,readonly=on,file={{ovmf_code}} \
166 -drive if=pflash,format=raw,file={{ovmf_vars}} \
167 -cdrom {{iso_file}} \
168 -device intel-iommu,intremap=on,caching-mode=on \
169 -device virtio-net-pci,netdev=net0,iommu_platform=on,disable-legacy=on \
170 -netdev user,id=net0,hostfwd=tcp::2222-:7,hostfwd=tcp::2323-:22,hostfwd=udp::5001-:5001 \
171 -drive file={{nvme_disk}},if=none,id=nvm,format=raw \
172 -device nvme,serial=lancernvme,drive=nvm \
173 -serial stdio \
174 -display gtk \
175 -no-reboot \
176 -no-shutdown
177
178run-tap: iso ovmf-setup create-nvme-disk
179 qemu-system-x86_64 \
180 -M q35,accel=kvm:tcg,kernel-irqchip=split \
181 -cpu host \
182 -m 512M \
183 -drive if=pflash,format=raw,readonly=on,file={{ovmf_code}} \
184 -drive if=pflash,format=raw,file={{ovmf_vars}} \
185 -cdrom {{iso_file}} \
186 -device intel-iommu,intremap=on,caching-mode=on \
187 -device virtio-net-pci,netdev=net0,iommu_platform=on,disable-legacy=on \
188 -netdev tap,id=net0,ifname=tap-lancer,script=no,downscript=no \
189 -drive file={{nvme_disk}},if=none,id=nvm,format=raw \
190 -device nvme,serial=lancernvme,drive=nvm \
191 -serial stdio \
192 -display gtk \
193 -no-reboot \
194 -no-shutdown
195
196run-bios: iso
197 qemu-system-x86_64 \
198 -M q35,accel=kvm:tcg \
199 -cpu host \
200 -m 512M \
201 -cdrom {{iso_file}} \
202 -serial stdio \
203 -display none \
204 -no-reboot \
205 -no-shutdown
206
207debug: iso ovmf-setup create-nvme-disk
208 qemu-system-x86_64 \
209 -M q35,accel=kvm:tcg,kernel-irqchip=split \
210 -cpu host \
211 -m 512M \
212 -drive if=pflash,format=raw,readonly=on,file={{ovmf_code}} \
213 -drive if=pflash,format=raw,file={{ovmf_vars}} \
214 -cdrom {{iso_file}} \
215 -device intel-iommu,intremap=on,caching-mode=on \
216 -device virtio-net-pci,netdev=net0,iommu_platform=on,disable-legacy=on \
217 -netdev user,id=net0 \
218 -drive file={{nvme_disk}},if=none,id=nvm,format=raw \
219 -device nvme,serial=lancernvme,drive=nvm \
220 -serial stdio \
221 -display none \
222 -no-reboot \
223 -no-shutdown \
224 -s -S
225
226test-kernel: limine-fetch
227 ./scripts/run-kernel-tests.sh
228
229test-host:
230 #!/usr/bin/env bash
231 set -euo pipefail
232 ROOT="$(pwd)"
233 cd /tmp
234 cargo test --manifest-path "$ROOT/Cargo.toml" -p lancer-core --target x86_64-unknown-linux-gnu
235 cargo test --manifest-path "$ROOT/Cargo.toml" -p lancer-lancerfs --target x86_64-unknown-linux-gnu --no-default-features
236
237test-host-lancerfs:
238 #!/usr/bin/env bash
239 set -euo pipefail
240 ROOT="$(pwd)"
241 cd /tmp
242 cargo test --manifest-path "$ROOT/Cargo.toml" -p lancer-lancerfs --target x86_64-unknown-linux-gnu --no-default-features
243
244test: test-host test-kernel
245
246prove-kani:
247 #!/usr/bin/env bash
248 set -euo pipefail
249 ROOT="$(pwd)"
250 cd /tmp
251 cargo kani --manifest-path "$ROOT/lib/lancer-core/Cargo.toml"
252
253prove-verus:
254 #!/usr/bin/env bash
255 set -euo pipefail
256 ROOT="$(pwd)"
257 export PATH="/tmp/verus-x86-linux:$PATH"
258 cd /tmp
259 cargo verus verify --manifest-path "$ROOT/lib/lancer-proofs/Cargo.toml"
260
261prove: prove-kani prove-verus
262
263test-integration: limine-fetch
264 ./scripts/run-integration-tests.sh