blob: c17e3b0537d29590cf7eae31d7d42fcd163f8626 [file] [log] [blame]
#!/usr/bin/make
# Makefile for building Linux Broadcom Gigabit L5 driver as a module.
# $id$
KVER=
ifeq ($(KVER),)
KVER=$(shell uname -r)
endif
MMKVER := $(shell echo $(KVER) | sed -e 's/\([0-9]\.[0-9]\)\.[0-9]*[.|-].*/\1/')
FIKVER := $(shell echo $(KVER) | sed -e 's/[0-9]\.[0-9]\.\([0-9]*\)[.|-].*/\1/')
# PREFIX may be set by the RPM build to set the effective root.
PREFIX=
ifeq ($(shell ls /lib/modules/$(KVER)/build > /dev/null 2>&1 && echo build),)
# SuSE source RPMs
_KVER=$(shell echo $(KVER) | cut -d "-" -f1,2)
_KFLA=$(shell echo $(KVER) | cut -d "-" -f3)
_ARCH=$(shell file -b /lib/modules/$(shell uname -r)/build | cut -d "/" -f5)
ifeq ($(_ARCH),)
_ARCH=$(shell uname -m)
endif
ifeq ($(shell ls /usr/src/linux-$(_KVER)-obj > /dev/null 2>&1 && echo linux),)
LINUX=
else
LINUX=/usr/src/linux-$(_KVER)-obj/$(_ARCH)/$(_KFLA)
LINUXSRC=/usr/src/linux-$(_KVER)
endif
else
LINUX=/lib/modules/$(KVER)/build
ifeq ($(shell ls /lib/modules/$(KVER)/source > /dev/null 2>&1 && echo source),)
LINUXSRC=$(LINUX)
else
LINUXSRC=/lib/modules/$(KVER)/source
endif
endif
# Make sure only one bnx2? DKMS RPM is installed.
#ifneq ($(shell rpm -qa | grep -v "bnx2i-*" | grep "netxtreme2-.*dkms" | wc -l), 1)
#$(error More than one netxtreme2 DKMS RPM installed!!! Failing build.)
#endif
ifeq ($(BNX2_CNIC_INC),)
# Obtain the current working directory. $(PWD) doesn't work because this
# makefile cannot override the $(PWD) definition of the parent makefile.
BCMPWD = $(shell pwd)
ifeq ($(shell test -e $(BCMPWD)/../../bnx2 > /dev/null 2>&1 || echo notfound),)
BNX2_CNIC_INC := $(BCMPWD)/../../bnx2/src
else
$(error bnx2/cnic package not found. $(BCMPWD))
endif
export BNX2_CNIC_INC
endif
ifeq ($(BCMMODDIR),)
ifeq ($(shell ls /lib/modules/$(KVER)/updates > /dev/null 2>&1 && echo 1),1)
BCMMODDIR=/lib/modules/$(KVER)/updates
else
ifeq ($(shell grep -q "search.*[[:space:]]updates" /etc/depmod.conf > /dev/null 2>&1 && echo 1),1)
BCMMODDIR=/lib/modules/$(KVER)/updates
else
ifeq ($(shell grep -q "search.*[[:space:]]updates" /etc/depmod.d/* > /dev/null 2>&1 && echo 1),1)
BCMMODDIR=/lib/modules/$(KVER)/updates
else
BCMMODDIR=/lib/modules/$(KVER)/kernel/drivers/scsi
endif
endif
endif
endif
# iSCSI offload is only supported for RHELS5.4+, RHELS6.0+, SLES11sp1+,
# and 2.6 upstream kernels
# Check for the existence of version.h
ifneq ($(shell ls $(LINUXSRC)/include/linux/version.h > /dev/null 2>&1 && echo version),)
ifneq ($(shell grep "RHEL" $(LINUXSRC)/include/linux/version.h > /dev/null 2>&1 && echo rhel),)
MAJVER := $(shell grep "MAJOR" $(LINUXSRC)/include/linux/version.h | sed -e 's/.*MAJOR \([0-9]\)/\1/')
MINVER := $(shell grep "MINOR" $(LINUXSRC)/include/linux/version.h | sed -e 's/.*MINOR \([0-9]\)/\1/')
else
# Can be upstream or SLES11 kernel
ifeq ($(shell test -f /etc/SuSE-release > /dev/null 2>&1 || echo notfound),)
VERSION := $(shell grep VERSION /etc/SuSE-release | sed -e 's/.*= //')
PATCHLEVEL := $(shell grep PATCHLEVEL /etc/SuSE-release | sed -e 's/.*= //')
else
# Upstream kernel detected, allow compilation
ifeq ($(shell [ "$(MMKVER)" = "2.6" -a $(FIKVER) -gt 30 ] || echo notfound),)
BCM_ISCSI_BUILD=iscsibuild
BCM_ISCSI_INSTALL=iscsiinstall
BCM_ISCSI_CLEAN=iscsiclean
else
ifeq ($(shell [ "$(MMKVER)" = "3.0" ] || echo notfound),)
BCM_ISCSI_BUILD=iscsibuild
BCM_ISCSI_INSTALL=iscsiinstall
BCM_ISCSI_CLEAN=iscsiclean
endif
endif
endif
endif
else
#Only use the /etc/redhat or SuSE -release if the version.h doesn't exist
ifeq ($(shell test -f /etc/redhat-release > /dev/null 2>&1 || echo notfound),)
MAJVER := $(shell sed -e 's/.*release \([0-9]\).*/\1/' /etc/redhat-release)
MINVER := $(shell sed -e 's/.*\.\([0-9]\)*.*/\1/' /etc/redhat-release)
endif
ifeq ($(shell test -f /etc/SuSE-release > /dev/null 2>&1 || echo notfound),)
VERSION := $(shell grep VERSION /etc/SuSE-release | sed -e 's/.*= //')
PATCHLEVEL := $(shell grep PATCHLEVEL /etc/SuSE-release | sed -e 's/.*= //')
endif
endif
# Check for specific RHELS versions for iSCSI and dual iSCSI stack support
RHELS_DISTRO_VER = "0x0$(MAJVER)0$(MINVER)"
ifeq ($(shell [ "$(MAJVER)" = "5" ] || echo notfound),)
ifeq ($(shell [ "$(MINVER)" -gt 3 ] || echo notfound),)
BCM_ISCSI_BUILD=iscsibuild
BCM_ISCSI_INSTALL=iscsiinstall
BCM_ISCSI_CLEAN=iscsiclean
BRCM_FLAGS += -D__RHELS_DISTRO_5__=$(RHELS_DISTRO_VER)
endif
else
ifeq ($(shell [ "$(MAJVER)" = "6" ] || echo notfound),)
BCM_ISCSI_BUILD=iscsibuild
BCM_ISCSI_INSTALL=iscsiinstall
BCM_ISCSI_CLEAN=iscsiclean
BRCM_FLAGS += -D__RHELS_DISTRO_6__=$(RHELS_DISTRO_VER)
endif
endif
# Check for specific SLES versions for iSCSI support
SLES_DISTRO_VER = "0x$(VERSION)0$(PATCHLEVEL)"
ifeq ($(shell [ "$(VERSION)" = "11" ] || echo notfound),)
ifeq ($(shell [ "$(PATCHLEVEL)" -gt 0 ] || echo notfound),)
BCM_ISCSI_BUILD=iscsibuild
BCM_ISCSI_INSTALL=iscsiinstall
BCM_ISCSI_CLEAN=iscsiclean
BRCM_FLAGS += -D__SLES_DISTRO__=$(SLES_DISTRO_VER)
endif
endif
ifeq ($(shell grep scsi_get_resid $(LINUXSRC)/include/scsi/*.h > /dev/null 2>&1 && echo resid_defined),)
BRCM_FLAGS += -D_DEFINE_SCSI_GET_RESID
endif
ifeq ($(shell grep scsi_set_resid $(LINUXSRC)/include/scsi/*.h > /dev/null 2>&1 && echo resid_defined),)
BRCM_FLAGS += -D_DEFINE_SCSI_SET_RESID
endif
ifeq ($(shell awk '/(*create_session)/,/;/ {printf $$0; next}' $(LINUXSRC)/include/scsi/scsi_transport_iscsi.h | awk -F ',' '{print NF}'),6)
BRCM_FLAGS += -D_CREATE_SESS_NEW_
endif
default: build
# check if 2.6 kernel or 3.0 kernel
ifeq ($(shell [ "$(MMKVER)" = "2.6" ] || echo notfound),)
BCM_DRV = bnx2i.ko
else
ifeq ($(shell [ "$(MMKVER)" = "3.0" ] || echo notfound),)
BCM_DRV = bnx2i.ko
endif
endif
ifneq ($(BCM_DRV),)
ifneq ($(KERNELRELEASE),)
bnx2i-objs := bnx2i_iscsi.o bnx2i_hwi.o bnx2i_init.o bnx2i_sysfs.o
obj-m += bnx2i.o
EXTRA_CFLAGS += -I${BNX2_CNIC_INC} -D_SYSFS_INCL_ ${BRCM_FLAGS}
else # ($(KERNELRELEASE),)
iscsibuild:
make -C $(LINUX) SUBDIRS=$(shell pwd) modules
endif
else # BCM_DRV
# 2.4 kernel not supported
$(error iSCSI Offload not supported on 2.4 kernel)
endif # BCM_DRV
iscsiinstall:
make -C $(LINUX) SUBDIRS=$(shell pwd) modules
mkdir -p $(PREFIX)/$(BCMMODDIR)
install -m 444 $(BCM_DRV) $(PREFIX)/$(BCMMODDIR)
@if [ "$(PREFIX)" = "" ]; then /sbin/depmod -a $(KVER);\
else echo " *** Run '/sbin/depmod -a' to update the module database.";\
fi
iscsiclean:
rm -f bnx2i.o bnx2i.mod.[co] bnx2i_iscsi.o bnx2i_iscsi.mod.[co]
rm -rf bnx2i_init.o bnx2i_init.mod.[co]
rm -rf .bnx2i*cmd bnx2i.ko .tmp_versions
rm -rf .*.swp *.symvers
rm -rf bnx2i_hwi.o bnx2i_sysfs.o bnx2i_hwi.mod.[co] bnx2i_swi.mod.[co]
build: $(BCM_ISCSI_BUILD)
install: $(BCM_ISCSI_INSTALL)
.PHONEY: all clean install
clean: $(BCM_ISCSI_CLEAN)
cscope:
find . -name "*.[ch]" > cscope.files
cscope -bp3
tags:
ctags -R