2014-06-03 07:05:45 +00:00
|
|
|
ASM = nasm
|
2015-04-23 07:47:20 +00:00
|
|
|
|
2014-06-03 07:05:45 +00:00
|
|
|
CC = gcc
|
2015-04-23 07:47:20 +00:00
|
|
|
|
2014-06-03 07:05:45 +00:00
|
|
|
LD = ld
|
2015-04-24 08:17:28 +00:00
|
|
|
|
2015-04-23 07:47:20 +00:00
|
|
|
#Recursive Wildcard
|
|
|
|
rwildcard=$(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2) $(filter $(subst *,%,$2),$d))
|
2015-04-24 08:17:28 +00:00
|
|
|
rdircard=$(sort $(dir $(call rwildcard,$1,*)))
|
2015-04-23 07:47:20 +00:00
|
|
|
|
2015-01-30 06:42:30 +00:00
|
|
|
#x86 vars
|
2015-04-23 07:47:20 +00:00
|
|
|
|
|
|
|
C_SRC_PATH_32 := x86/src/c
|
|
|
|
|
|
|
|
ASM_SRC_PATH_32 := x86/src/asm
|
|
|
|
|
|
|
|
C_FLAGS_32 := -m32 -std=c11 -c -fno-stack-protector -fno-builtin -mno-red-zone -mno-mmx -mno-sse -mno-sse2 -masm=intel -Wall -Wextra
|
|
|
|
|
|
|
|
ASM_FLAGS_32 := -f elf32 -I $(ASM_SRC_PATH_32)/
|
|
|
|
|
|
|
|
LD_FLAGS_32 := -melf_i386
|
|
|
|
|
|
|
|
LD_SCRIPT_32 := build/link32.ld
|
|
|
|
|
2015-01-30 06:42:30 +00:00
|
|
|
#x64 vars
|
|
|
|
|
2015-04-23 07:47:20 +00:00
|
|
|
C_SRC_PATH_64 := x64/src/c
|
|
|
|
|
|
|
|
ASM_SRC_PATH_64 := x64/src/asm
|
|
|
|
|
|
|
|
C_FLAGS_64 := -m64 -std=c11 -c -fno-stack-protector -fno-builtin -mno-red-zone -mno-mmx -mno-sse -mno-sse2 -masm=intel -Wall -Wextra
|
|
|
|
|
|
|
|
ASM_FLAGS_64 := -f elf64 -I $(ASM_SRC_PATH_64)/
|
|
|
|
|
|
|
|
LD_FLAGS_64 := -melf_x86_64
|
|
|
|
|
|
|
|
LD_SCRIPT_64 := build/link64.ld
|
|
|
|
|
|
|
|
GRUB_CFG := build/grub.cfg
|
|
|
|
|
2015-04-24 08:17:28 +00:00
|
|
|
OUTPUT_DIR := tmp
|
2015-04-23 07:47:20 +00:00
|
|
|
|
2015-04-24 08:17:28 +00:00
|
|
|
ALL_OUTPUT_DIRS := $(addprefix $(OUTPUT_DIR)/,$(call rdircard,*))
|
2015-04-23 07:47:20 +00:00
|
|
|
|
2014-06-03 07:05:45 +00:00
|
|
|
|
2015-01-26 00:59:08 +00:00
|
|
|
#C source code
|
2015-04-23 07:47:20 +00:00
|
|
|
|
|
|
|
C_FILES_32 := $(call rwildcard, $(C_SRC_PATH_32), *.c)
|
|
|
|
|
|
|
|
C_FILES_64 := $(call rwildcard, $(C_SRC_PATH_64), *.c)
|
|
|
|
|
|
|
|
|
2014-06-03 07:05:45 +00:00
|
|
|
|
2015-01-26 00:59:08 +00:00
|
|
|
#ASM source code
|
2015-04-23 07:47:20 +00:00
|
|
|
|
|
|
|
ASM_FILES_32 := $(call rwildcard, $(ASM_SRC_PATH_32), *.asm)
|
|
|
|
|
|
|
|
ASM_FILES_64 := $(call rwildcard, $(ASM_SRC_PATH_64), *.asm)
|
|
|
|
|
|
|
|
|
2015-01-26 00:59:08 +00:00
|
|
|
#bin files
|
2015-04-23 07:47:20 +00:00
|
|
|
|
|
|
|
KERNEL_BIN_32 := kernel32.bin
|
|
|
|
|
|
|
|
KERNEL_BIN_64 := kernel64.bin
|
|
|
|
|
2014-06-03 07:05:45 +00:00
|
|
|
|
2015-01-26 00:59:08 +00:00
|
|
|
#Object files
|
2015-04-23 07:47:20 +00:00
|
|
|
|
|
|
|
C_OBJ_FILES_32 := $(C_FILES_32:.c=.o32)
|
|
|
|
|
|
|
|
C_OBJ_FILES_64 := $(C_FILES_64:.c=.o64)
|
|
|
|
|
|
|
|
ASM_OBJ_FILES_32 := $(ASM_FILES_32:.asm=.oa32)
|
|
|
|
|
|
|
|
ASM_OBJ_FILES_64 := $(ASM_FILES_64:.asm=.oa64)
|
|
|
|
|
2015-04-24 08:17:28 +00:00
|
|
|
ALL_OBJ_FILES_32 := $(addprefix $(OUTPUT_DIR)/,$(C_OBJ_FILES_32)) $(addprefix $(OUTPUT_DIR)/,$(ASM_OBJ_FILES_32))
|
2015-04-23 07:47:20 +00:00
|
|
|
|
2015-04-24 08:17:28 +00:00
|
|
|
ALL_OBJ_FILES_64 := $(addprefix $(OUTPUT_DIR)/,$(C_OBJ_FILES_64)) $(addprefix $(OUTPUT_DIR)/,$(ASM_OBJ_FILES_64))
|
2015-04-23 07:47:20 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print_source:
|
2015-04-24 08:17:28 +00:00
|
|
|
$(info ${ALL_OUTPUT_DIRS})
|
2015-04-23 07:47:20 +00:00
|
|
|
|
2014-06-03 07:05:45 +00:00
|
|
|
|
2015-01-26 00:59:08 +00:00
|
|
|
all : init compile link buildiso clean
|
2014-06-03 07:05:45 +00:00
|
|
|
|
2015-04-23 07:47:20 +00:00
|
|
|
|
|
|
|
|
2015-01-26 00:59:08 +00:00
|
|
|
init:
|
2015-04-24 08:17:28 +00:00
|
|
|
sudo mkdir -p $(ALL_OUTPUT_DIRS)
|
2014-06-03 07:05:45 +00:00
|
|
|
|
2015-04-23 07:47:20 +00:00
|
|
|
|
|
|
|
|
2015-01-30 06:42:30 +00:00
|
|
|
compile: $(C_OBJ_FILES_32) $(ASM_OBJ_FILES_32) $(C_OBJ_FILES_64) $(ASM_OBJ_FILES_64)
|
2014-06-03 07:05:45 +00:00
|
|
|
|
2015-04-23 07:47:20 +00:00
|
|
|
|
|
|
|
|
2015-01-30 06:42:30 +00:00
|
|
|
link: $(KERNEL_BIN_32) $(KERNEL_BIN_64)
|
2014-06-03 07:05:45 +00:00
|
|
|
|
2015-04-23 07:47:20 +00:00
|
|
|
|
|
|
|
|
2014-06-03 07:05:45 +00:00
|
|
|
clean:
|
2015-01-26 00:59:08 +00:00
|
|
|
sudo rm -rf $(OUTPUT_DIR)
|
2015-04-23 07:47:20 +00:00
|
|
|
|
2015-01-26 00:59:08 +00:00
|
|
|
buildiso:
|
2015-04-24 08:17:28 +00:00
|
|
|
sudo mkdir -p $(OUTPUT_DIR)/temp_iso/HOS
|
|
|
|
sudo mkdir -p $(OUTPUT_DIR)/temp_iso/boot
|
|
|
|
sudo mkdir -p $(OUTPUT_DIR)/temp_iso/boot/grub
|
2015-04-23 07:47:20 +00:00
|
|
|
sudo mv $(OUTPUT_DIR)/$(KERNEL_BIN_64) $(OUTPUT_DIR)/temp_iso/HOS/kernel64
|
|
|
|
sudo mv $(OUTPUT_DIR)/$(KERNEL_BIN_32) $(OUTPUT_DIR)/temp_iso/HOS/kernel32
|
2015-01-26 00:59:08 +00:00
|
|
|
sudo cp $(GRUB_CFG) $(OUTPUT_DIR)/temp_iso/boot/grub/
|
2015-01-30 08:24:57 +00:00
|
|
|
sudo grub-mkrescue -o HOS.iso $(OUTPUT_DIR)/temp_iso
|
2015-01-30 06:42:30 +00:00
|
|
|
|
2015-04-23 07:47:20 +00:00
|
|
|
%.o32: %.c
|
2015-04-24 08:17:28 +00:00
|
|
|
sudo $(CC) $(C_FLAGS_32) -o $(OUTPUT_DIR)/$@ $^
|
2015-04-23 07:47:20 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
%.o64: %.c
|
2015-04-24 08:17:28 +00:00
|
|
|
sudo $(CC) $(C_FLAGS_64) -o $(OUTPUT_DIR)/$@ $^
|
2015-04-23 07:47:20 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
%.oa32: %.asm
|
2015-04-24 08:17:28 +00:00
|
|
|
sudo $(ASM) $(ASM_FLAGS_32) -o $(OUTPUT_DIR)/$@ $^
|
2015-04-23 07:47:20 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
%.oa64: %.asm
|
2015-04-24 08:17:28 +00:00
|
|
|
sudo $(ASM) $(ASM_FLAGS_64) -o $(OUTPUT_DIR)/$@ $^
|
2015-04-23 07:47:20 +00:00
|
|
|
|
2014-06-03 07:05:45 +00:00
|
|
|
|
|
|
|
|
2015-01-30 06:42:30 +00:00
|
|
|
$(KERNEL_BIN_32): $(ALL_OBJ_FILES_32)
|
2015-04-23 07:47:20 +00:00
|
|
|
sudo $(LD) $(LD_FLAGS_32) -T $(LD_SCRIPT_32) -o $(OUTPUT_DIR)/$(KERNEL_BIN_32) $(ALL_OBJ_FILES_32)
|
|
|
|
|
|
|
|
|
2014-06-03 07:05:45 +00:00
|
|
|
|
2015-01-30 06:42:30 +00:00
|
|
|
$(KERNEL_BIN_64): $(ALL_OBJ_FILES_64)
|
2015-04-23 07:47:20 +00:00
|
|
|
sudo $(LD) $(LD_FLAGS_64) -T $(LD_SCRIPT_64) -o $(OUTPUT_DIR)/$(KERNEL_BIN_64) $(ALL_OBJ_FILES_64)
|
|
|
|
|