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