-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
52 lines (36 loc) · 1.3 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
OUT_FILE_NAME = myos
GAS = i686-elf-as
GCC = i686-elf-gcc
OBJCOPY = i686-elf-objcopy
ABS_DIR := ${CURDIR}
LINKER_SCRIPT = linker.ld
GRUB_CFG = grub.cfg
INC_FILES=include/
COMPILER_FLAGS = -c -ffreestanding -O2 -Wall -Wextra -std=gnu99 -ggdb -I$(INC_FILES)
LINKER_FLAGS = -T $(LINKER_SCRIPT) -ffreestanding -O2 -nostdlib -lgcc -ggdb
#ASM_FILES := $(wildcard boot/*.asm kernel/interrupts/*.asm)
ASM_FILES := $(wildcard boot/*.asm)
ASM_OBJ_FILES := $(ASM_FILES:.asm=.o)
C_FILES := $(wildcard kernel/drivers/*.c kernel/interrupts/*.c kernel/*.c libc/*.c )
C_OBJ_FILES := $(C_FILES:.c=.o)
assemble: $(ASM_OBJ_FILES)
compile: $(C_OBJ_FILES)
link: $(addprefix build/, $(ASM_OBJ_FILES)) $(addprefix build/, $(C_OBJ_FILES))
$(GCC) $(LINKER_FLAGS) -o build/$(OUT_FILE_NAME).bin $^
grub-iso: link
mkdir -p build/isodir
mkdir -p build/isodir/boot
cp build/$(OUT_FILE_NAME).bin build/isodir/boot/$(OUT_FILE_NAME).bin
mkdir -p build/isodir/boot/grub
cp $(GRUB_CFG) build/isodir/boot/grub/$(GRUB_CFG)
grub-mkrescue -o $(OUT_FILE_NAME).iso build/isodir
run: grub-iso
qemu-system-i386 -cdrom $(OUT_FILE_NAME).iso -m 128
clean:
rm -rf build/
build/%.o: %.asm
$(shell mkdir -p $(ABS_DIR)/$(dir $@))
$(GAS) -o $(ABS_DIR)/$@ $<
build/%.o: %.c
$(shell mkdir -p $(ABS_DIR)/$(dir $@))
$(GCC) $(COMPILER_FLAGS) -o $(ABS_DIR)/$@ $<