$(info ======== Build met.ko ... ========)
MET_CORE := common
obj-m := met.o

ifneq ($(wildcard $(MET_PLF_DIR)/feature_config/Kbuild),)
    include $(MET_PLF_DIR)/feature_config/Kbuild
else
    $(info ======= Missing $(MET_PLF_DIR)/feature_config/Kbuild ========)
endif

ccflags-y += -DCONFIG_MET_MODULE
ccflags-y += -DMET_PLF_USE
ccflags-y += -I$(MET_COMMON_DIR)
ccflags-y += -I$(MET_PLF_DIR)
ccflags-y += -I$(srctree)/include/
ccflags-y += -I$(srctree)/drivers/misc/mediatek/include/
ccflags-y += -I$(srctree)/drivers/misc/mediatek/include/mt-plat/
ccflags-y += -I$(srctree)/drivers/misc/mediatek/include/mt-plat/$(MTK_PLATFORM)/include/

ccflags-y += $(EXTRA_ARGS) $(EXTRA_CFLAGS)

met-y := $(MET_CORE)/met_main.o \
    $(MET_CORE)/met_backlight.o \
    $(MET_CORE)/met_tag_ex.o \
    $(MET_CORE)/interface.o \
    $(MET_CORE)/sampler.o \
    $(MET_CORE)/dummy_header.o \
    $(MET_CORE)/util.o \
    $(MET_CORE)/stat.o \
    $(MET_CORE)/cookie.o \
    $(MET_CORE)/mem_stat.o \
    $(MET_CORE)/switch.o \
    $(MET_CORE)/trace_event.o \
    $(MET_CORE)/core_plf_init.o \
    $(MET_CORE)/core_plf_trace.o \
    $(MET_CORE)/ondiemet.o \
    $(MET_CORE)/ondiemet_log.o \
    $(MET_CORE)/sspm/ondiemet_sspm.o

CFLAGS_interface.o += -DMET_USER_EVENT_SUPPORT
CFLAGS_met_tag_ex.o += -DMET_USER_EVENT_SUPPORT

$(info CPUPMU_VERSION = $(CPUPMU_VERSION))
ifeq ("$(CPUPMU_VERSION)", "V8_2")
    ccflags-y += -DCPUPMU_V8_2
endif

$(info ARCH = $(ARCH))
ifeq ($(ARCH), mips)
    met-y += $(MET_CORE)/mips_pmu_hw.o
endif #ifeq ($(ARCH), mips)

ifeq ($(ARCH), arm)
    ccflags-y += -DCONFIG_MET_ARM_32BIT
    met-y += $(MET_CORE)/cpu_pmu.o
    met-y += $(MET_CORE)/v7_pmu_hw.o
    met-y += $(MET_CORE)/v6_pmu_hw.o
endif #ifeq ($(ARCH), arm)

ifeq ($(ARCH), arm64)
    met-y += $(MET_CORE)/cpu_pmu.o
    met-y += $(MET_CORE)/v8_pmu_hw.o
endif

$(info CONFIG_CPU_FREQ = $(CONFIG_CPU_FREQ))
ifeq ($(CONFIG_CPU_FREQ),y)
    met-y += $(MET_CORE)/power.o
endif


################################################################################
# MET_EMI
################################################################################
FEATURE_SSPM_EMI := $(if $(FEATURE_SSPM_EMI),$(FEATURE_SSPM_EMI),y)
$(info FEATURE_SSPM_EMI = $(FEATURE_SSPM_EMI))

MET_EMI := $(if $(filter n,$(FEATURE_SSPM_EMI)),n,y)

ifeq ("$(EMI_SEDA_VERSION)", "SEDA3_5")
    met-$(MET_EMI) += $(MET_CORE)/met_emi_35.o \
            $(MET_CORE)/mtk_emi_bm_35.o
else
    met-$(MET_EMI) += $(MET_CORE)/met_emi.o \
            $(MET_CORE)/mtk_emi_bm.o
endif

################################################################################
# MET_GPU
################################################################################
FEATURE_GPU := $(if $(FEATURE_GPU),$(FEATURE_GPU),y)
$(info FEATURE_GPU = $(FEATURE_GPU))

ifneq ($(FEATURE_GPU), n)
    MET_GPU := y

    # for mtk_gpufreq.h
    ifneq ("$(wildcard $(srctree)/drivers/misc/mediatek/base/power/$(MTK_PLATFORM)/mtk_gpufreq.h)","")
        ccflags-y += -I$(srctree)/drivers/misc/mediatek/base/power/$(MTK_PLATFORM)/
    else
        MET_GPU = n
        $(info ======= Missing $(srctree)/drivers/misc/mediatek/base/power/$(MTK_PLATFORM)/mtk_gpufreq.h ========)
        $(info ======== disable MET_GPU ========)
    endif

    # for mtk_gpu_utility.h
    ifneq ("$(wildcard $(srctree)/drivers/misc/mediatek/include/mt-plat/mtk_gpu_utility.h)","")
        ccflags-y += -I$(srctree)/drivers/misc/mediatek/include/mt-plat/
    else
        MET_GPU = n
        $(info ======== Missing $(srctree)/drivers/misc/mediatek/include/mt-plat/mtk_gpu_utility.h ========)
        $(info ======== disable MET_GPU ========)
    endif

    ifneq ($(CONFIG_MTK_GPU_SUPPORT), y)
        MET_GPU = n
        $(info ======== CONFIG_MTK_GPU_SUPPORT = n ========)
        $(info ======== disable MET_GPU ========)
    endif
