#
## Makefile for 3Com ADSL Modem USB (kernel module)
#

#make parameters
DEST_MACHINE = $(shell uname -m)
DEST_KERNEL = $(shell uname -r)
KERNEL_PATH = /lib/modules/$(DEST_KERNEL)/build
CONFIG_PATH = $(KERNEL_PATH)
CONFIG_NAME = .config
SARLIB_PATH = ../sarlib
MODULE_PATH = /lib/modules/$(DEST_KERNEL)/kernel/drivers/usb

ifneq ($(MAKECMDGOALS), clean)
        include $(CONFIG_PATH)/$(CONFIG_NAME)
endif

CC = gcc
#CFLAGS = -O2 -Wstrict-prototypes -fomit-frame-pointer -fno-strict-aliasing -pipe -fno-strength-reduce -march=$(DEST_MACHINE) -Wall -D__KERNEL__ -DLINUX
CFLAGS = -O2 -Wstrict-prototypes -Wno-trigraphs -fomit-frame-pointer -fno-strict-aliasing -pipe -fno-common -mpreferred-stack-boundary=2 -march=$(DEST_MACHINE) -Wall -D__KERNEL__ -DLINUX
#INCLUDES = -I/usr/src/linux/include/ -I$(SARLIB)/ 
INCLUDES = -I$(KERNEL_PATH)/include -I$(SARLIB_PATH)/
MODFLAGS = -DMODULE
VERSION = $(shell cat VERSION)
#KVERSION = $(shell cat VERSION | tr '.' ',');
MODULES = 3cp4218normal.o $(SARLIB_PATH)/sarlib.o
#LINUXVERSION = $(shell cat /usr/include/linux/version.h | grep UTS_RELEASE | cut -d '"' -f 2)
LINUXVERSION = 2.4.1
DBGMODULES = 3cp4218debug.o $(SARLIB_PATH)/sarlibdbg.o
MODVERFILE =

ifdef CONFIG_SMP
	CFLAGS += -D__SMP__
endif

ifeq ($(shell grep -q alloc_tx $(KERNEL_PATH)/include/linux/atmdev.h && echo "yes"), yes)
	CFLAGS += -DATM_VCC_ALLOC_TX
endif

#ifdef CONFIG_MODVERSIONS
#	MODFLAGS += -DMODVERSIONS -include /usr/src/linux/include/linux/modversions.h
#	MODFLAGS += -DMODVERSIONS -include /usr/src/linux/include/linux/modversions.h -include 3cp4218.ver
#	MODVERFILE = 3cp4218.ver
#endif


all: module debug

debug: 3cp4218dbg.o

module: 3cp4218.o

test: sartest


#
## SARLib entries
#
$(SARLIB_PATH)/sarlib.o: $(SARLIB_PATH)/sarlib.c $(SARLIB_PATH)/sarlib.h
	make -C $(SARLIB_PATH)/

$(SARLIB_PATH)/sarlibdbg.o: $(SARLIB_PATH)/sarlib.c $(SARLIB_PATH)/sarlib.h
	make -C $(SARLIB_PATH)/


#
## 3Com ADSL Modem USB entries
#
version.h: VERSION
	@ ( \
	echo "#ifndef _CP4218_VERSION_H_"; \
	echo "#define _CP4218_VERSION_H_"; \
	echo "const char *udsl_version=\""$(VERSION)"\";"; \
	echo "#endif"; \
	) > version.h

3cp4218.ver: 3cp4218.c
	$(CC) $(CFLAGS) $(INCLUDES) -D__GENKSYMS__ -D__builtin_va_list=void* -E 3cp4218.c | genksyms -w -k $(LINUXVERSION) 

#3cp4218normal.o: 3cp4218.c version.h $(MODVERFILE)
3cp4218normal.o: 3cp4218.c 
	$(CC) $(CFLAGS) $(MODFLAGS) $(INCLUDES) -c 3cp4218.c -o $@

#3cp4218debug.o: 3cp4218.c version.h $(MODVERFILE)
3cp4218debug.o: 3cp4218.c 
	$(CC) $(CFLAGS) $(MODFLAGS) $(INCLUDES) -DDEBUG -DDEBUG_PACKET -c 3cp4218.c -o $@

3cp4218.o: $(MODULES)
	$(LD) -r -o $@ $- $(MODULES) 

3cp4218dbg.o: $(DBGMODULES)
	$(LD) -r -o $@ $- $(DBGMODULES)

sartest: testsarlib.c
	$(CC) -lz -ggdb testsarlib.c -o sartest

install: 3cp4218.o 3cp4218dbg.o
	mkdir -p $(MODULE_PATH)
	cp 3cp4218.o $(MODULE_PATH)
	cp 3cp4218dbg.o $(MODULE_PATH)
	/sbin/depmod -a
#	/sbin/depmod -aq || /sbin/depmod -a

uninstall:
	rm -f $(MODULE_PATH)/3cp4218.o
	rm -f $(MODULE_PATH)/3cp4218dbg.o
	/sbin/depmod -a
#	/sbin/depmod -aq || /sbin/depmod -a

clean:
	rm -f 3cp4218normal.o sarlib.o sartest 3cp4218.o 3cp4218debug.o 3cp4218dbg.o version.h

