M_SRCDIR=modules
M_BUILDDIR=$(BUILDROOT)/modules
M_DIRFILE=$(M_BUILDDIR)/.directory

$(M_BUILDDIR): $(BUILDROOT)
	@mkdir -p $(M_BUILDDIR)

$(M_DIRFILE): $(BUILDROOT)/.directory $(M_SRCDIR)/Makefile
	@echo [mkdir] $(M_BUILDDIR)
	@mkdir -p $(M_BUILDDIR)
	@touch $(M_DIRFILE)

UDI_GEN_SYMBOLS=
include $(M_SRCDIR)/libos/Makefile
include $(M_SRCDIR)/bus/Makefile
include $(M_SRCDIR)/gfx/Makefile
include $(M_SRCDIR)/runtime/Makefile
include $(M_SRCDIR)/storage/Makefile
include $(M_SRCDIR)/fs/Makefile
include $(M_SRCDIR)/net/Makefile

include $(M_SRCDIR)/experimental/Makefile

##fixme: Fix include dependencies

#$(M_BUILDDIR)/libarch.a: $(BUILDROOT)/libarch/libarch.a $(L_BUILDDIR)

STDFBLIBF= $(BUILDROOT)/lib/libarch.a $(BUILDROOT)/lib/libc.a $(BUILDROOT)/lib/libfb.a $(BUILDROOT)/lib/libfbx.a $(BUILDROOT)/lib/libmos.a
STDFBLIBS= -lfb -lc -larch -lmos
STDUDILIBF= $(M_L_BUILDDIR)/eventstatic.o $(M_L_BUILDDIR)/drivercom.o $(M_L_BUILDDIR)/drivertool.o $(BUILDROOT)/lib/libarch.a $(BUILDROOT)/lib/libc.a $(BUILDROOT)/lib/libfb.a $(BUILDROOT)/lib/libfbx.a $(BUILDROOT)/lib/libudi.a $(BUILDROOT)/lib/libmos.a
STDUDILIBS= $(M_L_BUILDDIR)/eventstatic.o $(M_L_BUILDDIR)/drivercom.o $(M_L_BUILDDIR)/drivertool.o -ludi -lfb -lc -lmos -larch  
STDINCDIR=include

#libmos
$(M_BUILDDIR)/libmos.a: $(M_LIBFILES) $(M_DIRFILE)
	@echo [$(AR)] $@
	@-rm $(M_BUILDDIR)/libmos.a
	@$(AR) rcs $(M_BUILDDIR)/libmos.a $(M_LIBFILES)


#test modules
$(M_BUILDDIR)/sys_test.elf: $(RUNTIME) $(M_BUILDDIR)/elf-test.o $(M_BUILDDIR)/elf-test-fb.o $(M_BUILDDIR)/divtest.o $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_BUILDDIR)/elf-test.o $(M_BUILDDIR)/elf-test-fb.o $(M_BUILDDIR)/divtest.o $(STDFBLIBS)

$(M_BUILDDIR)/vga_test.elf: $(RUNTIME) $(M_BUILDDIR)/vga_io.o $(M_BUILDDIR)/test_gfx.o $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_BUILDDIR)/vga_io.o $(M_BUILDDIR)/test_gfx.o $(STDFBLIBS)

$(M_BUILDDIR)/prim_test.elf: $(RUNTIME) $(M_BUILDDIR)/vga_io.o $(M_BUILDDIR)/test_poly.o $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_BUILDDIR)/vga_io.o $(M_BUILDDIR)/test_poly.o $(STDFBLIBS)

$(M_BUILDDIR)/sys_kbdumper.elf: $(RUNTIME) $(M_BUILDDIR)/sys_kbdumper.o $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_BUILDDIR)/sys_kbdumper.o $(STDFBLIBS)

$(M_BUILDDIR)/test_blobs.elf: $(RUNTIME) $(STDFBLIBF) $(M_BUILDDIR)/test_blobs.o $(STDINCDIR)/ia32-pc/mos/blobs.bi
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_BUILDDIR)/test_blobs.o $(STDFBLIBS)

$(M_BUILDDIR)/test_kbd.elf:  $(RUNTIME) $(STDFBLIBF) $(M_BUILDDIR)/test_kbd.o $(STDINCDIR)/ia32-pc/mos/blobs.bi $(STDINCDIR)/common/mos/input.bi
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_BUILDDIR)/test_kbd.o $(STDFBLIBS)

$(M_BUILDDIR)/gfx_blob.elf:  $(RUNTIME) $(STDFBLIBF) $(M_BUILDDIR)/gfx_blob.o $(STDINCDIR)/ia32-pc/mos/blobs.bi
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_BUILDDIR)/gfx_blob.o $(STDFBLIBS)

$(M_BUILDDIR)/ati_test.elf:  $(RUNTIME) $(STDFBLIBF) $(M_BUILDDIR)/test_ati.o $(M_BUILDDIR)/vga_io.o $(M_BUILDDIR)/ati_defregs.o $(M_BUILDDIR)/ati_v8086.o
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_BUILDDIR)/test_ati.o $(M_BUILDDIR)/vga_io.o $(M_BUILDDIR)/ati_defregs.o $(M_BUILDDIR)/ati_v8086.o $(STDFBLIBS)

