File Makefile-kbuild.diff of Package scsi_ep_front

Index: scsi_ep_front/scsi_ep_front/Makefile
===================================================================
--- scsi_ep_front.orig/scsi_ep_front/Makefile
+++ scsi_ep_front/scsi_ep_front/Makefile
@@ -1,6 +1,10 @@
 # Comment/uncomment the following line to enable/disable debugging
 #DEBUG = y
 
+ifeq (,$(BUILD_KERNEL))
+BUILD_KERNEL=$(shell uname -r)
+endif
+
 # for driver version begin
 DRV_BUILD_TIME := $(shell date +"%Y-%m-%d %H:%M:%S")
 ifeq ($(DRV_BUILD_TIME), )
@@ -28,91 +32,280 @@ ifeq ($(DEBUG),y)
 else
   DEBFLAGS = -O2
 endif
+
 EXTRA_CFLAGS += $(DEBFLAGS) -I$(LDDINC)
 
 
-CFILES := epfront_transfer.o \
-		  epfront_main.o \
-		  epfront_sysfs.o
+CFILES := epfront_transfer.c \
+		  epfront_main.c \
+		  epfront_sysfs.c
 
 DRIVER_NAME := scsi_ep_front
 
-#KERNELDIR ?= /lib/modules/$(shell uname -r)/build
-#KERNELDIR ?= /usr1/f00346856/3.0.101-63-default/
-#KERNELDIR ?= /usr1/f00346856/2.6.32-504.el6.x86_64/build/
-KERNELDIR ?= /usr1/f00346856/2.6.32-573.el6.x86_64/
-ifneq ($(KERNELRELEASE),) 
+# All the places we look for kernel source
+KSP :=  /lib/modules/$(BUILD_KERNEL)/build \
+        /lib/modules/$(BUILD_KERNEL)/source \
+        /usr/src/linux-$(BUILD_KERNEL) \
+        /usr/src/linux-$($(BUILD_KERNEL) | sed 's/-.*//') \
+        /usr/src/kernel-headers-$(BUILD_KERNEL) \
+        /usr/src/kernel-source-$(BUILD_KERNEL) \
+        /usr/src/linux-$($(BUILD_KERNEL) | sed 's/\([0-9]*\.[0-9]*\)\..*/\1/') \
+        /usr/src/linux
+
+# prune the list down to only values that exist
+# and have an include/linux sub-directory
+test_dir = $(shell [ -e $(dir)/include/linux ] && echo $(dir))
+KSP := $(foreach dir, $(KSP), $(test_dir))
+
+# we will use this first valid entry in the search path
+ifeq (,$(KSRC))
+  KSRC := $(firstword $(KSP))
+endif
 
-$(DRIVER_NAME)-objs := $(CFILES:.c=.o)
-obj-m   +=   $(DRIVER_NAME).o		
-		  
+ifeq (,$(KSRC))
+  $(warning *** Kernel header files not in any of the expected locations.)
+  $(warning *** Install the appropriate kernel development package, e.g.)
+  $(error kernel-devel, for building kernel modules and try again)
+else
+ifeq (/lib/modules/$(BUILD_KERNEL)/source, $(KSRC))
+  KOBJ :=  /lib/modules/$(BUILD_KERNEL)/build
 else
-PWD       := $(shell pwd)
+  KOBJ :=  $(KSRC)
+endif
+endif
 
-modules:
-	$(MAKE) ARCH=x86_64 CROSS_COMPILE=  -C $(KERNELDIR) M=$(PWD) LDDINC=$(PWD) modules
+# Version file Search Path
+VSP :=  $(KOBJ)/include/generated/utsrelease.h \
+        $(KOBJ)/include/linux/utsrelease.h \
+        $(KOBJ)/include/linux/version.h \
+        $(KOBJ)/include/generated/uapi/linux/version.h \
+        /boot/vmlinuz.version.h
+
+# Config file Search Path
+CSP :=  $(KOBJ)/include/generated/autoconf.h \
+        $(KOBJ)/include/linux/autoconf.h \
+        /boot/vmlinuz.autoconf.h
+
+# prune the lists down to only files that exist
+test_file = $(shell [ -f $(file) ] && echo $(file))
+VSP := $(foreach file, $(VSP), $(test_file))
+CSP := $(foreach file, $(CSP), $(test_file))
+
+# and use the first valid entry in the Search Paths
+ifeq (,$(VERSION_FILE))
+  VERSION_FILE := $(firstword $(VSP))
+endif
+ifeq (,$(CONFIG_FILE))
+  CONFIG_FILE := $(firstword $(CSP))
+endif
+
+ifeq (,$(wildcard $(VERSION_FILE)))
+  $(error Linux kernel source not configured - missing version header file)
+endif
 
