ifeq ($(WIFI_MODE),)
RT28xx_MODE = STA
else
RT28xx_MODE = $(WIFI_MODE)
endif

ifeq ($(TARGET),)
TARGET = LINUX
endif

# HIF_TYPE: USB or PCI
ifeq ($(HIF_TYPE),)
HIF_TYPE = USB
endif

ifeq ($(CHIPSET),)
ifeq ($(HIF_TYPE),USB)
CHIPSET = mt7662u mt7632u mt7612u mt7662tu mt7632tu mt7612tu
else
CHIPSET = mt7662e mt7632e mt7612e mt7662te mt7632te mt7612te
endif
endif

MODULE = $(word 1, $(CHIPSET))
$(info WIFI_ID=$(MODULE))

ifeq ($(HIF_TYPE),USB)
PREALLOC=YES
else
PREALLOC=NO
endif

RT28xx_DIR = $(shell pwd)

include $(RT28xx_DIR)/os/linux/config.mk

OUT_STA_KO = $(RT28xx_DIR)/os/linux/$(MODULE)_sta.ko

#PLATFORM: Target platform
#PLATFORM = PC
#PLATFORM = MT85XX_AUDIO
#PLATFORM = MT85XX_BDP
PLATFORM = MT53XX
#PLATFORM = WEBOS
#PLATFORM = MSTAR
#PLATFORM = MSTAR_LINUX
#PLATFORM = ALPS_MT8173

MAKE = make

ifeq ($(PLATFORM),PC)
LINUX_SRC = /lib/modules/$(shell uname -r)/build
LINUX_SRC_MODULE = /lib/modules/$(shell uname -r)/kernel/drivers/net/wireless/
CROSS_COMPILE = 
endif

ifeq ($(PLATFORM),MSTAR)
# 3.10.23
LINUX_SRC =
# arm-2012.09
CROSS_COMPILE =
endif

ifeq ($(PLATFORM),MSTAR_LINUX)
# 3.1.10
LINUX_SRC =
# arm-2012.09
CROSS_COMPILE =
endif

ifeq ($(PLATFORM),ALPS_MT8173)
# 3.10.23
LINUX_SRC =
# arm-2012.09
CROSS_COMPILE =
endif

ifeq ($(PLATFORM),MT53XX)
MOD_PREALLOC = mtprealloc
TARGET = LINUX

#****** For system auto build ******
ifeq "$(UTOPIA)" "true"
    LINUX_SRC = $(UTOPIA_KERNEL_ROOT)/$(subst linux-,,$(KERNEL_VER))
    COMPILE_OUT_DIR = $(LINUX_ROOT)/linux_mts/ko_modules/wlan/mtk/
    OUT_STA_KO = $(LINUX_ROOT)/linux_mts/ko_modules/wlan/mtk/$(WIFI_TARGET)/os/linux/
else
	LINUX_SRC=$(KERNEL_OBJ_ROOT)/$(KERNEL_VER)/$(KERNEL_CONFIG)_modules
    COMPILE_OUT_DIR = $(OBJ_ROOT)/linux_mts/ko_modules/wlan/mtk/
    OUT_STA_KO = $(OBJ_ROOT)/linux_mts/ko_modules/wlan/mtk/$(WIFI_TARGET)/os/linux/
endif
CROSS_COMPILE=$(KERNEL_CROSS_COMPILE)

#****** For local build ******
# uncomment the following lines
#VM_LINUX_ROOT ?= $(word 1, $(subst /apollo/,/apollo /, $(shell pwd)))
#LINUX_ROOT ?= $(VM_LINUX_ROOT)
#LINUX_SRC=$(VM_LINUX_ROOT)/../android/n-eac/out/mediatek_linux/output/mediatek/mt5891_cn_64_n/rel/obj/kernel/linux_core/kernel/linux-3.18/mt5891_android_smp_mod_defconfig_modules
#OBJ_ROOT ?= $(VM_LINUX_ROOT)/../android/n-eac/out/mediatek_linux/output/mediatek/mt5891_cn_64_n/rel/obj/
#export KERNEL_OBJ_ROOT=$(LINUX_SRC)/../..
include $(LINUX_ROOT)/linux_mts/build/mak/toolchain.mak
ifeq ($(CROSS_COMPILE),)
CROSS_COMPILE=$(KERNEL_CROSS_COMPILE)
endif
ifneq ($(ANDROID),true)
PLATFORM_OS = Linux
endif
ifeq "$(CC)" "gcc"
CC ?= $(CROSS_COMPILE)gcc
endif
WIFI_TARGET := mt7662_cfg80211
export WIFI_TARGET
$(warning =============================================)
$(warning CC=$(CC) for wifi driver LINUX_SRC=$(LINUX_SRC))
$(warning TARGET=$(TARGET))
$(warning =============================================)
endif # end of MT53XX

ifneq ($(findstring MT85XX,$(PLATFORM)),)
PREALLOC=NO
endif # end of MT85XX*

ifeq ($(PLATFORM),WEBOS)
LINUX_SRC = 
CROSS_COMPILE = arm-lg115x-linux-gnueabi-
TARGET = LINUX
export ARCH := arm
$(warning =============================================)
$(warning CC=$(CC) for wifi driver LINUX_SRC=$(LINUX_SRC))
$(warning =============================================) 
endif

