# We can build either as part of a standalone Kernel build or as
# an external module.  Determine which mechanism is being used
ifeq ($(MODNAME),)
	KERNEL_BUILD := 1
else
	KERNEL_BUILD := 0
endif

# These are configurable via Kconfig for kernel-based builds
# Need to explicitly configure for Android-based builds
KDIR := $(TOP)/kernel/msm-4.19

ifeq ($(KERNEL_BUILD), 1)
	AUDIO_ROOT := $(KDIR)/techpack/audio
endif

ifeq ($(KERNEL_BUILD), 0)
        ifeq ($(CONFIG_ARCH_SM6150), y)
		ifdef CONFIG_SND_SOC_SA6155
			include $(AUDIO_ROOT)/config/sa6155auto.conf
			INCS    +=  -include $(AUDIO_ROOT)/config/sa6155autoconf.h
		else
			include $(AUDIO_ROOT)/config/sm6150auto.conf
			INCS    +=  -include $(AUDIO_ROOT)/config/sm6150autoconf.h
		endif
        endif
        ifeq ($(CONFIG_ARCH_TRINKET), y)
                include $(AUDIO_ROOT)/config/sm6150auto.conf
                INCS    +=  -include $(AUDIO_ROOT)/config/sm6150autoconf.h
        endif
	ifeq ($(CONFIG_ARCH_KONA), y)
		include $(AUDIO_ROOT)/config/konaauto.conf
		INCS    +=  -include $(AUDIO_ROOT)/config/konaautoconf.h
	endif
	ifeq ($(CONFIG_ARCH_LITO), y)
		include $(AUDIO_ROOT)/config/litoauto.conf
		INCS    +=  -include $(AUDIO_ROOT)/config/litoautoconf.h
	endif
	ifeq ($(CONFIG_ARCH_BENGAL), y)
		include $(AUDIO_ROOT)/config/bengalauto.conf
		INCS    +=  -include $(AUDIO_ROOT)/config/bengalautoconf.h
	endif
	ifeq ($(CONFIG_ARCH_SM8150), y)
		ifdef CONFIG_SND_SOC_SA8155
			include $(AUDIO_ROOT)/config/sa8155auto.conf
			INCS    +=  -include $(AUDIO_ROOT)/config/sa8155autoconf.h
		else
			include $(AUDIO_ROOT)/config/sm8150auto.conf
			INCS    +=  -include $(AUDIO_ROOT)/config/sm8150autoconf.h
		endif
	endif
	ifeq ($(CONFIG_ARCH_QCS405), y)
		include $(AUDIO_ROOT)/config/qcs405auto.conf
		INCS    +=  -include $(AUDIO_ROOT)/config/qcs405autoconf.h
	endif
	ifeq ($(CONFIG_ARCH_SDMSHRIKE), y)
		ifdef CONFIG_SND_SOC_SA8155
			include $(AUDIO_ROOT)/config/sa8155auto.conf
			INCS    +=  -include $(AUDIO_ROOT)/config/sa8155autoconf.h
		else
			include $(AUDIO_ROOT)/config/sm8150auto.conf
			INCS    +=  -include $(AUDIO_ROOT)/config/sm8150autoconf.h
		endif
	endif
	ifeq ($(CONFIG_QTI_GVM), y)
		include $(AUDIO_ROOT)/config/gvmauto.conf
		INCS    +=  -include $(AUDIO_ROOT)/config/gvmautoconf.h
	endif
	ifeq ($(CONFIG_ARCH_SDM660), y)
		include $(AUDIO_ROOT)/config/sdm660auto.conf
		INCS    +=  -include $(AUDIO_ROOT)/config/sdm660autoconf.h
	endif
endif

# As per target team, build is done as follows:
# Defconfig : build with default flags
# Slub      : defconfig  + CONFIG_SLUB_DEBUG := y +
#	      CONFIG_SLUB_DEBUG_ON := y + CONFIG_PAGE_POISONING := y
# Perf      : Using appropriate msmXXXX-perf_defconfig
#
# Shipment builds (user variants) should not have any debug feature
# enabled. This is identified using 'TARGET_BUILD_VARIANT'. Slub builds
# are identified using the CONFIG_SLUB_DEBUG_ON configuration. Since
# there is no other way to identify defconfig builds, QTI internal
# representation of perf builds (identified using the string 'perf'),
# is used to identify if the build is a slub or defconfig one. This
# way no critical debug feature will be enabled for perf and shipment
# builds. Other OEMs are also protected using the TARGET_BUILD_VARIANT
# config.

