#
## Makefile for UNICORN USB ADSL Modem
#

src ?= .
obj ?= .

DRIVER_VERSION=\"USB-ADL-7-2.0-0.2.0.11\"
ifndef KERNEL_SOURCES
KERNEL_SOURCES=/lib/modules/$(shell uname -r)/build
endif
ifndef HPATH
HPATH=$(KERNEL_SOURCES)/include
endif

ifndef KVERS
KVERS = `uname -r`
endif

ifndef PATCHLEVEL
PATCHLEVEL=$(shell grep -s PATCHLEVEL ${KERNEL_SOURCES}/Makefile |  head -n 1 | sed s/'PATCHLEVEL = '//)
endif

ifndef SUBLEVEL
SUBLEVEL=$(shell grep -s SUBLEVEL ${KERNEL_SOURCES}/Makefile |  head -n 1 | sed s/'SUBLEVEL = '//)
endif

ifndef MODDIR
MODDIR=$(PWD)
endif

# OPTIONS
#
COPTIONS =

#make parameters
CC=cc
CXX=cc
LD=ld

INCLUDES :=  -I$(src)/../include -I$(src)/../ -I$(src)/../import
ifeq ($(PATCHLEVEL),4)
# kernel 2.4, add path to kernel includes
INCLUDES += -I$(HPATH)
endif
EXTRA_CFLAGS := -DDRIVER_VERSION=$(DRIVER_VERSION) -DPKG_VERSION=$(PKG_VERSION) -D_USB_DRIVER -DDEBUG=1 $(INCLUDES) $(COPTIONS)
ifeq ($(PATCHLEVEL),4)
# kernel 2.4, need to specify CFLAGS
CFLAGS :=  -O2 -fomit-frame-pointer -fno-gnu-linker -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -nostdlib
EXTRA_CFLAGS += -D__KERNEL__ -DMODULE
CFLAGS += $(EXTRA_CFLAGS)
endif
CXXFLAGS = -fno-rtti -fno-exceptions $(CFLAGS) $(EXTRA_CFLAGS)

OBJS =unicorn_usbdrv.o  interruptmonitor.o  usb_protocolcreator.o accessmechanism.o C-interface.o ../msw/linrapi.o ../msw/msw.o ../msw/crc.o ../amu/amas.o ../amu/amu.o ../amu/bsp.o
OBJS_ATM = ../unicorn_atm/unicorn_atmdrv.o
OBJS_ETH = ../unicorn_eth/unicorn_ethdrv.o

#Since 2.6.20 regparm3 is default and CONFIG_REGPARM is not set
SUBLEVEL_GREATER_THAN_20=$(shell if [ ${SUBLEVEL} -ge 20 ] ; then echo  1; else echo 0; fi)

ifeq ($(SUBLEVEL_GREATER_THAN_20), 1)
USE_REGPARM_LIB=1
endif

ifdef CONFIG_REGPARM
USE_REGPARM_LIB=1
endif

ifdef USE_REGPARM_LIB
MODEM_LIB =$(src)/../arch/i386/modem_ant_USB_LINUX.o.regparm3
else
MODEM_LIB =$(src)/../arch/i386/modem_ant_USB_LINUX.o
endif

ifeq ($(PATCHLEVEL),4)
# kernel 2.4, use old build process
modules: unicorn_usb_atm.o unicorn_usb_eth.o
modules_install: install_atm install_eth
else

.SUFFIXES: .c .cpp .o

.cpp.o:
	$(CXX) $(CXXFLAGS) -c $< -o $@

# kernel 2.6, use kernel build process
modules:
	make CC=$(CC) -C $(KERNEL_SOURCES) SUBDIRS=$(MODDIR) modules
modules_install: unicorn_usb_eth.ko
#       make CC=$(CC) -C $(KERNEL_SOURCES) SUBDIRS=$(MODDIR) modules_install
	/bin/rm -f $(DESTDIR)/lib/modules/$(KVERS)/kernel/drivers/atm/unicorn_*.o

	mkdir -p $(DESTDIR)/lib/modules/$(KVERS)/extra
	cp $^ $(DESTDIR)/lib/modules/$(KVERS)/extra/

endif

#obj-m := unicorn_usb_atm.o unicorn_usb_eth.o
obj-m := unicorn_usb_eth.o
unicorn_usb_atm-objs := $(OBJS) $(OBJS_ATM)

unicorn_usb_eth-objs := $(OBJS) $(OBJS_ETH)

EXTRA_LDFLAGS := $(MODEM_LIB)

unicorn_usb_atm.o: $(unicorn_usb_atm-objs)
	$(LD) -M -Ur $(EXTRA_LDFLAGS) -o $@ $(unicorn_usb_atm-objs)

unicorn_usb_eth.o: $(unicorn_usb_eth-objs)
	$(LD) -M -Ur  $(EXTRA_LDFLAGS) -o $@ $(unicorn_usb_eth-objs)

install_atm: unicorn_usb_atm.o
# remove old versions
	/bin/rm -f $(DESTDIR)/lib/modules/$(KVERS)/kernel/drivers/atm/unicorn_*.o

	mkdir -p $(DESTDIR)/lib/modules/$(KVERS)/extra
	cp $^ $(DESTDIR)/lib/modules/$(KVERS)/extra/

install_eth: unicorn_usb_eth.o
# remove old versions
	/bin/rm -f $(DESTDIR)/lib/modules/$(KVERS)/kernel/drivers/atm/unicorn_*.o

	mkdir -p $(DESTDIR)/lib/modules/$(KVERS)/extra
	cp $^ $(DESTDIR)/lib/modules/$(KVERS)/extra/

clean:
	/bin/rm -f $(unicorn_usb_atm-objs)
	/bin/rm -f $(unicorn_usb_eth-objs)
	/bin/rm -f unicorn_usb_atm.* unicorn_usb_eth.*
	/bin/rm -rf $(DESTDIR)/lib/modules/$(KVERS)/extra/
	/bin/rm -rf ../*.rpm

