CUR_MAKEFILE_PATH:=$(abspath $(lastword $(MAKEFILE_LIST)))
CUR_DIR_PATH_SLASH:=$(dir $(CUR_MAKEFILE_PATH))
CUR_DIR_PATH:=$(patsubst %/,%,$(dir $(CUR_MAKEFILE_PATH)))
DRIVER_DEBUG_SRC_PATH := $(CUR_DIR_PATH_SLASH)

include $(CUR_DIR_PATH)/../../$(DIR_MAP_CONFIG_FILE)
include $(WSCFG_KCONFIG_CONFIG)

$(warning defconfig: ================$(CUR_DIR_PATH)/$(DIR_MAP_DEBUG_CONFIG_FILE)=======================)
# get relative path
REL_ALG_DIR := $(call calc_relpath,$(ALG_DIR),$(CUR_DIR_PATH))
REL_WIFI_DEVICE_DIR := $(call calc_relpath,$(WIFI_DEVICE_DIR),$(CUR_DIR_PATH))
REL_HMAC_DIR := $(call calc_relpath,$(HMAC_DIR),$(CUR_DIR_PATH))
REL_FEATURE_DIR := $(call calc_relpath,$(FEATURE_DIR),$(CUR_DIR_PATH))
REL_FORWARD_DIR := $(call calc_relpath,$(FORWARD_DIR),$(CUR_DIR_PATH))
REL_FRW_DIR := $(call calc_relpath,$(FRW_DIR),$(CUR_DIR_PATH))
REL_HAL_DIR := $(call calc_relpath,$(HAL_DIR),$(CUR_DIR_PATH))
REL_MAC_DIR := $(call calc_relpath,$(MAC_DIR),$(CUR_DIR_PATH))
REL_MAIN_DIR := $(call calc_relpath,$(MAIN_DIR),$(CUR_DIR_PATH))
REL_OAL_DIR := $(call calc_relpath,$(OAL_DIR),$(CUR_DIR_PATH))
REL_VERSION_DIR := $(call calc_relpath,$(VERSION_DIR),$(CUR_DIR_PATH))
REL_WAL_DIR := $(call calc_relpath,$(WAL_DIR),$(CUR_DIR_PATH))
REL_FE_DIR := $(call calc_relpath,$(FE_DIR),$(CUR_DIR_PATH))
REL_COMMON_DIR := $(call calc_relpath,$(COMMON_DIR),$(CUR_DIR_PATH))

_KO_NAME := 3873_debug

#add alg makefile
include $(ALG_DIR)/ws73_alg_host.mk

SECURE_LIBC_PATH = $(PLATFROM_LIBC_SEC_DIR)/include

# $(warning defconfig: ================$(SECURE_LIBC_PATH)=======================)
ifneq ($(KERNELRELEASE),)

#need confirm
include $(CUR_DIR_PATH)/../../ws73_comm_defconfig
include $(CUR_DIR_PATH)/../../ws73_wifi_defconfig
# $(warning defconfig: ================$(CUR_DIR_PATH)/$(DEBUG_DEFCONFIG_FILE_DIR)/comm_defconfig=======================)
# $(warning defconfig: ================$(CUR_DIR_PATH)/$(DEBUG_DEFCONFIG_FILE_DIR)/wifi_defconfig=======================)
#===========================.o===========================
mac-objs := mac_mem.o
mac-objs := $(addprefix $(REL_MAC_DIR)/,$(mac-objs))

wal-common-objs := wal_utils.o
wal-common-objs := $(addprefix $(REL_WAL_DIR)/common/,$(wal-common-objs))

common-objs := wlan_util_common_rom.o
ifeq ($(_PRE_WLAN_DFT_STAT),y)
common-objs += common_dft_rom.o
endif
common-objs := $(addprefix $(REL_WIFI_DEVICE_DIR)/source/common/romable/,$(common-objs))

wal-objs := wal_ccpriv_debug.o wal_ccpriv_debug_cali_debug.o
wal-objs := $(addprefix $(REL_WAL_DIR)/debug/,$(wal-objs))

netbuf-objs := oal_netbuf.o
netbuf-objs := $(addprefix $(REL_FORWARD_DIR)/linux/,$(netbuf-objs))
#===========================hdevice.o===========================

#EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE

#===============================ko============================
#==================================host======================
wifi_$(_KO_NAME)-objs := $(wal-objs)
wifi_$(_KO_NAME)-objs += $(wal-common-objs)
wifi_$(_KO_NAME)-objs += $(common-objs)
wifi_$(_KO_NAME)-objs += $(mac-objs)
wifi_$(_KO_NAME)-objs += $(netbuf-objs)
#==================================hdevice====================