$(M_BUILDDIR)/test_pci.elf:  $(RUNTIME) $(STDFBLIBF) $(M_BUILDDIR)/test_pci.o $(STDINCDIR)/ia32-pc/mos/pci.bi
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_BUILDDIR)/test_pci.o $(STDFBLIBS)

$(M_BUILDDIR)/v2k_test.elf:  $(RUNTIME) $(STDFBLIBF) $(M_BUILDDIR)/test_v2k.o $(M_BUILDDIR)/vga_io.o
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_BUILDDIR)/test_v2k.o $(M_BUILDDIR)/vga_io.o $(STDFBLIBS)

$(M_BUILDDIR)/test_rt.elf: $(RUNTIME) $(M_BUILDDIR)/runtime/test-runtime.o $(M_BUILDDIR)/runtime/test-fbruntime.o $(M_BUILDDIR)/runtime/test-runtime-syscall.o $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_BUILDDIR)/runtime/test-runtime.o $(M_BUILDDIR)/runtime/test-runtime-syscall.o $(M_BUILDDIR)/runtime/test-fbruntime.o $(STDFBLIBS)

#newer test modules
$(M_BUILDDIR)/vesatest.elf: $(RUNTIME) $(M_E_BUILDDIR)/vesatest.o $(M_G_VBE_BUILDDIR)/vesa_v8086.o $(M_E_BUILDDIR)/quickkey.o $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_E_BUILDDIR)/vesatest.o $(M_G_VBE_BUILDDIR)/vesa_v8086.o $(M_E_BUILDDIR)/quickkey.o $(STDFBLIBS)

$(M_BUILDDIR)/vesaemu.elf: $(RUNTIME) $(M_E_BUILDDIR)/vesaemu.o $(M_G_VBE_BUILDDIR)/vesa_v8086.o $(M_E_BUILDDIR)/vesasetup.o $(M_E_BUILDDIR)/quickkey.o $(STDFBLIBF) $(BUILDROOT)/lib/libx86emu.a
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_E_BUILDDIR)/vesaemu.o $(M_G_VBE_BUILDDIR)/vesa_v8086.o $(M_E_BUILDDIR)/vesasetup.o $(M_E_BUILDDIR)/quickkey.o -lx86emu $(STDFBLIBS)

$(M_BUILDDIR)/pcitest.elf: $(RUNTIME) $(M_E_BUILDDIR)/test_pci.o $(M_B_BUILDDIR)/pci_type1.o $(M_E_BUILDDIR)/quickkey.o $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_E_BUILDDIR)/test_pci.o $(M_B_BUILDDIR)/pci_type1.o $(STDFBLIBS)

$(M_BUILDDIR)/floodserial.elf: $(RUNTIME) $(M_E_BUILDDIR)/floodserial.o $(M_L_BUILDDIR)/drivercom.o $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_E_BUILDDIR)/floodserial.o $(STDFBLIBS)

$(M_BUILDDIR)/mach64_t.elf: $(RUNTIME) $(M_E_BUILDDIR)/mach64test.o $(M_E_BUILDDIR)/mach64_clockdsp.o $(M_B_BUILDDIR)/pci_type1.o $(M_B_BUILDDIR)/pci_util.o $(M_E_BUILDDIR)/quickkey.o $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_E_BUILDDIR)/mach64test.o $(M_E_BUILDDIR)/mach64_clockdsp.o $(M_B_BUILDDIR)/pci_type1.o $(M_B_BUILDDIR)/pci_util.o $(M_E_BUILDDIR)/quickkey.o $(STDFBLIBS)

$(M_BUILDDIR)/bgatest.elf: $(RUNTIME) $(M_E_BUILDDIR)/bgatest.o $(M_G_BUILDDIR)/bga_io.o $(M_B_BUILDDIR)/pci_type1.o $(M_E_BUILDDIR)/quickkey.o $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_E_BUILDDIR)/bgatest.o $(M_G_BUILDDIR)/bga_io.o $(M_B_BUILDDIR)/pci_type1.o $(M_E_BUILDDIR)/quickkey.o $(STDFBLIBS)

$(M_BUILDDIR)/isapnptest.elf: $(RUNTIME) $(M_E_BUILDDIR)/testisapnp.o $(M_B_BUILDDIR)/isapnp.o $(M_E_BUILDDIR)/quickkey.o $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_E_BUILDDIR)/testisapnp.o $(M_B_BUILDDIR)/isapnp.o $(M_E_BUILDDIR)/quickkey.o $(STDFBLIBS)

$(M_BUILDDIR)/ipctest1.elf: $(RUNTIME) $(M_L_BUILDDIR)/drivercom.o $(M_E_BUILDDIR)/ipctest1.o $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_E_BUILDDIR)/ipctest1.o $(M_L_BUILDDIR)/drivercom.o $(STDFBLIBS)

$(M_BUILDDIR)/ipctest2.elf: $(RUNTIME) $(M_L_BUILDDIR)/drivercom.o $(M_E_BUILDDIR)/ipctest2.o $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_E_BUILDDIR)/ipctest2.o $(M_L_BUILDDIR)/drivercom.o $(STDFBLIBS)

