top_srcdir=.
include config.mk

SUBDIRS=  ppc m16c 6510 z80 8051 m68k 
SUBMODULES=boards devices printer c16x avr8

.PHONY: $(SUBDIRS) $(SUBMODULES)  subdirs depend all default


INCLUDES:=$(patsubst %,-I%,$(SUBDIRS)) -I.
INCLUDES += $(patsubst %,-I%,$(SUBMODULES)) -I.

SRCFILES:=softgun.c arm9cpu.c idecode.c mmu.c instructions.c ns9750_mem.c ns9750_serial.c \
	ns9750_timer.c ns9750_bbus.c ns9750_pci.c ns9750_usb.c ns9750_eth.c ns9750_bbdma.c \
	pl190_irq.c ns9xxx_i2c.c arm_vfp.c xy_tree.c xy_hash.c bus.c signode.c \
	ste10_100.c m93c46.c linux-tap.c fio.c socket_can.c \
	sja1000.c dram.c sram.c amdflash.c lacc_can.c usb_ohci.c cycletimer.c \
	configfile.c lxt971a.c ml6652.c cmdedit.c  interpreter.c \
	loader.c i2c_serdes.c m24cxx.c pcf8563.c i82559.c\
	pcf8575.c pcf8574.c telnetd.c pc16550.c pca9544.c max6651.c lm75.c pcf8591.c \
	ads7828.c ihex.c srec.c shlib.c mainloop_events.c gdebug.c  diskimage.c \
	lpcflash.c lpc2106_timer.c  lpc2106_gpio.c lpc2106_scb.c \
	imx21_uart.c aitc.c imx_timer.c imx21_lcdc.c imx21_crm.c serial.c cs8900.c \
	imx21_gpio.c isp1301.c imx21_otg.c imx21_sdhc.c imx21_dmac.c mmcard.c \
	clock.c imx21_eim.c imx21_wdog.c imx21_sdrc.c imx21_rtc.c rfbserver.c \
	imx21_cspi.c ds1305.c sht71.c imx21_pwm.c keyboard.c matrix_keyboard.c \
	imx21_i2c.c at91_usart.c at91_tc.c at91_aic.c usbdevice.c usbstdrq.c\
	djet460.c relais.c at91_emac.c at91_twi.c ds3234.c at91_mc.c at91_st.c \
	at91_pmc.c at91_pio.c ds1337.c at91_ebi.c senseless.c imx21_max.c \
	imx21_pcmcia.c at91_mci.c at91_pdc.c lh79520_uart.c thumb_decode.c \
	thumb_instructions.c hello_world.c lh79520_ssp.c logical.c sgstring.c \
	s3c2410_intco.c s3c2410_nand.c nand.c s3c2410_memco.c s3c2410_uart.c


SHSRC := 
TARGETS := .depend version.c subdirs softgun
INSTALL_BINS := softgun
default: all

ifneq ($(MAKECMDGOALS),clean)
-include .depend
endif

include $(patsubst %,%/module.mk,$(SUBMODULES))

OBJS := $(SRCFILES:.c=.o) version.o
SHOBJS :=$(SHSRC:.c=.so)
OBJS_BE :=$(SRCFILES:.c=.be.o)

all: $(TARGETS) $(SHOBJS)
	@#echo "Targets: " $(TARGETS)

subdirs: $(SUBDIRS)

$(SUBDIRS):
	@if [ -d $@ ]; then make -C $@; fi
	
version.c:
	$(shell echo -ne "/*\n * This file is automatically generated\n */\n" > $@;) \
	$(shell echo -ne "#include <version.h>\nconst char *softgun_version = \"" >> $@;) \
	$(shell x=$(CURDIR); echo -n $${x##*/} >> $@;) \
	$(shell echo "\";" >> $@;) 

install: $(INSTALL_BINS)
	@for f in $(INSTALL_BINS); do \
		install -m 755 $$f $(bindir); \
	done
	mkdir -p $(libdir)
	@for dir in $(SUBDIRS) ; do \
		if [ -d $$dir ]; then \
			make -C $$dir install; \
		fi; \
	done
	@for obj in $(SHOBJS) ; do \
		install -m 0755 $$obj $(libdir); \
	done

	
softgun: $(OBJS) 
	$(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)

softgun_be: $(OBJS_BE) 
	$(CC) $(CFLAGS) $(OBJS_BE) -o $@ $(LDFLAGS)

boards/libboards.a:
	make -C boards libboards.a

depend: .depend

.depend:
	gcc -MM $(CFLAGS) $(INCLUDES) $(SRCFILES) > .depend
	

clean:
	rm -f $(TARGETS)  $(OBJS)
	@for dir in $(SUBDIRS); do \
		if [ -d $$dir ]; then \
			make -C $$dir clean; \
		fi; \
	done; \
	rm -f $(SHOBJS)
