# $Id: Makefile,v 1.31 2005/04/01 22:58:53 sagamore Exp $
#
# Copyright (C) 2004 Zydas Inc.
# Copyright (C) 2005 Arno WILLIG <akw@users.sourceforge.net>
# Copyright (C) 2005 Dimitriy KOROVKIN <korovkin@users.sourceforge.net>
# Copyright (C) 2005 Todor T. ZVISKOV <warderx@users.sourceforge.net>
# Copyright (C) 2005 Markus KARG <markus-karg@users.sourceforge.net>
#
# This file is part of the ZD1211 Wireless USB Driver for Linux.
#
# This driver is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This driver is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this driver; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

# Some commands
CC=gcc
CPP=g++
LD=ld
RM=rm -f -r
CVS=cvs
SED=sed
TAR=tar
GZIP=gzip
DATE=date
GREP=grep
MV=mv

# When KSRC is set, use it
KSRC ?= /usr/src/linux

# Retrieve kernel version from kernel in KSRC
#KERNRELEASE := $(shell uname -r;)
KERN_VERSION := \
	$(shell $(GREP) "^VERSION[[:space:]]*=[[:space:]]*[[:digit:]]\+$$" \
	$(KSRC)/Makefile | \
	$(SED) "s/^.*=[[:space:]]*\([[:digit:]]\+\)$$/\1/g";)
KERN_PATCHLEVEL := \
	$(shell $(GREP) "^PATCHLEVEL[[:space:]]*=[[:space:]]*[[:digit:]]\+$$" \
	$(KSRC)/Makefile | \
	$(SED) "s/^.*=[[:space:]]*\([[:digit:]]\+\)$$/\1/g";)
KERN_SUBLEVEL := \
	$(shell $(GREP) "^SUBLEVEL[[:space:]]*=[[:space:]]*[[:digit:]]\+$$" \
	$(KSRC)/Makefile | \
	$(SED) "s/^.*=[[:space:]]*\([[:digit:]]\+\)$$/\1/g";)
KERN_EXTRAVERSION := \
	$(shell $(GREP) "^EXTRAVERSION[[:space:]]*=[[:space:]]*[^[:space:]]\+$$" \
	$(KSRC)/Makefile | \
	$(SED) "s/^.*=[[:space:]]*\([^[:space:]]\+\)$$/\1/g";)
KERN_LOCALVERSION := \
	$(shell $(GREP) "^CONFIG_LOCALVERSION=\"[^[:space:]]\+\"$$" \
	$(KSRC)/.config | \
	$(SED) "s/^.*=\"\([^[:space:]]\+\)\"$$/\1/g";)

KERNRELEASE := \
	$(KERN_VERSION).$(KERN_PATCHLEVEL).$(KERN_SUBLEVEL)$(KERN_EXTRAVERSION)$(KERN_LOCALVERSION)

SRC_DIR=src
DEFINES=-D__KERNEL__ -DMODULE=1

MOBJS := zd1205.o zdasocsvc.o zdauthreq.o zdauthrsp.o zdmmrx.o zdshared.o \
	 zdhci.o zdglobal.o zdencrypt.o zdpmfilter.o zdpsmon.o zdsynch.o \
	 zdbuf.o zdhw.o zddebug.o zdtkipseed.o zdmic.o zdusb.o zd1211.o

KVER := $(shell echo $(KERNRELEASE)|cut -d "." -f1-2;)
MODPATH := /lib/modules/$(KERNRELEASE)

# Retrieving driver version
ZD_VERSION := $(shell $(DATE) +%Y%m%d)

ifeq ($(KVER), 2.6) # we're on a 2.6.x kernel
MODULE = zd1211.ko

INCLUDES=-I$(KSRC)/include -I$(SRC_DIR)/include/ -I$(SRC_DIR)

EXTRA_CFLAGS += -I$(PWD)/src/include

ifndef CONFIG_FRAME_POINTER
EXTRA_CFLAGS += -fomit-frame-pointer
endif
         
ifdef CONFIG_SMP
EXTRA_CFLAGS += -D__SMP__ -DSMP
endif

PWD := $(shell pwd)
WLAN_SRC=$(PWD)

EXTRA_CFLAGS += -O2 -Wall -Wstrict-prototypes -Wno-unused -pipe 
EXTRA_CFLAGS += -DAMAC
EXTRA_CFLAGS += -DGCCK
EXTRA_CFLAGS += -DOFDM
EXTRA_CFLAGS += -DUSE_EP4_SET_REG
EXTRA_CFLAGS += -DfTX_GAIN_OFDM=0

obj-m := zd1211.o
zd1211-objs := $(foreach mobj, $(MOBJS), $(SRC_DIR)/$(mobj))

all:

ifneq ($(KERNELRELEASE),)

else
#	@echo -e $(KSRC)
#	@echo -e $(PWD)
#	@echo -e $(EXTRA_CFLAGS)
	$(MAKE) -C $(KSRC) SUBDIRS=$(PWD) modules

endif

else # we have a 2.4 kernel

INCLUDES=-I$(KSRC)/include -I$(SRC_DIR)/include/ -I$(SRC_DIR)

MODULE = zd1211.o

OBJECTS = $(foreach mobj, $(MOBJS), $(SRC_DIR)/$(mobj))

CFLAGS=-O -Wall -Wstrict-prototypes -Wno-unused -pipe

ifdef CONFIG_MODVERSIONS
CFLAGS += -DMODVERSIONS -include $(KSRC)/include/linux/modversions.h   #kernel 2.4
endif

ifndef CONFIG_FRAME_POINTER
CFLAGS += -fomit-frame-pointer
endif

ifdef CONFIG_SMP
CFLAGS += -D__SMP__ -DSMP
endif

CFLAGS += -DAMAC
CFLAGS += -DGCCK
CFLAGS += -DOFDM
CFLAGS += -DUSE_EP4_SET_REG
CFLAGS += -DfTX_GAIN_OFDM=0
CFLAGS += -DENHANCE_RX=1

all: $(MODULE)

$(MODULE): $(OBJECTS)
	ld -r $(OBJECTS) -o $(MODULE)
	chmod -x $(MODULE)

%.o: %.c
	$(CC) $(CFLAGS) $(INCLUDES) $(DEFINES) $(DEBUG) -c $< -o $@                              
    
endif


install: all
	mkdir -p $(MODPATH)/net
#	mkdir -p /etc/zd1211
	cp $(MODULE) $(MODPATH)/net
	depmod -a

# for apdbg
	gcc -o apdbg tools/apdbg.c
	chmod +x apdbg
	cp ./apdbg /usr/local/sbin/apdbg   

clean:
	@$(RM) .tmp_versions .*.cmd *.ko *.mod.c *.mod.o *.o $(SRC_DIR)/*.o  $(SRC_DIR)/.*.o.cmd $(SRC_DIR)/*~ 

update:
	@$(CVS) update -dP

release: clean
	@echo Creating release v$(ZD_VERSION)..;\
	$(SED) -e 's/".*"/"$(ZD_VERSION)"/' src/zdversion.h > src/zdversion2.h;\
	$(MV) src/zdversion2.h src/zdversion.h;\
	cd ..;$(TAR) --exclude 'CVS' -c --owner=0 --group=0 zd1211 > sf_zd1211_$(ZD_VERSION)_src.tar;\
	$(GZIP) -f -9 sf_zd1211_$(ZD_VERSION)_src.tar
