| #--------------------------------------------------- | |
| # 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. | |
| # | |
| # make reference | |
| # | |
| # annotate the technology JSON file with the current | |
| # commit state of all repositories used by the PDK to | |
| # create a reference set of PDKs. Can be used with | |
| # the configure --with-reference option to compile | |
| # to sources from a specific set of commits. | |
| # | |
| #--------------------------------------------------- | |
| # | |
| # The following definitions are tied to the contents | |
| # of this repository and should not be changed. | |
| TECHS = @ALL_TECHS@ | |
| ENABLED_TECHS = @ENABLED_TECHS@ | |
| DONE_MESSAGE = "Done." | |
| ifeq ($(TECHS),) | |
| DONE_MESSAGE = "No techs configured." | |
| endif | |
| TECHS_ALL = $(addprefix tech-,$(ENABLED_TECHS)) | |
| TECHS_UPDATE = $(addprefix update-,$(ENABLED_TECHS)) | |
| TECHS_INSTALL = $(addprefix install-,$(ENABLED_TECHS)) | |
| TECHS_UNINSTALL = $(addprefix uninstall-,$(TECHS)) | |
| TECHS_CLEAN = $(addprefix clean-,$(TECHS)) | |
| TECHS_VERYCLEAN = $(addprefix veryclean-,$(TECHS)) | |
| TECHS_REFERENCE = $(addprefix reference-,$(TECHS)) | |
| #--------------------------------------------------- | |
| .PHONY: all install uninstall clean veryclean update | |
| all: $(TECHS_ALL) | |
| @echo $(DONE_MESSAGE) | |
| install: $(TECHS_INSTALL) common_install | |
| @echo $(DONE_MESSAGE) | |
| uninstall: $(TECHS_UNINSTALL) | |
| @echo $(DONE_MESSAGE) | |
| update: $(TECHS_UPDATE) | |
| @echo $(DONE_MESSAGE) | |
| reference: $(TECHS_REFERENCE) | |
| @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 and | |
| # natural_sort.py, which are the two files 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/cdl2spi.py ;\ | |
| ${CPP} -DPREFIX=$(datadir) common/natural_sort.py $(datadir)/pdk/scripts/natural_sort.py ;\ | |
| rm -r -f $(datadir)/pdk/runtime ;\ | |
| echo "Common install: Done." ;\ | |
| else \ | |
| echo "Common install: $(datadir) is not writeable (ignoring)." ;\ | |
| fi | |
| #--------------------------------------------------- | |
| tech-%: % | |
| (cd $* && ${MAKE} -j$(nproc) all) | |
| #--------------------------------------------------- | |
| install-%: % | |
| (cd $* && ${MAKE} install) | |
| uninstall-%: % | |
| (cd $* && ${MAKE} uninstall) | |
| update-%: % | |
| (cd $* && ${MAKE} update) | |
| reference-%: % | |
| (cd $* && ${MAKE} reference) | |
| clean-%: | |
| (cd $* && ${MAKE} clean) | |
| veryclean-%: | |
| (cd $* && ${MAKE} veryclean) | |
| #--------------------------------------------------- |