TARGET      = ../bin/Kernel.vsb

#宣言
CC			= gcc
RM			= /bin/rm
MV			= /bin/mv
LD			= /usr/bin/ld
LN_S		= ln -s
AR			= /usr/bin/ar
RANLIB		= ranlib
INCLUDES    = -I../include
LIBVANE		= ../lib/libvanec.a ../lib/libvanego.a
FLAGS		= -m32 -ffreestanding -fno-common -fno-builtin -fomit-frame-pointer -O2 -c
FLAGSC		= -m32 -ffreestanding -fno-common -nostdlib -masm=intel -fno-builtin -fomit-frame-pointer -O2 -c
LD          = ld -Ttext 0x100000 -T linkerscript -melf_i386 --oformat elf32-i386 -o
FLAGSDEBUG = -ffreestanding -fno-common -nostdlib -fno-builtin -fomit-frame-pointer -O2 -c
file =boot.c
DEBUG_OBJ=../tmp/debug.o

#サフィックス
.S.o:
	${CC} ${INCLUDES} ${FLAGS} $<
.c.o:
	${CC} ${INCLUDES} ${FLAGSC} $<
	
#ソースコード
BOOT_C=boot.c
BOOT_S=load.S
VANE_S=Vane.S
KEYBOARD_C=KeyBoard.c
GDT_IDT_C=GDT_IDT.c
INTERRUPT_C=Interrupt.c
STDIO_C=stdio.c
STRING_C=string.c
ASM_INTERRUPT_S=ASM_Interrupt.S
SCANCODE_C=scancode.c
MEMMAN_C=memory.c
FAT_C=FAT.c
GRAPHIC_C=Graphical.c
SYSTEM_C=System.c
MESSAGE_C=Message.c
TIMER_C=timer.c
TASK_C=task.c
TIME_C=time.c
SCAN_C=scan.c
ENV_C=Env.c
TOOLS_C=tools.c
CMD_C=cmd_shell.c

#オブジェクト
BOOT_OBJ=${BOOT_S:.S=.o} ${BOOT_C:.c=.o} ${VANE_S:.S=.o} ${KEYBOARD_C:.c=.o} ${STDIO_C:.c=.o} ${GDT_IDT_C:.c=.o} ${INTERRUPT_C:.c=.o} ${STRING_C:.c=.o} ${ASM_INTERRUPT_S:.S=.o} ${SCANCODE_C:.c=.o} ${MEMMAN_C:.c=.o} ${FAT_C:.c=.o} ${GRAPHIC_C:.c=.o} ${SYSTEM_C:.c=.o} ${MESSAGE_C:.c=.o} ${TIMER_C:.c=.o} ${TASK_C:.c=.o} ${TIME_C:.c=.o} ${SCAN_C:.c=.o} ${ENV_C:.c=.o} ${TOOLS_C:.c=.o} ${CMD_C:.c=.o}

kernel: ${BOOT_OBJ}
	${LD} ${TARGET} ${BOOT_OBJ}

debug: 
	@ ${RM} -f ${DEBUG_OBJ}
	${CC} ${INCLUDES} ${FLAGSDEBUG} ${file}
	
${BOOT_OBJ}: ${BOOT_SRC}
clean::
	-${RM}  -f *~ *.lo *.o make.log *.bak .a.out .core .*.core

