#***************************************************************************
# 
# Makefile for the Linux driver for the 3Com Gigabit NIC (3C2000)
#   Copyright (C) 2002 3Com Corporation
#
#***************************************************************************

#
# Target file name
#
TARGET = 3c2000.o

#
# Object files
#
OBJECTS = skge.o skaddr.o skgehwt.o skgeinit.o skgepnmi.o skgesirq.o \
          ski2c.o sklm80.o skqueue.o skrlmt.o sktimer.o skvpd.o skxmac2.o \
          skproc.o skcsum.o

#
# Compiler 
#
CC = gcc

#
# Compiler flags
#

CFLAGS = -D__KERNEL__
#CFLAGS += -I/lib/modules/$(shell uname -r)/build/include
CFLAGS += -Wall
CFLAGS += -Wstrict-prototypes
#CFLAGS += -Wno-trigraphs
CFLAGS += -O2
#CFLAGS += -fno-strict-aliasing
#CFLAGS += -fno-common
#CFLAGS += -fomit-frame-pointer
#CFLAGS += -pipe
#CFLAGS += -mpreferred-stack-boundary=2
#CFLAGS += -march=i686
CFLAGS += -DMODULE
#CFLAGS += -DMODVERSIONS
CFLAGS += -I.
CFLAGS += -DSK_USE_CSUM
#CFLAGS += -nostdinc

#
# Include directory
#
ifneq (,$(wildcard /usr/src/linux))
INCLUDE_DIR = /usr/src/linux/include
else
INCLUDE_DIR = /usr/src/linux-2.4/include
endif

CFLAGS += -I $(INCLUDE_DIR)

#
# MODVersions setting
#
ifneq (,$(wildcard $(INCLUDE_DIR)/linux/modversions.h))
CFLAGS += -include $(INCLUDE_DIR)/linux/modversions.h
endif
CFLAGS += $(shell [ -f $(INCLUDE_DIR)/linux/modversions.h ] && echo -DMODVERSIONS)

#
# Version file 
#
VERSION_FILE = $(INCLUDE_DIR)/linux/version.h

# Get the kernel version from version.h
KERNEL_VER = $(shell gcc -E -dM $(VERSION_FILE) | grep UTS | awk '{ print $$3; }' | sed -e 's/\"//g')

ifneq (,$(wildcard /lib/modules/$(KERNEL_VER)/kernel))
	INSTALL_DIR = /lib/modules/$(KERNEL_VER)/kernel/drivers/net
else
	INSTALL_DIR = /lib/modules/$(KERNEL_VER)/net
endif

#
# SMP Configuration
#
CONFIG_FILE = $(INCLUDE_DIR)/linux/autoconf.h
SMP_FLAG = $(shell gcc -E -dM $(CONFIG_FILE) | grep CONFIG_SMP | awk '{print $$3; }')

ifeq ($(SMP_FLAG), 1)
	CFLAGS += -D__SMP__
endif

#
# Target generation
# 
$(TARGET) : $(OBJECTS)
	ld -r -o $(TARGET) $(OBJECTS)

skge.o : skge.c h/skversion.h h/skdrv1st.h h/skdrv2nd.h

skaddr.o : skaddr.c h/skdrv1st.h h/skdrv2nd.h

skgehwt.o : skgehwt.c h/skdrv1st.h h/skdrv2nd.h

skgeinit.o : skgeinit.c h/skdrv1st.h h/skdrv2nd.h

skgepnmi.o : skgepnmi.c h/skdrv1st.h h/sktypes.h h/xmac_ii.h h/skdebug.h \
             h/skqueue.h h/skgepnmi.h h/skgesirq.h h/skcsum.h h/skvpd.h \
             h/skgehw.h h/skgeinit.h h/skdrv2nd.h h/skgepnm2.h skgemib.c

skgesirq.o : skgesirq.c h/skdrv1st.h h/skgepnmi.h h/skrlmt.h h/skdrv2nd.h

ski2c.o : ski2c.c h/skdrv1st.h h/lm80.h h/skdrv2nd.h

sklm80.o : sklm80.c h/skdrv1st.h h/lm80.h h/skdrv2nd.h

skqueue.o : skqueue.c h/skdrv1st.h h/skqueue.h h/skdrv2nd.h

skrlmt.o : skrlmt.c h/skdrv1st.h h/skdrv2nd.h

sktimer.o : sktimer.c h/skdrv1st.h h/skdrv2nd.h

skvpd.o : skvpd.c h/skdrv1st.h h/sktypes.h h/skdebug.h h/skdrv2nd.h

skxmac2.o : skxmac2.c h/skdrv1st.h h/skdrv2nd.h

skproc.o : skproc.c h/skdrv1st.h h/skdrv2nd.h

skcsum.o : skcsum.c h/skdrv1st.h h/skcsum.h h/skdrv2nd.h h/sktypes.h \
           h/skqueue.h

#
# Cleanup
#
.PHONY : clean
clean :
	-rm -f $(TARGET) $(OBJECTS)

#
# Module installation
# 
.PHONY : install
install: $(TARGET)
	@echo "Found kernel version $(KERNEL_VER)"
	@echo "Install directory is $(INSTALL_DIR)"
	mkdir -p $(INSTALL_DIR)
	install -m 644 $(TARGET) $(INSTALL_DIR)
	depmod -a

#
# Module removal
#
.PHONY : remove
remove:
	@echo "Removing Module from $(INSTALL_DIR)"
	rm -f $(INSTALL_DIR)/$(TARGET)
	depmod -a

#
# Module loading
#
.PHONY : load
load: $(TARGET)
	insmod $(TARGET)

