##
## Flags
##
export FIRMWARE_DYNAMIC_LOAD ?= y

##
##
## File lists and locations
##
##

#
# DK_ROOT must be set prior to including common.inc
#
DK_ROOT := .
ifeq ($(M),)
    M = drivers/net/wireless/tiwlan1251
endif
DK_ROOT_INC = $(M)

#
# Includes common definitions and source file list
#
ifneq ($(KERNELRELEASE),)
    include $(M)/common.inc
    include $(M)/drv_sources.inc
    include $(M)/os_sources.inc
else
ifeq ($(KERNEL_DIR),)
    KERNEL_DIR = .
endif
    include common.inc
    include drv_sources.inc
    include os_sources.inc
endif

#
# OS include paths required for compilation.
# 
OS_INCS = $(DK_ROOT)/pform/linux/inc $(DK_ROOT)/pform/common/inc
OS_INCS += $(DK_ROOT)/common/src/core/EvHandler

#
# Location and filename of the driver .lib file created by this makefile.
#
OUTPUT_DIR = $(DK_ROOT)
OUTPUT_FILE = $(OUTPUT_DIR)/libestadrv.a

OS_SRCS = \
    $(DK_ROOT)/pform/common/src/osCmd.c \
    $(DK_ROOT)/pform/common/src/osUtil.c \
    $(DK_ROOT)/pform/common/src/osClsfr.c \
    $(DK_ROOT)/pform/common/src/osRgstry.c \
    $(DK_ROOT)/pform/linux/src/esta_drv.c \
    $(DK_ROOT)/pform/linux/src/chip_stat.c \
    $(DK_ROOT)/pform/linux/src/mmc_tnetw1150_api.c \
    $(DK_ROOT)/pform/linux/src/tnetw_sdio.c \
    $(DK_ROOT)/pform/linux/src/osapi.c \
    $(DK_ROOT)/pform/linux/src/osmemapi.c \
    $(DK_ROOT)/pform/linux/src/env_tst.c \
    $(DK_ROOT)/pform/linux/src/ioctl_list.c \
    $(DK_ROOT)/pform/linux/src/ioctl_utils.c \
    $(DK_ROOT)/pform/linux/src/osRgstry_parser.c \
    $(DK_ROOT)/pform/linux/src/ipc_k.c \
    $(DK_ROOT)/pform/linux/src/proc_stat.c
    
ifeq ($(DRIVER_PROFILING),y)
    OS_SRCS += $(DK_ROOT)/pform/linux/src/tiwlan_profile.c
endif

ifeq ($(STACK_PROFILING_ON),y)
    OS_SRCS += $(DK_ROOT)/pform/linux/src/stack_profile.c
    EXTRA_CFLAGS += -D STACK_PROFILE
endif

ifeq ($(NO_ARCH_STRCMP),y)
    OS_SRCS += $(DK_ROOT)/pform/linux/src/string.c
endif
    
OS_OBJS = $(patsubst %.c, %.o, $(OS_SRCS))

#
# Remove debug info
#
EXTRA_LDFLAGS += --strip-debug

##
##
## Build process
##
##

ifneq ($(KERNELRELEASE),)


	##
	##
	## This is the kernel build phase - set the appropriate arguments
	##
	##

	#
	# Adds the current directory as a prefix to all include directories.
	#
	EXTRA_CFLAGS += $(addprefix -I$(DK_ROOT_INC)/, $(DK_INCS) $(OS_INCS))

	#
	# Intermediate object name - this should be converted to the appropriate library file
	# after the kernel makefile finishes its work.
	#
	obj-m += wlan.o
	
	#
	# List of object files the kernel makefile needs to compile.
	#
	wlan-objs := $(DK_OBJS) $(OS_OBJS)

	
else	# ifneq ($(KERNELRELEASE),)

	#
	# Adds the current directory as a prefix to all include directories.
	#
	EXTRA_CFLAGS += $(addprefix -I$(M)/, $(DK_INCS) $(OS_INCS))


##
##
## This is the regular build phase - act according to the make actions
##
##

#
# The location of the kernel makefile
#
KERNEL_DIR ?= /vobs/wlan_linux2.6/kernel-2.6/


#
# Build the driver lib file
#
.PHONY: all
all: .depend $(OUTPUT_FILE)


#
# Prints variables
#
.PHONY: help
help:
	@echo Default Compilation:	BOARD=$(WIFI_BOARD) PLATFORM=$(PLATFORM) DEBUG=$(DEBUG) INTR=$(INTR) WSPI=$(WSPI) EXC=$(EXC) EXTRA CFLAGS: $(EXTRA_CFLAGS)


#
# Recursively cleans the driver files.
#
.PHONY: clean
clean:
	$(MAKE) -C $(KERNEL_DIR) M=`pwd` ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) clean
	@rm -f *.o *.a *~ *.~* core .depend dep $(DK_OBJS) $(OS_OBJS) $(DEPS)


#
# Causes the library file to get rebuilt.
#
.depend:
	rm -f $(OUTPUT_FILE)


#
# Recursively builds the library file.
#
$(OUTPUT_FILE):
	$(MAKE) -C $(KERNEL_DIR) M=`pwd` ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) modules
	@$(CROSS_COMPILE)$(AR) rcs $@ $(DK_OBJS) $(OS_OBJS)
	$(CROSS_COMPILE)strip --strip-unneeded wlan.ko

endif	# ifneq ($(KERNELRELEASE),)