INSTALL ?= install
VERSION ?= 0.0.0
prefix ?= /usr
bindir ?= $(prefix)/bin
exec_prefix ?= $(prefix)
libexecdir ?= $(exec_prefix)/libexec
datarootdir ?= $(prefix)/share
datadir ?= $(datarootdir)
docdir ?= $(datarootdir)/doc/micperf
srcinstalldir ?= $(datadir)/micperf

all: knc

knc: knc_preprocess
	./setup.py sdist --formats=gztar -u root -g root

knlsb: knlsb_preprocess
	# Next command (setup.py) does not have any effect, since install-knlsb does
	# not use package genereted by it. It is here just for unit test purpose, to
	# make sure the command work properly.
	./setup.py sdist --formats=gztar -u root -g root

knllb: knllb_preprocess
	echo "global-exclude hpcg.py" >> MANIFEST.in
	echo "global-exclude libxsmm_conv.py" >> MANIFEST.in
	echo "global-exclude mkl_conv.py" >> MANIFEST.in
	echo "global-exclude fio.py" >> MANIFEST.in
ifneq ($(COMPOSER_VER),2018)
	echo "global-exclude igemm.py" >> MANIFEST.in
endif
	./setup.py sdist --formats=gztar -u root -g root

clean:
	rm -rf build dist MANIFEST micp/*.pyc micp/kernels/*.pyc
	if [ -e micp/version.py.orig ]; then mv micp/version.py.orig micp/version.py; fi
	if [ -e README.txt.orig ]; then mv README.txt.orig README.txt; fi
	if [ -e INSTALL.txt.orig ]; then mv INSTALL.txt.orig INSTALL.txt; fi
	if [ -e micperf_faqs.txt.orig ]; then mv micperf_faqs.txt.orig micperf_faqs.txt; fi

knc_preprocess:
	if [ ! -e micp/version.py.orig ]; then mv micp/version.py micp/version.py.orig; fi
	if [ ! -e INSTALL.txt.orig ]; then cp INSTALL.txt INSTALL.txt.orig; fi
	if [ ! -e micperf_faqs.txt.orig ]; then cp micperf_faqs.txt micperf_faqs.txt.orig; fi
	python ../preprocess_micp.py micp knc $(VERSION) $(datadir) $(libexecdir)

knlsb_preprocess:
	if [ ! -e micp/version.py.orig ]; then mv micp/version.py micp/version.py.orig; fi
	if [ ! -e INSTALL.txt.orig ]; then cp INSTALL.txt INSTALL.txt.orig; fi
	if [ ! -e micperf_faqs.txt.orig ]; then cp micperf_faqs.txt micperf_faqs.txt.orig; fi
	python ../preprocess_micp.py micp knlsb $(VERSION) $(datadir) $(libexecdir)

knllb_preprocess:
	if [ ! -e micp/version.py.orig ]; then mv micp/version.py micp/version.py.orig; fi
	if [ ! -e INSTALL.txt.orig ]; then cp INSTALL.txt INSTALL.txt.orig; fi
	if [ ! -e micperf_faqs.txt.orig ]; then cp micperf_faqs.txt micperf_faqs.txt.orig; fi
	python ../preprocess_micp.py micp knllb $(VERSION) $(datadir) $(libexecdir)

install: install-knc

install-knc:
	$(INSTALL) -d $(DESTDIR)$(docdir)
	$(INSTALL) -m 644 README.txt CHANGES.txt INSTALL.txt LICENSE.txt micperf_faqs.txt $(DESTDIR)$(docdir)
	$(INSTALL) -d $(DESTDIR)$(srcinstalldir)
	tar xvf dist/micp-$(VERSION).tar.gz -C $(DESTDIR)$(srcinstalldir)
	ln -sf micp-$(VERSION) $(DESTDIR)$(srcinstalldir)/micp
	$(INSTALL) -d $(DESTDIR)$(bindir)
	ln -sf $(srcinstalldir)/micp-$(VERSION)/micpcsv $(DESTDIR)$(bindir)/micpcsv
	ln -sf $(srcinstalldir)/micp-$(VERSION)/micpinfo $(DESTDIR)$(bindir)/micpinfo
	ln -sf $(srcinstalldir)/micp-$(VERSION)/micpplot $(DESTDIR)$(bindir)/micpplot
	ln -sf $(srcinstalldir)/micp-$(VERSION)/micpprint $(DESTDIR)$(bindir)/micpprint
	ln -sf $(srcinstalldir)/micp-$(VERSION)/micprun $(DESTDIR)$(bindir)/micprun

install-knlsb:
	$(INSTALL) -d $(DESTDIR)$(docdir)
	$(INSTALL) -m 644 EULA README.txt INSTALL.txt LICENSE.txt micperf_faqs.txt $(DESTDIR)$(docdir)

	$(INSTALL) -d $(DESTDIR)$(srcinstalldir)
	$(INSTALL) -d $(DESTDIR)$(srcinstalldir)/micp
	$(INSTALL) -m 755 micpcsv $(DESTDIR)$(srcinstalldir)/micp/micpcsv
	$(INSTALL) -m 755 micpinfo $(DESTDIR)$(srcinstalldir)/micp/micpinfo
	$(INSTALL) -m 755 micpplot $(DESTDIR)$(srcinstalldir)/micp/micpplot
	$(INSTALL) -m 755 micpprint $(DESTDIR)$(srcinstalldir)/micp/micpprint
	$(INSTALL) -m 755 micprun $(DESTDIR)$(srcinstalldir)/micp/micprun
	$(INSTALL) -m 755 setup.py $(DESTDIR)$(srcinstalldir)/micp/setup.py
	$(INSTALL) -m 755 virsh-kvm-xeon-phi $(DESTDIR)$(srcinstalldir)/micp/virsh-kvm-xeon-phi

	$(INSTALL) -d $(DESTDIR)$(srcinstalldir)/micp/micp
	$(INSTALL) -m 644 micp/__init__.py $(DESTDIR)$(srcinstalldir)/micp/micp/__init__.py
	$(INSTALL) -m 644 micp/common.py $(DESTDIR)$(srcinstalldir)/micp/micp/common.py
	$(INSTALL) -m 644 micp/connect.py $(DESTDIR)$(srcinstalldir)/micp/micp/connect.py
	$(INSTALL) -m 644 micp/info.py $(DESTDIR)$(srcinstalldir)/micp/micp/info.py
	$(INSTALL) -m 644 micp/kernel.py $(DESTDIR)$(srcinstalldir)/micp/micp/kernel.py
	$(INSTALL) -m 644 micp/offload.py $(DESTDIR)$(srcinstalldir)/micp/micp/offload.py
	$(INSTALL) -m 644 micp/params.py $(DESTDIR)$(srcinstalldir)/micp/micp/params.py
	$(INSTALL) -m 644 micp/run.py $(DESTDIR)$(srcinstalldir)/micp/micp/run.py
	$(INSTALL) -m 644 micp/stats.py $(DESTDIR)$(srcinstalldir)/micp/micp/stats.py
	$(INSTALL) -m 644 micp/version.py $(DESTDIR)$(srcinstalldir)/micp/micp/version.py

	$(INSTALL) -d $(DESTDIR)$(srcinstalldir)/micp/micp/kernels
	$(INSTALL) -m 644 micp/kernels/__init__.py $(DESTDIR)$(srcinstalldir)/micp/micp/kernels/__init__.py
	$(INSTALL) -m 644 micp/kernels/_xgemm.py $(DESTDIR)$(srcinstalldir)/micp/micp/kernels/_xgemm.py
	$(INSTALL) -m 644 micp/kernels/dgemm.py $(DESTDIR)$(srcinstalldir)/micp/micp/kernels/dgemm.py
	$(INSTALL) -m 644 micp/kernels/fio.py $(DESTDIR)$(srcinstalldir)/micp/micp/kernels/fio.py
	$(INSTALL) -m 644 micp/kernels/hpcg.py $(DESTDIR)$(srcinstalldir)/micp/micp/kernels/hpcg.py
	$(INSTALL) -m 644 micp/kernels/hplinpack.py $(DESTDIR)$(srcinstalldir)/micp/micp/kernels/hplinpack.py
ifeq ($(COMPOSER_VER),2018)
	$(INSTALL) -m 644 micp/kernels/igemm.py $(DESTDIR)$(srcinstalldir)/micp/micp/kernels/igemm.py
endif
	$(INSTALL) -m 644 micp/kernels/libxsmm_conv.py $(DESTDIR)$(srcinstalldir)/micp/micp/kernels/libxsmm_conv.py
	$(INSTALL) -m 644 micp/kernels/linpack.py $(DESTDIR)$(srcinstalldir)/micp/micp/kernels/linpack.py
	$(INSTALL) -m 644 micp/kernels/mkl_conv.py $(DESTDIR)$(srcinstalldir)/micp/micp/kernels/mkl_conv.py
	$(INSTALL) -m 644 micp/kernels/sgemm.py $(DESTDIR)$(srcinstalldir)/micp/micp/kernels/sgemm.py
	$(INSTALL) -m 644 micp/kernels/stream.py $(DESTDIR)$(srcinstalldir)/micp/micp/kernels/stream.py

	$(INSTALL) -d $(DESTDIR)$(bindir)
	ln -sf $(srcinstalldir)/micp/micpcsv $(DESTDIR)$(bindir)/micpcsv
	ln -sf $(srcinstalldir)/micp/micpinfo $(DESTDIR)$(bindir)/micpinfo
	ln -sf $(srcinstalldir)/micp/micpplot $(DESTDIR)$(bindir)/micpplot
	ln -sf $(srcinstalldir)/micp/micpprint $(DESTDIR)$(bindir)/micpprint
	ln -sf $(srcinstalldir)/micp/micprun $(DESTDIR)$(bindir)/micprun

install-knllb:
	$(INSTALL) -d $(DESTDIR)$(docdir)
	$(INSTALL) -m 644 EULA README.txt CHANGES.txt INSTALL.txt LICENSE.txt micperf_faqs.txt $(DESTDIR)$(docdir)
	$(INSTALL) -d $(DESTDIR)$(srcinstalldir)
	tar xf dist/micp-$(VERSION).tar.gz -C $(DESTDIR)$(srcinstalldir)
	ln -sf micp-$(VERSION) $(DESTDIR)$(srcinstalldir)/micp
	$(INSTALL) -d $(DESTDIR)$(bindir)
	ln -sf $(srcinstalldir)/micp-$(VERSION)/micpcsv $(DESTDIR)$(bindir)/micpcsv
	ln -sf $(srcinstalldir)/micp-$(VERSION)/micpinfo $(DESTDIR)$(bindir)/micpinfo
	ln -sf $(srcinstalldir)/micp-$(VERSION)/micpplot $(DESTDIR)$(bindir)/micpplot
	ln -sf $(srcinstalldir)/micp-$(VERSION)/micpprint $(DESTDIR)$(bindir)/micpprint
	ln -sf $(srcinstalldir)/micp-$(VERSION)/micprun $(DESTDIR)$(bindir)/micprun

.PHONY: all knc knlsb knllb clean install install-knc install-knlsb install-knllb knc_preprocess knllb_preprocess knlsb_preprocess
