-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMakefile
92 lines (79 loc) · 2.68 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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
TESTS_DIR=tests
INCLUDE_DIR=include
KERNEL_DIR=kernel
KBOOT_DIR=$(KERNEL_DIR)/kboot
DRIVERS_DIR=$(KERNEL_DIR)/drivers
INTERRUPT_DIR=$(KERNEL_DIR)/interrupt
MMU_DIR=$(KERNEL_DIR)/mmu
COMMON_DIR=$(KERNEL_DIR)/common
SYS_DIR=$(KERNEL_DIR)/sys
UTILS_DIR=$(KERNEL_DIR)/utils
SHELL_DIR=$(KERNEL_DIR)/shell
TIMER_DIR=$(KERNEL_DIR)/timer
TASKS_DIR=$(KERNEL_DIR)/tasks
POWER_DIR=$(KERNEL_DIR)/power
CC=gcc
CXX=g++
AS=nasm
ASFLAGS=-f elf32
CFLAGS=-I$(INCLUDE_DIR) -m32 -nostdlib -nostdinc -fno-builtin -fno-stack-protector -nostartfiles -nodefaultlibs \
-Wno-unused-parameter -Wno-language-extension-token \
-D WITH_GRUB_MB -D TARGET_BOCHS -D DEBUG_LIBALLOC \
-Wall -Wextra -pedantic -O2
LDFLAGS=-T $(KERNEL_DIR)/link.ld -melf_i386
OBJECTS=$(KBOOT_DIR)/multiboot_header.o $(KBOOT_DIR)/kboot.o \
$(KBOOT_DIR)/loader.o $(KBOOT_DIR)/gdt.o \
$(KERNEL_DIR)/kmain.o \
$(SHELL_DIR)/shell.o $(SHELL_DIR)/font.o $(SHELL_DIR)/bmp.o \
$(DRIVERS_DIR)/serial.o $(DRIVERS_DIR)/io.o \
$(DRIVERS_DIR)/keyboard.o $(DRIVERS_DIR)/lapic.o $(DRIVERS_DIR)/ioapic.o \
$(DRIVERS_DIR)/pic.o $(DRIVERS_DIR)/pit.o \
$(DRIVERS_DIR)/acpi/fadt.o $(DRIVERS_DIR)/acpi/madt.o $(DRIVERS_DIR)/acpi/acpi.o \
$(DRIVERS_DIR)/cpuid.o $(DRIVERS_DIR)/svga.o $(DRIVERS_DIR)/cpu.o \
$(INTERRUPT_DIR)/interrupt.o $(INTERRUPT_DIR)/interrupt_hnd.o \
$(MMU_DIR)/paging.o $(MMU_DIR)/paging_en.o $(MMU_DIR)/kheap.o \
$(MMU_DIR)/pageframe_alloc.o $(MMU_DIR)/mmu.o $(MMU_DIR)/liballoc.o $(MMU_DIR)/liballoc_hooks.o \
$(TIMER_DIR)/timer.o \
$(TASKS_DIR)/tasks.o $(TASKS_DIR)/cpu_switch_to.o $(TASKS_DIR)/sem.o $(TASKS_DIR)/smp.o \
$(TASKS_DIR)/trampoline.o \
$(SYS_DIR)/syscall.o \
$(POWER_DIR)/shutdown.o $(POWER_DIR)/reboot.o \
$(COMMON_DIR)/kinfo.o $(COMMON_DIR)/panic.o $(COMMON_DIR)/multiboot_info.o \
$(UTILS_DIR)/hashtable.o \
$(UTILS_DIR)/string.o $(UTILS_DIR)/debug.o $(UTILS_DIR)/printf.o $(UTILS_DIR)/bitmap.o \
$(UTILS_DIR)/queue.o $(UTILS_DIR)/list.o $(UTILS_DIR)/rwlock.o $(UTILS_DIR)/spinlock.o $(UTILS_DIR)/maths.o \
$(UTILS_DIR)/atomic.o
all: kernel.elf program
debug: CFLAGS+= -DDEBUG -g
debug: LDFLAGS+= -g
debug: all
test:
cd tests && make
%.o: %.cpp
$(CXX) -c $(CFLAGS) $< -o $@
%.o: %.c
$(CC) -c $(CFLAGS) $< -o $@
%.o: %.S
$(AS) $(ASFLAGS) $< -o $@
kernel.elf: $(OBJECTS)
ld $^ -o $@ $(LDFLAGS)
program: iso/modules/program.S
$(AS) -f bin $< -o iso/modules/program
iso: kernel.elf
cp kernel.elf iso/boot/
genisoimage -R \
-b boot/grub/stage2_eltorito \
-no-emul-boot \
-boot-load-size 4 \
-A os \
-input-charset utf8 \
-quiet \
-boot-info-table \
-o output/catch.iso \
iso
isohw: kernel.elf
cp kernel.elf iso/boot/
grub-mkrescue -o output/catch.iso iso
clean:
rm -rf *.o *.elf
find . -type f -name '*.o' -delete