| # | |
| # Common makefile for SCSI target mid-level and its drivers | |
| # | |
| # Copyright (C) 2015 - 2018 Vladislav Bolkhovitin <vst@vlnb.net> | |
| # Copyright (C) 2007 - 2018 Western Digital Corporation | |
| # | |
| # This program is free software; you can redistribute it and/or | |
| # modify it under the terms of the GNU General Public License | |
| # as published by the Free Software Foundation, version 2 | |
| # of the License. | |
| # | |
| # This program is distributed in the hope that it will be useful, | |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| # GNU General Public License for more details. | |
| # | |
| # | |
| SHELL = /bin/bash | |
| # Define the location to the kernel src. Can be defined here or on | |
| # the command line during the build process. If KDIR is defined, | |
| # we will determine an appropriate value for KVER from the kernel | |
| # source tree. KVER can still be overridden by the user via the | |
| # command line or by defining it in this Makefile. If KDIR and KVER | |
| # are not defined by the user, the current running kernel version is | |
| # used to define KVER. | |
| #export KDIR=/usr/src/linux-2.6 | |
| #export KVER=2.6.x | |
| ifdef KDIR | |
| ifndef KVER | |
| export KVER = $(strip $(shell \ | |
| cat $(KDIR)/include/config/kernel.release 2>/dev/null || \ | |
| make -s -C $(KDIR) kernelversion)) | |
| endif | |
| endif | |
| SCST_DIR=scst | |
| DOC_DIR=doc | |
| SCSTADM_DIR=scstadmin | |
| QLA_INI_DIR=qla2x00t | |
| QLA_DIR=qla2x00t/qla2x00-target | |
| USR_DIR=usr | |
| SRP_DIR=srpt | |
| SCST_LOCAL_DIR=scst_local | |
| FCST_DIR=fcst | |
| EMULEX_DIR=emulex | |
| ISCSI_DIR=iscsi-scst | |
| REVISION ?= $(shell if [ -e .svn ]; then \ | |
| svn info | sed -n 's/^Revision:[[:blank:]]*/./p'; \ | |
| elif [ -e .git ]; then \ | |
| git log | grep -c ^commit; \ | |
| fi) | |
| VERSION = $(shell echo -n "$$(sed -n 's/^\#define[[:blank:]]SCST_VERSION_NAME[[:blank:]]*\"\([^-]*\).*\"/\1/p' scst/include/scst_const.h)") | |
| DEBIAN_REVISION=1 | |
| RPMTOPDIR ?= $(shell if [ $$(id -u) = 0 ]; then echo /usr/src/packages;\ | |
| else echo $$PWD/rpmbuilddir; fi) | |
| help: | |
| @echo " all : make all" | |
| @echo " clean : clean files" | |
| @echo " extraclean : clean + clean dependencies" | |
| @echo " install : install" | |
| @echo " uninstall : uninstall" | |
| @echo "" | |
| @echo " scst : make scst only" | |
| @echo " scst_clean : scst: clean " | |
| @echo " scst_extraclean : scst: clean + clean dependencies" | |
| @echo " scst_install : scst: install" | |
| @echo " scst_uninstall : scst: uninstall" | |
| @echo "" | |
| @echo " scstadm_install : scstadmin: install" | |
| @echo " scstadm_uninstall : scstadmin: uninstall" | |
| @echo "" | |
| @echo " qla : make QLA target driver" | |
| @echo " qla_clean : qla target: clean " | |
| @echo " qla_extraclean : qla target: clean + clean dependencies" | |
| @echo " qla_install : qla target: install" | |
| @echo " qla_uninstall : qla target: uninstall" | |
| @echo "" | |
| @echo " iscsi : make iSCSI target" | |
| @echo " iscsi_clean : ISCSI target: clean " | |
| @echo " iscsi_extraclean : ISCSI target: clean + clean dependencies" | |
| @echo " iscsi_install : ISCSI target: install" | |
| @echo " iscsi_uninstall : ISCSI target: uninstall" | |
| @echo "" | |
| @echo " emulex : make Emulex target" | |
| @echo " emulex_clean : Emulex target: clean " | |
| @echo " emulex_extraclean : Emulex target: clean + clean dependencies" | |
| @echo " emulex_install : Emulex target: install" | |
| @echo " emulex_uninstall : Emulex target: uninstall" | |
| @echo "" | |
| @echo " srpt : make SRP target" | |
| @echo " srpt_clean : srp target: clean " | |
| @echo " srpt_extraclean : srp target: clean + clean dependencies" | |
| @echo " srpt_install : srp target: install" | |
| @echo " srpt_uninstall : srp target: uninstall" | |
| @echo "" | |
| @echo " fcst : make FCoE target" | |
| @echo " fcst_clean : FCoE target: clean " | |
| @echo " fcst_extraclean : FCoE target: clean + clean dependencies" | |
| @echo " fcst_install : FCoE target: install" | |
| @echo " fcst_uninstall : FCoE target: uninstall" | |
| @echo "" | |
| @echo " scst_local : make scst_local target" | |
| @echo " scst_local_install : scst_local target: install" | |
| @echo " scst_local_uninstall : scst_local target: uninstall" | |
| @echo "" | |
| @echo " usr : make user space targets" | |
| @echo " usr_clean : usr target: clean " | |
| @echo " usr_extraclean : usr target: clean + clean dependencies" | |
| @echo " usr_install : usr target: install" | |
| @echo " usr_uninstall : usr target: uninstall" | |
| @echo "" | |
| @echo " 2perf : changes debug state to full performance" | |
| @echo " 2release : changes debug state to release" | |
| @echo " 2debug : changes debug state to full debug" | |
| @echo "" | |
| @echo " Note:" | |
| @echo " - install and uninstall may need root privileges" | |
| all install uninstall clean extraclean: | |
| -if [ $@ = extraclean ]; then rm -f TAGS tags cscope.out; fi | |
| -for d in $(SCST_DIR) $(ISCSI_DIR) $(QLA_DIR) $(SRP_DIR) \ | |
| $(SCST_LOCAL_DIR) $(FCST_DIR) $(USR_DIR) $(SCSTADM_DIR); do \ | |
| $(MAKE) -j$$(nproc) -C "$$d" $@ || break; \ | |
| done | |
| find . -type d -name "rpmbuilddir" | xargs rm -rf | |
| tags: | |
| find . -type f -name "*.[ch]" | ctags --c-kinds=+p --fields=+iaS --extra=+q -e -L- | |
| scst: | |
| cd $(SCST_DIR) && $(MAKE) all | |
| scst_install: | |
| cd $(SCST_DIR) && $(MAKE) install | |
| scst_uninstall: | |
| cd $(SCST_DIR) && $(MAKE) uninstall | |
| scst_clean: | |
| cd $(SCST_DIR) && $(MAKE) clean | |
| scst_extraclean: | |
| cd $(SCST_DIR) && $(MAKE) extraclean | |
| docs: | |
| cd $(DOC_DIR) && $(MAKE) all | |
| docs_clean: | |
| cd $(DOC_DIR) && $(MAKE) clean | |
| docs_extraclean: | |
| cd $(DOC_DIR) && $(MAKE) extraclean | |
| scstadm: | |
| cd $(SCSTADM_DIR) && $(MAKE) all | |
| scstadm_install: | |
| cd $(SCSTADM_DIR) && $(MAKE) install | |
| scstadm_uninstall: | |
| cd $(SCSTADM_DIR) && $(MAKE) uninstall | |
| scstadm_clean: | |
| cd $(SCSTADM_DIR) && $(MAKE) clean | |
| scstadm_extraclean: | |
| cd $(SCSTADM_DIR) && $(MAKE) extraclean | |
| qla: | |
| cd $(QLA_DIR) && $(MAKE) all | |
| qla_install: | |
| cd $(QLA_DIR) && $(MAKE) install | |
| qla_uninstall: | |
| cd $(QLA_DIR) && $(MAKE) uninstall | |
| qla_clean: | |
| cd $(QLA_DIR) && $(MAKE) clean | |
| qla_extraclean: | |
| cd $(QLA_DIR) && $(MAKE) extraclean | |
| iscsi: | |
| cd $(ISCSI_DIR) && $(MAKE) all | |
| iscsi_install: | |
| cd $(ISCSI_DIR) && $(MAKE) install | |
| iscsi_uninstall: | |
| cd $(ISCSI_DIR) && $(MAKE) uninstall | |
| iscsi_clean: | |
| cd $(ISCSI_DIR) && $(MAKE) clean | |
| iscsi_extraclean: | |
| cd $(ISCSI_DIR) && $(MAKE) extraclean | |
| emulex: | |
| cd $(EMULEX_DIR) && $(MAKE) all | |
| emulex_install: | |
| cd $(EMULEX_DIR) && $(MAKE) install | |
| emulex_uninstall: | |
| cd $(EMULEX_DIR) && $(MAKE) uninstall | |
| emulex_clean: | |
| cd $(EMULEX_DIR) && $(MAKE) clean | |
| emulex_extraclean: | |
| cd $(EMULEX_DIR) && $(MAKE) extraclean | |
| srpt: | |
| cd $(SRP_DIR) && $(MAKE) all | |
| srpt_install: | |
| cd $(SRP_DIR) && $(MAKE) install | |
| srpt_uninstall: | |
| cd $(SRP_DIR) && $(MAKE) uninstall | |
| srpt_clean: | |
| cd $(SRP_DIR) && $(MAKE) clean | |
| srpt_extraclean: | |
| cd $(SRP_DIR) && $(MAKE) extraclean | |
| scst_local: | |
| cd $(SCST_LOCAL_DIR) && $(MAKE) all | |
| scst_local_install: | |
| cd $(SCST_LOCAL_DIR) && $(MAKE) install | |
| scst_local_uninstall: | |
| cd $(SCST_LOCAL_DIR) && $(MAKE) uninstall | |
| scst_local_clean: | |
| cd $(SCST_LOCAL_DIR) && $(MAKE) clean | |
| scst_local_extraclean: | |
| cd $(SCST_LOCAL_DIR) && $(MAKE) extraclean | |
| usr: | |
| cd $(USR_DIR) && $(MAKE) | |
| usr_install: | |
| cd $(USR_DIR) && $(MAKE) install | |
| usr_uninstall: | |
| cd $(USR_DIR) && $(MAKE) uninstall | |
| usr_clean: | |
| cd $(USR_DIR) && $(MAKE) clean | |
| usr_extraclean: | |
| cd $(USR_DIR) && $(MAKE) extraclean | |
| fcst: | |
| cd $(FCST_DIR) && $(MAKE) all | |
| fcst_install: | |
| cd $(FCST_DIR) && $(MAKE) install | |
| fcst_uninstall: | |
| cd $(FCST_DIR) && $(MAKE) uninstall | |
| fcst_clean: | |
| cd $(FCST_DIR) && $(MAKE) clean | |
| fcst_extraclean: | |
| cd $(FCST_DIR) && $(MAKE) extraclean | |
| # Make an SCST source code archive. $(1) is the tar compression option, $(2) | |
| # is the tar filename compression suffix, $(3) is the version and $(4) is the | |
| # source file filter. | |
| make-scst-dist = \ | |
| [ -n "$(1)" ] && [ -n "$(2)" ] && [ -n "$(3)" ] && \ | |
| [ -n "$(4)" ] && \ | |
| name=scst && \ | |
| mkdir "$${name}-$(3)" && \ | |
| { \ | |
| { \ | |
| scripts/list-source-files && \ | |
| if [ -e debian/changelog ]; then echo debian/changelog; fi; \ | |
| } | \ | |
| $(4) | \ | |
| tar -T- -cf- | \ | |
| tar -C "$${name}-$(3)" -xf-; \ | |
| } && \ | |
| rm -f "$${name}-$(3).tar.$(2)" && \ | |
| tar -c$(1) -f "$${name}-$(3).tar.$(2)" "$${name}-$(3)" && \ | |
| rm -rf "$${name}-$(3)" | |
| scst-dist-gzip: | |
| $(call make-scst-dist,j,bz2,$(VERSION),grep -E '^doc/|^fcst/|^iscsi-scst/|^Makefile|^qla2x00t(|_git)/|^scripts/|^scst.spec|^scst/|^scst_local/|^srpt/|^usr/|^scstadmin/') | |
| scst-rpm: | |
| name=scst && \ | |
| rpmtopdir=$(RPMTOPDIR) && \ | |
| $(MAKE) scst-dist-gzip && \ | |
| for d in BUILD RPMS SOURCES SPECS SRPMS; do \ | |
| mkdir -p $${rpmtopdir}/$$d; \ | |
| done && \ | |
| cp scst-$(VERSION).tar.bz2 $${rpmtopdir}/SOURCES && \ | |
| sed -e "s/@rpm_version@/$(VERSION)/g" \ | |
| -e "s|@depmod@|$(shell which depmod)|g" \ | |
| <$${name}.spec.in >$${name}.spec && \ | |
| MAKE="$(MAKE)" rpmbuild --define="%_topdir $${rpmtopdir}" \ | |
| --define="%rpm_release $(REVISION)" \ | |
| $(if $(KVER),--define="%kversion $(KVER)") \ | |
| $(if $(KDIR),--define="%kdir $(KDIR)") \ | |
| -ba $${name}.spec && \ | |
| rm -f $${name}-$(VERSION).tar.bz2 | |
| scst-dkms-rpm: | |
| name=scst-dkms && \ | |
| rpmtopdir=$(RPMTOPDIR) && \ | |
| $(MAKE) scst-dist-gzip && \ | |
| for d in BUILD RPMS SOURCES SPECS SRPMS; do \ | |
| mkdir -p $${rpmtopdir}/$$d; \ | |
| done && \ | |
| cp scst-$(VERSION).tar.bz2 $${rpmtopdir}/SOURCES && \ | |
| sed "s/@rpm_version@/$(VERSION)/g" \ | |
| <$${name}.spec.in >$${name}.spec && \ | |
| MAKE="$(MAKE)" rpmbuild --define="%_topdir $${rpmtopdir}" \ | |
| $(if $(KVER),--define="%kversion $(KVER)") \ | |
| $(if $(KDIR),--define="%kdir $(KDIR)") \ | |
| -ba $${name}.spec && \ | |
| rm -f $${name}-$(VERSION).tar.bz2 | |
| rpm: | |
| $(MAKE) scst-rpm | |
| $(MAKE) -C scstadmin rpm | |
| # generate version file for fileio_tgt | |
| $(MAKE) -C scst/src ../include/scst_itf_ver.h | |
| $(MAKE) -C usr/fileio rpm | |
| @if [ "$$(id -u)" != 0 ]; then \ | |
| echo; \ | |
| echo "The following RPMs have been built:"; \ | |
| find -name '*.rpm'; \ | |
| fi | |
| debian/changelog: debian/changelog.in | |
| sed 's/%{scst_version}/$(VERSION)-$(DEBIAN_REVISION)/' \ | |
| <debian/changelog.in >debian/changelog | |
| ../scst_$(VERSION).orig.tar.gz: debian/changelog Makefile | |
| $(call make-scst-dist,z,gz,$(VERSION),cat) && \ | |
| mv "scst-$(VERSION).tar.gz" "$@" | |
| ../scst_$(VERSION).orig.tar.xz: debian/changelog Makefile | |
| $(call make-scst-dist,J,xz,$(VERSION),cat) && \ | |
| mv "scst-$(VERSION).tar.xz" "$@" | |
| dpkg: ../scst_$(VERSION).orig.tar.gz | |
| @if [ -z "$$DEBEMAIL" ]; then \ | |
| echo "Error: \$$DEBEMAIL has not been set"; \ | |
| false; \ | |
| fi && \ | |
| if [ -z "$$DEBFULLNAME" ]; then \ | |
| echo "Error: \$$DEBFULLNAME has not been set"; \ | |
| false; \ | |
| fi && \ | |
| sed 's/%{scst_version}/$(VERSION)/' \ | |
| <debian/scst.dkms.in >debian/scst.dkms && \ | |
| output_files=( \ | |
| ../*_$(VERSION)-$(DEBIAN_REVISION)_*.deb \ | |
| ../*_$(VERSION)-$(DEBIAN_REVISION)_*.ddeb \ | |
| ../scst_$(VERSION)-$(DEBIAN_REVISION).debian.tar.[gx]z \ | |
| ../scst_$(VERSION)-$(DEBIAN_REVISION).dsc \ | |
| ../scst_$(VERSION)-$(DEBIAN_REVISION)_amd64.build \ | |
| ../scst_$(VERSION)-$(DEBIAN_REVISION)_amd64.buildinfo \ | |
| ../scst_$(VERSION)-$(DEBIAN_REVISION)_amd64.changes \ | |
| ) && \ | |
| rm -f "$${output_files[@]}" && \ | |
| buildopts=(-uc -us) && \ | |
| if dpkg-buildpackage --help 2>&1 | grep -q -- '-ui'; then \ | |
| buildopts+=(-ui); \ | |
| fi && \ | |
| if dpkg-buildpackage --help 2>&1 | \ | |
| grep -q -- '--jobs\[=<number>|auto\]'; then \ | |
| buildopts+=(-jauto); \ | |
| else \ | |
| buildopts+=(-j4); \ | |
| fi && \ | |
| if false; then \ | |
| dpkg-buildpackage "$${buildopts[@]}"; \ | |
| else \ | |
| debuild "$${buildopts[@]}" --lintian-opts --profile debian; \ | |
| fi && \ | |
| mkdir -p dpkg && \ | |
| for f in "$${output_files[@]}" ../scst_$(VERSION).orig.tar.[gx]z; do\ | |
| mv $$f dpkg || true; \ | |
| done && \ | |
| echo "Output files:" && \ | |
| ls -l dpkg | |
| release-archive: | |
| $(MAKE) 2release | |
| for m in $$(find -name Makefile | \ | |
| xargs grep -l '^release-archive:' | \ | |
| grep -v '^\./Makefile'); \ | |
| do \ | |
| (cd $$(dirname $$m) && $(MAKE) release-archive) \ | |
| done | |
| $(MAKE) 2debug | |
| 2perf: | |
| cd $(SCST_DIR) && $(MAKE) $@ | |
| 2release: | |
| cd $(SCST_DIR) && $(MAKE) $@ | |
| 2debug: | |
| cd $(SCST_DIR) && $(MAKE) $@ | |
| .PHONY: all install uninstall clean extraclean tags help \ | |
| qla qla_install qla_uninstall qla_clean qla_extraclean \ | |
| iscsi iscsi_install iscsi_uninstall iscsi_clean iscsi_extraclean \ | |
| emulex emulex_install emulex_uninstall emulex_clean emulex_extraclean \ | |
| scst scst_install scst_uninstall scst_clean scst_extraclean \ | |
| docs docs_clean docs_extraclean \ | |
| scstadm scstadm_install scstadm_uninstall scstadm_clean scstadm_extraclean \ | |
| srpt srpt_install srpt_uninstall srpt_clean srpt_extraclean \ | |
| usr usr_install usr_uninstall usr_clean usr_extraclean \ | |
| scst_local scst_local_install scst_local_uninstall scst_local_clean scst_local_extraclean \ | |
| fcst fcst_install fcst_uninstall fcst_clean fcst_extraclean \ | |
| scst-rpm scst-dkms-rpm dpkg \ | |
| 2perf 2release 2debug |