96227190c668bcefc8be592e269e97787a815bdf
[bootcensus] / Makefile
1 csrc = $(wildcard src/*.c) $(wildcard src/libc/*.c) $(wildcard src/test/*.c)
2 ssrc = $(wildcard src/*.s) $(wildcard src/libc/*.s) $(wildcard src/boot/*.s) $(wildcard src/test/*.s)
3 Ssrc = $(wildcard src/*.S)
4 obj = $(csrc:.c=.o) $(ssrc:.s=.o) $(Ssrc:.S=.o)
5 dep = $(obj:.o=.d)
6 elf = test
7 bin = test.bin
8
9 warn = -pedantic -Wall
10 #opt = -O2
11 dbg = -g
12 inc = -Isrc -Isrc/libc -Isrc/test
13 gccopt = -fno-pic -ffreestanding -nostdinc -fno-builtin
14
15 CFLAGS = $(ccarch) -march=i386 $(warn) $(opt) $(dbg) $(gccopt) $(inc) $(def)
16 ASFLAGS = $(asarch) -march=i386 $(dbg) -nostdinc -fno-builtin $(inc)
17 LDFLAGS = $(ldarch) -nostdlib -T pcboot.ld -print-gc-sections
18
19 QEMU_FLAGS = -fda floppy.img -serial file:serial.log -soundhw sb16
20
21 ifneq ($(shell uname -m), i386)
22         ccarch = -m32
23         asarch = --32
24         ldarch = -m elf_i386
25 endif
26
27 floppy.img: boot.img
28         dd if=/dev/zero of=$@ bs=512 count=2880
29         dd if=$< of=$@ conv=notrunc
30
31 boot.img: bootldr.bin $(bin)
32         cat bootldr.bin $(bin) >$@
33
34 # bootldr.bin will contain only .boot and .boot2
35 bootldr.bin: $(elf)
36         objcopy -O binary -j '.boot*' $< $@
37
38 # the main binary will contain every section *except* .boot and .boot2
39 $(bin): $(elf)
40         objcopy -O binary -R '.boot*' $< $@
41
42 $(elf): $(obj)
43         $(LD) -o $@ $(obj) -Map link.map $(LDFLAGS)
44
45 %.o: %.S
46         $(CC) -o $@ $(CFLAGS) -c $<
47
48 -include $(dep)
49
50 %.d: %.c
51         @$(CPP) $(CFLAGS) $< -MM -MT $(@:.d=.o) >$@
52
53 .PHONY: clean
54 clean:
55         rm -f $(obj) $(bin) boot.img floppy.img link.map
56
57 .PHONY: cleandep
58 cleandep:
59         rm -f $(dep)
60
61 .PHONY: disasm
62 disasm: bootldr.disasm $(elf).disasm
63
64 bootldr.disasm: $(elf)
65         objdump -d $< -j .boot -j .boot2 -m i8086 >$@
66
67 $(elf).disasm: $(elf)
68         objdump -d $< -j .startup -j .text -m i386 >$@
69
70 $(elf).sym: $(elf)
71         objcopy --only-keep-debug $< $@
72
73 .PHONY: run
74 run: $(bin)
75         qemu-system-i386 $(QEMU_FLAGS)
76
77 .PHONY: debug
78 debug: $(bin) $(elf).sym
79         qemu-system-i386 $(QEMU_FLAGS) -s -S
80
81 .PHONY: sym
82 sym: $(elf).sym