Files
scst/srpt/Makefile
Bart Van Assche f1acec0e57 ib_srpt/Makefile: Fix OFED/MOFED detection on RHEL 7.4
Because of a not fully root-caused reason (make bug?) the output of the
shell commands used to determine the (M)OFED RPM name was written to
stderr instead of stdout. Work around this bug by splitting the shell
commands used to determine the (M)OFED RPM names.

Reported-by: Sergey Gorenko <sergeygo@mellanox.com>


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@7407 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2018-07-10 04:12:34 +00:00

286 lines
11 KiB
Makefile

#
# Makefile for ib_srpt.ko.
#
ifndef PREFIX
PREFIX=/usr/local
endif
SCST_INC_DIR := $(shell \
if [ -e "$$PWD/../scst" ]; then \
echo "$$PWD/../scst/include"; \
else \
echo "$(DESTDIR)$(PREFIX)/include/scst"; \
fi)
SCST_SYMVERS_DIR := $(shell \
if [ -e "$$PWD/../scst" ]; then \
echo "$$PWD/../scst/src"; \
else \
echo "$(DESTDIR)$(PREFIX)/include/scst"; \
fi)
ifeq ($(KVER),)
ifeq ($(KDIR),)
KVER := $(shell uname -r)
KDIR := /lib/modules/$(KVER)/build
else
ifeq ($(KERNELRELEASE),)
KVER := $(strip $(shell \
cat $(KDIR)/include/config/kernel.release 2>/dev/null || \
make -s -C $(KDIR) kernelversion))
else
KVER := $(KERNELRELEASE)
endif
endif
else
KDIR := /lib/modules/$(KVER)/build
endif
ifeq ($(INSTALL_MOD_PATH),)
export INSTALL_MOD_PATH := $(DESTDIR)
endif
INSTALL_DIR := $(INSTALL_MOD_PATH)/lib/modules/$(KVER)/extra
# Set variable $(2) to value $(3) in file $(1).
set_var = $(shell { if [ -e "$(1)" ]; then grep -v '^$(2)=' "$(1)"; fi; echo "$(2)=$(3)"; } >/tmp/$(1)-$$$$.tmp && mv /tmp/$(1)-$$$$.tmp $(1))
SRC_FILES=$(wildcard */*.[ch])
# The file Modules.symvers has been renamed in the 2.6.18 kernel to
# Module.symvers. Find out which name to use by looking in $(KDIR).
MODULE_SYMVERS:=$(shell if [ -e "$(KDIR)/Module.symvers" ]; then \
echo Module.symvers; else echo Modules.symvers; fi)
# Name of the OFED kernel package.
OFED_KERNEL_IB_RPM:=$(shell for r in mlnx-ofa_kernel compat-rdma kernel-ib; do rpm -q $$r 2>/dev/null | grep -q "^$$r" && echo "$$r" && break; done)
OFED_KERNEL_IB_DEB:=$(shell for p in mlnx-ofed-kernel-dkms; do dpkg-query -s "$$p" >/dev/null 2>&1 && echo "$$p" && break; done)
OFED_KERNEL_IB_PKG:=$(OFED_KERNEL_IB_RPM)$(OFED_KERNEL_IB_DEB)
# Name of the OFED kernel development package.
OFED_KERNEL_IB_DEVEL_RPM:=$(shell for r in mlnx-ofa_kernel-devel compat-rdma-devel kernel-ib-devel; do rpm -q $$r 2>/dev/null | grep -q "^$$r" && echo "$$r" && break; done)
OFED_KERNEL_IB_DEVEL_DEB:=$(shell for p in mlnx-ofed-kernel-dkms; do dpkg-query -s "$$p" >/dev/null 2>&1 && echo "$$p" && break; done)
OFED_KERNEL_IB_DEVEL_PKG:=$(OFED_KERNEL_IB_DEVEL_RPM)$(OFED_KERNEL_IB_DEVEL_DEB)
OFED_FLAVOR=$(shell if [ -e /usr/bin/ofed_info ]; then /usr/bin/ofed_info 2>/dev/null | head -n1 | sed -n 's/^\(MLNX_OFED\|OFED-internal\).*/MOFED/p;s/^OFED-.*/OFED/p'; else echo in-tree; fi)
ifneq ($(OFED_KERNEL_IB_PKG),)
ifeq ($(OFED_KERNEL_IB_PKG),compat-rdma)
# OFED 3.x
OFED_KERNEL_DIR:=/usr/src/compat-rdma
OFED_CFLAGS:=-I$(OFED_KERNEL_DIR)/include
else
ifeq ($(OFED_FLAVOR),MOFED)
# Mellanox OFED with or without kernel-ib RPM. Since several MOFED backport
# header files use the LINUX_BACKPORT() macro without including
# <linux/compat-2.6.h>, include that header file explicitly.
OFED_KERNEL_DIR:=/usr/src/ofa_kernel/default
OFED_RPM_VERS=$(shell rpm -q --qf '%{version}\n' mlnx-ofa_kernel-devel 2>/dev/null | grep -v ' ')
OFED_DEB_VERS=$(shell dpkg-query -W --showformat='$${Version}\n' mlnx-ofed-kernel-dkms 2>/dev/null)
OFED_VERS=$(OFED_RPM_VERS)$(OFED_DEB_VERS)
OFED_CFLAGS:=-I$(OFED_KERNEL_DIR)/include -include "linux/compat-2.6.h"
else
# OFED 1.5
OFED_KERNEL_DIR:=/usr/src/ofa_kernel
include $(OFED_KERNEL_DIR)/config.mk
OFED_CFLAGS:=$(BACKPORT_INCLUDES) -I$(OFED_KERNEL_DIR)/include
endif
endif
# Any OFED version
OFED_MODULE_SYMVERS:=$(OFED_KERNEL_DIR)/$(MODULE_SYMVERS)
endif
# Use make instead of $(MAKE) to get rid of command-line option -i
run_conftest = $(shell if [ "0$(V)" -gt 0 ]; then output=/dev/stdout; else output=/dev/null; fi; if MAKEFLAGS= make -C $(KDIR) V=$(V) SUBDIRS="$(shell pwd)/conftest/$1" PRE_CFLAGS="-Werror $(OFED_CFLAGS)" 1>&2 2>$${output}; then echo "$(strip $2)"; else echo "$(strip $3)"; fi)
run_conftest_bool = $(call run_conftest,$1,-D$(strip $2)=1,-D$(strip $2)=0)
CONFTESTS = $(shell ls -d conftest/*)
CONFTEST_OUTPUTS = $(shell \
for t in $(CONFTESTS); do \
echo $$t/result-$(KVER).txt; \
done)
PRE_CFLAGS = $(OFED_CFLAGS) \
-DOFED_FLAVOR=$(OFED_FLAVOR) \
$(shell for t in $(CONFTESTS); do \
cat $$t/result-$(KVER).txt 2>/dev/null; \
done)
all: check src/$(MODULE_SYMVERS) $(CONFTEST_OUTPUTS)
$(MAKE) -C $(KDIR) SUBDIRS=$(shell pwd)/src \
PRE_CFLAGS="$(PRE_CFLAGS)" SCST_INC_DIR=$(SCST_INC_DIR) modules
src/$(MODULE_SYMVERS): $(SCST_SYMVERS_DIR)/$(MODULE_SYMVERS) \
$(OFED_MODULE_SYMVERS)
cat $^ | \
awk '{sym[$$2]=$$0} END {for (s in sym){print sym[s]}}' >"$@"
install: all
@[ -z "$(DESTDIR)$(INSTALL_MOD_PATH)" ] && \
find /lib/modules/$(KVER) -name ib_srpt.ko -exec rm {} \; ; \
true
$(MAKE) -C $(KDIR) SUBDIRS=$(shell pwd)/src \
PRE_CFLAGS="$(PRE_CFLAGS)" SCST_INC_DIR=$(SCST_INC_DIR) \
$$([ -n "$(DESTDIR)$(INSTALL_MOD_PATH)" ] && echo DEPMOD=true) \
modules_install
uninstall:
rm -f $(INSTALL_DIR)/ib_srpt.ko
-/sbin/depmod -b $(INSTALL_MOD_PATH)/ -a $(KVER)
check:
@if [ -n "$(OFED_KERNEL_IB_PKG)" ]; then \
if [ -z "$(OFED_KERNEL_IB_DEVEL_PKG)" ]; then \
echo "Error: the OFED development package has not yet been" \
"installed."; \
false; \
else \
echo " Building against $(OFED_FLAVOR) $(OFED_KERNEL_IB_PKG)" \
"$(OFED_VERS) InfiniBand kernel headers."; \
fi \
else \
if [ -n "$(OFED_KERNEL_IB_DEVEL_PKG)" ]; then \
echo "Error: the OFED kernel package has not yet been" \
"installed."; \
false; \
else \
echo " Building against in-tree InfiniBand kernel headers."; \
fi; \
fi
clean:
rm -rf conftest/pre_cflags conftest/kcflags
for d in conftest/* src; do \
[ -d "$$d" ] && $(MAKE) -C $(KDIR) SUBDIRS=$(shell pwd)/$$d clean; \
rm -f $$d/result*.txt; \
done
rm -f src/$(MODULE_SYMVERS) src/Module.markers src/modules.order
extraclean: clean
rm -f *.orig *.rej
conftest/cm_listen/result-$(KVER).txt: \
conftest/cm_listen/cm_listen.c \
conftest/cm_listen/Makefile
echo "$(call run_conftest,cm_listen, \
-DIB_CM_LISTEN_TAKES_FOURTH_ARG)" >"$@"
conftest/create_cq/result-$(KVER).txt: \
conftest/create_cq/create_cq.c \
conftest/create_cq/Makefile
echo "$(call run_conftest,create_cq, \
-DIB_CREATE_CQ_HAS_INIT_ATTR)" >"$@"
conftest/create_send_mad_ah/result-$(KVER).txt: \
conftest/create_send_mad_ah/create_send_mad_ah.c \
conftest/create_send_mad_ah/Makefile
echo "$(call run_conftest,create_send_mad_ah, \
-DCREATE_SEND_MAD_HAS_AH_ARG)" >"$@"
conftest/create_send_mad_base/result-$(KVER).txt: \
conftest/create_send_mad_base/create_send_mad_base.c \
conftest/create_send_mad_base/Makefile
echo "$(call run_conftest,create_send_mad_base, \
-DCREATE_SEND_MAD_HAS_BASE_ARG)" >"$@"
conftest/gid_change/result-$(KVER).txt: \
conftest/gid_change/gid_change.c \
conftest/gid_change/Makefile
echo "$(call run_conftest,gid_change,-DHAVE_IB_EVENT_GID_CHANGE)" >"$@"
conftest/ib_client_remove/result-$(KVER).txt: \
conftest/ib_client_remove/ib_client_remove.c \
conftest/ib_client_remove/Makefile
echo "$(call run_conftest,ib_client_remove, \
-DIB_CLIENT_REMOVE_TAKES_TWO_ARGS)" >"$@"
conftest/ib_dma_map_ops/result-$(KVER).txt: \
conftest/ib_dma_map_ops/ib_dma_map_ops.c \
conftest/ib_dma_map_ops/Makefile
echo "$(call run_conftest,ib_dma_map_ops,-DHAVE_IB_DMA_MAP_OPS)" >"$@"
conftest/ib_set_cpi_resp_time/result-$(KVER).txt: \
conftest/ib_set_cpi_resp_time/ib_set_cpi_resp_time.c \
conftest/ib_set_cpi_resp_time/Makefile
echo "$(call run_conftest,ib_set_cpi_resp_time, \
-DHAVE_IB_SET_CPI_RESP_TIME)" >"$@"
conftest/mad_handler_takes_send_buf/result-$(KVER).txt: \
conftest/mad_handler_takes_send_buf/mad_handler_takes_send_buf.c\
conftest/mad_handler_takes_send_buf/Makefile
echo "$(call run_conftest,mad_handler_takes_send_buf, \
-DMAD_HANDLER_TAKES_SEND_BUF)" >"$@"
conftest/pd_has_local_dma_lkey/result-$(KVER).txt: \
conftest/pd_has_local_dma_lkey/pd_has_local_dma_lkey.c \
conftest/pd_has_local_dma_lkey/Makefile
echo "$(call run_conftest,pd_has_local_dma_lkey, \
-DIB_PD_HAS_LOCAL_DMA_LKEY)" >"$@"
conftest/query_device/result-$(KVER).txt: \
conftest/query_device/query_device.c \
conftest/query_device/Makefile
echo "$(call run_conftest,query_device,-DHAVE_IB_QUERY_DEVICE)" >"$@"
conftest/query_device_attr_arg/result-$(KVER).txt: \
conftest/query_device_attr_arg/query_device_attr_arg.c \
conftest/query_device_attr_arg/Makefile
echo "$(call run_conftest,query_device_attr_arg, \
-DIB_QUERY_DEVICE_HAS_ATTR_ARG)" >"$@"
conftest/query_gid/result-$(KVER).txt: \
conftest/query_gid/query_gid.c \
conftest/query_gid/Makefile
echo "$(call run_conftest,query_gid,-DIB_QUERY_GID_HAS_ATTR_ARG)" >"$@"
conftest/rdma_create_id_net/result-$(KVER).txt: \
conftest/rdma_create_id_net/rdma_create_id_net.c \
conftest/rdma_create_id_net/Makefile
echo "$(call run_conftest_bool,rdma_create_id_net, \
RDMA_CREATE_ID_TAKES_NET_ARG)" >"$@"
conftest/rdma_destroy_ah/result-$(KVER).txt: \
conftest/rdma_destroy_ah/rdma_destroy_ah.c \
conftest/rdma_destroy_ah/Makefile
echo "$(call run_conftest_bool,rdma_destroy_ah, \
HAVE_RDMA_DESTROY_AH)" >"$@"
conftest/register_mad_agent/result-$(KVER).txt: \
conftest/register_mad_agent/register_mad_agent.c \
conftest/register_mad_agent/Makefile
echo "$(call run_conftest,register_mad_agent, \
-DREGISTER_MAD_AGENT_HAS_FLAGS_ARG)" >"$@"
conftest/srp_login_req_rdma/result-$(KVER).txt: \
conftest/srp_login_req_rdma/srp_login_req_rdma.c \
conftest/srp_login_req_rdma/Makefile
echo "$(call run_conftest_bool,srp_login_req_rdma, \
HAVE_STRUCT_SRP_LOGIN_REQ_RDMA)" >"$@"
conftest/use_pre_440_wr_structure/result-$(KVER).txt: \
conftest/use_pre_440_wr_structure/use_pre_440_wr_structure.c \
conftest/use_pre_440_wr_structure/Makefile
echo "$(call run_conftest,use_pre_440_wr_structure, \
-DUSE_PRE_440_WR_STRUCTURE)" >"$@"
2debug:
-$(MAKE) clean
$(call set_var,build_mode,BUILDMODE,)
2release:
-$(MAKE) clean
$(call set_var,build_mode,BUILDMODE,RELEASE)
2perf:
-$(MAKE) clean
$(call set_var,build_mode,BUILDMODE,PERF)
release-archive:
../scripts/generate-release-archive srpt "$$(sed -n 's/^#define[[:blank:]]DRV_VERSION[[:blank:]]*\"\([^\"]*\)\".*/\1/p' src/ib_srpt.c)"
kerneldoc.html: $(SRC_FILES)
$(KDIR)/scripts/kernel-doc -html $(SRC_FILES) >$@
.PHONY: all install clean extraclean 2debug 2release 2perf