# 
# Makefile for PIC32-MX libp.a
#
# This makefile will only work with GNU make
#

ROOT := $(shell pwd)

include $(ROOT)/../defines.mk

MAKEFILE = -f $(ROOT)/libp.mk

PROCESSORS_1XX := $(subst P32MX1,32MX1,$(basename $(notdir $(shell find $(ROOT)/../include/proc -name p32mx1\*.h ! -name p32mxgeneric.h | tr [:lower:] [:upper:]))))

PROCESSORS_2XX := $(subst P32MX2,32MX2,$(basename $(notdir $(shell find $(ROOT)/../include/proc -name p32mx2\*.h ! -name p32mxgeneric.h | tr [:lower:] [:upper:]))))

PROCESSORS_3XX := $(subst P32MX3,32MX3,$(basename $(notdir $(shell find $(ROOT)/../include/proc -name p32mx3\*.h ! -name p32mxgeneric.h | tr [:lower:] [:upper:]))))

PROCESSORS_4XX := $(subst P32MX4,32MX4,$(basename $(notdir $(shell find $(ROOT)/../include/proc -name p32mx4\*.h ! -name p32mxgeneric.h | tr [:lower:] [:upper:]))))

PROCESSORS_5XX := $(subst P32MX5,32MX5,$(basename $(notdir $(shell find $(ROOT)/../include/proc -name p32mx5\*.h ! -name p32mxgeneric.h | tr [:lower:] [:upper:]))))

PROCESSORS_6XX := $(subst P32MX6,32MX6,$(basename $(notdir $(shell find $(ROOT)/../include/proc -name p32mx6\*.h ! -name p32mxgeneric.h | tr [:lower:] [:upper:]))))

PROCESSORS_7XX := $(subst P32MX7,32MX7,$(basename $(notdir $(shell find $(ROOT)/../include/proc -name p32mx7\*.h ! -name p32mxgeneric.h | tr [:lower:] [:upper:]))))


all install:
	@$(MAKE) doall T=$@

install-baseline:
	@$(MAKE) doall T=install