+ifeq (,$(wildcard $(CONFIG_FILE)))
+  $(error Linux kernel source not configured - missing autoconf.h)
+endif
+
+# pick a compiler
+ifneq (,$(findstring egcs-2.91.66, $(shell cat /proc/version)))
+  CC := kgcc gcc cc
+else
+  CC := gcc cc
+endif
+test_cc = $(shell $(cc) --version > /dev/null 2>&1 && echo $(cc))
+CC := $(foreach cc, $(CC), $(test_cc))
+CC := $(firstword $(CC))
+ifeq (,$(CC))
+  $(error Compiler not found)
+endif
+
+# we need to know what platform the driver is being built on
+# some additional features are only built on Intel platforms
+ARCH := $(shell uname -m | sed 's/i.86/i386/')
+ifeq ($(ARCH),alpha)
+  EXTRA_CFLAGS += -ffixed-8 -mno-fp-regs
+endif
+ifeq ($(ARCH),x86_64)
+  EXTRA_CFLAGS += -mcmodel=kernel -mno-red-zone
+endif
+ifeq ($(ARCH),ppc)
+  EXTRA_CFLAGS += -msoft-float
+endif
+ifeq ($(ARCH),ppc64)
+  EXTRA_CFLAGS += -m64 -msoft-float
+  LDFLAGS += -melf64ppc
+endif
+
+RHC := $(KSRC)/include/linux/rhconfig.h
+ifneq (,$(wildcard $(RHC)))
+  # 7.3 typo in rhconfig.h
+  ifneq (,$(shell $(CC) $(CFLAGS) -E -dM $(RHC) | grep __module__bigmem))
+	EXTRA_CFLAGS += -D__module_bigmem
+  endif
+endif
+
+# get the kernel version - we use this to find the correct install path
+KVER := $(shell $(CC) $(EXTRA_CFLAGS) -E -dM $(VERSION_FILE) | grep UTS_RELEASE | \
+        awk '{ print $$3 }' | sed 's/\"//g')
+
+# assume source symlink is the same as build, otherwise adjust KOBJ
+ifneq (,$(wildcard /lib/modules/$(KVER)/build))
+ifneq ($(KSRC),$(shell readlink /lib/modules/$(KVER)/build))
+  KOBJ=/lib/modules/$(KVER)/build
+endif
+endif
+
+#KVER_CODE := $(shell $(CC) $(EXTRA_CFLAGS) -E -dM $(VSP) 2>/dev/null |\
+#	   grep -m 1 LINUX_VERSION_CODE | awk '{ print $$3 }' | sed 's/\"//g')
+KVER_CODE := $(shell grep -m 1 LINUX_VERSION_CODE $(VSP) | awk '{ print $$3 }' | sed 's/\"//g')
+
+# abort the build on kernels older than 2.4.0
+ifneq (1,$(shell [ $(KVER_CODE) -ge 132096 ] && echo 1 || echo 0))
+  $(error *** Aborting the build. \
+          *** This driver is not supported on kernel versions older than 2.4.0)
 endif
 
-TARGET := $(DRIVER_NAME).ko
 
 # set the install path
-#KERNELINST := /lib/modules/$(shell uname -r)/
-#KERNELINST ?= /lib/modules/3.0.101-63-default/
-#KERNELINST ?= /lib/modules/2.6.32-504.el6.x86_64/
-KERNELINST ?= /lib/modules/2.6.32-573.el6.x86_64/
-
-INSTDIR := $(KERNELINST)/kernel/drivers/scsi/$(DRIVER_NAME)
-#INSTDIR := $(KERNELDIR)/kernel/drivers/scsi/
-MODPROBE_CONF_DIR  := /etc/modprobe.d/
-ABSOLUTE_MOD_INSTDIR := $(INSTALL_MOD_PATH)$(INSTDIR)
-ABOSULTE_MODPROBE_CONF_DIR := $(INSTALL_MOD_PATH)$(MODPROBE_CONF_DIR)
-MODPROBE_CONF_FILE := $(ABOSULTE_MODPROBE_CONF_DIR)/$(DRIVER_NAME).conf
+INSTDIR := /lib/modules/$(KVER)/kernel/drivers/scsi/$(DRIVER_NAME)
 