$(M_BUILDDIR)/hwbrowse.elf: $(RUNTIME) $(M_E_BUILDDIR)/hwbrowse.o $(M_E_BUILDDIR)/quickkey.o $(M_L_BUILDDIR)/drivercom.o $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_E_BUILDDIR)/hwbrowse.o $(M_E_BUILDDIR)/quickkey.o $(M_L_BUILDDIR)/drivercom.o $(STDFBLIBS)

$(M_BUILDDIR)/gfxtest.elf: $(RUNTIME) $(M_L_BUILDDIR)/drivercom.o $(M_E_BUILDDIR)/gfxtest.o $(STDFBLIBF) $(BUILDROOT)/lib/libswgl.a
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_E_BUILDDIR)/gfxtest.o $(M_L_BUILDDIR)/drivercom.o -lswgl $(STDFBLIBS)

$(M_BUILDDIR)/t64vtest.elf: $(RUNTIME) $(M_E_BUILDDIR)/trio64v.o $(M_G_BUILDDIR)/vga_io.o $(M_B_BUILDDIR)/pci_type1.o $(M_B_BUILDDIR)/pci_util.o $(M_E_BUILDDIR)/quickkey.o $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_E_BUILDDIR)/trio64v.o $(M_G_BUILDDIR)/vga_io.o $(M_B_BUILDDIR)/pci_type1.o $(M_B_BUILDDIR)/pci_util.o $(M_E_BUILDDIR)/quickkey.o $(STDFBLIBS)

$(M_BUILDDIR)/ve2ktest.elf: $(RUNTIME) $(M_E_BUILDDIR)/verite2k.o $(M_G_VE_BUILDDIR)/veriteuc.o $(M_G_BUILDDIR)/vga_io.o $(M_G_BUILDDIR)/gtf.o $(M_B_BUILDDIR)/pci_type1.o $(M_B_BUILDDIR)/pci_util.o $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_E_BUILDDIR)/verite2k.o $(M_G_VE_BUILDDIR)/veriteuc.o $(M_G_BUILDDIR)/vga_io.o $(M_G_BUILDDIR)/gtf.o $(M_B_BUILDDIR)/pci_type1.o $(M_B_BUILDDIR)/pci_util.o $(STDFBLIBS)

$(M_BUILDDIR)/r6xxtest.elf: $(RUNTIME) $(M_E_BUILDDIR)/r600test.o $(M_G_BUILDDIR)/vga_io.o $(M_B_BUILDDIR)/pci_type1.o $(M_B_BUILDDIR)/pci_util.o $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_E_BUILDDIR)/r600test.o $(M_G_BUILDDIR)/vga_io.o $(M_B_BUILDDIR)/pci_type1.o $(M_B_BUILDDIR)/pci_util.o $(STDFBLIBS)

$(M_BUILDDIR)/igmatest.elf: $(RUNTIME) $(M_E_BUILDDIR)/igma.o $(M_G_BUILDDIR)/vga_io.o $(M_B_BUILDDIR)/pci_type1.o $(M_B_BUILDDIR)/pci_util.o $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_E_BUILDDIR)/igma.o $(M_G_BUILDDIR)/vga_io.o $(M_B_BUILDDIR)/pci_type1.o $(M_B_BUILDDIR)/pci_util.o $(STDFBLIBS)

$(M_BUILDDIR)/t3dfxv1.elf: $(RUNTIME) $(M_E_BUILDDIR)/voodoo1.o $(M_G_BUILDDIR)/vga_io.o $(M_B_BUILDDIR)/pci_type1.o $(M_B_BUILDDIR)/pci_util.o $(M_E_BUILDDIR)/quickkey.o $(M_G_VD1_GL_FILES) $(BUILDROOT)/lib/libswgl.a $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_E_BUILDDIR)/voodoo1.o $(M_G_BUILDDIR)/vga_io.o $(M_B_BUILDDIR)/pci_type1.o $(M_B_BUILDDIR)/pci_util.o $(M_E_BUILDDIR)/quickkey.o $(M_G_VD1_GL_FILES) -lswgl $(STDFBLIBS)

$(M_BUILDDIR)/gfxdemo.elf: $(RUNTIME) $(M_E_BUILDDIR)/gfxdemo.o $(M_E_BUILDDIR)/quickkey.o $(M_L_BUILDDIR)/eventstatic.o $(M_G_BUILDDIR)/font8_8.o $(STDFBLIBF) $(BUILDROOT)/lib/libgl.a $(BUILDROOT)/lib/libgfx.a $(BUILDROOT)/lib/libmos.a
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_E_BUILDDIR)/gfxdemo.o $(M_E_BUILDDIR)/quickkey.o $(M_L_BUILDDIR)/eventstatic.o $(M_G_BUILDDIR)/font8_8.o -lgfx -lgl -lmos $(STDFBLIBS)

$(M_BUILDDIR)/giotest.elf: $(RUNTIME) $(M_E_BUILDDIR)/giotest.o $(M_E_BUILDDIR)/quickkey.o $(M_L_BUILDDIR)/drivercom.o $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_E_BUILDDIR)/giotest.o $(M_E_BUILDDIR)/quickkey.o $(M_L_BUILDDIR)/drivercom.o $(STDFBLIBS)

