# 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



ifeq ($(KERNEL_BUILD), 1)
	# These are configurable via Kconfig for kernel-based builds
	# Need to explicitly configure for Android-based builds
	AUDIO_BLD_DIR := $(shell pwd)/kernel/msm-4.19
	AUDIO_ROOT := $(AUDIO_BLD_DIR)/techpack/audio
endif

ifeq ($(KERNEL_BUILD), 0)
	ifeq ($(CONFIG_ARCH_SM6150), y)
		include $(AUDIO_ROOT)/config/sm6150auto.conf
		INCS    +=  -include $(AUDIO_ROOT)/config/sm6150autoconf.h
	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_QCS405), y)
		include $(AUDIO_ROOT)/config/qcs405auto.conf
		INCS    +=  -include $(AUDIO_ROOT)/config/qcs405autoconf.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)

############ BOLERO ############

# for BOLERO Codec
ifdef CONFIG_SND_SOC_BOLERO
	BOLERO_OBJS += bolero-cdc.o
	BOLERO_OBJS += bolero-cdc-utils.o
	BOLERO_OBJS += bolero-cdc-regmap.o
	BOLERO_OBJS += bolero-cdc-tables.o
	BOLERO_OBJS += bolero-clk-rsc.o
endif

ifdef CONFIG_WSA_MACRO
	WSA_OBJS += wsa-macro.o
endif

ifdef CONFIG_VA_MACRO
	VA_OBJS += va-macro.o
endif

ifdef CONFIG_TX_MACRO
	TX_OBJS += tx-macro.o
endif

ifdef CONFIG_RX_MACRO
	RX_OBJS += rx-macro.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)

# 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

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

# Module information used by KBuild framework
obj-$(CONFIG_SND_SOC_BOLERO) += bolero_cdc_dlkm.o
bolero_cdc_dlkm-y := $(BOLERO_OBJS)

obj-$(CONFIG_WSA_MACRO) += wsa_macro_dlkm.o
wsa_macro_dlkm-y := $(WSA_OBJS)

obj-$(CONFIG_VA_MACRO) += va_macro_dlkm.o
va_macro_dlkm-y := $(VA_OBJS)

obj-$(CONFIG_TX_MACRO) += tx_macro_dlkm.o
tx_macro_dlkm-y := $(TX_OBJS)

obj-$(CONFIG_RX_MACRO) += rx_macro_dlkm.o
rx_macro_dlkm-y := $(RX_OBJS)
