138 lines
2.5 KiB
Makefile
138 lines
2.5 KiB
Makefile
|
|
AS := nasm
|
|
CC := clang-6.0
|
|
LD := lld-6.0
|
|
DAS := llvm-objdump-6.0
|
|
|
|
.DEFAULT_GOAL := all
|
|
|
|
C_FLAGS_ARCH_X86_64 := -mcmodel=kernel \
|
|
-target x86_64-pc-none-elf \
|
|
-mno-red-zone \
|
|
-mno-mmx \
|
|
-mno-sse \
|
|
-mno-sse2 \
|
|
-mno-sse3 \
|
|
-mno-3dnow
|
|
|
|
C_FLAGS = -x c \
|
|
-g \
|
|
-c \
|
|
-O0 \
|
|
-std=c17 \
|
|
-Wall \
|
|
-Werror \
|
|
-Wextra \
|
|
-Wpedantic \
|
|
-ffreestanding \
|
|
-fno-pic \
|
|
-fno-stack-protector \
|
|
-Wno-int-to-pointer-cast \
|
|
-Wno-zero-length-array \
|
|
$(C_FLAGS_ARCH_X86_64) \
|
|
-I$(INC)/ \
|
|
$(C_EFLAGS)
|
|
|
|
AS_FLAGS = -w+all \
|
|
-w+error \
|
|
-f elf64 \
|
|
-F dwarf \
|
|
-g \
|
|
-I$(INC)/ \
|
|
$(AS_FLAGS_$(MOD))
|
|
|
|
DUMP_FLAGS = -x86-asm-syntax=intel \
|
|
-disassemble \
|
|
-r \
|
|
-t \
|
|
-triple=x86_64-pc-none-elf \
|
|
-print-imm-hex
|
|
|
|
LD_FLAGS = -fuse-ld=$(LD) \
|
|
-nostdlib \
|
|
-Wl,-T,$(LD_SCRIPT) \
|
|
-Wl,--fatal-warnings
|
|
|
|
# ===============================
|
|
# HERE COMES file definitions
|
|
# ===============================
|
|
|
|
SRC := src
|
|
INC := inc
|
|
OUT := out
|
|
LD_SCRIPT := linker.ld
|
|
GRUB_CFG := grub.cfg
|
|
|
|
TGT := $(OUT)/kernel.elf
|
|
ISO := $(OUT)/curros.iso
|
|
DMP := $(OUT)/kernel.dmp
|
|
|
|
# ===============================
|
|
# Add additional c source files here
|
|
# ===============================
|
|
C_SRC := kmain.c \
|
|
llist.c \
|
|
intr.c \
|
|
clib.c \
|
|
print.c \
|
|
multiboot2.c \
|
|
pmm.c \
|
|
elf64.c \
|
|
vmm.c \
|
|
spin_lock.c \
|
|
thread.c \
|
|
proc.c \
|
|
paging.c \
|
|
syscall.c
|
|
|
|
# ===============================
|
|
# Add additional ASM source files here
|
|
# ===============================
|
|
ASM_SRC := boot.asm \
|
|
cpu.asm \
|
|
intr.asm
|
|
|
|
|
|
# ===============================
|
|
# Compilation rules
|
|
# ===============================
|
|
C_OBJ := $(addsuffix .o, $(addprefix $(OUT)/,$(C_SRC)))
|
|
|
|
ASM_OBJ := $(addsuffix .o, $(addprefix $(OUT)/,$(ASM_SRC)))
|
|
|
|
$(C_OBJ): $(OUT)/%.c.o : $(SRC)/%.c
|
|
$(CC) $(C_FLAGS) -o $@ $<
|
|
|
|
$(ASM_OBJ): $(OUT)/%.asm.o : $(SRC)/%.asm
|
|
$(AS) $(AS_FLAGS) -o $@ $<
|
|
|
|
$(TGT): $(C_OBJ) $(ASM_OBJ) $(LD_SCRIPT)
|
|
$(CC) $(LD_FLAGS) -o $@ $^
|
|
|
|
$(DMP): $(TGT)
|
|
$(DAS) $(DUMP_FLAGS) $< > $@
|
|
|
|
$(ISO): $(TGT) $(GRUB_CFG)
|
|
mkdir -p $(OUT)/temp/boot/grub
|
|
cp $(GRUB_CFG) $(OUT)/temp/boot/grub/
|
|
cp $(TGT) $(OUT)/temp/
|
|
cp ./user/out/hello.elf $(OUT)/temp/
|
|
grub-mkrescue -d /usr/lib/grub/i386-pc -o $(ISO) $(OUT)/temp
|
|
|
|
.PHONY: mkdir
|
|
mkdir:
|
|
mkdir -p out
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
rm -rf $(OUT)
|
|
|
|
.PHONY: all
|
|
all: mkdir $(TGT) $(DMP) $(ISO)
|
|
|
|
.PHONY: debug
|
|
debug:
|
|
qemu-system-x86_64 -boot d -cdrom $(ISO)
|
|
|
|
|