$(M_BUILDDIR)/blktest.elf: $(RUNTIME) $(M_E_BUILDDIR)/blocktest.o $(M_E_BUILDDIR)/quickkey.o $(M_L_BUILDDIR)/drivercom.o $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_E_BUILDDIR)/blocktest.o $(M_E_BUILDDIR)/quickkey.o $(M_L_BUILDDIR)/drivercom.o $(STDFBLIBS)

$(M_BUILDDIR)/dbglog.elf: $(RUNTIME) $(M_E_BUILDDIR)/dbglog.o $(M_B_BUILDDIR)/serial_io.o $(M_L_BUILDDIR)/drivercom.o $(STDFBLIBF) $(M_L_SRCDIR)/drivers.bi
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_E_BUILDDIR)/dbglog.o $(M_B_BUILDDIR)/serial_io.o $(M_L_BUILDDIR)/drivercom.o $(STDFBLIBS)

$(M_BUILDDIR)/hackme.elf: $(RUNTIME) $(M_E_BUILDDIR)/hackme.o $(M_E_BUILDDIR)/quickkey.o $(M_L_BUILDDIR)/drivercom.o $(STDFBLIBF) $(M_L_SRCDIR)/drivers.bi
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_E_BUILDDIR)/hackme.o $(M_E_BUILDDIR)/quickkey.o $(M_L_BUILDDIR)/drivercom.o $(STDFBLIBS)

$(M_BUILDDIR)/cirrus_t.elf: $(RUNTIME) $(M_E_BUILDDIR)/cirrustest.o $(M_E_BUILDDIR)/quickkey.o $(M_L_BUILDDIR)/drivercom.o $(M_B_BUILDDIR)/pci_type1.o $(M_B_BUILDDIR)/pci_util.o $(M_G_BUILDDIR)/vga_io.o $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_E_BUILDDIR)/cirrustest.o $(M_E_BUILDDIR)/quickkey.o $(M_L_BUILDDIR)/drivercom.o $(M_B_BUILDDIR)/pci_type1.o $(M_B_BUILDDIR)/pci_util.o $(M_G_BUILDDIR)/vga_io.o $(STDFBLIBS)

$(M_BUILDDIR)/vgacheck.elf: $(RUNTIME) $(M_G_BUILDDIR)/vga_io.o $(M_G_VGA_BUILDDIR)/vgahwtest.o $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_G_BUILDDIR)/vga_io.o $(M_G_VGA_BUILDDIR)/vgahwtest.o $(STDFBLIBS)

$(M_BUILDDIR)/serprobe.elf: $(RUNTIME) $(M_B_BUILDDIR)/serial_io.o $(M_E_BUILDDIR)/remoteprobe.o $(M_B_BUILDDIR)/pci_type1.o $(M_B_BUILDDIR)/pci_util.o $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_B_BUILDDIR)/serial_io.o $(M_E_BUILDDIR)/remoteprobe.o $(M_B_BUILDDIR)/pci_type1.o $(M_B_BUILDDIR)/pci_util.o $(STDFBLIBS)
	
$(M_BUILDDIR)/chantest.elf: $(RUNTIME) $(M_E_BUILDDIR)/channeltest.o $(M_E_BUILDDIR)/quickkey.o $(M_L_BUILDDIR)/drivercom.o $(M_L_BUILDDIR)/eventstatic.o $(M_F_BUILDDIR)/fsdriver.o $(M_L_BUILDDIR)/clistener.o $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_E_BUILDDIR)/channeltest.o $(M_E_BUILDDIR)/quickkey.o $(M_L_BUILDDIR)/drivercom.o $(M_L_BUILDDIR)/eventstatic.o $(M_F_BUILDDIR)/fsdriver.o $(M_L_BUILDDIR)/clistener.o $(STDFBLIBS)

$(M_BUILDDIR)/fstest.elf: $(RUNTIME) $(M_E_BUILDDIR)/fstest.o $(M_E_BUILDDIR)/quickkey.o $(M_L_BUILDDIR)/drivercom.o $(M_L_BUILDDIR)/eventstatic.o $(M_F_BUILDDIR)/fsdriver.o $(M_S_BUILDDIR)/blockdriver.o $(M_L_BUILDDIR)/clistener.o $(M_G_BUILDDIR)/rawvgatk.o $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_E_BUILDDIR)/fstest.o $(M_E_BUILDDIR)/quickkey.o $(M_L_BUILDDIR)/drivercom.o $(M_L_BUILDDIR)/eventstatic.o $(M_F_BUILDDIR)/fsdriver.o $(M_S_BUILDDIR)/blockdriver.o $(M_L_BUILDDIR)/clistener.o $(M_G_BUILDDIR)/rawvgatk.o $(STDFBLIBS)

$(M_BUILDDIR)/tweak.elf: $(RUNTIME) $(M_E_BUILDDIR)/tweak.o $(M_E_BUILDDIR)/tweak_ui.o $(M_E_BUILDDIR)/quickkey.o $(M_L_BUILDDIR)/drivercom.o $(M_G_BUILDDIR)/vga_io.o $(M_B_BUILDDIR)/pci_type1.o $(M_B_BUILDDIR)/pci_util.o $(M_E_BUILDDIR)/tweakdev.o $(M_G_BUILDDIR)/bga_io.o $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_E_BUILDDIR)/tweak.o $(M_E_BUILDDIR)/tweak_ui.o $(M_E_BUILDDIR)/quickkey.o $(M_L_BUILDDIR)/drivercom.o $(M_G_BUILDDIR)/vga_io.o $(M_B_BUILDDIR)/pci_type1.o $(M_B_BUILDDIR)/pci_util.o $(M_E_BUILDDIR)/tweakdev.o $(M_G_BUILDDIR)/bga_io.o $(STDFBLIBS)