-# depmod version
-DEPVER := $(shell /sbin/depmod -V 2>/dev/null | awk 'BEGIN {FS="."} NR==1 {print $$2}')
+# look for SMP in config.h
+SMP := $(shell $(CC) $(EXTRA_CFLAGS) -E -dM $(CONFIG_FILE) | \
+         grep -w CONFIG_SMP | awk '{ print $$3 }')
+ifneq ($(SMP),1)
+  SMP := 0
+endif
 
-install:
-	# remove all old versions of the driver
-	find $(INSTALL_MOD_PATH)/$(KERNELINST) -name $(TARGET) -exec rm -f {} \; || true
+ifneq ($(SMP),$(shell uname -a | grep SMP > /dev/null 2>&1 && echo 1 || echo 0))
+  $(warning ***)
+  ifeq ($(SMP),1)
+    $(warning *** Warning: kernel source configuration (SMP))
+    $(warning *** does not match running kernel (UP))
+  else
+    $(warning *** Warning: kernel source configuration (UP))
+    $(warning *** does not match running kernel (SMP))
+  endif
+  $(warning *** Continuing with build,)
+  $(warning *** resulting driver may not be what you want)
+  $(warning ***)
+endif
 
-	# create directory for the module
-	if [ ! -d $(ABSOLUTE_MOD_INSTDIR) ] ; then \
-		mkdir -p $(ABSOLUTE_MOD_INSTDIR) ; \
-	fi
-	if [ ! -d $(ABOSULTE_MODPROBE_CONF_DIR) ] ; then \
-		mkdir -p $(ABOSULTE_MODPROBE_CONF_DIR) ; \
-	fi
+ifeq ($(SMP),1)
+  EXTRA_CFLAGS += -D__SMP__
+endif
+
+
+###########################################################################
+# Kernel Version Specific rules
+
+ifeq (1,$(shell [ $(KVER_CODE) -ge 132352 ] && echo 1 || echo 0))
+
+# Makefile for 2.5.x and newer kernel
+TARGET = $(DRIVER_NAME).ko
+
+ifneq ($(PATCHLEVEL),)
+EXTRA_CFLAGS += $(CFLAGS_EXTRA)
+obj-m += $(DRIVER_NAME).o
+$(DRIVER_NAME)-objs := $(CFILES:.c=.o)
+else
+default:
+ifeq ($(KOBJ),$(KSRC))
+	$(MAKE) -C $(KSRC) SUBDIRS=$(shell pwd) modules
+else
+	$(MAKE) -C $(KSRC) O=$(KOBJ) SUBDIRS=$(shell pwd) modules
+endif
+endif
 
-	# install the modules
-	install -D -m 644 $(TARGET) $(ABSOLUTE_MOD_INSTDIR)/$(TARGET)
-	echo "install $(DRIVER_NAME) /sbin/modprobe --ignore-install $(DRIVER_NAME)" > $(MODPROBE_CONF_FILE)
-
-ifeq (,$(INSTALL_MOD_PATH) )
-/sbin/depmod -a || true
-else
-ifeq ($(DEPVER),1)
-/sbin/depmod -r $(INSTALL_MOD_PATH) -a || true
-#else
-#/sbin/depmod -b $(INSTALL_MOD_PATH) -a -n $(KVERSION) > /dev/null || true
+# Get rid of compile warnings in kernel header files from SuSE
+ifneq (,$(wildcard /etc/SuSE-release))
+  EXTRA_CFLAGS += -Wno-sign-compare -fno-strict-aliasing
 endif