############ UAPI ############
UAPI_DIR :=	uapi
UAPI_INC :=	-I$(AUDIO_ROOT)/include/$(UAPI_DIR)

############ COMMON ############
COMMON_DIR :=	include
COMMON_INC :=	-I$(AUDIO_ROOT)/$(COMMON_DIR)

############ IPC ############

ifdef CONFIG_MSM_QDSP6_APRV2_RPMSG
APRV_GLINK += apr.o
APRV_GLINK += apr_v2.o
APRV_GLINK += apr_tal_rpmsg.o
endif

ifdef CONFIG_MSM_QDSP6_APRV3_RPMSG
APRV_GLINK += apr.o
APRV_GLINK += apr_v3.o
APRV_GLINK += apr_tal_rpmsg.o
endif

ifdef CONFIG_MSM_QDSP6_APRV2_VM
APRV_GLINK += apr_vm.o
APRV_GLINK += apr_v2.o
endif

ifdef CONFIG_WCD_DSP_GLINK
WDSP_GLINK += wcd-dsp-glink.o
endif

LINUX_INC +=	-Iinclude/linux

INCS +=		$(COMMON_INC) \
		$(UAPI_INC)

EXTRA_CFLAGS += $(INCS)


CDEFINES +=	-DANI_LITTLE_BYTE_ENDIAN \
		-DANI_LITTLE_BIT_ENDIAN \
		-DDOT11F_LITTLE_ENDIAN_HOST \
		-DANI_COMPILER_TYPE_GCC \
		-DANI_OS_TYPE_ANDROID=6 \
		-DPTT_SOCK_SVC_ENABLE \
		-Wall\
		-D__linux__

KBUILD_CPPFLAGS += $(CDEFINES)

ifeq ($(KERNEL_BUILD), 0)
KBUILD_EXTRA_SYMBOLS +=$(OUT)/obj/vendor/qcom/opensource/audio-kernel/dsp/Module.symvers
endif

# Currently, for versions of gcc which support it, the kernel Makefile
# is disabling the maybe-uninitialized warning.  Re-enable it for the
# AUDIO driver.  Note that we must use EXTRA_CFLAGS here so that it
# will override the kernel settings.
ifeq ($(call cc-option-yn, -Wmaybe-uninitialized),y)
EXTRA_CFLAGS += -Wmaybe-uninitialized
endif
#EXTRA_CFLAGS += -Wmissing-prototypes

ifeq ($(call cc-option-yn, -Wheader-guard),y)
EXTRA_CFLAGS += -Wheader-guard
endif
# If the module name is not "wlan", then the define MULTI_IF_NAME to be the
# same a the QCA CHIP name. The host driver will then append MULTI_IF_NAME to
# any string that must be unique for all instances of the driver on the system.
# This allows multiple instances of the driver with different module names.
# If the module name is wlan, leave MULTI_IF_NAME undefined and the code will
# treat the driver as the primary driver.
ifneq ($(MODNAME), qdsp6v2)
CHIP_NAME ?= $(MODNAME)
CDEFINES += -DMULTI_IF_NAME=\"$(CHIP_NAME)\"
endif

ifeq ($(CONFIG_SND_SOC_GCOV), y)
GCOV_PROFILE := y
endif

# Module information used by KBuild framework
obj-$(CONFIG_MSM_QDSP6_APRV2_RPMSG) += apr_dlkm.o
obj-$(CONFIG_MSM_QDSP6_APRV3_RPMSG) += apr_dlkm.o
obj-$(CONFIG_MSM_QDSP6_APRV2_VM) += apr_dlkm.o
apr_dlkm-y := $(APRV_GLINK)

obj-$(CONFIG_WCD_DSP_GLINK) += wglink_dlkm.o
wglink_dlkm-y := $(WDSP_GLINK)
