TOPDIR = ./
include Make.in
BINDIR = bin/


#********************************************* Make *****************************************************


all: link_machine \
     compile_setup \
     compile_machine \
     compile_lib \
     compile_kern \
     compile_isa \
     compile_pci \
     compile_driver \
     compile_net \
     compile_module \
     $(BINDIR)setup \
     compile_boot


link_machine:
	rm machine;
	ln -s $(MACHINE) machine;

compile_setup:
	cd $(SETUPDIR); make

compile_machine:
	cd machine; make

compile_lib:
	cd $(LIBDIR); make

compile_kern:
	cd $(KERNDIR); make

compile_isa:
	cd $(ISADIR); make

compile_pci:
	cd $(PCIDIR); make

compile_driver:
	cd $(DRIVERDIR); make

compile_net:
	cd $(NETDIR); make

compile_module:
	cd $(MODULEDIR); make

compile_boot:
	cd $(BOOTDIR); make

$(BINDIR)setup: $(SETUPOBJ) \
                $(MACHINEOBJ) \
                $(LIBOBJ) \
                $(KERNOBJ) \
                $(ISAOBJ) \
                $(PCIOBJ) \
                $(DRIVEROBJ) \
                $(NETOBJ) \
                $(MODULEOBJ) \
                $(LIBGCC)
	$(LD) -Ttext $(START_ADDRESS) -o $@ $^ -Map $(BINDIR)link.map


$(BINDIR)%.o: %.S
	$(CC) $(CFLAG) -o $@ $<

$(BINDIR)%.o: %.c
	$(CC) $(CFLAG) -o $@ $<


# Linuxboot᡼եåԡ˥ԡ
fd:make_boot
	cp $(BINDIR)boot.img /dev/fd0

# Cygwinboot᡼եåԡ˥ԡ
floppy:make_boot
	rawwritewin $(BINDIR)boot.img

make_boot:
	$(TOOLSBINDIR)elfload $(BINDIR)setup $(BINDIR)setup.img
	$(TOOLSDIR)check_size $(BOOTDIR)$(BINDIR)$(BOOT)
	dd if=$(BOOTDIR)$(BINDIR)$(BOOT) of=$(BINDIR)boot.img
	$(TOOLSBINDIR)boot_sign $(BINDIR)boot.img
	dd if=$(BINDIR)setup.img of=$(BINDIR)boot.img seek=1


clean:
	cd $(BOOTDIR);make clean
	cd $(LIBDIR);make clean
	cd $(MODULEDIR);make clean
	cd $(NETDIR);make clean
	cd $(DRIVERDIR);make clean
	cd $(PCIDIR);make clean
	cd $(ISADIR);make clean
	cd $(KERNDIR);make clean
	cd machine;make clean
	cd $(SETUPDIR);make clean
	rm -f $(BINDIR)*