$(M_BUILDDIR)/words.elf: $(RUNTIME) $(M_E_BUILDDIR)/words_gfx.o $(M_E_BUILDDIR)/words_core.o $(M_E_BUILDDIR)/quickkey.o $(M_L_BUILDDIR)/eventstatic.o $(M_G_BUILDDIR)/font8_8.o $(STDFBLIBF) $(BUILDROOT)/lib/libgl.a $(BUILDROOT)/lib/libgfx.a $(BUILDROOT)/lib/libmos.a
	@echo [$(LD)]] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_E_BUILDDIR)/words_gfx.o $(M_E_BUILDDIR)/words_core.o $(M_E_BUILDDIR)/quickkey.o $(M_L_BUILDDIR)/eventstatic.o $(M_G_BUILDDIR)/font8_8.o -lgfx -lgl -lmos $(STDFBLIBS)


#UI modules
$(M_BUILDDIR)/blobs.elf: $(RUNTIME) $(M_BUILDDIR)/blobs.o $(STDFBLIBF) $(STDINCDIR)/common/mos/blobs.bi $(STDINCDIR)/common/mos/gfx.bi
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_BUILDDIR)/blobs.o $(STDFBLIBS)


# ia32-pc drivers
$(M_BUILDDIR)/gfx_textmode.elf: $(RUNTIME) $(STDFBLIBF) $(M_BUILDDIR)/gfx_textmode.o $(STDINCDIR)/ia32-pc/mos/gfx.bi
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_BUILDDIR)/gfx_textmode.o $(STDFBLIBS)

$(M_BUILDDIR)/keyboard.elf: $(RUNTIME) $(STDFBLIBF) $(M_BUILDDIR)/keyboard.o $(STDINCDIR)/ia32-pc/mos/input.bi
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_BUILDDIR)/keyboard.o $(STDFBLIBS)

$(M_BUILDDIR)/pci_mgr.elf:  $(RUNTIME) $(STDFBLIBF) $(M_BUILDDIR)/pci_mgr.o $(STDINCDIR)/ia32-pc/mos/pci.bi
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_BUILDDIR)/pci_mgr.o $(STDFBLIBS)



# ia-pc servers
$(M_BUILDDIR)/devmgr.elf: $(RUNTIME) $(M_L_BUILDDIR)/devmgr.o $(M_L_BUILDDIR)/drivercom.o $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_L_BUILDDIR)/devmgr.o $(M_L_BUILDDIR)/drivercom.o $(STDFBLIBS)

$(M_BUILDDIR)/procmgr.elf: $(RUNTIME) $(M_L_BUILDDIR)/procmgr.o $(M_L_BUILDDIR)/drivercom.o $(M_L_BUILDDIR)/comproxy.o $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_L_BUILDDIR)/procmgr.o $(M_L_BUILDDIR)/drivercom.o $(M_L_BUILDDIR)/comproxy.o $(STDFBLIBS)

$(M_BUILDDIR)/autoload.elf: $(RUNTIME) $(M_L_BUILDDIR)/autoload.o $(M_L_BUILDDIR)/drivercom.o $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_L_BUILDDIR)/autoload.o $(M_L_BUILDDIR)/drivercom.o $(STDFBLIBS)

$(M_BUILDDIR)/bootconf.elf: $(RUNTIME) $(M_L_BUILDDIR)/bootconf.o $(M_L_BUILDDIR)/drivers.o $(M_L_BUILDDIR)/driverfunc.o $(M_E_BUILDDIR)/quickkey.o $(M_L_BUILDDIR)/drivercom.o $(M_G_BUILDDIR)/rawvgatk.o $(STDFBLIBF) $(M_L_SRCDIR)/drivers.bi
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_L_BUILDDIR)/bootconf.o $(M_L_BUILDDIR)/drivers.o $(M_L_BUILDDIR)/driverfunc.o $(M_E_BUILDDIR)/quickkey.o $(M_L_BUILDDIR)/drivercom.o $(M_G_BUILDDIR)/rawvgatk.o $(STDFBLIBS)

$(M_BUILDDIR)/fsprobe.elf: $(RUNTIME) $(M_S_BUILDDIR)/fsprobe.o $(M_L_BUILDDIR)/drivercom.o $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_S_BUILDDIR)/fsprobe.o $(M_L_BUILDDIR)/drivercom.o $(STDFBLIBS)

$(M_BUILDDIR)/pciserv.elf: $(RUNTIME) $(M_B_BUILDDIR)/pciserv.o $(M_B_BUILDDIR)/pci_util.o $(M_B_BUILDDIR)/pci_type1.o $(M_L_BUILDDIR)/drivercom.o $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_B_BUILDDIR)/pciserv.o $(M_B_BUILDDIR)/pci_util.o $(M_B_BUILDDIR)/pci_type1.o $(M_L_BUILDDIR)/drivercom.o $(STDFBLIBS)

