#---------------------------------------------------
# Makefile for efabless project open_pdks
# Tim Edwards, 11/21/2016
# Updated 10/19/2018 for use independently of the
# efabless /ef/ tree filesystem setup.
# Updated 5/5/2020 for use with the 2-stage install
#---------------------------------------------------
#
# Typical usage:
#
# make
# 	generates the tech files from source masters.
#
# make install-local
#
# 	installs the tech files locally.
#
# make install-dist
#
# 	installs the tech files in the git project
# 	that is used for distribution of software
# 	across the system.
#
# make clean
#
# 	clean up all files generated by 'make'
# 
#---------------------------------------------------
#
# The following definitions are tied to the contents
# of this repository and should not be changed.

TECHS       = sky130

#---------------------------------------------------

all:	${TECHS}
	for tech in ${TECHS}; do \
		${MAKE} tech_$$tech; done

#---------------------------------------------------

tech_sky130:
	(cd sky130 && ${MAKE} all)

#---------------------------------------------------

install-sky130-local:	sky130
	(cd sky130 && ${MAKE} install-local)

install-sky130-dist:	sky130
	(cd sky130 && ${MAKE} install-dist)

clean-sky130:
	(cd sky130 && ${MAKE} clean)

veryclean-sky130:
	(cd sky130 && ${MAKE} veryclean)

#---------------------------------------------------

install:
	${MAKE} install-local

install-local:	${TECHS}	
	for tech in ${TECHS}; do \
		${MAKE} install-$${tech}-local; done

install-dist:	${TECHS}
	for tech in ${TECHS}; do \
		${MAKE} install-$${tech}-dist; done

#---------------------------------------------------

clean:
	for tech in ${TECHS}; do \
		${MAKE} clean-$${tech}; done

veryclean:
	for tech in ${TECHS}; do \
		${MAKE} veryclean-$${tech}; done

distclean:
	for tech in ${TECHS}; do \
		${MAKE} veryclean-$${tech}; done
