#---------------------------------------------------
# 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.
#
# make uninstall
#
#	remove the installed PDKs.
#
#---------------------------------------------------
#
# The following definitions are tied to the contents
# of this repository and should not be changed.

TECHS =

SKY130_SOURCE_PATH = @SKY130_SOURCE_PATH@
ifneq ($(SKY130_SOURCE_PATH),)
    TECHS += sky130
endif

DONE_MESSAGE = "Done."
ifeq ($(TECHS),)
	DONE_MESSAGE = "No techs configured."
endif

TECHS_ALL = $(addprefix tech_,$(TECHS))
TECHS_INSTALL = $(addprefix install-,$(TECHS))
TECHS_UNINSTALL = $(addprefix uninstall-,$(TECHS))
TECHS_CLEAN = $(addprefix clean-,$(TECHS))
TECHS_VERYCLEAN = $(addprefix veryclean-,$(TECHS))

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

all: $(TECHS_ALL)
	@echo $(DONE_MESSAGE)

install: $(TECHS_INSTALL) common_install
	@echo $(DONE_MESSAGE)

uninstall: $(TECHS_UNINSTALL)
	@echo $(DONE_MESSAGE)

clean: $(TECHS_CLEAN)
	@echo $(DONE_MESSAGE)

veryclean: $(TECHS_VERYCLEAN)
	@echo $(DONE_MESSAGE)

distclean: $(TECHS_VERYCLEAN)
	${RM} -rf sources
	@echo $(DONE_MESSAGE)

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

CPP = common/preproc.py

prefix = @prefix@
datarootdir = @datarootdir@
datadir = @datadir@

# NOTE:  All scripts used by the project and design flow management
# system are in the "runtime" directory, except for cdl2spi.py, which
# is the one file used by scripts in both the common/ and runtime/
# directories.

common_install:
	@if test -w $(datadir) ; then \
		mkdir -p $(datadir)/pdk/scripts/ ;\
		mkdir -p $(datadir)/pdk/runtime ;\
		for file in runtime/*.py ; do \
			${CPP} -DPREFIX=$(datadir) $$file \
			$(datadir)/pdk/$$file ;\
		done ;\
		for file in runtime/*.txt ; do \
			${CPP} -DPREFIX=$(datadir) $$file \
			$(datadir)/pdk/$$file ;\
		done ;\
		mv $(datadir)/pdk/runtime/* $(datadir)/pdk/scripts ;\
		${CPP} -DPREFIX=$(datadir) common/cdl2spi.py $(datadir)/pdk/scripts ;\
		rm -r -f $(datadir)/pdk/runtime ;\
		echo "Common install:  Done." ;\
	else \
		echo "Common install:  $(datadir) is not writeable (ignoring)." ;\
	fi

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

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

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

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

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

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

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

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