#
#
# Build options:
#   PRIV_OBJ   := 1 for object version
#   BIG_ENDIAN := 1 for big-endian mode
#
#   arm-linux-tools chain are located at:
#     /usr/local/bin/arm-linux-gcc
#     /usr/local/bin/arm-linux-ld
#

IO_MAP := 0
HOSTAP := 1
PRIV_OBJ := 1
BIG_ENDIAN := 1

test_dir = $(shell [ -e $(dir)/include/linux ] && echo $(dir))
KSP := $(foreach dir, $(KSP), $(test_dir))

KSRC := $(firstword $(KSP))

#ifeq (,$(KSRC))
#  $(error Linux kernel source not found)
#endif

# check kernel version
KVER := $(shell uname -r | cut -c1-3 | sed 's/2\.[56]/2\.6/')
KERVER2=$(shell uname -r | cut -d. -f2)

ifeq ($(KVER), 2.6)
# 2.6 kernel
TARGET = viawget.ko

else
TARGET = viawget.o

endif

INSTDIR	:= $(shell find /lib/modules/$(shell uname -r) -name $(TARGET) -printf "%h\n" | sort | head -1)
ifeq (,$(INSTDIR))
	ifeq (,$(KERVER2))
		ifneq (,$(wildcard /lib/modules/$(shell uname -r)/kernel))
			INSTDIR := /lib/modules/$(shell uname -r)/kernel/drivers/net
		else
			INSTDIR := /lib/modules/$(shell uname -r)/net
		endif
	else
		ifneq ($(KERVER2),2)
			INSTDIR := /lib/modules/$(shell uname -r)/kernel/drivers/net
		else
			INSTDIR := /lib/modules/$(shell uname -r)/net
		endif
	endif
endif


SRC = device_main.c card.c mac.c baseband.c wctl.c 80211mgr.c \
      wcmd.c wmgr.c bssdb.c rxtx.c dpc.c power.c datarate.c srom.c \
      mib.c rc4.c tether.c tcrc.c ioctl.c hostap.c wpa.c key.c tkip.c \
      michael.c wroute.c rf.c iwctl.c wpactl.c wpa2.c aes_ccmp.c

ifeq ($(IO_MAP), 1)
  CFLAGS += -DIO_MAP
endif

ifeq ($(HOSTAP), 1)
  CFLAGS += -DHOSTAP
endif

ifeq ($(PRIV_OBJ), 1)
  CFLAGS += -DPRIVATE_OBJ
endif

ifeq ($(BIG_ENDIAN), 1)
  CFLAGS += -D__BIG_ENDIAN
  CFLAGS += -mbig-endian
  LDOPTS += -EB
else
  CFLAGS += -mlittle-endian
  LDOPTS += -EL
endif

CFLAGS += -I$(PWD) -I$(PWD)/../include -I$(PWD)/../solomon


# build rule
ifeq ($(KVER), 2.6)
# 2.6 kernel

ifndef KERNEL_CONF
KERNEL_CONF=	$(KSRC)/.config
endif

include ${KERNEL_CONF}

obj-m += viawget.o

viawget-objs :=	device_main.o card.o mac.o baseband.o wctl.o 80211mgr.o \
	wcmd.o wmgr.o bssdb.o rxtx.o dpc.o power.o datarate.o srom.o \
	mib.o rc4.o tether.o tcrc.o ioctl.o hostap.o wpa.o key.o tkip.o \
	michael.o wroute.o rf.o iwctl.o wpactl.o wpa2.o aes_ccmp.o

.c.o:
	$(CC) $(CFLAGS) -o $@ $<

default:
	make -C $(KSRC) SUBDIRS=$(shell pwd) modules

else

# 2.2/2.4 kernel
OBJS :=	device_main.o card.o mac.o baseband.o wctl.o 80211mgr.o \
	wcmd.o wmgr.o bssdb.o rxtx.o dpc.o power.o datarate.o srom.o \
	mib.o rc4.o tether.o tcrc.o ioctl.o hostap.o wpa.o key.o tkip.o \
	michael.o wroute.o rf.o iwctl.o wpactl.o wpa2.o


CC := /usr/local/bin/arm-linux-gcc
LD := /usr/local/bin/arm-linux-ld

CFLAGS += -Wall -DLINUX -D__KERNEL__ -DMODULE  -DEXPORT_SYMTAB -D__NO_VERSION__ -O2 -pipe
#CFLAGS += -Wstrict-prototypes -fomit-frame-pointer
COPTS+= -march=armv4 -fno-strict-aliasing -fno-common
#COPTS+= -mapcs-32 -mtune=xscale  -mshort-load-bytes -msoft-float -mfp=2
#COPTS+= -mthumb  -mcpu=arm9 -ffunction-sections -fdata-sections


.SILENT: $(TARGET) clean



ifeq ($(PRIV_OBJ), 1)

ifeq ($(BIG_ENDIAN), 1)
  TARGET = arm_be_g.o
else
  TARGET = arm_le_g.o
endif

endif



$(TARGET): $(filter-out $(TARGET), $(SRC:.c=.o))
	$(LD) $(LDOPTS) -r $^ -o $@
	echo
	echo "***********************************"
	echo "Build options:"
	echo "   VERSION    $(KVER)"
	echo -n "   SMP             "
	if [ "$(SMP)" = "1" ]; \
		then echo "Enabled"; else echo "Disabled"; fi


endif # ifeq ($(KVER),2.6)


ifeq ($(KVER), 2.6)
install: default
else
install: clean $(TARGET)
endif
	mkdir -p $(MOD_ROOT)$(INSTDIR)
	install -m 644 -o root $(TARGET) $(MOD_ROOT)$(INSTDIR)

ifeq (,$(MOD_ROOT))
	/sbin/depmod -a || true
else
	/sbin/depmod -b $(MOD_ROOT) -a || true
endif


uninstall:
	rm -f $(INSTDIR)/$(TARGET)
	/sbin/depmod -a

clean:
	rm -f $(TARGET) $(SRC:.c=.o) *~
	rm -f .*.o.d .*.o.cmd .*.ko.cmd *.mod.c *.mod.o

-include .depend.mak