# ia-pc drivers
$(M_BUILDDIR)/bga.elf: $(RUNTIME) $(M_G_BUILDDIR)/bga_core.o $(M_G_BUILDDIR)/wrapper2.o $(M_G_VGA_BUILDDIR)/vgapalette.o $(M_G_VGA_BUILDDIR)/dac18buffer.o $(M_G_BUILDDIR)/rangetool.o $(M_B_BUILDDIR)/pci_type1.o $(M_G_BUILDDIR)/bga_io.o $(M_G_BUILDDIR)/opcode_tool.o $(M_G_BUILDDIR)/opcode_lfb.o $(M_L_BUILDDIR)/drivercom.o $(M_L_BUILDDIR)/drivertool.o $(BUILDROOT)/lib/libswgl.a $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_G_BUILDDIR)/bga_core.o $(M_G_BUILDDIR)/wrapper2.o $(M_G_VGA_BUILDDIR)/vgapalette.o $(M_G_VGA_BUILDDIR)/dac18buffer.o $(M_G_BUILDDIR)/rangetool.o $(M_B_BUILDDIR)/pci_type1.o $(M_G_BUILDDIR)/bga_io.o $(M_G_BUILDDIR)/opcode_tool.o $(M_G_BUILDDIR)/opcode_lfb.o $(M_L_BUILDDIR)/drivercom.o $(M_L_BUILDDIR)/drivertool.o -lswgl $(STDFBLIBS)

$(M_BUILDDIR)/stdvga.elf: $(RUNTIME) $(M_G_BUILDDIR)/vga_core.o $(M_G_VGA_BUILDDIR)/vgasocket.o $(M_G_VGA_BUILDDIR)/vgaengine.o $(M_G_VGA_BUILDDIR)/vgacommand.o $(M_G_VGA_BUILDDIR)/vgapalette.o $(M_G_BUILDDIR)/wrapper2.o $(M_G_BUILDDIR)/rangetool.o $(M_G_BUILDDIR)/vga_io.o $(M_L_BUILDDIR)/drivercom.o $(M_L_BUILDDIR)/drivertool.o $(STDINCDIR)/ia-pc/mos/gfx.bi $(BUILDROOT)/lib/libswgl.a $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_G_BUILDDIR)/vga_core.o $(M_G_VGA_BUILDDIR)/vgasocket.o $(M_G_VGA_BUILDDIR)/vgaengine.o $(M_G_VGA_BUILDDIR)/vgacommand.o $(M_G_VGA_BUILDDIR)/vgapalette.o $(M_G_BUILDDIR)/wrapper2.o $(M_G_BUILDDIR)/rangetool.o $(M_G_BUILDDIR)/vga_io.o $(M_L_BUILDDIR)/drivercom.o $(M_L_BUILDDIR)/drivertool.o -lswgl $(STDFBLIBS)

$(M_BUILDDIR)/isaprobe.elf: $(RUNTIME) $(M_B_BUILDDIR)/isaprobe.o $(M_L_BUILDDIR)/drivercom.o $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_B_BUILDDIR)/isaprobe.o $(M_L_BUILDDIR)/drivercom.o $(STDFBLIBS)

$(M_BUILDDIR)/verite.elf: $(RUNTIME) $(M_G_VE_BUILDDIR)/v2k_core.o $(M_G_VE_BUILDDIR)/v2k_func.o $(M_G_BUILDDIR)/wrapper2.o $(M_G_BUILDDIR)/rangetool.o $(M_G_BUILDDIR)/opcode_tool.o $(M_G_BUILDDIR)/opcode_lfb.o $(M_B_BUILDDIR)/pci_type1.o $(M_L_BUILDDIR)/drivercom.o $(M_L_BUILDDIR)/drivertool.o $(BUILDROOT)/lib/libswgl.a $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_G_VE_BUILDDIR)/v2k_core.o $(M_G_VE_BUILDDIR)/v2k_func.o $(M_G_BUILDDIR)/wrapper2.o $(M_G_BUILDDIR)/rangetool.o $(M_G_BUILDDIR)/opcode_tool.o $(M_G_BUILDDIR)/opcode_lfb.o $(M_B_BUILDDIR)/pci_type1.o $(M_L_BUILDDIR)/drivercom.o $(M_L_BUILDDIR)/drivertool.o -lswgl $(STDFBLIBS)

$(M_BUILDDIR)/trio64v.elf: $(RUNTIME) $(M_G_T64_BUILDDIR)/trio64_core.o $(M_G_T64_BUILDDIR)/trio64_blit.o $(M_G_T64_BUILDDIR)/trio64_gpu.o $(M_G_T64_BUILDDIR)/trio64_socket.o $(M_G_T64_BUILDDIR)/trio64_engine.o $(M_G_T64_BUILDDIR)/trio64_cmd.o $(M_G_BUILDDIR)/vga_io.o $(M_G_BUILDDIR)/wrapper2.o $(M_G_BUILDDIR)/rangetool.o $(M_B_BUILDDIR)/pci_type1.o $(M_L_BUILDDIR)/drivercom.o $(M_L_BUILDDIR)/drivertool.o $(BUILDROOT)/lib/libswgl.a $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_G_T64_BUILDDIR)/trio64_core.o $(M_G_T64_BUILDDIR)/trio64_blit.o $(M_G_T64_BUILDDIR)/trio64_gpu.o $(M_G_T64_BUILDDIR)/trio64_socket.o $(M_G_T64_BUILDDIR)/trio64_engine.o $(M_G_T64_BUILDDIR)/trio64_cmd.o $(M_G_BUILDDIR)/vga_io.o $(M_G_BUILDDIR)/wrapper2.o $(M_G_BUILDDIR)/rangetool.o $(M_B_BUILDDIR)/pci_type1.o $(M_L_BUILDDIR)/drivercom.o $(M_L_BUILDDIR)/drivertool.o -lswgl $(STDFBLIBS)

