#---------------------------------------------------
# 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@

common_install:
	@if test -w $(datadir) ; then \
		mkdir -p $(datadir)/pdk/scripts/ ;\
		cp runtime/cace.py $(datadir)/pdk/scripts/ ;\
		cp runtime/cace_datasheet_upload.py $(datadir)/pdk/scripts/ ;\
		cp runtime/cace_design_upload.py $(datadir)/pdk/scripts/ ;\
		cp runtime/cace_gensim.py $(datadir)/pdk/scripts/ ;\
		cp runtime/cace_launch.py $(datadir)/pdk/scripts/ ;\
		cp runtime/cace_makeplot.py $(datadir)/pdk/scripts/ ;\
		cp runtime/cdl2spi.py $(datadir)/pdk/scripts/ ;\
		cp runtime/change_gds_cell.py $(datadir)/pdk/scripts/ ;\
		cp runtime/change_gds_date.py $(datadir)/pdk/scripts/ ;\
		cp runtime/change_gds_string.py $(datadir)/pdk/scripts/ ;\
		cp runtime/changepath.py $(datadir)/pdk/scripts/ ;\
		cp runtime/characterize_help.txt $(datadir)/pdk/scripts/ ;\
		cp runtime/cleanup_unref.py $(datadir)/pdk/scripts/ ;\
		cp runtime/config.py $(datadir)/pdk/scripts/ ;\
		cp runtime/consoletext.py $(datadir)/pdk/scripts/ ;\
		${CPP} -DPREFIX=$(datadir) runtime/create_project.py \
			$(datadir)/pdk/scripts/create_project.py ;\
		cp runtime/editparam.py $(datadir)/pdk/scripts/ ;\
		cp runtime/failreport.py $(datadir)/pdk/scripts/ ;\
		cp runtime/find_gds_prefix.py $(datadir)/pdk/scripts/ ;\
		cp runtime/foundry_nodes.py $(datadir)/pdk/scripts/ ;\
		cp runtime/helpwindow.py $(datadir)/pdk/scripts/ ;\
		cp runtime/listboxchoice.py $(datadir)/pdk/scripts/ ;\
		cp runtime/lvs_help.txt $(datadir)/pdk/scripts/ ;\
		cp runtime/make_icon_from_soft.py $(datadir)/pdk/scripts/ ;\
		cp runtime/makestub.py $(datadir)/pdk/scripts/ ;\
		cp runtime/manager_help.txt $(datadir)/pdk/scripts/ ;\
		cp runtime/netlist_to_layout.py $(datadir)/pdk/scripts/ ;\
		cp runtime/padframe_generator.py $(datadir)/pdk/scripts/ ;\
		cp runtime/profile.py $(datadir)/pdk/scripts/ ;\
		${CPP} -DPREFIX=$(datadir) runtime/project_manager.py \
			$(datadir)/pdk/scripts/project_manager.py ;\
		cp runtime/qflow_help.txt $(datadir)/pdk/scripts/ ;\
		cp runtime/rename_project.py $(datadir)/pdk/scripts/ ;\
		cp runtime/settings.py $(datadir)/pdk/scripts/ ;\
		cp runtime/simhints.py $(datadir)/pdk/scripts/ ;\
		cp runtime/soc_floorplanner.py $(datadir)/pdk/scripts/ ;\
		cp runtime/symbolbuilder.py $(datadir)/pdk/scripts/ ;\
		cp runtime/tksimpledialog.py $(datadir)/pdk/scripts/ ;\
		cp runtime/tooltip.py $(datadir)/pdk/scripts/ ;\
		cp runtime/treeviewchoice.py $(datadir)/pdk/scripts/ ;\
		cp runtime/treeviewsplit.py $(datadir)/pdk/scripts/ ;\
		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)

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