Merge branch 'master' into prog-loader
[lunaix-os.git] / lunaix-os / makefile
1 include config/make-locations
2 include config/make-os
3 include config/make-cc
4 include config/make-debug-tool
5
6 DEPS := $(CC) $(LD) $(AR) xorriso grub-mkrescue
7
8 $(DEPS):
9         @echo -n "checking $@ .... "
10         @if which $@ > /dev/null; then \
11                 echo "ok";\
12         else\
13                 echo "failed" && exit 1;\
14         fi
15
16 check-cc:
17         @echo -n "checking target i686-elf.... "
18         @test "`i686-elf-gcc -dumpmachine`" = "i686-elf" && echo ok || (echo "failed" && exit 1)
19
20 $(OBJECT_DIR):
21         @mkdir -p $(OBJECT_DIR)
22
23 $(BIN_DIR):
24         @mkdir -p $(BIN_DIR)
25
26 $(USR_DIR):
27         @mkdir -p $(USR_DIR)
28
29 $(ISO_DIR):
30         @mkdir -p $(ISO_DIR)
31         @mkdir -p $(ISO_BOOT_DIR)
32         @mkdir -p $(ISO_GRUB_DIR)
33
34 check: $(DEPS) check-cc GRUB_TEMPLATE
35
36 prepare: check $(OBJECT_DIR) $(BIN_DIR) $(ISO_DIR) $(USR_DIR)
37
38 usrlib: prepare makefile.usr
39         @make -f makefile.usr usr-runtime
40
41 usrlib-debug: prepare makefile.usr
42         @make -f makefile.usr usr-runtime-debug
43
44 usr-prog: prepare usrlib makefile.prog
45         @make -f makefile.prog all
46
47 bootable: usr-prog usrlib makefile.ker
48         @make -f makefile.ker all
49
50 bootable-debug: usr-prog usrlib-debug makefile.ker
51         @make -f makefile.ker all-debug
52
53 all: bootable
54
55 instable: CFLAGS := -g -std=gnu99 -ffreestanding $(O) $(W) $(ARCH_OPT) -D__LUNAIXOS_DEBUG__
56 instable: all
57
58 all-debug: clean bootable-debug
59         @echo "Dumping the disassembled kernel code to $(BUILD_DIR)/kdump.txt"
60         @i686-elf-objdump -S $(BIN_DIR)/$(OS_BIN) > $(BUILD_DIR)/kdump.txt
61
62 clean:
63         @rm -rf $(BUILD_DIR) || exit 1
64
65 run: $(BUILD_DIR)/$(OS_ISO)
66         @qemu-system-i386 $(QEMU_OPTIONS)
67         @sleep 1
68         @telnet 127.0.0.1 $(QEMU_MON_PORT)
69
70 debug-qemu: all-debug
71         @i686-elf-objcopy --only-keep-debug $(BIN_DIR)/$(OS_BIN) $(BUILD_DIR)/kernel.dbg
72         @qemu-system-i386 $(QEMU_OPTIONS)
73         @sleep 1
74         @$(QEMU_MON_TERM) -- telnet 127.0.0.1 $(QEMU_MON_PORT)
75         @gdb -s $(BUILD_DIR)/kernel.dbg -ex "target remote localhost:1234"
76
77 debug-qemu-vscode: all-debug
78         @i686-elf-objcopy --only-keep-debug $(BIN_DIR)/$(OS_BIN) $(BUILD_DIR)/kernel.dbg
79         @qemu-system-i386 $(QEMU_OPTIONS)
80         @sleep 0.5
81         @telnet 127.0.0.1 $(QEMU_MON_PORT)
82
83 debug-bochs: all-debug
84         @bochs -q -f bochs.cfg
85
86 debug-metal: 
87         @printf "@cmc" > $(PORT)
88         @gdb -s $(BUILD_DIR)/kernel.dbg -ex "target remote $(PORT)"