diff options
Diffstat (limited to 'test/Makefile')
-rw-r--r-- | test/Makefile | 325 |
1 files changed, 325 insertions, 0 deletions
diff --git a/test/Makefile b/test/Makefile new file mode 100644 index 0000000..2c5ba97 --- /dev/null +++ b/test/Makefile @@ -0,0 +1,325 @@ +################################################################################ +# +# +# Copyright(c) 1999 - 2007 Intel Corporation. All rights reserved. +# +# 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; either version 2 of the License, or (at your option) +# any later version. +# +# 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. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., 59 +# Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# The full GNU General Public License is included in this distribution in the +# file called LICENSE. +# +# Contact Information: +# Linux NICS <linux.nics@intel.com> +# Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 +# +################################################################################ +MYDIR =$(shell echo `pwd`) + +########################################################################### +# Driver files + +# core driver files +CFILES = dopanic_drv.c +HFILES = +ifeq (,$(BUILD_KERNEL)) +BUILD_KERNEL=$(shell uname -r) +endif + +########################################################################### +# Environment tests + +# Kernel Search Path +# All the places we look for kernel source +KSP := /lib/modules/$(BUILD_KERNEL)/source \ + /lib/modules/$(BUILD_KERNEL)/build \ + /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 + +ifeq (,$(KSRC)) + $(error Linux kernel source not found) +else +ifeq (/lib/modules/$(shell uname -r)/source, $(KSRC)) + KOBJ := /lib/modules/$(shell uname -r)/build +else + KOBJ := $(KSRC) +endif +endif + +# check for version.h and autoconf.h for running kernel in /boot (SUSE) +ifneq (,$(wildcard /boot/vmlinuz.version.h)) + VERSION_FILE := /boot/vmlinuz.version.h + CONFIG_FILE := /boot/vmlinuz.autoconf.h + KVER := $(shell $(CC) $(CFLAGS) -E -dM $(VERSION_FILE) | \ + grep UTS_RELEASE | awk '{ print $$3 }' | sed 's/\"//g') + ifeq ($(KVER),$(shell uname -r)) + # set up include path to override headers from kernel source + x:=$(shell rm -rf include) + x:=$(shell mkdir -p include/linux) + x:=$(shell cp /boot/vmlinuz.version.h include/linux/version.h) + x:=$(shell cp /boot/vmlinuz.autoconf.h include/linux/autoconf.h) + CFLAGS += -I./include + else + VERSION_FILE := $(KOBJ)/include/linux/version.h + CONFIG_FILE := $(KSRC)/include/linux/autoconf.h + endif +else + VERSION_FILE := $(KOBJ)/include/linux/version.h + CONFIG_FILE := $(KSRC)/include/linux/autoconf.h +endif + +ifeq (,$(wildcard $(VERSION_FILE))) + $(error Linux kernel source not configured - missing version.h) +endif + +ifeq (,$(wildcard $(CONFIG_FILE))) + $(error Linux kernel source not configured - missing config.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) + CFLAGS += -ffixed-8 -mno-fp-regs +endif +ifeq ($(ARCH),x86_64) + CFLAGS += -mcmodel=kernel -mno-red-zone +endif +ifeq ($(ARCH),ppc) + CFLAGS += -msoft-float +endif +ifeq ($(ARCH),ppc64) + CFLAGS += -m64 -msoft-float + LDFLAGS += -melf64ppc +endif + +# standard flags for module builds +CFLAGS += -DLINUX -D__KERNEL__ -DMODULE -O2 -pipe -Wall +CFLAGS += -I$(KSRC)/include -I. +CFLAGS += $(shell [ -f $(KSRC)/include/linux/modversions.h ] && \ + echo "-DMODVERSIONS -DEXPORT_SYMTAB \ + -include $(KSRC)/include/linux/modversions.h") + +CFLAGS += $(CFLAGS_EXTRA) +#ifeq (,$(shell echo $(CFLAGS_EXTRA) | grep NAPI)) +#CFLAGS += -DE1000_NO_NAPI +#CFLAGS_EXTRA += -DE1000_NO_NAPI +#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)) + CFLAGS += -D__module_bigmem + endif +endif + +# get the kernel version - we use this to find the correct install path +KVER := $(shell $(CC) $(CFLAGS) -E -dM $(VERSION_FILE) | grep UTS_RELEASE | \ + awk '{ print $$3 }' | sed 's/\"//g') + +KKVER := $(shell echo $(KVER) | \ + awk '{ if ($$0 ~ /2\.[4-9]\./) print "1"; else print "0"}') +# ifeq ($(KKVER), 0) +# $(error *** Aborting the build. \ +# *** This driver is not supported on kernel versions older than 2.4.0) +# endif + +# set the install path +INSTDIR := /lib/modules/$(KVER)/kernel/drivers/char + +# look for SMP in config.h +SMP := $(shell $(CC) $(CFLAGS) -E -dM $(CONFIG_FILE) | \ + grep CONFIG_SMP | awk '{ print $$3 }') +ifneq ($(SMP),1) + SMP := 0 +endif + +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 + +ifeq ($(SMP),1) + CFLAGS += -D__SMP__ +endif + +# Any special handling for this driver + +########################################################################### +# 2.4.x & 2.6.x Specific rules + +K_VERSION:=$(shell uname -r | cut -c1-3 | sed 's/2\.[56]/2\.6/') + +ifeq ($(K_VERSION), 2.6) + +# Makefile for 2.6.x kernel +TARGET = dopanic.ko + +# man page +MANSECTION = 8 +MANFILE = $(TARGET:.ko=.$(MANSECTION)) +# ifeq (,$(wildcard /etc/SuSE-release)) +# CFLAGS_DOPANIC += -I$(KSRC)/include/asm/mach-generic +# CFLAGS_EXTRA += $(CFLAGS_DOPANIC) +# endif + +ifneq ($(PATCHLEVEL),) +EXTRA_CFLAGS += $(CFLAGS_EXTRA) +obj-m += dopanic.o +dopanic-objs := $(CFILES:.c=.o) +else +default: +ifeq ($(KOBJ),$(KSRC)) + make -C $(KSRC) V=1 SUBDIRS=$(shell pwd) modules +else + make -C $(KSRC) V=1 O=$(KOBJ) SUBDIRS=$(shell pwd) modules +endif +endif + +else # ifeq ($(K_VERSION),2.6) + +# Makefile for 2.4.x kernel +TARGET = dopanic + +# man page +MANSECTION = 8 +MANFILE = $(TARGET:.o=.$(MANSECTION)) + +# Get rid of compile warnings in kernel header files from SuSE +ifneq (,$(wildcard /etc/SuSE-release)) + CFLAGS += -Wno-sign-compare -fno-strict-aliasing +endif + +# Get rid of compile warnings in kernel header files from fedora +ifneq (,$(wildcard /etc/fedora-release)) + CFLAGS += -fno-strict-aliasing +endif + +.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: + echo "** CFLAGS = $(CFLAGS)" + make + +endif # ifeq ($(K_VERSION),2.6) + +ifeq (,$(MANDIR)) + # find the best place to install the man page + MANPATH := $(shell (manpath 2>/dev/null || echo $MANPATH) | sed 's/:/ /g') + ifneq (,$(MANPATH)) + # test based on inclusion in MANPATH + test_dir = $(findstring $(dir), $(MANPATH)) + else + # no MANPATH, test based on directory existence + test_dir = $(shell [ -e $(dir) ] && echo $(dir)) + endif + # our preferred install path + # should /usr/local/man be in here ? + MANDIR := /usr/share/man /usr/man + MANDIR := $(foreach dir, $(MANDIR), $(test_dir)) + MANDIR := $(firstword $(MANDIR)) +endif +ifeq (,$(MANDIR)) + # fallback to /usr/man + MANDIR := /usr/man +endif + +# depmod version for rpm builds +DEPVER := $(shell /sbin/depmod -V 2>/dev/null | \ + awk 'BEGIN {FS="."} NR==1 {print $$2}') + +########################################################################### +# Build rules + +$(MANFILE).gz: ../$(MANFILE) + gzip -c $< > $@ + +install: default $(MANFILE).gz + # 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 || true +else + ifeq ($(DEPVER),1 ) + /sbin/depmod -r $(INSTALL_MOD_PATH) -a || true + else + /sbin/depmod -b $(INSTALL_MOD_PATH) -a -n > /dev/null || true + endif +endif + install -D -m 644 $(MANFILE).gz $(INSTALL_MOD_PATH)$(MANDIR)/man$(MANSECTION)/$(MANFILE).gz + man -c -P'cat > /dev/null' $(MANFILE:.$(MANSECTION)=) || true + +uninstall: + if [ -e $(INSTDIR)/$(TARGET) ] ; then \ + rm -f $(INSTDIR)/$(TARGET) ; \ + fi + /sbin/depmod -a + if [ -e $(MANDIR)/man$(MANSECTION)/$(MANFILE).gz ] ; then \ + rm -f $(MANDIR)/man$(MANSECTION)/$(MANFILE).gz ; \ + fi + +.PHONY: clean install + +clean: + rm -rf $(TARGET) $(TARGET:.ko=.o) $(TARGET:.ko=.mod.c) $(TARGET:.ko=.mod.o) $(CFILES:.c=.o) $(MANFILE).gz .*cmd .tmp_versions |