#
# Makefile for the KS8841/2 PCI Ethernet driver
#
# Note! Dependencies are done automagically by 'make dep', which also
# removes any old dependencies. DON'T put your own dependencies here
# unless it's something special (ie not a .c file).
#
# Note 2! The CFLAGS definitions are now in the main makefile...


ifdef CONFIG_KS8841
TARGETNAME := ks8841_pci

else
TARGETNAME := ks8842_pci
endif


HEADERS = device.h hardware.h target.h ks_def.h ks_config.h Makefile

OBJS := device.o interrupt.o transmit.o hardware.o target.o \
	ks_config.o ks_mirror.o ks_qos.o ks_rate.o ks_stp.o \
	ks_table.o ks_vlan.o ks_Diag.o


EXTRA_CFLAGS += -DDEF_LINUX -DKS_PCI_BUS -DKS_PCI

ifeq ($(CONFIG_KS8842_ISA),y)
EXTRA_CFLAGS += -DKS_ISA
endif

ifdef CONFIG_KS8841
EXTRA_CFLAGS += -DDEF_KS8841
ifdef CONFIG_KS884X_NAPI
EXTRA_CFLAGS += -DCONFIG_KS884X_NAPI
endif
else
EXTRA_CFLAGS += -DDEF_KS8842

ifdef CONFIG_KS8842_TWO
EXTRA_CFLAGS += -DTWO_NETWORK_INTERFACE
else
ifdef CONFIG_KS884X_NAPI
EXTRA_CFLAGS += -DCONFIG_KS884X_NAPI
endif
endif
endif

ifndef DEBUG
EXTRA_CFLAGS += -DINLINE
endif

ifdef DEBUG
ifdef INLINE
EXTRA_CFLAGS += -DINLINE
endif
EXTRA_CFLAGS += -DDBG
endif

ifdef CONFIG_MII
EXTRA_CFLAGS += -DMII
endif

EXTRA_CFLAGS += -DNO_STATS


# Build within Linux kernel

ifdef PATCHLEVEL

ifeq ($(PATCHLEVEL),4)
O_TARGET := $(TARGETNAME).o

obj-y	:= $(OBJS)

obj-m   := $(O_TARGET)

include $(TOPDIR)/Rules.make

else
ifndef CONFIG_KS8842_PCI
CONFIG_KS8842_PCI=m
endif
obj-$(CONFIG_KS8842_PCI) += $(TARGETNAME).o
$(TARGETNAME)-objs := $(OBJS)
endif

else

# Find out if GCC tools are needed.
NO_CC := $(shell if [ "$(MAKECMDGOALS)" = "clean" ]  || \
    [ "$(MAKECMDGOALS)" = "zip" ]  || \
    [ "$(MAKECMDGOALS)" = "distclean" ]; then \
    echo "yes"; else echo ""; fi)
ifneq ("$(NO_CC)", "yes")

CROSS ?=
KERNELDIR ?= /usr/src/linux-2.4
LD_FLAGS ?=
CFLAGS :=


GCC = $(CROSS)gcc
STRIP = $(CROSS)strip
LD = $(CROSS)ld


# Check which kernel is used

MAKE_FILE = $(KERNELDIR)/Makefile
PATCHLEVEL := $(shell grep "^PATCHLEVEL =" $(MAKE_FILE) | cut -d" " -f3)
SUBLEVEL := $(shell grep "^SUBLEVEL =" $(MAKE_FILE) | cut -d" " -f3)

ifeq ($(PATCHLEVEL),4)
O_TARGET := $(TARGETNAME).o

default: $(O_TARGET)

$(O_TARGET) : $(OBJS) $(HEADERS)
	@$(LD) -r $(OBJS) -o $@

else
O_TARGET := $(TARGETNAME).ko
TARGET := $(TARGETNAME).o

default: $(O_TARGET)

$(TARGET) : $(OBJS) $(HEADERS)
	@$(LD) $(LD_FLAGS) -r $(OBJS) -o $@

$(TARGETNAME).mod.c: $(TARGETNAME).o
	@if [ -d $(KERNELDIR)/scripts/mod ]; then \
	$(KERNELDIR)/scripts/mod/modpost -i \
		$(KERNELDIR)/Module.symvers $<; \
	else \
	$(KERNELDIR)/scripts/modpost -i \
		$(KERNELDIR)/Module.symvers $(KERNELDIR)/vmlinux $<; \
	fi
	touch $@

$(TARGETNAME).mod.o: .c=.o

$(O_TARGET): $(TARGETNAME).o $(TARGETNAME).mod.o
	$(LD) $(LD_FLAGS) -EL -r -o $@ $^
endif
endif


CFLAGS := $(CFLAGS) -D__KERNEL__ -DMODULE -I$(KERNELDIR)/include -O2
#CFLAGS += -Wall
CFLAGS += -Wstrict-prototypes -fomit-frame-pointer -fno-common
#CFLAGS += -march=k8 -mtune=nocona -m64 -mcmodel=kernel

ifeq ($(PATCHLEVEL),6)
ifeq ($(SUBLEVEL),15)
CFLAGS += -D"KBUILD_STR(s)=\#s"
basename_flags = -D"KBUILD_BASENAME=KBUILD_STR($(*F))"
CFLAGS += -D"KBUILD_MODNAME=KBUILD_STR($(TARGETNAME))"
else
basename_flags = -DKBUILD_BASENAME=$(*F)
CFLAGS += -DKBUILD_MODNAME=$(TARGETNAME)
endif
else
basename_flags = -DKBUILD_BASENAME=$(*F)
endif

CFLAGS += $(EXTRA_CFLAGS)

SYSLIB = /usr/lib

%.o: %.c
	$(GCC) $(CFLAGS) $(basename_flags) $(CPPFLAGS) -c $<


hardware.o:     $(HEADERS)
target.o:       $(HEADERS)
device.o:       $(HEADERS)
interrupt.o:    $(HEADERS)
transmit.o:     $(HEADERS)

ks_config.o:	$(HEADERS)
ks_mirror.o:	$(HEADERS)
ks_rate.o:	$(HEADERS)
ks_qos.o:	$(HEADERS)
ks_stp.o:	$(HEADERS)
ks_table.o:	$(HEADERS)
ks_vlan.o:	$(HEADERS)
ks_Diag.o:	$(HEADERS)


clean:
	@$(RM) *.o *.a *~ *.out .*.flags
	@rm -f *.ko *.mod.c .*.cmd Module*.symvers modules.order
	@rm -fr .tmp_versions
endif
