Repository navigation
Expand file tree
/
Copy pathMakefile
More file actions
110 lines (88 loc) · 2.66 KB
/
Copy pathMakefile
File metadata and controls
110 lines (88 loc) · 2.66 KB
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
VERSION = 0
PATCHLEVEL = 9
SUBLEVEL = 0
EXTRAVERSION =
VERSION_TAG = $(VERSION).$(PATCHLEVEL)$(if $(filter-out 0,$(SUBLEVEL)),.$(SUBLEVEL))$(EXTRAVERSION)
CC = gcc
LD = ld
QEMU ?= qemu-system-i386
GRUB_MKRESCUE ?= grub-mkrescue
ARCH ?= x86_32
BUILD_DIR = build
VPATH = init drivers/video drivers/input kernel lib mm ipc arch/$(ARCH)/boot arch/$(ARCH)/kernel
DRIVE_FLAGS ?= -hda
QEMU_FLAGS ?= -m 64M -serial stdio
GRUB_CFG = arch/$(ARCH)/boot/grub/grub.cfg
ISO_ROOT = $(BUILD_DIR)/iso/staging
ISO_IMAGE = $(BUILD_DIR)/iso/novium-v$(VERSION_TAG).iso
ifeq ($(ARCH),x86_32)
CFLAGS_ARCH = -m32
LDFLAGS_ARCH = -m elf_i386
else
$(error unsupported ARCH '$(ARCH)')
endif
CPPFLAGS = -I. -Iinclude -Iarch/$(ARCH)/include
CFLAGS = $(CFLAGS_ARCH) \
-ffreestanding \
-fno-builtin \
-fno-stack-protector \
-fno-pie \
-mno-sse \
-mno-sse2 \
-O2 \
-g \
-Wall \
-Wextra \
-MMD \
-MP
LDFLAGS = $(LDFLAGS_ARCH) \
-T arch/$(ARCH)/kernel/link.ld
KERNEL_OBJS = \
$(BUILD_DIR)/multiboot.o \
$(BUILD_DIR)/bootstrap.o \
$(BUILD_DIR)/hw_init.o \
$(BUILD_DIR)/irq.o \
$(BUILD_DIR)/isr.o \
$(BUILD_DIR)/debug.o \
$(BUILD_DIR)/ps2.o \
$(BUILD_DIR)/keyboard.o \
$(BUILD_DIR)/pit.o \
$(BUILD_DIR)/vga_console.o \
$(BUILD_DIR)/string.o \
$(BUILD_DIR)/stdio.o \
$(BUILD_DIR)/page_alloc.o \
$(BUILD_DIR)/paging.o \
$(BUILD_DIR)/main.o \
$(BUILD_DIR)/sched.o \
$(BUILD_DIR)/process.o \
$(BUILD_DIR)/switch.o \
$(BUILD_DIR)/heap.o \
$(BUILD_DIR)/ipc.o \
$(BUILD_DIR)/message.o \
$(BUILD_DIR)/sync.o
# Header dependencies collected by -MMD, one .d next to each .o
KERNEL_DEPS = $(KERNEL_OBJS:.o=.d)
.PHONY: all iso run clean
all: $(ISO_IMAGE)
$(BUILD_DIR):
mkdir -p $(BUILD_DIR)
# VPATH finds the .c/.S files in the dirs listed above
$(BUILD_DIR)/%.o: %.c | $(BUILD_DIR)
$(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@
$(BUILD_DIR)/%.o: %.S | $(BUILD_DIR)
$(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@
# Pull in the header dependencies. A missing .d is fine on a fresh tree, and
# -MP keeps a deleted header from turning into a "no rule to make target" stop.
-include $(KERNEL_DEPS)
$(BUILD_DIR)/kernel.elf: $(KERNEL_OBJS) arch/$(ARCH)/kernel/link.ld
$(LD) $(LDFLAGS) $(KERNEL_OBJS) -o $@
$(ISO_IMAGE): $(BUILD_DIR)/kernel.elf $(GRUB_CFG) | $(BUILD_DIR)
mkdir -p $(ISO_ROOT)/boot/grub
cp $(BUILD_DIR)/kernel.elf $(ISO_ROOT)/boot/novium
cp $(GRUB_CFG) $(ISO_ROOT)/boot/grub/grub.cfg
$(GRUB_MKRESCUE) -o $@ $(ISO_ROOT)
iso: $(ISO_IMAGE)
run: $(ISO_IMAGE)
$(QEMU) $(QEMU_FLAGS) $(DRIVE_FLAGS) $(ISO_IMAGE)
clean:
rm -rf $(BUILD_DIR)