#=====================================================
#=====================================================
ifeq ($(CONFIG_WSXX_KERNEL_MODULES_BUILD_SUPPORT), yes)
obj-m += wifi_$(_KO_NAME).o
else
obj-y += wifi_$(_KO_NAME).o
endif

#====================include==============================
#====================include:host================================

_INCLUDES += -I$(WIFI_DEVICE_DIR)/sample/ws73
_INCLUDES += -I$(WIFI_DEVICE_DIR)/source/common
_INCLUDES += -I$(WIFI_DEVICE_DIR)/source/inc/romable/hal/ws73
_INCLUDES += -I$(WIFI_DEVICE_DIR)/source/inc/romable/hal/ws73/spec
_INCLUDES += -I$(WIFI_DEVICE_DIR)/source/inc/romable
_INCLUDES += -I$(WIFI_DEVICE_DIR)/source/inc/romable/device_common
_INCLUDES += -I$(PLATFORM_DEVICE_DIR)/romable/include
_INCLUDES += -I$(PLATFORM_DEVICE_DIR)/romable/include/soc
_INCLUDES += -I$(WIFI_DEVICE_DIR)/source/inc/romable/alg
_INCLUDES += -I$(WIFI_DEVICE_DIR)/source/inc
#host need include source/inc/romable/msg
_INCLUDES += -I$(WIFI_DEVICE_DIR)/source/inc/romable/msg

_INCLUDES += -I$(INC_DIR)
_INCLUDES += -I$(INC_DIR)/oal
_INCLUDES += -I$(INC_DIR)/oal/linux
_INCLUDES += -I$(INC_DIR)/mac
_INCLUDES += -I$(INC_DIR)/frw
_INCLUDES += -I$(INC_DIR)/hal
_INCLUDES += -I$(INC_DIR)/linux

_INCLUDES += -I$(HAL_DIR)
_INCLUDES += -I$(HAL_DIR)/spec
_INCLUDES += -I$(HAL_DIR)/hh503

_INCLUDES += -I$(WAL_DIR)/common
_INCLUDES += -I$(WAL_DIR)/debug
_INCLUDES += -I$(WAL_DIR)/release/linux
_INCLUDES += -I$(FRW_DIR)
_INCLUDES += -I$(FEATURE_DIR)
_INCLUDES += -I$(VERSION_DIR)
_INCLUDES += -I$(HMAC_DIR)

_INCLUDES += -I$(PLATFROM_OSAL_DIR)/include
_INCLUDES += -I$(PLATFROM_DFX_DIR)/include
_INCLUDES += -I$(PLATFROM_DFX_DIR)/zdiag/include
_INCLUDES += -I$(PLATFORM_INC_DIR)/osal_adapt
_INCLUDES += -I$(SECURE_LIBC_PATH)

_INCLUDES += -I$(WSCFG_KERNEL_DIR)

_INCLUDES += -I$(PLATFROM_HCC_DIR)/inc
_INCLUDES += -I$(PLATFROM_HCC_DIR)/comm
_INCLUDES += -I$(PLATFROM_HCC_DIR)/host
_INCLUDES += -I$(PLATFROM_PM_DIR)

_INCLUDES += -I$(OAL_DIR)
_INCLUDES += -I$(COMMON_DIR)

_INCLUDES += -I$(MAC_DIR)
_INCLUDES += -I$(FORWARD_DIR)
_INCLUDES += -I$(FORWARD_DIR)/linux

#====================include:hdevice================================
_INCLUDES += -I$(FE_DIR)/calibrate/cali_debug

#add for host start
_INCLUDES += -I$(INC_DIR)/hmac
_INCLUDES += -I$(INC_DIR)/wal
#add for host end

_INCLUDES += -I$(INC_DIR)/wifi_oneimage
_INCLUDES += -I$(PLATFROM_DRV_DIR)
_INCLUDES += -I$(PLATFROM_DRV_DIR)/include
_INCLUDES += -I$(PLATFROM_HCC_DIR)/slave
_INCLUDES += -I$(PLATFROM_HCC_DIR)/cfg
_INCLUDES += -I$(PLATFROM_ZDIAG_DIR)/zdiag_sample
_INCLUDES += -I$(PLATFROM_ZDIAG_ADAPT_DIR)
_INCLUDES += -I$(PLATFORM_INC_DIR)/osal_adapt
_INCLUDES += -I$(PLATFROM_DRV_DIR)/host_efuse
ifeq ($(_PRE_PLAT_SHA256SUM_CHECK),y)
_INCLUDES += -I$(PLATFROM_DRV_DIR)/crypto
endif
#===========================================================
ifneq ($(TARGET_BUILD_VARIANT),user)
KBUILD_CFLAGS += -DPLATFORM_DEBUG_ENABLE
KBUILD_CFLAGS += -DPLATFORM_SSI_FULL_LOG
endif

