2017-02-03 01:14:23 +00:00
|
|
|
ASM := nasm
|
2017-02-03 07:08:43 +00:00
|
|
|
CC := x86_64-elf-gcc
|
|
|
|
LD := x86_64-elf-gcc
|
2017-02-05 07:43:15 +00:00
|
|
|
OBJDUMP := x86_64-elf-objdump
|
2016-06-04 09:41:56 +00:00
|
|
|
#Recursive Wildcard
|
|
|
|
rwildcard=$(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2) $(filter $(subst *,%,$2),$d))
|
|
|
|
rdircard=$(sort $(dir $(call rwildcard,$1,*)))
|
|
|
|
rdircardex=$(sort $(dir $(call rwildcard,$1,$2)))
|
|
|
|
|
|
|
|
#x64 vars
|
2016-06-04 23:14:50 +00:00
|
|
|
LD_SCRIPT := build/linker.ld
|
|
|
|
GRUB_CFG := build/grub.cfg
|
2016-06-04 09:41:56 +00:00
|
|
|
|
2017-02-03 01:14:23 +00:00
|
|
|
SOURCE_DIR := src
|
|
|
|
TARGET_DIR := target
|
|
|
|
HEADER_DIRS := $(call rdircardex, $(SOURCE_DIR), *.h)
|
|
|
|
ALL_TARGET_DIRS := $(addprefix $(TARGET_DIR)/,$(call rdircard, $(SOURCE_DIR)))
|
|
|
|
ASM_HEADER_DIRS := $(call rdircardex, $(SOURCE_DIR), *.inc)
|
2016-06-04 09:41:56 +00:00
|
|
|
|
2017-02-03 01:14:23 +00:00
|
|
|
C_FLAGS := -std=c11 -g -c -mcmodel=kernel -fno-exceptions -ffreestanding -mno-red-zone -mno-mmx -mno-sse -mno-sse2 -masm=intel -Wall -Werror -Wextra -Wno-comment $(addprefix -I, $(HEADER_DIRS))
|
2017-02-04 03:10:51 +00:00
|
|
|
ASM_FLAGS := -w+all -f elf64 -F dwarf -g $(addprefix -I, $(ASM_HEADER_DIRS))
|
2017-02-03 01:14:23 +00:00
|
|
|
LD_FLAGS := -lgcc -nodefaultlibs -nostartfiles -nostdlib -Wl,-n -Wl,--build-id=none
|
2016-06-04 09:41:56 +00:00
|
|
|
|
2017-02-03 01:14:23 +00:00
|
|
|
C_SRC := $(call rwildcard, $(SOURCE_DIR), *.c)
|
|
|
|
ASM_SRC := $(call rwildcard, $(SOURCE_DIR), *.asm)
|
2016-06-04 09:41:56 +00:00
|
|
|
|
|
|
|
KERNEL_ELF := kernel.elf
|
2016-06-04 23:14:50 +00:00
|
|
|
KERNEL_DASM := kernel.dasm
|
2016-06-04 09:41:56 +00:00
|
|
|
|
|
|
|
#Object files
|
|
|
|
C_OBJ := $(C_SRC:.c=.o)
|
|
|
|
ASM_OBJ := $(ASM_SRC:.asm=.oasm)
|
2017-02-03 01:14:23 +00:00
|
|
|
ALL_OBJ := $(addprefix $(TARGET_DIR)/,$(C_OBJ)) $(addprefix $(TARGET_DIR)/,$(ASM_OBJ))
|
2016-06-04 09:41:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
#Commands
|
2017-02-03 01:14:23 +00:00
|
|
|
all: init compile link buildiso disasm
|
2016-06-04 09:41:56 +00:00
|
|
|
|
|
|
|
init:
|
2017-02-03 01:14:23 +00:00
|
|
|
mkdir -p $(ALL_TARGET_DIRS)
|
2016-06-04 09:41:56 +00:00
|
|
|
|
|
|
|
compile: $(C_OBJ) $(ASM_OBJ)
|
|
|
|
|
2017-02-02 02:04:07 +00:00
|
|
|
link: $(KERNEL_ELF)
|
2016-06-04 09:41:56 +00:00
|
|
|
|
|
|
|
buildiso:
|
2017-02-03 01:14:23 +00:00
|
|
|
mkdir -p $(TARGET_DIR)/temp_iso/secX
|
|
|
|
mkdir -p $(TARGET_DIR)/temp_iso/boot
|
|
|
|
mkdir -p $(TARGET_DIR)/temp_iso/boot/grub
|
|
|
|
cp $(TARGET_DIR)/$(KERNEL_ELF) $(TARGET_DIR)/temp_iso/secX/$(KERNEL_ELF)
|
|
|
|
cp $(GRUB_CFG) $(TARGET_DIR)/temp_iso/boot/grub/
|
|
|
|
grub-mkrescue -o $(TARGET_DIR)/secX.iso $(TARGET_DIR)/temp_iso
|
|
|
|
|
|
|
|
clean:
|
|
|
|
rm -rf $(TARGET_DIR)
|
2016-06-04 09:41:56 +00:00
|
|
|
|
|
|
|
%.o: %.c
|
2017-02-03 01:14:23 +00:00
|
|
|
$(CC) $(C_FLAGS) -o $(TARGET_DIR)/$@ $^
|
2016-06-04 09:41:56 +00:00
|
|
|
|
|
|
|
%.oasm: %.asm
|
2017-02-03 01:14:23 +00:00
|
|
|
$(ASM) $(ASM_FLAGS) -o $(TARGET_DIR)/$@ $^
|
2016-06-04 09:41:56 +00:00
|
|
|
|
2016-06-04 23:14:50 +00:00
|
|
|
$(KERNEL_ELF): $(ALL_OBJ)
|
2017-02-03 01:14:23 +00:00
|
|
|
$(LD) $(LD_FLAGS) -T $(LD_SCRIPT) -o $(TARGET_DIR)/$(KERNEL_ELF) $(ALL_OBJ)
|
2016-06-04 09:41:56 +00:00
|
|
|
|
2016-06-04 23:14:50 +00:00
|
|
|
disasm:
|
2017-02-05 07:43:15 +00:00
|
|
|
$(OBJDUMP) -M intel -D $(TARGET_DIR)/$(KERNEL_ELF) > $(TARGET_DIR)/$(KERNEL_DASM)
|