-
Notifications
You must be signed in to change notification settings - Fork 1
/
Makefile.toml
114 lines (90 loc) · 2.44 KB
/
Makefile.toml
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
[env]
OVMF_DIR = "/usr/share/OVMF"
IMAGE = "disk.img"
GDB_PORT = "12345"
[tasks.build]
dependencies = [
{ name = "copy-efi", path = "bootloader" },
{ name = "build", path = "kernel" },
]
[tasks.run]
env = { "MAKE_PROFILE" = "release", QEMU_OPTS = "-monitor stdio" }
run_task = "qemu"
[tasks.run-dev]
env = { "MAKE_PROFILE" = "debug", QEMU_OPTS = "-monitor stdio" }
run_task = "qemu"
[tasks.debug]
env = { "MAKE_PROFILE" = "debug", QEMU_OPTS = "-monitor stdio -S -gdb tcp::${GDB_PORT}" }
run_task = "qemu"
[tasks.test]
env = { "MAKE_PROFILE" = "test", QEMU_OPTS = "-monitor none -display none" }
run_task = "qemu"
[tasks.test-console]
env = { "MAKE_PROFILE" = "test-console", QEMU_OPTS = "-monitor stdio" }
run_task = "qemu"
[tasks.gdb-attach]
script = '''
gdb kernel/kernel.elf -ex "target remote localhost:${GDB_PORT}"
'''
[tasks.qemu]
dependencies = ["build-disk", "prepare-ovmf"]
script = '''
qemu-system-x86_64 \
-drive if=pflash,format=raw,file=./uefi-firmware/OVMF_CODE.fd \
-drive if=pflash,format=raw,file=./uefi-firmware/OVMF_VARS.fd \
-drive format=raw,media=disk,index=0,file=${IMAGE} \
-device nec-usb-xhci,id=xhci \
-device usb-mouse -device usb-kbd \
-device isa-debug-exit ${QEMU_OPTS}
'''
[tasks.build-disk.run_task]
name = ["disk-init", "mount", "place-files"]
cleanup_task = "umount"
fork = true
[tasks.disk-init]
script = '''
qemu-img create -f raw "${IMAGE}" 200M
mkfs.fat -n "MANDARIN OS" -s 2 -f 2 -F 32 -R 32 "${IMAGE}"
'''
[tasks.mount]
script = '''
mkdir -p ./mnt
sudo mount -o loop "${IMAGE}" ./mnt
'''
[tasks.place-files]
dependencies = ["build"]
script = '''
sudo mkdir -p ./mnt/EFI/BOOT
sudo cp ./bootloader/BOOTX64.EFI ./mnt/EFI/BOOT/BOOTX64.EFI
sudo cp ./kernel/kernel.elf ./mnt/kernel.elf
'''
[tasks.umount]
script = "sudo umount ./mnt && rmdir ./mnt"
[tasks.prepare-ovmf.condition]
files_not_exist = [
"${CARGO_MAKE_WORKING_DIRECTORY}/uefi-firmware/OVMF_CODE.fd",
"${CARGO_MAKE_WORKING_DIRECTORY}/uefi-firmware/OVMF_VARS.fd",
]
[tasks.prepare-ovmf]
script = '''
mkdir -p ./uefi-firmware
cp ${OVMF_DIR}/OVMF_CODE.fd ${OVMF_DIR}/OVMF_VARS.fd ./uefi-firmware/
'''
[tasks.check]
dependencies = [
{ name = "check", path = "bootloader" },
{ name = "check", path = "kernel" },
]
[tasks.clean]
dependencies = [
{ name = "clean", path = "bootloader" },
{ name = "clean", path = "kernel" },
]
ignore_errors = true
script = '''
rm -r ./uefi-firmware ${IMAGE}
'''
[config]
skip_core_tasks = true
[tasks.default]
alias = "build"