-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmakefile
71 lines (57 loc) · 1.81 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
#assumes an installation of the cross compiler at /opt/cross
#automated by
CCPREFIX=~/opt/cross/bin/
ASM=~/opt/cross/bin/i686-elf-as
CXX:=~/opt/cross/bin/i686-elf-g++
CC:=i686-elf-gcc
ASL=iasl
BUILD := .build
OBJ_DIR := $(BUILD)/objects
APP_DIR := $(BUILD)/apps
INCLUDE:= -Iinclude
CXXFLAGS= --std=c++17 -ffreestanding -O3 -Wall -Wextra -fno-exceptions -fno-rtti -fshort-enums -Wno-attributes -w
SRC:= \
$(wildcard assets/*.s) \
$(wildcard source/*.cpp)#\
$(wildcard src/buffers/*)\
$(wildcard src/libk/*)\
$(wildcard src/memory/*)\
$(wildcard src/termutils/*)\
$(wildcard src/asm_shims/*)\
$(wildcard src/tests/*)\
$(wildcard src/drivers/*)\
$(wildcard src/disk_structure/*)\
$(wildcard src/acpi/*)\
$(wildcard src/smp/*)\
$(wildcard src/interrupts/*)\
OBJECTS := $(SRC:%.cpp=$(OBJ_DIR)/%.cpp.o)
OBJECTS := $(OBJECTS:%.s=$(OBJ_DIR)/%.s.o)
all: test
dir:
mkdir -p $(OBJ_DIR)
mkdir -p $(APP_DIR)
boot: dir
$(ASM) assets/boot.s -o $(OBJ_DIR)/_boot.o
$(OBJ_DIR)/%.cpp.o: %.cpp dir
@mkdir -p $(@D)
$(CXX) $(CXXFLAGS) $(INCLUDE) -o $@ -c $<
$(OBJ_DIR)/%.s.o: %.s dir
@mkdir -p $(@D)
$(ASM) -o $@ -c $<
kernel: $(OBJECTS) boot
@mkdir -p $(@D)
$(CXX) -T assets/linker.ld -nostdlib $(CXXFLAGS) $(INCLUDE) -o $(APP_DIR)/kernel.bin $(OBJECTS) -lgcc
clean:
rm build -rf
image: kernel
grub2-file --is-x86-multiboot $(APP_DIR)/kernel.bin
mkdir -p $(APP_DIR)/isodir/boot/grub
cp $(APP_DIR)/kernel.bin $(APP_DIR)/isodir/boot/kernel.bin
cp assets/grub.cfg $(APP_DIR)/isodir/boot/grub/grub.cfg
grub2-mkrescue -o $(APP_DIR)/clinl.iso $(APP_DIR)/isodir
test: image
qemu-system-x86_64 -hda $(APP_DIR)/clinl.iso
debug_run:
qemu-system-i386 --cpu host -S -s -d guest_errors -cdrom $(APP_DIR)/clinl.iso &> $(BUILD)/klog &
sleep 3
gdb -w --eval-command="target remote localhost:1234" $(APP_DIR)/kernel.bin