$(M_BUILDDIR)/gma.elf: $(RUNTIME) $(M_G_GMA_BUILDDIR)/gma_core.o $(M_G_GMA_BUILDDIR)/gma_socket.o $(M_G_GMA_BUILDDIR)/gma_engine.o $(M_G_GMA_BUILDDIR)/gma_cmd.o $(M_G_BUILDDIR)/wrapper2.o $(M_G_BUILDDIR)/rangetool.o $(M_B_BUILDDIR)/pci_type1.o $(M_L_BUILDDIR)/drivercom.o $(M_L_BUILDDIR)/drivertool.o $(BUILDROOT)/lib/libswgl.a $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_G_GMA_BUILDDIR)/gma_core.o $(M_G_GMA_BUILDDIR)/gma_socket.o $(M_G_GMA_BUILDDIR)/gma_engine.o $(M_G_GMA_BUILDDIR)/gma_cmd.o $(M_G_BUILDDIR)/wrapper2.o $(M_G_BUILDDIR)/rangetool.o $(M_B_BUILDDIR)/pci_type1.o $(M_L_BUILDDIR)/drivercom.o $(M_L_BUILDDIR)/drivertool.o -lswgl $(STDFBLIBS)

$(M_BUILDDIR)/mach64.elf: $(RUNTIME) $(M_G_M64_BUILDDIR)/mach64_core.o $(M_G_M64_BUILDDIR)/mach64_socket.o $(M_G_M64_BUILDDIR)/mach64_engine.o $(M_G_M64_BUILDDIR)/mach64_cmd.o $(M_G_BUILDDIR)/wrapper2.o $(M_G_BUILDDIR)/rangetool.o $(M_B_BUILDDIR)/pci_type1.o $(M_B_BUILDDIR)/pci_util.o $(M_L_BUILDDIR)/drivercom.o $(M_L_BUILDDIR)/drivertool.o $(BUILDROOT)/lib/libswgl.a $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_G_M64_BUILDDIR)/mach64_core.o $(M_G_M64_BUILDDIR)/mach64_socket.o $(M_G_M64_BUILDDIR)/mach64_engine.o $(M_G_M64_BUILDDIR)/mach64_cmd.o $(M_G_BUILDDIR)/wrapper2.o $(M_G_BUILDDIR)/rangetool.o $(M_B_BUILDDIR)/pci_type1.o $(M_B_BUILDDIR)/pci_util.o $(M_L_BUILDDIR)/drivercom.o $(M_L_BUILDDIR)/drivertool.o -lswgl $(STDFBLIBS)

$(M_BUILDDIR)/atactl.elf: $(RUNTIME) $(M_S_BUILDDIR)/atactl.o $(M_L_BUILDDIR)/drivercom.o $(M_L_BUILDDIR)/drivertool.o $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_S_BUILDDIR)/atactl.o $(M_L_BUILDDIR)/drivercom.o $(M_L_BUILDDIR)/drivertool.o $(STDFBLIBS)

$(M_BUILDDIR)/atadisk.elf: $(RUNTIME) $(M_S_BUILDDIR)/atadisk.o $(M_S_BUILDDIR)/simplesched.o $(M_S_BUILDDIR)/diskmm.o $(M_L_BUILDDIR)/drivercom.o $(M_L_BUILDDIR)/drivertool.o $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_S_BUILDDIR)/atadisk.o $(M_S_BUILDDIR)/simplesched.o $(M_S_BUILDDIR)/diskmm.o $(M_L_BUILDDIR)/drivercom.o $(M_L_BUILDDIR)/drivertool.o $(STDFBLIBS)

$(M_BUILDDIR)/dospart.elf: $(RUNTIME) $(M_S_BUILDDIR)/dospart.o $(M_S_BUILDDIR)/roottrace.o $(M_S_BUILDDIR)/blocktool.o $(M_L_BUILDDIR)/drivercom.o $(M_L_BUILDDIR)/drivertool.o $(STDFBLIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_S_BUILDDIR)/dospart.o $(M_S_BUILDDIR)/roottrace.o $(M_S_BUILDDIR)/blocktool.o $(M_L_BUILDDIR)/drivercom.o $(M_L_BUILDDIR)/drivertool.o $(STDFBLIBS)

