bond/x86/makefile

65 lines
1.6 KiB
Makefile
Raw Normal View History

2014-06-03 07:05:45 +00:00
ASM = nasm
CC = gcc
LD = ld
2015-04-23 07:47:20 +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)))
2016-06-04 20:50:53 +00:00
#x32 vars
LD_SCRIPT := linker.ld
GRUB_CFG := grub.cfg
2015-04-23 07:47:20 +00:00
2015-09-04 00:22:12 +00:00
OUTPUT_DIR := out
2016-06-04 20:50:53 +00:00
HEADER_DIRS := $(call rdircardex, *,*.h)
ALL_OUTPUT_DIRS := $(addprefix $(OUTPUT_DIR)/,$(call rdircard,*))
2015-04-23 07:47:20 +00:00
2016-06-04 20:50:53 +00:00
C_FLAGS := -m32 -std=c11 -g -c -fno-stack-protector -fno-builtin -mno-red-zone -mno-mmx -mno-sse -mno-sse2 -masm=intel -Wall -Wextra -Wno-comment
ASM_FLAGS := -f elf32 -I $(ASM_SRC_PATH_32)/
LD_FLAGS := -melf_i386
2014-06-03 07:05:45 +00:00
2016-06-04 20:50:53 +00:00
C_SRC := $(call rwildcard, ./, *.c)
ASM_SRC := $(call rwildcard, ./, *.asm)
2015-04-23 07:47:20 +00:00
2016-06-04 20:50:53 +00:00
KERNEL_BIN := kernel.bin
KERNEL_ELF := kernel.elf
2014-06-03 07:05:45 +00:00
#Object files
2016-06-04 20:50:53 +00:00
C_OBJ := $(C_SRC:.c=.o)
ASM_OBJ := $(ASM_SRC:.asm=.oasm)
ALL_OBJ := $(addprefix $(OUTPUT_DIR)/,$(C_OBJ)) $(addprefix $(OUTPUT_DIR)/,$(ASM_OBJ))
2015-04-23 07:47:20 +00:00
#Commands
all: init compile link buildiso clean
2015-04-23 07:47:20 +00:00
init:
mkdir -p $(ALL_OUTPUT_DIRS)
2015-04-23 07:47:20 +00:00
2016-06-04 20:50:53 +00:00
compile: $(C_OBJ) $(ASM_OBJ)
2014-06-03 07:05:45 +00:00
2016-06-04 20:50:53 +00:00
link: $(KERNEL_BIN)
2015-04-23 07:47:20 +00:00
buildiso:
2016-06-04 20:50:53 +00:00
mkdir -p $(OUTPUT_DIR)/temp_iso/secX
mkdir -p $(OUTPUT_DIR)/temp_iso/boot
mkdir -p $(OUTPUT_DIR)/temp_iso/boot/grub
2016-06-04 20:50:53 +00:00
mv $(OUTPUT_DIR)/$(KERNEL_BIN) $(OUTPUT_DIR)/temp_iso/secX/$(KERNEL_BIN)
cp $(GRUB_CFG) $(OUTPUT_DIR)/temp_iso/boot/grub/
2016-06-04 20:50:53 +00:00
grub-mkrescue -o secX.iso $(OUTPUT_DIR)/temp_iso
rm -rf $(OUTPUT_DIR)/temp_iso
2015-04-23 07:47:20 +00:00
2014-06-03 07:05:45 +00:00
clean:
rm -rf $(OUTPUT_DIR)
2016-06-04 20:50:53 +00:00
%.o: %.c
$(CC) $(C_FLAGS) -o $(OUTPUT_DIR)/$@ $^
2014-06-03 07:05:45 +00:00
2016-06-04 20:50:53 +00:00
%.oasm: %.asm
$(ASM) $(ASM_FLAGS) -o $(OUTPUT_DIR)/$@ $^
2014-06-03 07:05:45 +00:00
2016-06-04 20:50:53 +00:00
$(KERNEL_BIN): $(ALL_OBJ)
$(LD) $(LD_FLAGS) -T $(LD_SCRIPT) -o $(OUTPUT_DIR)/$(KERNEL_BIN) $(ALL_OBJ)
2015-04-23 07:47:20 +00:00