#--------------------------------------------------------------------------
# pre-macros
#--------------------------------------------------------------------------
AS = as
LD86 = ld86
AS	= as
GCC = gcc

#--------------------------------------------------------------------------
# weix etc flags
#--------------------------------------------------------------------------
CFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -fno-strict-aliasing -DDEBUG -D__KERNEL__ -I./include

WEIX_FDD_OBJS = kernel/kernel_fdd_main.o drivers/kernel_drivers.o lib/libc.a
WEIX_HDD_OBJS = boot/hdboot/crt0.o kernel/kernel_main.o drivers/kernel_drivers.o lib/libc.a

#--------------------------------------------------------------------------
# object to make hdd mode weix.
#--------------------------------------------------------------------------
hdd : Weixdoit_hdd

#--------------------------------------------------------------------------
# make default is 'fdd'
#--------------------------------------------------------------------------
fdd : Weixdoit_fdd
	boot/tools/build boot/bootsect boot/weix_seting system/weixkernel.out > ./w_imz

#--------------------------------------------------------------------------
# things to make floppy mode.
#--------------------------------------------------------------------------
Weixdoit_fdd : system/weixkernel_fdd Makebootsect

#--------------------------------------------------------------------------
# things to make harddisk mode
#--------------------------------------------------------------------------
Weixdoit_hdd: Makegrubsect init/main.o system/weixkernel_hdd

#--------------------------------------------------------------------------
# make bootsects needed to boot from fdd and hdd
#--------------------------------------------------------------------------
Makegrubsect:
	cd boot/hdboot ; $(MAKE)

Makebootsect:
	cd boot ; $(MAKE)

#--------------------------------------------------------------------------
# make drivers block, char devices needed by weix
#--------------------------------------------------------------------------
drivers/kernel_drivers.o:
	cd drivers ; $(MAKE)

#--------------------------------------------------------------------------
# make each fdd and hdd images
#--------------------------------------------------------------------------
system/weixkernel_hdd: $(WEIX_HDD_OBJS)
	ld -L./lib -m elf_i386 -Ttext 0x100000 -S -X -M $(WEIX_HDD_OBJS) -o $@ > system/System.map

system/weixkernel_fdd: $(WEIX_FDD_OBJS)
	ld -L./lib -m elf_i386 -Ttext 0x0 -S -X -M $(WEIX_FDD_OBJS) ./lib/libc.a -o system/weixkernel_fdd > system/System.map
	objcopy -O binary -S system/weixkernel_fdd system/weixkernel.out

#--------------------------------------------------------------------------
# make kernel images
#--------------------------------------------------------------------------
kernel/kernel_main.o:
	cd kernel ; $(MAKE)
	ld -r -o $@ init/main.o kernel/kernel.o
kernel/kernel_fdd_main.o: init/kernel_init.o
	cd kernel ; $(MAKE)
	ld -r -o $@ init/kernel_init.o kernel/kernel.o
kernel/kernel.o:
	cd kernel ; $(MAKE)

#--------------------------------------------------------------------------
# compile man function
#--------------------------------------------------------------------------
init/main.o:
	cd init ; $(MAKE)

init/kernel_init.o:
	cd init ; $(MAKE)
#--------------------------------------------------------------------------
# make usermode library to using system_call
#--------------------------------------------------------------------------
lib/libc.a:
	cd lib ; $(MAKE)

#--------------------------------------------------------------------------
# delete all object files and excute files
#--------------------------------------------------------------------------
clean:
	find ./ -name *.o -exec rm -f {} \;
	find ./ -name *.s -exec rm -f {} \;
	rm -f boot/boot.list boot/bootsect
	rm -f ./w_imz system/weixkernel_* system/weixkernel.out system/System.map lib/libc.a
	rm -rf boot/weix_seting

dep:
	cd kernel ; $(MAKE) dep