else
    MET_GPU := n
endif

met-$(MET_GPU) += $(MET_CORE)/mtk_gpu_metmonitor.o


################################################################################
# MET_VCOREDVFS
################################################################################
FEATURE_VCOREDVFS := $(if $(FEATURE_VCOREDVFS),$(FEATURE_VCOREDVFS),y)
$(info FEATURE_VCOREDVFS = $(FEATURE_VCOREDVFS))

ifneq ($(FEATURE_VCOREDVFS), n)
    MET_VCOREDVFS := y

    # for mtk_vcorefs_manager.h
    ifneq ("$(wildcard $(MET_VCOREDVFS_INC)/mtk_vcorefs_manager.h)","")
        ccflags-y += -I$(MET_VCOREDVFS_INC)/
    else
        MET_VCOREDVFS = n
        $(info ======== Missing $(MET_VCOREDVFS_INC)/mtk_vcorefs_manager.h ========)
        $(info ======== disable MET_VCOREDVFS ========)
    endif

    # for mtk_vcorefs_governor.h
    ifneq ("$(wildcard $(MET_VCOREDVFS_INC)/mtk_vcorefs_governor.h)","")
        ccflags-y += -I$(MET_VCOREDVFS_INC)
    else
        MET_VCOREDVFS = n
        $(info ======== Missing $(MET_VCOREDVFS_INC)/mtk_vcorefs_governor.h ========)
        $(info ======== disable MET_VCOREDVFS ========)
    endif

    # for helio-dvfsrc.h
    ifneq ("$(wildcard $(srctree)/drivers/devfreq/helio-dvfsrc.h)","")
        ccflags-y += -I$(srctree)/drivers/devfreq/
    else
        MET_VCOREDVFS = n
        $(info ======== Missing $(srctree)/drivers/devfreq/helio-dvfsrc.h ========)
        $(info ======== disable MET_VCOREDVFS ========)
    endif
else
    MET_VCOREDVFS := n
endif

met-$(MET_VCOREDVFS) += $(MET_CORE)/met_vcoredvfs.o


################################################################################
# MET_PTPOD
################################################################################
FEATURE_PTPOD := $(if $(FEATURE_PTPOD),$(FEATURE_PTPOD),y)
$(info FEATURE_PTPOD = $(FEATURE_PTPOD))

ifneq ($(FEATURE_PTPOD), n)
    MET_PTPOD := y

    # for mtk_gpufreq.h
    ifneq ("$(wildcard $(srctree)/drivers/misc/mediatek/base/power/$(MTK_PLATFORM)/mtk_gpufreq.h)","")
        ccflags-y += -I$(srctree)/drivers/misc/mediatek/base/power/$(MTK_PLATFORM)/
    else
        MET_PTPOD = n
        $(info ======== Missing $(srctree)/drivers/misc/mediatek/base/power/$(MTK_PLATFORM)/mtk_gpufreq.h ========)
        $(info ======== disable MET_PTPOD ========)
    endif

    # for mtk_cpufreq_api.h
    ifneq ("$(wildcard $(srctree)/drivers/misc/mediatek/include/mt-plat/$(MTK_PLATFORM)/include/mach/mtk_cpufreq_api.h)","")
        ccflags-y += -I$(srctree)/drivers/misc/mediatek/include/mt-plat/$(MTK_PLATFORM)/include/
    else
        MET_PTPOD = n
        $(info ======== Missing $(srctree)/drivers/misc/mediatek/include/mt-plat/$(MTK_PLATFORM)/include/mach/mtk_cpufreq_api.h ========)
        $(info ======== disable MET_PTPOD ========)
    endif

    # for mtk_cpufreq_config.h
    ifneq ("$(wildcard $(MET_PTPOD_INC)/mtk_cpufreq_config.h)","")
        ccflags-y += -I$(MET_PTPOD_INC)
    else
        MET_PTPOD = n
        $(info ======== Missing $(MET_PTPOD_INC)/mtk_cpufreq_config.h ========)
        $(info ======== disable MET_PTPOD ========)
    endif
else
    MET_PTPOD := n
endif

met-$(MET_PTPOD) += $(MET_CORE)/met_ptpod.o