$(M_BUILDDIR)/fat.elf: $(RUNTIME) $(M_F_BUILDDIR)/fatmain.o $(M_F_BUILDDIR)/fat.o $(M_F_BUILDDIR)/fsdriver.o $(M_S_BUILDDIR)/roottrace.o $(M_S_BUILDDIR)/blocktool.o $(M_L_BUILDDIR)/clistener.o $(M_L_BUILDDIR)/drivercom.o $(M_L_BUILDDIR)/drivertool.o $(M_L_BUILDDIR)/eventstatic.o $(STDFBLIBF) $(M_S_BUILDDIR)/blockdriver.o
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_F_BUILDDIR)/fatmain.o $(M_F_BUILDDIR)/fat.o $(M_F_BUILDDIR)/fsdriver.o $(M_S_BUILDDIR)/roottrace.o $(M_S_BUILDDIR)/blocktool.o $(M_L_BUILDDIR)/clistener.o $(M_L_BUILDDIR)/drivercom.o $(M_L_BUILDDIR)/drivertool.o $(M_L_BUILDDIR)/eventstatic.o $(M_S_BUILDDIR)/blockdriver.o $(STDFBLIBS)


# UDI drivers
$(M_BUILDDIR)/u_cmos.elf: $(RUNTIME) $(M_E_BUILDDIR)/udi_cmos.o $(M_E_BUILDDIR)/udi_cmos_props.o $(STDUDILIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_E_BUILDDIR)/udi_cmos.o $(M_E_BUILDDIR)/udi_cmos_props.o $(STDUDILIBS)

$(M_BUILDDIR)/u_ramdsk.elf: $(RUNTIME) $(M_E_BUILDDIR)/udi_ramdisk.o $(M_E_BUILDDIR)/udi_ramdisk_props.o $(STDUDILIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_E_BUILDDIR)/udi_ramdisk.o $(M_E_BUILDDIR)/udi_ramdisk_props.o $(STDUDILIBS)
	
$(M_BUILDDIR)/u_vga.elf: $(RUNTIME) $(M_G_BUILDDIR)/udivga.o $(M_G_VGA_BUILDDIR)/vga_udiprops.o $(M_G_VGA_BUILDDIR)/vgasocket.o $(M_G_VGA_BUILDDIR)/vgaengine.o $(M_G_VGA_BUILDDIR)/vgacommand.o $(M_G_VGA_BUILDDIR)/vgapalette.o $(M_G_BUILDDIR)/wrapper2.o $(M_G_BUILDDIR)/rangetool.o $(M_G_BUILDDIR)/vga_io.o $(M_L_BUILDDIR)/drivercom.o $(M_L_BUILDDIR)/drivertool.o $(STDINCDIR)/ia-pc/mos/gfx.bi $(BUILDROOT)/lib/libswgl.a $(STDUDILIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_G_BUILDDIR)/udivga.o $(M_G_VGA_BUILDDIR)/vga_udiprops.o $(M_G_VGA_BUILDDIR)/vgasocket.o $(M_G_VGA_BUILDDIR)/vgaengine.o $(M_G_VGA_BUILDDIR)/vgacommand.o $(M_G_VGA_BUILDDIR)/vgapalette.o $(M_G_BUILDDIR)/wrapper2.o $(M_G_BUILDDIR)/rangetool.o $(M_G_BUILDDIR)/vga_io.o -lswgl $(STDUDILIBS)

$(M_BUILDDIR)/u_vfat.elf: $(RUNTIME) $(M_F_BUILDDIR)/fat.o $(M_F_BUILDDIR)/fat_udiprops.o $(STDUDILIBF)
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_F_BUILDDIR)/fat.o $(M_F_BUILDDIR)/fat_udiprops.o $(STDUDILIBS)

$(M_BUILDDIR)/u_mach.elf: $(RUNTIME) $(STDUDILIBF) $(M_L_UDI_BUILDDIR)/gfx_provider_r.o $(M_L_UDI_BUILDDIR)/gfx_client_t.o $(M_G_M64_BUILDDIR)/umach_glue.o $(M_G_M64_BUILDDIR)/umach_core.o $(M_B_BUILDDIR)/pci_type1.o $(M_B_BUILDDIR)/pci_util.o
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) -o $@ $(RUNTIME) $(M_L_UDI_BUILDDIR)/gfx_provider_r.o $(M_L_UDI_BUILDDIR)/gfx_client_t.o $(M_G_M64_BUILDDIR)/umach_glue.o $(M_G_M64_BUILDDIR)/umach_core.o $(M_B_BUILDDIR)/pci_type1.o $(M_B_BUILDDIR)/pci_util.o $(STDUDILIBS)
	


#Build rules
$(M_BUILDDIR)/%.o: $(M_SRCDIR)/%.asm $(M_DIRFILE)
	@echo [$(AS)] $@
	@$(AS) $(ASPARMS) $< -o $@

$(M_BUILDDIR)/%.$(FBEMIT): $(M_SRCDIR)/%.bas $(M_DIRFILE)
	@echo [$(FB)] $@
	@$(FB) $(FBPARMS) $(FBFLAGS) $< -o $@

$(M_BUILDDIR)/%.o: $(M_SRCDIR)/%.c $(M_DIRFILE)
	@echo [$(CC)] $@
	@$(CC) $(CCPARMS) $(CFLAGS)  $< -o $@

ifneq ($(FBEMIT),o)

$(M_BUILDDIR)/%.o: $(M_BUILDDIR)/%.$(FBEMIT) $(M_DIRFILE)
	@echo [$(CC)] $@
	@$(CC) $(FBCCPARMS) $(CFLAGS)  $< -o $@

endif
