export KERNEL_SRC ?= /lib/modules/$(shell uname -r)/build

#################### Configurations ####################
# Compile Options for bt driver configuration.
CONFIG_SUPPORT_BT_DL_WIFI_PATCH=y
CONFIG_SUPPORT_BT_DL_ZB_PATCH=y
CONFIG_SUPPORT_BLUEZ=y
CONFIG_SUPPORT_DVT=n
CONFIG_SUPPORT_HW_DVT=n
CONFIG_SUPPORT_MULTI_DEV_NODE=n
CONFIG_GKI_SUPPORT=y
CONFIG_SUPPORT_WAKEUP_SER=n

ifeq ($(CONFIG_MP_WAKEUP_SOURCE_SYSFS_STAT), y)
    ccflags-y += -DCONFIG_MP_WAKEUP_SOURCE_SYSFS_STAT
endif

ifeq ($(CONFIG_DISABLE_SYMBOL_GET_SET), y)
    ccflags-y += -DCONFIG_DISABLE_SYMBOL_GET_SET
endif

ifneq ($(TARGET_BUILD_VARIANT), user)
    ccflags-y += -DBUILD_QA_DBG=1
else
    ccflags-y += -DBUILD_QA_DBG=0
endif

ifeq ($(CONFIG_SUPPORT_BT_DL_WIFI_PATCH), y)
    ccflags-y += -DCFG_SUPPORT_BT_DL_WIFI_PATCH=1
else
    ccflags-y += -DCFG_SUPPORT_BT_DL_WIFI_PATCH=0
endif

ifeq ($(CONFIG_SUPPORT_BT_DL_ZB_PATCH), y)
    ccflags-y += -DCFG_SUPPORT_BT_DL_ZB_PATCH=1
else
    ccflags-y += -DCFG_SUPPORT_BT_DL_ZB_PATCH=0
endif

ifeq ($(CONFIG_SUPPORT_BLUEZ), y)
    ccflags-y += -DCFG_SUPPORT_BLUEZ=1
else
    ccflags-y += -DCFG_SUPPORT_BLUEZ=0
endif

ifeq ($(CONFIG_SUPPORT_HW_DVT), y)
    ccflags-y += -DCFG_SUPPORT_HW_DVT=1
else
    ccflags-y += -DCFG_SUPPORT_HW_DVT=0
endif

ifeq ($(CONFIG_SUPPORT_WAKEUP_SER), y)
    ccflags-y += -DCFG_SUPPORT_WAKEUP_IRQ=1
else
    ccflags-y += -DCFG_SUPPORT_WAKEUP_IRQ=0
endif

ifeq ($(CONFIG_SUPPORT_DVT), y)
    ccflags-y += -DCFG_SUPPORT_DVT=1
else
    ccflags-y += -DCFG_SUPPORT_DVT=0
endif

ifeq ($(CONFIG_SUPPORT_MULTI_DEV_NODE), y)
    ccflags-y += -DCFG_SUPPORT_MULTI_DEV_NODE=1
else
    ccflags-y += -DCFG_SUPPORT_MULTI_DEV_NODE=0
endif

ifeq ($(CONFIG_SUPPORT_LEAUDIO_CLK), y)
    ccflags-y += -DCFG_SUPPORT_LEAUDIO_CLK=1
    ccflags-y += -I$(srctree)/drivers/misc/mediatek/include/
    ifeq ($(CONFIG_SUPPORT_DEINT_IRQ), y)
        ccflags-y += -DCFG_SUPPORT_DEINT_IRQ=1
    else
        ccflags-y += -DCFG_SUPPORT_DEINT_IRQ=0
    endif
else
    ccflags-y += -DCFG_SUPPORT_LEAUDIO_CLK=0
endif

ifneq ($(TARGET_BUILD_VARIANT), user)
    ccflags-y += -DBTMTK_DEBUG_SOP
endif
#################### Configurations ####################
# For chip interface, driver supports "usb", "sdio", "uart_tty", "uart_serdev" and "btif"
#MTK_CHIP_IF := usb
src := $(KERNEL_SRC)/$(M)

ifeq ($(MTK_CHIP_IF), sdio)
    MOD_NAME = btmtk_sdio_unify
    CFILES := sdio/btmtksdio.c btmtk_woble.c btmtk_chip_reset.c
    ccflags-y += -DCHIP_IF_SDIO
    ccflags-y += -DSDIO_DEBUG=0
    ccflags-y += -I$(src)/include/sdio
else ifeq ($(MTK_CHIP_IF), usb)
    MOD_NAME = btmtk_usb_unify
    CFILES += usb/btmtkusb.c btmtk_woble.c btmtk_chip_reset.c
    ccflags-y += -DCHIP_IF_USB
    ccflags-y += -I$(src)/include/usb
else ifeq ($(MTK_CHIP_IF), uart_tty)
    MOD_NAME = btmtk_uart_unify
    CFILES := uart/btmtktty.c btmtk_woble.c btmtk_chip_reset.c
    ccflags-y += -DCHIP_IF_UART_TTY
    ccflags-y += -I$(src)/include/uart/tty
else ifeq ($(MTK_CHIP_IF), uart_serdev)
    MOD_NAME = btmtk_uart_unify
    ccflags-y += -DCHIP_IF_UART_SERDEV
    CFILES := uart/btmtkserdev.c btmtk_woble.c btmtk_chip_reset.c
    ccflags-y += -I$(src)/include/uart/serdev
else
    MOD_NAME = btmtkbtif_unify
    CFILES := btif/btmtk_btif.c
    ccflags-y += -DCHIP_IF_BTIF
    ccflags-y += -I$(src)/include/btif
endif

CFILES += btmtk_main.c btmtk_fw_log.c btmtk_buffer_mode.c
$(warning LTO=$(LTO))
ccflags-y += -I$(src)/include/ -I$(KERNEL_SRC)/include/ -I$(KERNEL_SRC)/drivers/bluetooth
ccflags-y += -DLINUX_OS
ccflags-y += -Werror

obj-m	+= $(MOD_NAME).o
$(MOD_NAME)-objs	+= $(CFILES:.c=.o)

###############################################################################
# Common
###############################################################################
all: modules

modules:
	@echo cross_comple = $(CROSS_COMPILE)
	@echo CFLAGS = $(CFLAGS) $(ccflags-y)
	@echo M = $(M)
	@echo src = $(src)
	@echo EXTRA_CFLAGS = $(EXTRA_CFLAGS)
	@echo KERNEL_SRC = $(KERNEL_SRC)
	$(warning OUTPUT_ROOT=$(OUTPUT_ROOT))
	$(warning CC=$(CC))
	$(warning CFILES = $(CFILES))
	$(warning MTK_CHIP_IF=$(MTK_CHIP_IF))
	$(warning kernel src=$(KERNEL_SRC))
	$(warning $(MOD_NAME)-objs = $($(MOD_NAME)-objs))
	$(warning obj-m = $(obj-m)) 
	$(MAKE) -C $(KERNEL_SRC) ARCH=$(ARCH) MOD_NAME=$(MOD_NAME) CROSS_COMPILE=$(CROSS_COMPILE) M=$(M) modules
modules_install:
	@$(MAKE) INSTALL_MOD_STRIP=1 M=$(M) -C $(KERNEL_SRC) modules_install
	mkdir -p ${OUT_DIR}/../vendor_lib/modules
	cd ${OUT_DIR}/$(M)/; find -name $(MOD_NAME).ko -exec cp {} ${OUT_DIR}/../vendor_lib/modules/$(MOD_NAME).ko \;