################################################################################
# MET_CPUDSU
################################################################################
FEATURE_CPUDSU := $(if $(FEATURE_CPUDSU),$(FEATURE_CPUDSU),y)
$(info FEATURE_CPUDSU = $(FEATURE_CPUDSU))

MET_CPUDSU := $(if $(filter n,$(FEATURE_CPUDSU)),n,y)

met-$(MET_CPUDSU) += $(MET_CORE)/cpu_dsu.o \
                     $(MET_CORE)/v8_dsu_hw.o

################################################################################
# MET_WALLTIME
################################################################################
FEATURE_WALLTIME := $(if $(FEATURE_WALLTIME),$(FEATURE_WALLTIME),y)
$(info FEATURE_WALLTIME = $(FEATURE_WALLTIME))

MET_WALLTIME := $(if $(filter n,$(FEATURE_WALLTIME)),n,y)

met-$(MET_WALLTIME) += $(MET_CORE)/met_wall_time.o


################################################################################
# EVENT_POWER (default setting is disable)
################################################################################
FEATURE_EVENT_POWER := $(if $(FEATURE_EVENT_POWER),$(FEATURE_EVENT_POWER),n)
$(info FEATURE_EVENT_POWER = $(FEATURE_EVENT_POWER))

ifeq ($(FEATURE_EVENT_POWER), y)
	ccflags-y += -DMET_EVENT_POWER_SUPPORT
endif

################################################################################
# On-die-met SSPM only module
################################################################################
FEATURE_ONDIEMET := $(if $(FEATURE_ONDIEMET),$(FEATURE_ONDIEMET),y)
ifeq ($(FEATURE_ONDIEMET), y)
    FEATURE_ONDIEMET_WALLTIME := $(if $(FEATURE_ONDIEMET_WALLTIME),$(FEATURE_ONDIEMET_WALLTIME),y)
else
    FEATURE_ONDIEMET_WALLTIME := n
endif

$(info FEATURE_ONDIEMET = $(FEATURE_ONDIEMET))
$(info FEATURE_ONDIEMET_WALLTIME = $(FEATURE_ONDIEMET_WALLTIME))

ifneq ($(FEATURE_ONDIEMET), n)
    subdir-ccflags-y += -DONDIEMET_SUPPORT

    ifeq ($(CONFIG_MTK_TINYSYS_SSPM_SUPPORT),)
        $(info CONFIG_MTK_TINYSYS_SSPM_SUPPORT = n)
    else
        $(info CONFIG_MTK_TINYSYS_SSPM_SUPPORT = $(CONFIG_MTK_TINYSYS_SSPM_SUPPORT))
    endif

    ifeq ($(CONFIG_MTK_TINYSYS_SSPM_SUPPORT),y)
        # for sspm_ipi.h
        subdir-ccflags-y += -I$(srctree)/drivers/misc/mediatek/sspm
        subdir-ccflags-y += -I$(srctree)/drivers/misc/mediatek/sspm/$(MTK_PLATFORM)
        met-y += $(MET_CORE)/sspm/sspm_ipi_handle.o
        met-y += $(MET_CORE)/sspm/sspm_common.o
        ccflags-y += -DMTK_TINYSYS_SSPM_SUPPORT

        ifneq ("$(wildcard $(srctree)/drivers/misc/mediatek/sspm/$(MTK_PLATFORM)/sspm_ipi_define.h)","")
            subdir-ccflags-y += -I$(srctree)/drivers/misc/mediatek/sspm \
                    -I$(srctree)/drivers/misc/mediatek/sspm/$(MTK_PLATFORM)

            SYS_SSPM_READY := y
        else
            $(info ======== Missing $(srctree)/drivers/misc/mediatek/sspm/$(MTK_PLATFORM)/sspm_ipi_define.h========)
            $(info ======== disable ALL ondiemet feature ========)

            SYS_SSPM_READY := n
        endif
    else
        $(info ======== CONFIG_MTK_TINYSYS_SSPM_SUPPORT = n ========)
        $(info ======== disable ALL ondiemet feature ========)

        SYS_SSPM_READY := n
    endif

    ifeq ($(SYS_SSPM_READY), y)
        MET_SSPM_WALLTIME := $(if $(filter n,$(FEATURE_ONDIEMET_WALLTIME)),n,y)

        met-$(MET_SSPM_WALLTIME) += $(MET_CORE)/sspm/sspm_walltime.o
    endif
endif

##############################################################################################
# include $(MET_PLF_DIR)/Kbuild
##############################################################################################
ifneq ($(wildcard $(MET_PLF_DIR)/Kbuild),)
    include $(MET_PLF_DIR)/Kbuild
else
    $(info ======= Missing $(MET_PLF_DIR)/Kbuild ========)
endif

#################################################################################
# add met_device flags
#################################################################################
ccflags-y += $(foreach v, $(filter MET_%,$(.VARIABLES)), $(if $(filter $($(v)),y),-D$(v)))
