1
1
arch ?= x86_64
2
- target ?= $(arch ) -unknown- sos-gnu
2
+ target ?= $(arch ) -sos-kernel -gnu
3
3
4
- iso := target/$(target ) /release/sos-$(arch ) .iso
5
- kernel := target/$(target ) /release/sos_kernel
6
- isofiles := target/$(target ) /release/isofiles
4
+ iso := target/$(target ) /debug/sos-$(arch ) .iso
5
+ kernel := target/$(target ) /debug/sos_kernel
6
+ isofiles := target/$(target ) /debug/isofiles
7
+
8
+ release_iso := target/$(target ) /release/sos-$(arch ) .iso
9
+ release_kernel := target/$(target ) /release/sos_kernel
10
+ release_isofiles := target/$(target ) /release/isofiles
7
11
8
12
grub_cfg := src/arch/$(arch ) /grub.cfg
9
13
14
+ TIMESTAMP := $(shell /bin/date "+% Y-% m-% d-% H:% M:% S")
15
+
10
16
# COLORS
11
17
GREEN := $(shell tput -Txterm setaf 2)
12
18
WHITE := $(shell tput -Txterm setaf 7)
@@ -23,47 +29,78 @@ HELP_FUN = \
23
29
for (sort keys %help) { \
24
30
print "${WHITE}$$_:${RESET}\n"; \
25
31
for (@{$$help{$$_}}) { \
26
- $$sep = " " x (32 - length $$_->[0]); \
32
+ $$sep = " " x (20 - length $$_->[0]); \
27
33
print " ${YELLOW}$$_->[0]${RESET}$$sep${GREEN}$$_->[1]${RESET}\n"; \
28
34
}; \
29
35
print "\n"; }
30
36
31
- .PHONY : all clean kernel run iso cargo help gdb
37
+ .PHONY : all clean kernel run iso cargo help gdb test doc release-iso release-run release-kernel
38
+
39
+ doc : # #@utilities Make RustDoc documentation
40
+ @xargo doc
32
41
33
42
help : # #@miscellaneous Show this help.
34
43
@perl -e ' $(HELP_FUN)' $(MAKEFILE_LIST )
35
44
36
- all : kernel
45
+ all : help
37
46
38
47
env : # #@utilities Install dev environment dependencies
39
48
./scripts/install-env.sh
40
49
41
50
clean : # #@utilities Delete all build artefacts.
42
- @cargo clean
51
+ @xargo clean
43
52
44
- kernel : $(kernel ) # #@build Compile the kernel binary
53
+
54
+ kernel : $(kernel ) .bin # #@build Compile the debug kernel binary
45
55
46
56
iso : $(iso ) # #@build Compile the kernel binary and make an ISO image
47
57
48
58
run : $(iso ) # #@build Make the kernel ISO image and boot QEMU from it.
49
59
@qemu-system-x86_64 -s -hda $(iso )
50
60
51
- $(iso ) : $(kernel ) $(grub_cfg )
61
+ release-kernel : $(release_kernel ) .bin # #@release Compile the release kernel binary
62
+
63
+ release-iso : $(release_iso ) # #@release Compile the release kernel binary and make an ISO image
64
+
65
+ release-run : $(release_iso ) # #@release Make the release kernel ISO image and boot QEMU from it.
66
+ @qemu-system-x86_64 -s -hda $(release_iso )
67
+
68
+ debug : $(iso ) # #@build Run the kernel, redirecting serial output to a logfile.
69
+ @qemu-system-x86_64 -s -hda $(iso ) -serial file:$(CURDIR ) /target/$(target ) /serial-$(TIMESTAMP ) .log
70
+
71
+ test : # #@build Test crate dependencies
72
+ @xargo test -p sos_intrusive
73
+ @cd sos_alloc && xargo test
74
+
75
+ $(iso ) : $(kernel ) .bin $(grub_cfg )
52
76
@mkdir -p $(isofiles ) /boot/grub
53
- @cp $(kernel ) $(isofiles ) /boot/
77
+ @cp $(kernel ) .bin $(isofiles ) /boot/
54
78
@cp $(grub_cfg ) $(isofiles ) /boot/grub
55
79
@grub-mkrescue -o $(iso ) $(isofiles ) /
56
80
@rm -r $(isofiles )
57
81
58
- $(kernel ) _full :
59
- @xargo build --release --target $(target )
82
+ $(release_kernel ) :
83
+ @xargo build --target $(target ) --release
84
+
85
+ $(release_kernel ) .bin : $(release_kernel )
86
+ @cp $(release_kernel ) $(release_kernel ) .bin
87
+
88
+ $(release_iso ) : $(release_kernel ) .bin $(grub_cfg )
89
+ @mkdir -p $(release_isofiles ) /boot/grub
90
+ @cp $(release_kernel ) .bin $(release_isofiles ) /boot/
91
+ @cp $(grub_cfg ) $(release_isofiles ) /boot/grub
92
+ @grub-mkrescue -o $(release_iso ) $(release_isofiles ) /
93
+ @rm -r $(release_isofiles )
94
+
95
+ $(kernel ) :
96
+ @xargo build --target $(target )
60
97
61
- $(kernel ) .debug : $(kernel ) _full
62
- @x86_64-elf-objcopy --only-keep-debug $(kernel ) _full $(kernel ) .debug
98
+ $(kernel ) .debug : $(kernel )
99
+ @x86_64-elf-objcopy --only-keep-debug $(kernel ) $(kernel ) .debug
63
100
64
- $(kernel ) : $(kernel ) _full $(kernel ) .debug
65
- @x86_64-elf-strip -g -o $(kernel ) $(kernel ) _full
101
+ $(kernel ) .bin : $(kernel ) $(kernel ) .debug
102
+ @x86_64-elf-strip -g -o $(kernel ) .bin $(kernel )
66
103
@x86_64-elf-objcopy --add-gnu-debuglink=$(kernel ) .debug $(kernel )
67
104
68
- gdb : $(kernel ) $(kernel ) .debug # #@utilities Connect to a running QEMU instance with gdb.
105
+ gdb : $(kernel ) .bin $(kernel ) .debug # #@utilities Connect to a running QEMU instance with gdb.
69
106
@rust-gdb -ex " target remote tcp:127.0.0.1:1234" $(kernel )
0 commit comments