+
+# Get rid of compile warnings in kernel header files from fedora
+ifneq (,$(wildcard /etc/fedora-release))
+  EXTRA_CFLAGS += -fno-strict-aliasing
+endif
+
+#CFLAGS += $(EXTRA_CFLAGS)
+
+.SILENT: $(TARGET)
+$(TARGET): $(filter-out $(TARGET), $(CFILES:.c=.o))
+	$(LD) $(LDFLAGS) -r $^ -o $@
+	echo; echo
+	echo "**************************************************"
+	echo "** $(TARGET) built for $(KVER)"
+	echo -n "** SMP               "
+	if [ "$(SMP)" = "1" ]; \
+		then echo "Enabled"; else echo "Disabled"; fi
+	echo "**************************************************"
+	echo
+
+$(CFILES:.c=.o): $(HFILES) Makefile
+default:
+	$(MAKE)
+
+endif # ifeq (1,$(shell [ $(KVER_CODE) -ge 132352 ] && echo 1 || echo 0))
+
+
+# extra flags for module builds
+EXTRA_CFLAGS += -DDRIVER_$(shell echo $(DRIVER_NAME) | tr '[a-z]' '[A-Z]')
+EXTRA_CFLAGS += -DDRIVER_NAME=$(DRIVER_NAME)
+EXTRA_CFLAGS += -DDRIVER_NAME_CAPS=$(shell echo $(DRIVER_NAME) | tr '[a-z]' '[A-Z]')
+# standard flags for module builds
+EXTRA_CFLAGS += -DLINUX -D__KERNEL__ -DMODULE -O2 -pipe -Wall
+EXTRA_CFLAGS += -I$(KSRC)/include -I.
+EXTRA_CFLAGS += $(shell [ -f $(KSRC)/include/linux/modversions.h ] && \
+            echo "-DMODVERSIONS -DEXPORT_SYMTAB \
+                  -include $(KSRC)/include/linux/modversions.h")
+
+EXTRA_CFLAGS += $(CFLAGS_EXTRA)
+
+# depmod version for rpm builds
+DEPVER := $(shell /sbin/depmod -V 2>/dev/null | \
+          awk 'BEGIN {FS="."} NR==1 {print $$2}')
+
+
+install: default
+	# remove all old versions of the driver
+	find $(INSTALL_MOD_PATH)/lib/modules/$(KVER) -name $(TARGET) -exec rm -f {} \; || true
+	find $(INSTALL_MOD_PATH)/lib/modules/$(KVER) -name $(TARGET).gz -exec rm -f {} \; || true
+	install -D -m 644 $(TARGET) $(INSTALL_MOD_PATH)$(INSTDIR)/$(TARGET)
+ifeq (,$(INSTALL_MOD_PATH))
+	/sbin/depmod -a $(KVER) || true
+else
+  ifeq ($(DEPVER),1 )
+	/sbin/depmod -r $(INSTALL_MOD_PATH) -a $(KVER) || true
+  else
+	/sbin/depmod -b $(INSTALL_MOD_PATH) -a -n $(KVER) > /dev/null || true
+  endif
 endif
 
 uninstall:
-	if [ -e $(ABSOLUTE_MOD_INSTDIR)/$(TARGET) ] ; then \
-		rm -f $(ABSOLUTE_MOD_INSTDIR)/$(TARGET) ; \
+	if [ -e $(INSTDIR)/$(TARGET) ] ; then \
+	    rm -f $(INSTDIR)/$(TARGET) ; \
 	fi
-
-	rmdir $(ABSOLUTE_MOD_INSTDIR) 2&> /dev/null || true
-        
-	rm -f $(MODPROBE_CONF_FILE) ;
 	/sbin/depmod -a
+	if [ -e $(MANDIR)/man$(MANSECTION)/$(MANFILE).gz ] ; then \
+		rm -f $(MANDIR)/man$(MANSECTION)/$(MANFILE).gz ; \
+	fi
+
+.PHONY: clean install
+
+clean:
+ifeq ($(KOBJ),$(KSRC))
+	$(MAKE) -C $(KSRC) SUBDIRS=$(shell pwd) clean
+else
+	$(MAKE) -C $(KSRC) O=$(KOBJ) SUBDIRS=$(shell pwd) clean
+endif
+	rm -rf $(TARGET) $(TARGET:.ko=.o) $(TARGET:.ko=.mod.c) $(TARGET:.ko=.mod.o) $(CFILES:.c=.o) $(MANFILE).gz .*cmd .tmp_versions
+
+
+############## HUAWEI #######################
 
 srpm:
 	@sh create_srpm.sh $(DRIVER_NAME)
 
-clean:
-	rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions *.ko.unsigned *.order *.symvers *.ko *.rpm x86_64
 
 depend .depend dep:
 	$(CC) $(EXTRA_CFLAGS) -M *.c > .depend