################################################################################
# \BA\F4\B5\E5 ȯ\B0\E6 \B9\D7 \B1\D4Ģ \BC\B3\C1\A4 
################################################################################
# \C4\C4\C6\C4\C0Ϸ\AF \B9\D7 \B8\B5Ŀ \C1\A4\C0\C7
NASM32 = nasm
GCC32 = gcc -c -m32 -ffreestanding -std=c11
LD32 = ld -melf_i386 -T ../elf_i386.x -nostdlib -e main -Ttext 0x10A00

# \B9\D9\C0̳ʸ\AE \C0̹\CC\C1\F6 \BB\FD\BC\BA\C0\BB \C0\A7\C7\D1 OBJCOPY \BFɼ\C7 \C1\A4\C0\C7
OBJCOPY32 = objcopy -j .text -j .data -j .rodata -j .bss -S -O binary

# \B5\F0\B7\BA\C5͸\AE \C1\A4\C0\C7
OBJECTDIRECTORY = Temp
SOURCEDIRECTORY	= Sources

################################################################################
# \BA\F4\B5\E5 \C7׸\F1 \B9\D7 \BA\F4\B5\E5 \B9\E6\B9\FD \BC\B3\C1\A4
################################################################################
# \B1⺻\C0\FB\C0\B8\B7\CE \BA\F4\B5带 \BC\F6\C7\E0\C7\D2 \B8\F1\B7\CF
all: prepare Kernel.bin

# \BF\C0\BA\EA\C1\A7Ʈ \C6\C4\C0\CF\C0\CC \C0\A7ġ\C7\D2 \B5\F0\B7\BA\C5͸\AE\B8\A6 \BB\FD\BC\BA
prepare:
	mkdir -p $(OBJECTDIRECTORY)

# Ŀ\B3\CE \BF\A3Ʈ\B8\AE \C6\F7\C0\CEƮ \BA\F4\B5\E5


# Ŀ\B3\CE\C0\C7 C \BCҽ\BA \C6\C4\C0Ͽ\A1 \B4\EB\C7\D1 \C0\C7\C1\B8\BC\BA \C1\A4\BA\B8 \BB\FD\BC\BA
dep:
	@echo === Make Dependancy File ===
	make -C $(OBJECTDIRECTORY) -f ../makefile InternalDependency
	@echo === Dependancy Search Complete ===

# \B5\F0\B7\BA\C5͸\AE\B8\A6 \BF\C0\BA\EA\C1\A7Ʈ \C6\C4\C0\CF \B5\F0\B7\BA\C5͸\AE\B7\CE \C0̵\BF\C7ؼ\AD \C0\C7\C1\B8\BC\BA \C6\C4\C0\CF \B9\D7 \BD\C7\C7\E0 \C6\C4\C0\CF\C0\BB \BB\FD\BC\BA
ExecuteInternalBuild: dep
	make -C $(OBJECTDIRECTORY) -f ../makefile Kernel.elf

# Ŀ\B3\CE \C0̹\CC\C1\F6\B8\A6 \B9\D9\C0̳ʸ\AE \C6\C4\C0Ϸ\CE \BA\AFȯ
Kernel.bin: ExecuteInternalBuild
	$(OBJCOPY32) $(OBJECTDIRECTORY)/Kernel.elf ./Kernel.bin


		
# \BCҽ\BA \C6\C4\C0\CF\C0\BB \C1\A6\BF\DC\C7\D1 \B3\AA\B8\D3\C1\F6 \C6\C4\C0\CF \C1\A4\B8\AE	
clean:
	rm -f *.bin
	rm -f $(OBJECTDIRECTORY)/*.*

################################################################################
# Make\BF\A1 \C0\C7\C7\D8 \B4ٽ\C3 ȣ\C3\E2\B5Ǵ\C2 \BAκ\D0, Temp \B5\F0\B7\BA\C5͸\AE\B8\A6 \B1\E2\C1\D8\C0\B8\B7\CE \BC\F6\C7\E0\B5\CA
################################################################################
# \BA\F4\B5\E5\C7\D2 C \BCҽ\BA \C6\C4\C0\CF \C1\A4\C0\C7, Temp \B5\F0\B7\BA\C5͸\AE\B8\A6 \B1\E2\C1\D8\C0\B8\B7\CE \BC\B3\C1\A4
CENTRYPOINTOBJECTFILE = main.o
CSOURCEFILES = $(wildcard ../$(SOURCEDIRECTORY)/*/*.c)
ASSEMBLYSOURCEFILES = $(wildcard ../$(SOURCEDIRECTORY)/*/*.asm)
COBJECTFILES = $(subst main.o, , $(notdir $(patsubst %.c,%.o,$(CSOURCEFILES))))
ASSEMBLYOBJECTFILES = $(notdir $(patsubst %.asm,%.o,$(ASSEMBLYSOURCEFILES)))

# .c \C6\C4\C0\CF\C0\BB .o \C6\C4\C0Ϸ\CE \B9ٲٴ\C2 \B1\D4Ģ \C1\A4\C0\C7
%.o: ../$(SOURCEDIRECTORY)/*/%.c
	$(GCC32) -c $<

# .asm \C6\C4\C0\CF\C0\BB .o \C6\C4\C0Ϸ\CE \B9ٲٴ\C2 \B1\D4Ģ \C1\A4\C0\C7
%.o: ../$(SOURCEDIRECTORY)/*/%.asm
	$(NASM32) -f elf32 -o $@ $<

# \BD\C7\C1\A6 \C0\C7\C1\B8\BC\BA\BF\A1 \B0\FC\B7õ\C8 \C6\C4\C0\CF\C0\BB \BB\FD\BC\BA
InternalDependency:
	$(GCC32) -MM $(CSOURCEFILES) > Dependency.dep

# \BD\C7\C1\A6 Ŀ\B3\CE \C0̹\CC\C1\F6\B8\A6 \BA\F4\B5\E5
Kernel.elf: $(CENTRYPOINTOBJECTFILE) $(COBJECTFILES) $(ASSEMBLYOBJECTFILES)
	$(LD32) -o $@ $^

# \C7\F6\C0\E7 \B5\F0\B8\AF\C5丮\C0\C7 \C6\C4\C0\CF \C1\DF, dependency \C6\C4\C0\CF\C0\CC \C0\D6\C0\B8\B8\E9 make\BF\A1 \C6\F7\C7\D4	
ifeq (Dependency.dep, $(wildcard Dependency.dep))
include Dependency.dep
endif
