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

############ Native Enc/Dec ############

ifdef CONFIG_MSM_QDSP6V2_CODECS
	NATIVE_OBJS += q6audio_v2.o q6audio_v2_aio.o
	NATIVE_OBJS += audio_utils_aio.o
	NATIVE_OBJS += audio_utils.o
	NATIVE_OBJS += audio_native.o
	NATIVE_OBJS += aac_in.o
	NATIVE_OBJS += amrnb_in.o
	NATIVE_OBJS += amrwb_in.o
	NATIVE_OBJS += audio_aac.o
	NATIVE_OBJS += audio_alac.o
	NATIVE_OBJS += audio_amrnb.o
	NATIVE_OBJS += audio_amrwb.o
	NATIVE_OBJS += audio_amrwbplus.o
	NATIVE_OBJS += audio_ape.o
	NATIVE_OBJS += audio_evrc.o
	NATIVE_OBJS += audio_g711alaw.o
	NATIVE_OBJS += audio_g711mlaw.o
	NATIVE_OBJS += audio_hwacc_effects.o
	NATIVE_OBJS += audio_mp3.o
	NATIVE_OBJS += audio_multi_aac.o
	NATIVE_OBJS += audio_qcelp.o
	NATIVE_OBJS += audio_wma.o
	NATIVE_OBJS += audio_wmapro.o
	NATIVE_OBJS += evrc_in.o
	NATIVE_OBJS += g711alaw_in.o
	NATIVE_OBJS += g711mlaw_in.o
	NATIVE_OBJS += qcelp_in.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/asoc/Module.symvers
endif

# Module information used by KBuild framework
obj-$(CONFIG_MSM_QDSP6V2_CODECS) += native_dlkm.o
native_dlkm-y := $(NATIVE_OBJS)

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