# 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 := $(ANDROID_BUILD_TOP)/kernel/msm-4.9
	AUDIO_ROOT := $(AUDIO_BLD_DIR)/techpack/audio
endif

ifeq ($(KERNEL_BUILD), 0)
	ifeq ($(CONFIG_ARCH_SDM845), y)
		include $(AUDIO_ROOT)/config/sdm845auto.conf
		export
		INCS    +=  -include $(AUDIO_ROOT)/config/sdm845autoconf.h
	endif
	ifeq ($(CONFIG_ARCH_SDM670), y)
		include $(AUDIO_ROOT)/config/sdm670auto.conf
		export
		INCS    +=  -include $(AUDIO_ROOT)/config/sdm670autoconf.h
	endif
	ifeq ($(CONFIG_ARCH_SDM450), y)
		include $(AUDIO_ROOT)/config/sdm670auto.conf
		export
		INCS    +=  -include $(AUDIO_ROOT)/config/sdm670autoconf.h
	endif
	ifeq ($(CONFIG_ARCH_SM8150), y)
		include $(AUDIO_ROOT)/config/sm8150auto.conf
		export
		INCS    +=  -include $(AUDIO_ROOT)/config/sm8150autoconf.h
	endif
	ifeq ($(CONFIG_ARCH_SM6150), y)
		include $(AUDIO_ROOT)/config/sm8150auto.conf
		export
		INCS    +=  -include $(AUDIO_ROOT)/config/sm8150autoconf.h
	endif
	ifeq ($(CONFIG_ARCH_SDMSHRIKE), y)
		include $(AUDIO_ROOT)/config/sm8150auto.conf
		export
		INCS    +=  -include $(AUDIO_ROOT)/config/sm8150autoconf.h
	endif
	ifeq ($(CONFIG_ARCH_QCS405), y)
		include $(AUDIO_ROOT)/config/qcs405auto.conf
		export
		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)

############ 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
	CORE_OBJS += wcd9360/wcd9360-regmap.o
endif

ifdef CONFIG_SND_SOC_WCD9XXX_V2
	WCD9XXX_OBJS += wcd9xxx-common-v2.o
	WCD9XXX_OBJS += wcd9xxx-resmgr-v2.o
	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_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

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)

# 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	+= sdm660_cdc/
	obj-y	+= msm_sdw/
	obj-y	+= wcd9360/
endif
# Module information used by KBuild framework
obj-$(CONFIG_WCD9XXX_CODEC_CORE) += 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_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)

# inject some build related information
DEFINES += -DBUILD_TIMESTAMP=\"$(shell date -u +'%Y-%m-%dT%H:%M:%SZ')\"
