# 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_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_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_SDMSHRIKE), y)
		include $(AUDIO_ROOT)/config/sm8150auto.conf
		INCS    +=  -include $(AUDIO_ROOT)/config/sm8150autoconf.h
	endif
	ifeq ($(CONFIG_ARCH_QCS405), y)
		include $(AUDIO_ROOT)/config/qcs405auto.conf
		INCS    +=  -include $(AUDIO_ROOT)/config/qcs405autoconf.h
	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)

############ ASoC Codecs ############
ifdef CONFIG_WCD9XXX_CODEC_CORE
	CORE_OBJS += wcd9xxx-rst.o
	CORE_OBJS += wcd9xxx-core-init.o
	CORE_OBJS += wcd9xxx-core.o
	CORE_OBJS += wcd9xxx-irq.o
	CORE_OBJS += wcd9xxx-slimslave.o
	CORE_OBJS += wcd9xxx-utils.o
	CORE_OBJS += wcd9335-regmap.o
	CORE_OBJS += wcd9335-tables.o
	CORE_OBJS += msm-cdc-pinctrl.o
	CORE_OBJS += msm-cdc-supply.o
	CORE_OBJS += wcd934x/wcd934x-regmap.o
	CORE_OBJS += wcd934x/wcd934x-tables.o
endif

ifdef CONFIG_WCD9XXX_CODEC_CORE_V2
	CORE_OBJS += wcd9xxx-core-init.o
	CORE_OBJS += msm-cdc-pinctrl.o
	CORE_OBJS += msm-cdc-supply.o
endif

ifdef CONFIG_SND_SOC_WCD9XXX_V2
ifdef CONFIG_WCD9XXX_CODEC_CORE
	WCD9XXX_OBJS += wcd9xxx-common-v2.o
	WCD9XXX_OBJS += wcd9xxx-resmgr-v2.o
else
	WCD9XXX_OBJS += wcd-clsh.o
endif
	WCD9XXX_OBJS += wcdcal-hwdep.o
	WCD9XXX_OBJS += wcd9xxx-soc-init.o
	WCD9XXX_OBJS += wcd-dsp-utils.o
	WCD9XXX_OBJS += wcd-dsp-mgr.o
	WCD9XXX_OBJS += audio-ext-clk-up.o
endif

ifdef CONFIG_SND_SOC_WCD9335
	WCD9335_OBJS += wcd9335.o
endif

ifdef CONFIG_SND_SOC_WSA881X
	WSA881X_OBJS += wsa881x.o
	WSA881X_OBJS += wsa881x-tables.o
	WSA881X_OBJS += wsa881x-regmap.o
	WSA881X_OBJS += wsa881x-temp-sensor.o
endif

ifdef CONFIG_SND_SOC_WSA881X_ANALOG
	WSA881X_ANALOG_OBJS += wsa881x-analog.o
	WSA881X_ANALOG_OBJS += wsa881x-tables-analog.o
	WSA881X_ANALOG_OBJS += wsa881x-regmap-analog.o
	WSA881X_ANALOG_OBJS += wsa881x-temp-sensor.o
endif
ifdef CONFIG_SND_SOC_MSM_STUB
	STUB_OBJS += msm_stub.o
endif
ifdef CONFIG_SND_SOC_WCD_SPI
	SPI_OBJS += wcd-spi.o
endif

ifdef CONFIG_SND_SOC_WCD_CPE
	WCD_CPE_OBJS += wcd_cpe_core.o
	WCD_CPE_OBJS += wcd_cpe_services.o
endif

ifdef CONFIG_SND_SOC_WCD_MBHC
	MBHC_OBJS += wcd-mbhc-v2.o
endif

ifdef CONFIG_SND_SOC_WCD_MBHC_ADC
	MBHC_OBJS += wcd-mbhc-adc.o
endif

ifdef CONFIG_SND_SOC_WCD_MBHC_LEGACY
	MBHC_OBJS += wcd-mbhc-legacy.o
endif

ifdef CONFIG_SND_SOC_MSM_HDMI_CODEC_RX
	HDMICODEC_OBJS += msm_hdmi_codec_rx.o
endif

ifdef CONFIG_SND_SOC_WCD_IRQ
	CORE_OBJS += wcd-irq.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/dsp/Module.symvers
KBUILD_EXTRA_SYMBOLS +=$(OUT)/obj/vendor/qcom/opensource/audio-kernel/soc/Module.symvers
endif

ifeq ($(KERNEL_BUILD), 1)
	obj-y	+= wcd934x/
	obj-y	+= wcd937x/
	obj-y	+= wcd938x/
	obj-y	+= bolero/
	obj-y	+= rouleur/
	obj-y	+= wsa883x/
	obj-y	+= sdm660_cdc/
endif
# Module information used by KBuild framework
obj-$(CONFIG_WCD9XXX_CODEC_CORE) += wcd_core_dlkm.o
obj-$(CONFIG_WCD9XXX_CODEC_CORE_V2) += wcd_core_dlkm.o
wcd_core_dlkm-y := $(CORE_OBJS)

obj-$(CONFIG_SND_SOC_WCD9XXX_V2) += wcd9xxx_dlkm.o
wcd9xxx_dlkm-y := $(WCD9XXX_OBJS)

obj-$(CONFIG_SND_SOC_WCD9335) += wcd9335_dlkm.o
wcd9335_dlkm-y := $(WCD9335_OBJS)

obj-$(CONFIG_SND_SOC_WSA881X) += wsa881x_dlkm.o
wsa881x_dlkm-y := $(WSA881X_OBJS)

obj-$(CONFIG_SND_SOC_WSA881X_ANALOG) += wsa881x_analog_dlkm.o
wsa881x_analog_dlkm-y := $(WSA881X_ANALOG_OBJS)

obj-$(CONFIG_SND_SOC_MSM_STUB) += stub_dlkm.o
stub_dlkm-y := $(STUB_OBJS)

obj-$(CONFIG_SND_SOC_WCD_CPE) += wcd_cpe_dlkm.o
wcd_cpe_dlkm-y := $(WCD_CPE_OBJS)

obj-$(CONFIG_SND_SOC_WCD_SPI) += wcd_spi_dlkm.o
wcd_spi_dlkm-y := $(SPI_OBJS)

obj-$(CONFIG_SND_SOC_WCD_MBHC) += mbhc_dlkm.o
mbhc_dlkm-y := $(MBHC_OBJS)

obj-$(CONFIG_SND_SOC_MSM_HDMI_CODEC_RX) += hdmi_dlkm.o
hdmi_dlkm-y := $(HDMICODEC_OBJS)
