# 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.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/sdm710auto.conf
		export
		INCS    +=  -include $(AUDIO_ROOT)/config/sdm710autoconf.h
	endif
	ifeq ($(CONFIG_ARCH_SDM450), y)
		include $(AUDIO_ROOT)/config/sdm450auto.conf
		export
		INCS    +=  -include $(AUDIO_ROOT)/config/sdm450autoconf.h
	endif
	ifeq ($(CONFIG_ARCH_SDM439), y)
		include $(AUDIO_ROOT)/config/sdm450auto.conf
		export
		INCS    +=  -include $(AUDIO_ROOT)/config/sdm450autoconf.h
	endif
	ifeq ($(CONFIG_ARCH_MSM8909), y)
		ifeq ($(CONFIG_MSM_BGCOM), y)
			include $(AUDIO_ROOT)/config/msm8909auto.conf
			export
			INCS    +=  -include $(AUDIO_ROOT)/config/msm8909autoconf.h
		endif
		ifeq ($(CONFIG_MSM_8905), m)
			include $(AUDIO_ROOT)/config/msm8905auto.conf
			export
			INCS    +=  -include $(AUDIO_ROOT)/config/msm8905autoconf.h
		endif
	endif
	ifeq ($(CONFIG_ARCH_MSM8917), y)
		include $(AUDIO_ROOT)/config/sdm450auto.conf
		export
		INCS    +=  -include $(AUDIO_ROOT)/config/sdm450autoconf.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_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
endif

ifdef CONFIG_COMMON_CLK_QCOM
	WCD9XXX_OBJS += audio-ext-clk-up.o
endif

ifdef CONFIG_COMMON_CLK_MSM
	WCD9XXX_OBJS += audio-ext-clk.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
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/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/soc/Module.symvers
endif

ifeq ($(KERNEL_BUILD), 1)
	obj-y	+= wcd934x/
	obj-y	+= sdm660_cdc/
	obj-y	+= msm_sdw/
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_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)

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