ifeq "$(TOOL_CHAIN_64BIT)" "4.9.3"
CROSS_COMPILE = /mtkoss/gnuarm/gcc-aarch64-linux-gnu-4.9.3-ubuntu/x86_64/bin/aarch64-linux-gnu-
endif

ifeq "$(TOOL_CHAIN_64BIT)" "5.5.0"
CROSS_COMPILE = /mtkoss/gnuarm/gcc-aarch64-linux-gnu-5.5.0-ubuntu/x86_64/bin/aarch64-linux-gnu-
endif

export RT28xx_DIR RT28xx_MODE LINUX_SRC CROSS_COMPILE CROSS_COMPILE_INCLUDE PLATFORM CHIPSET MODULE LINUX_SRC_MODULE TARGET HAS_WOW_SUPPORT PREALLOC PLATFORM_OS

# The targets that may be used.
PHONY += all build_tools LINUX release prerelease clean uninstall install libwapi

ifeq ($(TARGET),LINUX)
all: build_tools $(TARGET)
else
all: $(TARGET)
endif

build_tools:
	$(MAKE) -C tools
	mkdir -p $(RT28xx_DIR)/include/eeprom && $(RT28xx_DIR)/tools/bin2h

LINUX:
ifeq ($(PREALLOC), YES)
	cp -f os/linux/Makefile.6.prealloc os/linux/Makefile
	$(MAKE) -C $(LINUX_SRC) SUBDIRS=$(RT28xx_DIR)/os/linux modules
	$(CROSS_COMPILE)strip --strip-unneeded $(OUT_STA_KO)/$(MOD_PREALLOC).ko
endif
	cp -f os/linux/Makefile.6 os/linux/Makefile
	$(MAKE) -C $(LINUX_SRC) SUBDIRS=$(RT28xx_DIR)/os/linux modules
	$(CROSS_COMPILE)strip --strip-unneeded $(OUT_STA_KO)/$(MODULE)_sta.ko
ifeq ($(PLATFORM),MT53XX)
ifneq ($(ANDROID),true)
	if [ ! -d $(OUTPUT_ROOT)/basic/wifi_ko ]; then \
		mkdir -p $(OUTPUT_ROOT)/basic/wifi_ko/; \
	fi
	if [ -d $(OUTPUT_ROOT)/basic/wifi_ko ]; then \
	cp -f $(COMPILE_OUT_DIR)/$(WIFI_TARGET)/os/linux/$(MODULE)_sta.ko $(OUTPUT_ROOT)/basic/wifi_ko/$(MODULE)_sta.ko; \
	cp -f $(COMPILE_OUT_DIR)/$(WIFI_TARGET)/os/linux/$(MOD_PREALLOC).ko $(OUTPUT_ROOT)/basic/wifi_ko/$(MOD_PREALLOC).ko; \
	fi
else	
	if [ ! -d $(OUTPUT_ROOT)/basic/modules ]; then \
		mkdir -p $(OUTPUT_ROOT)/basic/modules/; \
	fi
ifeq "$(UTOPIA)" "true"
	if [ -d $(OUTPUT_ROOT)/basic/modules ]; then \
		cp -f $(COMPILE_OUT_DIR)/$(WIFI_TARGET)/os/linux/$(MODULE)_sta.ko $(OUTPUT_ROOT)/basic/modules/wlan.ko; \
		cp -f $(COMPILE_OUT_DIR)/$(WIFI_TARGET)/os/linux/$(MOD_PREALLOC).ko $(OUTPUT_ROOT)/basic/modules/mtprealloc.ko; \
	fi
else
	if [ -d $(OUTPUT_ROOT)/basic/modules ]; then \
		cp -f $(COMPILE_OUT_DIR)/$(WIFI_TARGET)/os/linux/$(MODULE)_sta.ko $(OUTPUT_ROOT)/basic/modules/wlan.ko; \
		cp -f $(COMPILE_OUT_DIR)/$(WIFI_TARGET)/os/linux/$(MOD_PREALLOC).ko $(OUTPUT_ROOT)/basic/modules/$(MOD_PREALLOC).ko; \
	fi	
endif
endif # ifneq ($(ANDROID),true)
endif # ifeq ($(PLATFORM),MT53XX)

clean:
ifeq ($(TARGET), LINUX)
	cp -f os/linux/Makefile.clean os/linux/Makefile
	$(MAKE) -C os/linux clean
	rm -rf os/linux/Makefile
	rm -rf include/mcu/mt7662*.h include/eeprom tools/bin2h
endif	

uninstall:
ifeq ($(TARGET), LINUX)
	$(MAKE) -C $(RT28xx_DIR)/os/linux -f Makefile.6 uninstall
endif

install:
ifeq ($(TARGET), LINUX)
	$(MAKE) -C $(RT28xx_DIR)/os/linux -f Makefile.6 install
endif

libwapi:
	cp -f os/linux/Makefile.libwapi.6 $(RT28xx_DIR)/os/linux/Makefile	
	$(MAKE) -C  $(LINUX_SRC) SUBDIRS=$(RT28xx_DIR)/os/linux modules	

# Declare the contents of the .PHONY variable as phony.  We keep that information in a variable
.PHONY: $(PHONY)

