-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMakefile
78 lines (60 loc) · 2.12 KB
/
Makefile
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
# Possible targets:
# QEMU:
# * qemu-i440fx-piix
# * qemu-q35-ich9
# * qemu-hybrid (both qemu-i440fx-piix and qemu-q35-ich9)
CFILES := $(shell find src/ -type f -name '*.c' -not -path 'src/motherboard/*')
CC = gcc
CFLAGS = -m32 -mno-sse -mno-sse2 -mno-mmx -mno-3dnow -mno-80387 -nostdlib -ffreestanding -fno-pic -fno-stack-protector -std=c11 -pedantic -O2 -Wall -Wextra -Isrc/ -lgcc -static -c
ifdef TARGET
ifeq ($(TARGET),qemu-i440fx-piix)
CFILES += $(shell find src/motherboard/qemu/ -maxdepth 1 -type f -name '*.c')
CFILES += $(shell find src/motherboard/qemu/i440fx/ src/motherboard/qemu/piix4 src/motherboard/qemu/piix3 -type f -name '*.c')
CFLAGS += -D QEMU_I440FX_PIIX
else ifeq ($(TARGET),qemu-q35-ich9)
CFILES += $(shell find src/motherboard/qemu/ -maxdepth 1 -type f -name '*.c')
CFILES += $(shell find src/motherboard/qemu/q35/ src/motherboard/qemu/ich9 -type f -name '*.c')
CFLAGS += -D QEMU_Q35_ICH9
else ifeq ($(TARGET),qemu-hybrid)
CFILES += $(shell find src/motherboard/qemu/ -type f -name '*.c')
CFLAGS += -D QEMU_I440FX_PIIX -D QEMU_Q35_ICH9
else
$(error Unknown TARGET)
endif
endif
LDFILE := linker.ld
OBJS := $(ASFILES:.asm=.o) $(CFILES:.c=.o)
BIOS = lakebios.bin
AS = nasm
ASFLAGS := -f bin
LD = ld
LDFLAGS := -T$(LDFILE) -nostdlib -m elf_i386 -static -n
QEMU = qemu-system-x86_64
QEMUFLAGS := -bios $(BIOS) -debugcon stdio
HEADERDEPDS = $(OBJS:%.o=%.d)
.PHONY: all clean
all: $(BIOS)
$(BIOS): $(OBJS) src/entry.asm
$(LD) $(LDFLAGS) $(OBJS) -o blob.bin
$(AS) $(ASFLAGS) src/entry.asm -o $@
-include $(HEADERDEPDS)
%.o: %.c
$(CC) $(CFLAGS) -MMD $< -o $@
run-q35:
qemu-system-x86_64 -M q35 $(QEMUFLAGS)
run-q35-kvm:
qemu-system-x86_64 -M q35 $(QEMUFLAGS) -enable-kvm
run-i440fx:
qemu-system-x86_64 -M pc $(QEMUFLAGS)
run-i440fx-kvm:
qemu-system-x86_64 -M pc $(QEMUFLAGS) -enable-kvm
clean:
$(eval CFILES += $(shell find src/motherboard -type f -name '*.c'))
$(eval HEADERDEPS := $(CFILES:.c=.d))
$(eval OBJS := $(CFILES:.c=.o))
rm -f $(OBJS) blob.bin $(BIOS) $(HEADERDEPDS)
graph:
cflow2dot -i $(CFILES) -f dot --source bios_main
cat *.dot | gvpack -o svg.dot
dot -Tsvg svg.dot > graph.svg
rm *.dot