EXTRA_CFLAGS = $(_INCLUDES) $(COPTS)
ifeq ($(WIFI_DEBUG),y)
COPTS +=-D_PRE_WIFI_DEBUG
COPTS +=-D_PRE_WLAN_CFGID_DEBUG
COPTS +=-D_PRE_WIFI_PRINTK
COPTS +=-D_PRE_WLAN_FEATURE_SPECIAL_PKT_LOG
endif
ifeq ($(WIFI_WOW),y)
COPTS +=-D_PRE_WLAN_FEATURE_WOW_OFFLOAD
COPTS +=-D_PRE_WLAN_FEATURE_DYNAMIC_OFFLOAD
endif
ifeq ($(WIFI_SINGLE_PROXYSTA),y)
COPTS +=-D_PRE_WLAN_FEATURE_SINGLE_PROXYSTA
endif
ifeq ($(WIFI_ALWAYS_TX),y)
COPTS +=-D_PRE_WLAN_FEATURE_ALWAYS_TX
endif
ifeq ($(WIFI_11KVR),y)
COPTS +=-D_PRE_WLAN_FEATURE_11K
COPTS +=-D_PRE_WLAN_FEATURE_11V
COPTS +=-D_PRE_WLAN_FEATURE_11R
endif

EXTRA_CFLAGS += $(COPTS)
EXTRA_CFLAGS += $(COMM_COPTS)
EXTRA_CFLAGS += -Werror
EXTRA_CFLAGS += -fno-pic
EXTRA_CFLAGS += -DDMAC_ON_HOST
EXTRA_CFLAGS += -D_PRE_WLAN_RF_CALI_DEBUG
EXTRA_CFLAGS += -include $(WSCFG_AUTOCONFIG_H) -include $(PLATFORM_INC_DIR)/oneimage/oneimage.h
MODFLAGS = -fno-pic

ifeq ($(WSCFG_USING_GCC), y)
EXTRA_CFLAGS += -Wclobbered -Wmissing-parameter-type -Wold-style-declaration -Woverride-init
else ifeq ($(WSCFG_USING_LLVM_CLANG), y)
EXTRA_CFLAGS += -Wno-error=typedef-redefinition
EXTRA_CFLAGS += -Wno-error=macro-redefined
EXTRA_CFLAGS += -Wno-error=implicit-function-declaration
EXTRA_CFLAGS += -Wno-error=unused-function
EXTRA_CFLAGS += -Wno-error=incompatible-function-pointer-types
EXTRA_CFLAGS += -mcmodel=large
EXTRA_CFLAGS += -Woverride-init
endif

else
#############################
###### normal makefile ######
#############################
ifeq ($(WSCFG_USING_GCC), y)
STRIP=$(WSCFG_CROSS_COMPILE)strip

default:
	$(MAKE) -C $(WSCFG_KERNEL_DIR) ARCH=$(WSCFG_ARCH_NAME) CROSS_COMPILE=$(WSCFG_CROSS_COMPILE) M=$(DRIVER_DEBUG_SRC_PATH) modules KBUILD_MODPOST_WARN=1
	$(STRIP) --strip-unneeded wifi_$(_KO_NAME).ko

else ifeq ($(WSCFG_USING_LLVM_CLANG), y)
LOCAL_CLANG_PATH:=$(subst ",,$(WSCFG_CLANG_PATH))
LOCAL_CLANG_EXTRA_CFLAGS:=$(subst ",,$(WSCFG_CLANG_EXTRA_CFLAGS))
LOCAL_CROSS_COMPILE:=$(subst ",,$(WSCFG_CROSS_COMPILE))
CC=$(LOCAL_CLANG_PATH)/clang
LD=$(LOCAL_CLANG_PATH)/ld.lld
NM=$(LOCAL_CLANG_PATH)/llvm-nm
AR=$(LOCAL_CLANG_PATH)/llvm-ar
OBJCOPY=$(LOCAL_CLANG_PATH)/llvm-objcopy
STRIP=$(LOCAL_CLANG_PATH)/llvm-strip

default:
	$(MAKE) -C $(WSCFG_KERNEL_DIR) ARCH=${WSCFG_ARCH_NAME} CROSS_COMPILE=${LOCAL_CROSS_COMPILE} CC=$(CC) NM=$(NM) AR=$(AR) LD=$(LD) OBJCOPY=$(OBJCOPY) M=$(DRIVER_DEBUG_SRC_PATH) modules -j KBUILD_MODPOST_WARN=1 $(LOCAL_CLANG_EXTRA_CFLAGS)
	$(STRIP) --strip-unneeded wifi_$(_KO_NAME).ko

endif

clean:
	$(MAKE) -C $(WSCFG_KERNEL_DIR) M=$(DRIVER_DEBUG_SRC_PATH) clean

endif
# end of ifneq ($(KERNELRELEASE),)
#===========================================================