install-src:
	mkdir -p $(TGTLIBSRC)/peripheral
	cp Makefile $(TGTLIBSRC)/peripheral
	cp libp.mk $(TGTLIBSRC)/peripheral
	 $(foreach dir,$(shell find . -type d  | grep -v .svn | grep -v OBJ), \
	   mkdir -p $(TGTLIBSRC)/peripheral/$(dir); \
	   cp $(dir)/* ${TGTLIBSRC}/peripheral/$(dir) 2>>/dev/null; )


install-proc:

clean:
	@$(MAKE) doall T=$@
	[ ! -d OBJ ] || rm -r OBJ
	rm -f *[~#]

doall: dodir
# Build libraries for 1XX devices
	$(foreach ML,$(shell $(CC) --print-multi-lib), \
		set -e; \
		rdir=`echo "$(ML)" | sed -e 's/;.*$$//'`; \
		dir=OBJ/$$rdir; \
		[ -d $$dir ] || mkdir -p $$dir; \
		flags=`echo "$(ML)" | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \
		if echo "$$flags" | egrep -v '$(SKIPARCHS)' >/dev/null; then \
			if echo "$$flags" | grep 'mips16' >/dev/null; then \
				makevar="CODESIZEOPT=1"; \
			else \
				makevar=""; \
			fi; \
			$(MAKE) -C $$dir $(MAKEFILE) $$makevar VAR="$$flags" SUBDIR=$$rdir $F $T; \
			$(foreach P,$(PROCESSORS_1XX), \
				PROCESSOR_LIB=${patsubst %,libmchp_peripheral_%.a, $(P)}; \
				pdir=OBJ/$$rdir/$P; \
				[ -d $$pdir ] || mkdir -p $$pdir; \
				$(MAKE) -C $$pdir $(MAKEFILE) $$makevar VAR="$$flags -mprocessor=$P" SUBDIR=$$rdir PLIB=$$PROCESSOR_LIB $F $$PROCESSOR_LIB-$T; ) \
		fi; )
# Build libraries for 2XX devices
	$(foreach ML,$(shell $(CC) --print-multi-lib), \
		set -e; \
		rdir=`echo "$(ML)" | sed -e 's/;.*$$//'`; \
		dir=OBJ/$$rdir; \
		[ -d $$dir ] || mkdir -p $$dir; \
		flags=`echo "$(ML)" | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \
		if echo "$$flags" | egrep -v '$(SKIPARCHS)' >/dev/null; then \
			if echo "$$flags" | grep 'mips16' >/dev/null; then \
				makevar="CODESIZEOPT=1"; \
			else \
				makevar=""; \
			fi; \
			$(MAKE) -C $$dir $(MAKEFILE) $$makevar VAR="$$flags" SUBDIR=$$rdir $F $T; \
			$(foreach P,$(PROCESSORS_2XX), \
				PROCESSOR_LIB=${patsubst %,libmchp_peripheral_%.a, $(P)}; \
				pdir=OBJ/$$rdir/$P; \
				[ -d $$pdir ] || mkdir -p $$pdir; \
				$(MAKE) -C $$pdir $(MAKEFILE) $$makevar VAR="$$flags -mprocessor=$P" SUBDIR=$$rdir PLIB=$$PROCESSOR_LIB $F $$PROCESSOR_LIB-$T; ) \
		fi; )
# Build libraries for 3XX devices
	$(foreach ML,$(shell $(CC) --print-multi-lib), \
		set -e; \
		rdir=`echo "$(ML)" | sed -e 's/;.*$$//'`; \
		dir=OBJ/$$rdir; \
		[ -d $$dir ] || mkdir -p $$dir; \
		flags=`echo "$(ML)" | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \
		if echo "$$flags" | egrep -v '$(SKIPARCHS)' >/dev/null; then \
			if echo "$$flags" | grep 'mips16' >/dev/null; then \
				makevar="CODESIZEOPT=1"; \
			else \
				makevar=""; \
			fi; \
			$(MAKE) -C $$dir $(MAKEFILE) $$makevar VAR="$$flags" SUBDIR=$$rdir $F $T; \
			$(foreach P,$(PROCESSORS_3XX), \
				PROCESSOR_LIB=${patsubst %,libmchp_peripheral_%.a, $(P)}; \
				pdir=OBJ/$$rdir/$P; \
				[ -d $$pdir ] || mkdir -p $$pdir; \
				$(MAKE) -C $$pdir $(MAKEFILE) $$makevar VAR="$$flags -mprocessor=$P" SUBDIR=$$rdir PLIB=$$PROCESSOR_LIB $F $$PROCESSOR_LIB-$T; ) \
		fi; )
# Build libraries for 4XX devices
	$(foreach ML,$(shell $(CC) --print-multi-lib), \
		set -e; \
		rdir=`echo "$(ML)" | sed -e 's/;.*$$//'`; \
		dir=OBJ/$$rdir; \
		[ -d $$dir ] || mkdir -p $$dir; \
		flags=`echo "$(ML)" | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \
		if echo "$$flags" | egrep -v '$(SKIPARCHS)' >/dev/null; then \
			if echo "$$flags" | grep 'mips16' >/dev/null; then \
				makevar="CODESIZEOPT=1"; \
			else \
				makevar=""; \
			fi; \
			$(MAKE) -C $$dir $(MAKEFILE) $$makevar VAR="$$flags" SUBDIR=$$rdir $F $T; \
			$(foreach P,$(PROCESSORS_4XX), \
				PROCESSOR_LIB=${patsubst %,libmchp_peripheral_%.a, $(P)}; \
				pdir=OBJ/$$rdir/$P; \
				[ -d $$pdir ] || mkdir -p $$pdir; \
				$(MAKE) -C $$pdir $(MAKEFILE) $$makevar VAR="$$flags -mprocessor=$P" SUBDIR=$$rdir PLIB=$$PROCESSOR_LIB $F $$PROCESSOR_LIB-$T; ) \
		fi; )
# Build libraries for 5XX devices
	$(foreach ML,$(shell $(CC) --print-multi-lib), \
		set -e; \
		rdir=`echo "$(ML)" | sed -e 's/;.*$$//'`; \
		dir=OBJ/$$rdir; \
		[ -d $$dir ] || mkdir -p $$dir; \
		flags=`echo "$(ML)" | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \
		if echo "$$flags" | egrep -v '$(SKIPARCHS)' >/dev/null; then \
			if echo "$$flags" | grep 'mips16' >/dev/null; then \
				makevar="CODESIZEOPT=1"; \
			else \
				makevar=""; \
			fi; \
			$(MAKE) -C $$dir $(MAKEFILE) $$makevar VAR="$$flags" SUBDIR=$$rdir $F $T; \
			$(foreach P,$(PROCESSORS_5XX), \
				PROCESSOR_LIB=${patsubst %,libmchp_peripheral_%.a, $(P)}; \
				pdir=OBJ/$$rdir/$P; \
				[ -d $$pdir ] || mkdir -p $$pdir; \
				$(MAKE) -C $$pdir $(MAKEFILE) $$makevar VAR="$$flags -mprocessor=$P" SUBDIR=$$rdir PLIB=$$PROCESSOR_LIB $F $$PROCESSOR_LIB-$T; ) \
		fi; )
# Build libraries for 6XX devices
	$(foreach ML,$(shell $(CC) --print-multi-lib), \
		set -e; \
		rdir=`echo "$(ML)" | sed -e 's/;.*$$//'`; \
		dir=OBJ/$$rdir; \
		[ -d $$dir ] || mkdir -p $$dir; \
		flags=`echo "$(ML)" | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \
		if echo "$$flags" | egrep -v '$(SKIPARCHS)' >/dev/null; then \
			if echo "$$flags" | grep 'mips16' >/dev/null; then \
				makevar="CODESIZEOPT=1"; \
			else \
				makevar=""; \
			fi; \
			$(MAKE) -C $$dir $(MAKEFILE) $$makevar VAR="$$flags" SUBDIR=$$rdir $F $T; \
			$(foreach P,$(PROCESSORS_6XX), \
				PROCESSOR_LIB=${patsubst %,libmchp_peripheral_%.a, $(P)}; \
				pdir=OBJ/$$rdir/$P; \
				[ -d $$pdir ] || mkdir -p $$pdir; \
				$(MAKE) -C $$pdir $(MAKEFILE) $$makevar VAR="$$flags -mprocessor=$P" SUBDIR=$$rdir PLIB=$$PROCESSOR_LIB $F $$PROCESSOR_LIB-$T; ) \
		fi; )
# Build libraries for 7XX devices		
	$(foreach ML,$(shell $(CC) --print-multi-lib), \
		set -e; \
		rdir=`echo "$(ML)" | sed -e 's/;.*$$//'`; \
		dir=OBJ/$$rdir; \
		[ -d $$dir ] || mkdir -p $$dir; \
		flags=`echo "$(ML)" | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \
		if echo "$$flags" | egrep -v '$(SKIPARCHS)' >/dev/null; then \
			if echo "$$flags" | grep 'mips16' >/dev/null; then \
				makevar="CODESIZEOPT=1"; \
			else \
				makevar=""; \
			fi; \
			$(MAKE) -C $$dir $(MAKEFILE) $$makevar VAR="$$flags" SUBDIR=$$rdir $F $T; \
			$(foreach P,$(PROCESSORS_7XX), \
				PROCESSOR_LIB=${patsubst %,libmchp_peripheral_%.a, $(P)}; \
				pdir=OBJ/$$rdir/$P; \
				[ -d $$pdir ] || mkdir -p $$pdir; \
				$(MAKE) -C $$pdir $(MAKEFILE) $$makevar VAR="$$flags -mprocessor=$P" SUBDIR=$$rdir PLIB=$$PROCESSOR_LIB $F $$PROCESSOR_LIB-$T; ) \
		fi; )

doone: dodir
	set -e; \
	rdir=`$(CC) --print-multi-dir $(VAR)`; \
	dir=OBJ/$$rdir; \
	[ -d $$dir ] || mkdir -p $$dir; \
	$(MAKE) -C $$dir $(MAKEFILE) VAR="$(VAR)" SUBDIR=$$rdir $F $T

dodir: Makefile $(ROOT)/libp.mk
	mkdir -p OBJ

.PHONY: all install clean doall doone dodir install-baseline install-proc
