blob: b036b33ad068ec3c017790ad623cf170cb84806b [file] [log] [blame]
#
# SCSI target mid-level makefile
#
# Copyright (C) 2015 - 2018 Vladislav Bolkhovitin <vst@vlnb.net>
# Copyright (C) 2004 - 2005 Leonid Stoljar
# 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.
#
#
# Main targets:
# all (the default) : make all
# clean : clean files
# extraclean : clean + clean dependencies
# install : install
# uninstall : uninstall
#
# Notes :
# - install and uninstall must be made as root
#
ifndef PREFIX
PREFIX=/usr/local
endif
SHELL=/bin/bash
DEV_HANDLERS_DIR = dev_handlers
ifeq ($(KVER),)
ifeq ($(KDIR),)
KVER := $(shell uname -r)
KDIR := /lib/modules/$(KVER)/build
else
KVER := $(strip $(shell \
cat $(KDIR)/include/config/kernel.release 2>/dev/null || \
make -s -C $(KDIR) kernelversion))
endif
else
ifeq ($(KDIR),)
KDIR := /lib/modules/$(KVER)/build
endif
endif
ifeq ($(INSTALL_MOD_PATH),)
export INSTALL_MOD_PATH := $(DESTDIR)
endif
ifeq ($(SCST_INC_DIR),)
SCST_INC_DIR := ../include
endif
SCST_INTF_VER_FILE := $(SCST_INC_DIR)/scst_itf_ver.h
$(SCST_INTF_VER_FILE): $(SCST_INC_DIR)/scst.h $(SCST_INC_DIR)/scst_const.h $(SCST_INC_DIR)/scst_user.h
echo "/* Autogenerated, don't edit */" >$(SCST_INTF_VER_FILE)
echo "" >>$(SCST_INTF_VER_FILE)
echo -n "#define SCST_INTF_VER " >>$(SCST_INTF_VER_FILE)
echo "\"`sha1sum $(SCST_INC_DIR)/scst.h|awk '{printf $$1}'`\"" >>$(SCST_INTF_VER_FILE)
echo -n "#define SCST_CONST_INTF_VER " >>$(SCST_INTF_VER_FILE)
echo "\"`sha1sum $(SCST_INC_DIR)/scst_const.h|awk '{printf $$1}'`\"" >>$(SCST_INTF_VER_FILE)
echo -n "#define DEV_USER_INTF_VER " >>$(SCST_INTF_VER_FILE)
echo "\"`sha1sum $(SCST_INC_DIR)/scst_user.h|awk '{printf $$1}'`\"" >>$(SCST_INTF_VER_FILE)
all: $(SCST_INTF_VER_FILE)
$(MAKE) -C certs KDIR=$(KDIR) \
$(shell [ -n "$(PASS_CC_TO_MAKE)" ] && echo CC="$(CC)")
$(MAKE) -C $(KDIR) M=$(shell pwd) \
$(shell [ -n "$(PASS_CC_TO_MAKE)" ] && echo CC="$(CC)")
$(MAKE) -C $(KDIR) M=$(shell pwd)/dev_handlers \
$(shell [ -n "$(PASS_CC_TO_MAKE)" ] && echo CC="$(CC)")
scst:
$(MAKE) -C $(KDIR) M=$(shell pwd) \
$(shell [ -n "$(PASS_CC_TO_MAKE)" ] && echo CC="$(CC)")
install: all
@if [ -z "$(DESTDIR)" ] && \
{ rpm -q scst || rpm -q scst-devel; } >/dev/null 2>&1; then \
echo Error: the scst and/or scst-devel RPMs must be uninstalled first; \
false; fi
-rm -f $(INSTALL_DIR)/scsi_tgt.ko
KDIR=$(KDIR) ../../scripts/sign-modules
(cd dev_handlers; KDIR=$(KDIR) ../../../scripts/sign-modules)
$(MAKE) -C $(KDIR) M=$(shell pwd)/dev_handlers \
$(shell [ -n "$(PASS_CC_TO_MAKE)" ] && echo CC="$(CC)") \
INSTALL_MOD_DIR=extra/dev_handlers \
$$([ -n "$(DEPMOD)" ] && echo "DEPMOD=$(DEPMOD)") \
CONFIG_MODULE_SIG_ALL= modules_install
$(MAKE) -C $(KDIR) M=$(shell pwd) \
$(shell [ -n "$(PASS_CC_TO_MAKE)" ] && echo CC="$(CC)") \
$$([ -n "$(DEPMOD)" ] && echo "DEPMOD=$(DEPMOD)") \
CONFIG_MODULE_SIG_ALL= modules_install
install -d $(INSTALL_DIR_H)
header_files="backport.h build_mode.h scst.h scst_const.h \
scst_debug.h scst_itf_ver.h scst_sgv.h \
scst_user.h"; \
for h in $${header_files}; do \
install -m 644 ../include/$$h $(INSTALL_DIR_H); \
done
rm -f $(INSTALL_DIR_H)/Module.symvers
install -m 644 Module.symvers $(INSTALL_DIR_H)
mkdir -p $(DESTDIR)/var/lib/scst/pr
mkdir -p $(DESTDIR)/var/lib/scst/dif_tags
mkdir -p $(DESTDIR)/var/lib/scst/vdev_mode_pages
@echo "****************************************************************"
@echo "*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*"
@echo "*!! !!*"
@echo "*!! Now don't forget to rebuild and reinstall all your !!*"
@echo "*!! target drivers, custom dev handlers and necessary user !!*"
@echo "*!! space applications. Otherwise, because of the versions !!*"
@echo "*!! mismatch, you could have many problems and crashes. !!*"
@echo "*!! See IMPORTANT note in the \"Installation\" section of !!*"
@echo "*!! SCST's README file for more info. !!*"
@echo "*!! !!*"
@echo "*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*"
@echo "****************************************************************"
uninstall:
cd $(DEV_HANDLERS_DIR) && $(MAKE) $@
rm -f $(INSTALL_DIR)/scst.ko
-rmdir $(INSTALL_DIR) 2>/dev/null
-/sbin/depmod -b $(INSTALL_MOD_PATH)/ -a $(KVER)
rm -rf $(INSTALL_DIR_H)
INSTALL_DIR := $(INSTALL_MOD_PATH)/lib/modules/$(KVER)/extra
INSTALL_DIR_H := $(DESTDIR)$(PREFIX)/include/scst
clean:
rm -f $(SCST_INTF_VER_FILE)
$(MAKE) -C $(KDIR) M=$(shell pwd) $@
$(MAKE) -C $(DEV_HANDLERS_DIR) $@
extraclean: clean
rm -f $(SCST_INTF_VER_FILE)
cd $(DEV_HANDLERS_DIR) && $(MAKE) $@
rm -f *.orig *.rej
.PHONY: all install uninstall clean extraclean