include .lastbuild
include $(TOPDIR)/.config

MODULE := usbvnet.o
CDEBUG := -DUSBDBG
DEFS := -fno-strict-aliasing -fomit-frame-pointer -pipe        
USB_DES := $(MODULES_DES)/kernel/drivers/net
CC=gcc
CFLAGS_$(CONFIG_MODVERSIONS):= -DMODULE -DMODVERSIONS -include $(KERNEL_SRC)/include/linux/modversions.h
ifeq 	'$(NEW_KERN)' 'y'
CFLAGS :=-D__KERNEL__ -O2 $(DEFS) -I$(KERNEL_SRC)/drivers/usb/core -I$(KERNEL_SRC)/include -I$(INC) -I$(INC)/usb -Wall $(CFLAGS_y)
else
CFLAGS :=-D__KERNEL__ -O2 $(DEFS) -I$(KERNEL_SRC)/include -I$(INC) -I$(INC)/usb -Wall $(CFLAGS_y)
endif
# Add extra compilation flags if under version 2.5 or higher
NEWKERNFLAGS := -nostdinc -iwithprefix include -DMODULE -DKBUILD_BASENAME=vnetusba 
MODOFLAGS := -I$(KERNEL_SRC)/include -D__KERNEL__ -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -pipe -mpreferred-stack-boundary=2 -Iinclude/asm-i386/mach-default -DMODULE 
KMODNAMEFLAG := -DKBUILD_MODNAME=
MAGICMOD:= magic.mod

ifeq 	'$(NEW_KERN)' 'y'
RESET_DEVICE:= reset_device.c
MAGIC_MOD:= magic.mod.c
else
RESET_DEVICE:=
MAGIC_MOD:=
endif

fws:=$(wildcard external*.h) $(wildcard internal*.h)

srcs := callbacks.c command.c $(RESET_DEVICE) rx.c tx.c vnet.c vnet_kernel.c linux_usb.c
objs := $(srcs:.c=.o)
#objs := $(patsubst %.c,%.o,$(wildcard *.c))
objs := $(patsubst vnetusba.o, ,$(objs))

USB-y:=

USB-$(CONFIG_USB_503A_RFMD) += rfmd$(DEBUG)
USB-$(CONFIG_USB_505) += r505$(DEBUG)
USB-$(CONFIG_USB_505A) += r505A$(DEBUG)
USB-$(CONFIG_USB_505_2958) += r505_2958$(DEBUG)
USB-$(CONFIG_USB_CUSTOMPIDVID) += PidVidC$(DEBUG)

usage:
	@echo "Usage is :"
	@echo "rfmd for RFMD,        rfmdD for rfmd debug version"
	@echo "r505 for 505,         r505 for  505 debug version"
	@echo "r505_2958 for 2958 + 505,         r505_2958 for  2958 + 505 debug version"

all:
	for i in $(USB-y); do make $$i || exit 1; done

final:$(objs) vnetusba.o
ifeq 	'$(NEW_KERN)' 'y'
	$(CC) $(MODOFLAGS) -c -o $(OBJDIR)/$(MAGICMOD).o $(MAGICMOD).c
	ld -m elf_i386 -r -o $(OBJDIR)/$(MODULE).ko vnetusba.o $(objs) $(OBJDIR)/$(MAGICMOD).o
	@nm $(OBJDIR)/$(MODULE).ko |sort >../$(patsubst %.ko,%.map, $(MODULE).ko);
else
	ld -r -o $(OBJDIR)/$(MODULE).o vnetusba.o $(objs)
	@nm $(OBJDIR)/$(MODULE).o |sort >../$(patsubst %.o,%.map, $(MODULE).o);
endif


rfmd:
ifneq ($(LB),rfmd)
	@make clean
	@echo "LB := rfmd" >.lastbuild
endif
	make final CFLAGS:='$(CFLAGS) -DRFMD -DATMEL_WLAN' MODULE:='usbvnetr'

rfmdD:
ifneq ($(LB),rfmdD)
	@make clean
	@echo "LB := rfmdD" >.lastbuild
endif
	make final CFLAGS:='$(CFLAGS) -DRFMD -DATMEL_WLAN $(CDEBUG)' MODULE:='usbvnetr' 

r505:
ifneq ($(LB),r505)
	@make clean
	@echo "LB := r505" >.lastbuild
endif
	make final CFLAGS:='$(CFLAGS) -DR505 -DATMEL_WLAN' MODULE:='usbvnet5'

r505D:
ifneq ($(LB),r505D)
	@make clean
	@echo "LB := r505D" >.lastbuild
endif
	make final CFLAGS:='$(CFLAGS) -DR505 -DATMEL_WLAN $(CDEBUG)' MODULE:='usbvnet5' 

r505A:
ifneq ($(LB),r505A)
	@make clean
	@echo "LB := r505A" >.lastbuild
endif
	make final CFLAGS:='$(CFLAGS) -DR505A -DATMEL_WLAN' MODULE:='usbvnet5A'

r505AD:
ifneq ($(LB),r505AD)
	@make clean
	@echo "LB := r505AD" >.lastbuild
endif
	make final CFLAGS:='$(CFLAGS) -DR505A -DATMEL_WLAN $(CDEBUG)' MODULE:='usbvnet5A' 

r505_2958:
ifneq ($(LB),r505_2958)
	@make clean
	@echo "LB := r505_2958" >.lastbuild
endif
	make final CFLAGS:='$(CFLAGS) -DR505_2958 -DATMEL_WLAN' MODULE:='usbvnet5_2958'

r505_2958D:
ifneq ($(LB),r505_2958D)
	@make clean
	@echo "LB := r505_2958D" >.lastbuild
endif
	make final CFLAGS:='$(CFLAGS) -DR505_2958 -DATMEL_WLAN $(CDEBUG)' MODULE:='usbvnet5_2958' 

PidVidC:
ifneq ($(LB),PVC)
	@make clean
	@echo "LB := PVC" >.lastbuild
endif
	make final CFLAGS:='$(CFLAGS) -D$(BoardDefine) -DCUSTOM_PIDVID -DATMEL_WLAN' MODULE:='usbvnetp'

PidVidCD:
ifneq ($(LB),PVCD)
	@make clean
	@echo "LB := PVCD" >.lastbuild
endif
	make final CFLAGS:='$(CFLAGS) -D$(BoardDefine) -DCUSTOM_PIDVID -DATMEL_WLAN $(CDEBUG)' MODULE:='usbvnetp'

clean:
	@find . -name '*.o' -o -name '*.map' |xargs rm -f

.lastbuild:
	@touch .lastbuild
	@echo "LB:=aa" >.lastbuild

#dependencies
$(objs): $(INC)/usb/vnetusba.h 
rx.o : $(INC)/usb/rx.h
tx.o : $(INC)/usb/rx.h
callbacks.o : $(INC)/usb/$(fws)
vnetusba.o : vnetusba.c $(INC)/usb/vnetusba.h
ifeq	'$(NEW_KERN)' 'y' 
	$(CC) $(CFLAGS) $(NEWKERNFLAGS) $(KMODNAMEFLAG)$(MODULE) -DMODULE -c vnetusba.c -o vnetusba.o
else
	$(CC) $(CFLAGS) -DMODULE -c vnetusba.c
	
endif
