#---------------------------------------------------
# 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
#
# 	installs the tech files.  If the configuration
#	script has been given the "--with-<PDK>-dist-path="
#	option, then tech files are installed in the path
#	(such as a git repository) that is used for
#	distribution of software across a system.  Otherwise,
#	files are installed in the local path specified by
#	the configuration option "--with-<PDK>-local-path=".
#
# make clean
#
# 	clean up all files generated by 'make'
# 
# make veryclean
#
# 	clean up all files generated by 'make' and remove
#	all log files.
#
#---------------------------------------------------
#
# 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:	sky130
	(cd sky130 && ${MAKE} install)

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

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

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

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

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

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

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