###############################################################################
# Necessary Check

#ifeq ($(AUTOCONF_H),)
    #$(error AUTOCONF_H is not defined)
#endif

#ccflags-y += -imacros $(AUTOCONF_H)

ifeq ($(TARGET_BUILD_VARIANT),$(filter $(TARGET_BUILD_VARIANT),userdebug user))
    ldflags-y += -s
endif

# Force build fail on modpost warning
KBUILD_MODPOST_FAIL_ON_WARNINGS := y
###############################################################################
ccflags-y += -I$(srctree)/include/
###############################################################################

ccflags-y += -Werror
ccflags-y += -Wno-error=format
ccflags-y += -Wno-error=format-extra-args

###############################################################################
MODULE_NAME := hwnat
ifeq ($(CONFIG_WLAN_DRV_BUILD_IN),y)
$(warning $(MODULE_NAME) build-in boot.img)
obj-y += $(MODULE_NAME).o
else
$(warning $(MODULE_NAME) is kernel module)
obj-m += $(MODULE_NAME).o
endif

# Local config
ccflags-y += -D CONFIG_RA_NAT_HW=1
ccflags-y += -D CONFIG_RA_HW_NAT=1
ccflags-y += -D CONFIG_RA_HW_NAT_TBL_32K=1
ccflags-y += -D CONFIG_RA_HW_NAT_HASH1=1
ccflags-y += -D CONFIG_HW_NAT_AUTO_MODE=1
ccflags-y += -D CONFIG_PPE_MCAST=1
ccflags-y += -D CONFIG_RA_HW_NAT_WIFI=1
ccflags-y += -D CONFIG_RA_HW_NAT_WIFI_NEW_ARCH=1
ccflags-y += -D CONFIG_ARCH_MT7622_WIFI_HW_NAT=1
ccflags-y += -D CONFIG_PPE_MIB=1
ccflags-y += -D CONFIG_HW_NAT_AUTO_MODE=1
ccflags-y += -D CONFIG_ARCH_COLGIN=1
ccflags-y += -D CONFIG_RA_HW_NAT_IPV6=1
ccflags-y += -D CONFIG_SUPPORT_OPENWRT=1
ccflags-y += -D CONFIG_QDMA_SUPPORT_QOS=1
ccflags-y += -D CONFIG_HW_NAT_SW_DVFS=1
ccflags-y += -D CONFIG_HNAT_V1=1
ccflags-y += -D CONFIG_MTK_TINYSYS_MEDMCU_SUPPORT=1

# Local config
EXTRA_KCONFIG:= \
	CONFIG_RA_NAT_HW=y \
	CONFIG_RA_HW_NAT=m \
	CONFIG_RA_HW_NAT_TBL_32K=y \
	CONFIG_RA_HW_NAT_HASH1=y \
	CONFIG_HW_NAT_AUTO_MODE=y \
	CONFIG_PPE_MCAST=y \
	CONFIG_RA_HW_NAT_WIFI=y \
	CONFIG_RA_HW_NAT_WIFI_NEW_ARCH=y \
	CONFIG_ARCH_MT7622_WIFI_HW_NAT=y \
	CONFIG_PPE_MIB=y \
	CONFIG_HW_NAT_AUTO_MODE=y \
	CONFIG_ARCH_COLGIN=y \
	CONFIG_RA_HW_NAT_IPV6=y \
	CONFIG_SUPPORT_OPENWRT=y \
	CONFIG_QDMA_SUPPORT_QOS=y \
	CONFIG_HW_NAT_SW_DVFS=y \
	CONFIG_HNAT_V1=y \
	CONFIG_MTK_TINYSYS_MEDMCU_SUPPORT=y

# Transfer local kernel config to compile option
EXTRA_CFLAGS:= \
	$(patsubst CONFIG_%, -DCONFIG_%=1, $(patsubst %=m,%,$(filter %=m,$(EXTRA_KCONFIG)))) \
	$(patsubst CONFIG_%, -DCONFIG_%=1, $(patsubst %=y,%,$(filter %=y,$(EXTRA_KCONFIG)))) \
	$(patsubst CONFIG_%, -DCONFIG_%=0, $(patsubst %=n,%,$(filter %=n,$(EXTRA_KCONFIG)))) \

$(info $$EXTRA_CFLAGS is [${EXTRA_CFLAGS}])

###############################################################################
# common_main
###############################################################################
ccflags-y += -I$(src)/hw_nat
ccflags-y += -I$(src)/include
###############################################################################

$(MODULE_NAME)-objs += hw_nat/ra_nat.o
$(MODULE_NAME)-objs += hw_nat/hwnat_ioctl.o
$(MODULE_NAME)-objs += hw_nat/hnat_dbg_proc.o
$(MODULE_NAME)-objs += hw_nat/hnat_common.o
$(MODULE_NAME)-objs += hw_nat/foe_fdb.o
$(MODULE_NAME)-objs += hw_nat/util.o
$(MODULE_NAME)-objs += hw_nat/mcast_tbl.o

#ifeq ($(CONFIG_HW_NAT_SW_DVFS),y)
$(MODULE_NAME)-objs += hw_nat/hnat_swdvfs.o
#endif

#$(MODULE_NAME)-objs += hw_nat/hook_base.o
#$(MODULE_NAME)-objs += hw_nat/hook_ext.o

ifeq ($(CONFIG_PINCTRL_MT7622),y)
	EXTRA_CFLAGS += -DCONFIG_ARCH_MT7622
endif

ifeq ($(CONFIG_RALINK),y)
	EXTRA_CFLAGS += -DCONFIG_RALINK_MT7621
endif

ifeq ($(CONFIG_SOC_MT7621),y)
	EXTRA_CFLAGS += -DCONFIG_RALINK_MT7621
endif
	EXTRA_CFLAGS += -DCONFIG_ARCH_COLGIN
