# 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\
		-Werror\
		-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)
