# SPDX-License-Identifier: MediaTekProprietary
#	@see http://mtkswits01/~wimac
#	@see libbase/Makefile
#	@see libbase/Makefile.config
PREFIX   = ../install
NAME     = speech_dmn
COMPILER = GNU
CROSS    = arm-linux-
CROSS_SUP= arm-linux- arm-none-eabi- aarch64-linux-
GCC         = $(CROSS)gcc
CC          = $(GCC)
CXX         = $(CROSS)g++
OBJDUMP     = $(CROSS)objdump
OBJCOPY     = $(CROSS)objcopy
AR          = $(CROSS)ar


ifeq ($(strip $(TARGET_PLATFORM)), mt2735)
	OFLAGS      = -g -O0 -fPIC -Wno-missing-braces
else
	OFLAGS      = -g -O0 -fPIC -Wno-missing-braces -march=armv7ve -mfpu=neon-vfpv4 -mfloat-abi=hard -mcpu=cortex-a7
endif

ifeq ($(strip $(CROSS)), arm-linux-)
	CFLAGS = -mthumb-interwork
endif

INIT 	   = syss_init
LDFLAGS  = $(BB_LDFLAGS_ADD) -Wl,--hash-style=gnu -L. -L $(ROOT)/lib
LOCAL_PATH   = .


all: libspeech_drv.so speech_daemon libspeechparser_vendor.so

CFLAGS += -DMTK_YOCTO_AUDIO

INCLUDE   = -Ios/include \
            -Ios

INTF_LIB_INCLUDE = -llog \
                   -lpthread

libspeech_drv.so: speech_drv.o
	$(CC) $(OFLAGS) $(INCLUDE) -llog -shared -o $@ speech_drv.o

speech_drv.o: os/include/speech_drv.h
	$(CC) $(OFLAGS) $(INCLUDE) $(INTF_LIB_INCLUDE) ${CFLAGS} -c os/drv/speech_drv.c -o $@

#----------------------------------------------------------------------------------------

INCLUDE= -I$(ROOT)/include \
	-I$(ROOT)/usr/include \
	-Ihardware/include \
	-Ios \
	-Ios/system \
	-Ios/include \
	-Isp_hal/utility \
	-Isp_hal/utility/uthash \
	-Isp_hal/include \
	-Isp_hal/V3/include


INCLUDE += -IAudioSpeechEnhancement
INCLUDE += -IAudioSpeechEnhancement/ENH_Parser
INCLUDE += -IAudioSpeechEnhancement/media


CXXSRC= \
	os/drv/SpeechModemController.cpp \
	os/drv/MtkAudioSrc.cpp \
	sp_hal/speech_driver/SpeechDriverNormal.cpp \
	sp_hal/speech_driver/SpeechMessengerNormal.cpp \
	sp_hal/speech_driver/SpeechDriverFactory.cpp \
	sp_hal/speech_driver/SpeechDriverDummy.cpp \
	sp_hal/speech_driver/SpeechMessageID.cpp \
	sp_hal/speech_driver/SpeechMessageQueue.cpp \
	sp_hal/speech_driver/SpeechParserBase.cpp \
	sp_hal/speech_driver/SpeechShareMemBase.cpp \
	sp_hal/speech_driver/SpeechExtMemCCCI.cpp \
	sp_hal/speech_driver/SpeechUtility.cpp \
	sp_hal/speech_driver/SpeechConfig.cpp \
	sp_hal/speech_driver/SpeechEnhancementController.cpp \
	sp_hal/speech_driver/SpeechBGSPlayer.cpp \
	sp_hal/speech_driver/SpeechEcallController.cpp \
	sp_hal/speech_driver/SpeechPcm2way.cpp \
	sp_hal/aud_drv/AudioEventThreadManager.cpp \
	sp_hal/aud_drv/AudioUtility.cpp \
	sp_hal/V3/speech_driver/SpeechVMRecorder.cpp \
	sp_hal/V3/aud_drv/AudioVolumeFactory.cpp \
	hardware/src/AudioGainTableParamParser.cpp \
	hardware/src/AudioALSAGainController.cpp \
	hardware/src/AudioALSAHardwareResourceManager.cpp \
	hardware/src/WCNChipController.cpp \
	hardware/src/AudioALSADriverUtility.cpp

ifeq ($(strip $(TARGET_PLATFORM)), mt2735)
	CXXSRC += sp_hal/speech_driver/SpeechShareMemGen95.cpp
	CXXSRC += sp_hal/speech_driver/SpeechExtMemUSIP.cpp
	CXXSRC += hardware/src/SpeechParserGen95.cpp
else
	CXXSRC += sp_hal/speech_driver/SpeechShareMemGen93.cpp
	CXXSRC += hardware/src/SpeechParserGen93.cpp
endif



CSRC= \
	sp_hal/utility/audio_lock.c \
	sp_hal/utility/audio_time.c

LIB_INCLUDE = -llog \
	-lpthread \
	-lxml2 \
	-laudioparamparser \
	-lutils


CFLAGS += -DMTK_COMBO_MODEM_SUPPORT
CFLAGS += -DMTK_AUDIO_HIERARCHICAL_PARAM_SUPPORT
CFLAGS += -DMTK_CCCI_SHARE_BUFFER_SUPPORT
CFLAGS += -DCONFIG_MT_ENG_BUILD
CFLAGS += -DMTK_SPEECH_BGS_SUPPORT
CFLAGS += -DSPH_SR32K
CFLAGS += -DMTK_AUDIO_GAIN_TABLE
CFLAGS += -DMTK_NEW_VOL_CONTROL
CFLAGS += -DMTK_INCALL_DE_REVERB
CFLAGS += -DMTK_SPEECH_ECALL_SUPPORT
CFLAGS += -DMTK_AUDIO_TRYLOCK_NOT_SUPPORT
#CFLAGS += -DMTK_SPEECH_MD_LPBK_TX2RX

ifeq ($(strip $(TARGET_PLATFORM)), mt2735)
	CFLAGS += -DMTK_SPEECH_USIP_EMI_SUPPORT
	CFLAGS += -DMTK_DTMF_REMOVAL_SUPPORT
endif

CXXOBJS=$(CXXSRC:.cpp=.o)
COBJS=$(CSRC:.c=.o)
%.o : %.cpp
	$(CXX) $(OFLAGS) $(INCLUDE) ${CFLAGS} -c -o $@ $<
%.o : %.c
	$(CC) $(OFLAGS) $(INCLUDE) ${CFLAGS} -c -o $@ $<

libspeechparser_vendor.so:
	$(CXX) $(OFLAGS) $(INCLUDE) $(LIB_INCLUDE) ${CFLAGS} -c AudioSpeechEnhancement/ENH_Parser/SpeechParser.cpp -o SpeechParser.o
	$(CXX) $(OFLAGS) $(INCLUDE) $(LIB_INCLUDE) ${CFLAGS} -c AudioSpeechEnhancement/media/AudioParameter.cpp -o AudioParameter.o
	$(CXX) ${CFLAGS} SpeechParser.o AudioParameter.o $(LDFLAGS) $(LIBS_PATH) ${LIB_INCLUDE} -shared -o libspeechparser_vendor.so


libspeech_dmn.so: $(COBJS) $(CXXOBJS)
	@echo "DEBUG:COBJS="$(COBJS)
	@echo "DEBUG:CXXOBJS="$(CXXOBJS)
	$(CXX) $(SYSPATH) $(COBJS) $(CXXOBJS) ${LDFLAGS} ${LIB_INCLUDE} -shared -o libspeech_dmn.so

#----------------------------------------------------------------------------------------

SRC_DAEMON= \
	os/drv/SpeechDaemon.cpp

LIB_INCLUDE_DAEMON = -llog \
	-lpthread \
	-lspeech_dmn

CXXOBJS_DAEMON=$(SRC_DAEMON:.cpp=.o)
%.o : %.cpp
	$(CXX) $(OFLAGS) $(INCLUDE) ${CFLAGS} -c -o $@ $<

speech_daemon: $(CXXOBJS_DAEMON) libspeech_dmn.so
	@echo "DEBUG:CXXOBJS_DAEMON="$(CXXOBJS_DAEMON)
	$(CXX) $(SYSPATH) $(LDFLAGS) ${LIB_INCLUDE_DAEMON} $(CXXOBJS_DAEMON) -o speech_daemon

#----------------------------------------------------------------------------------------

install:
	mkdir -p $(ROOT)/${base_libdir}/
	cp -af lib$(NAME).so $(ROOT)/${base_libdir}/
	cp -af libspeech_drv.so $(ROOT)/${base_libdir}/
	cp -af libspeechparser_vendor.so $(ROOT)/${base_libdir}/
	chmod a+x speech_daemon
	mkdir -p $(ROOT)/${base_bindir}/
	cp -af speech_daemon $(ROOT)/$(base_bindir)/

	mkdir -p ../export_include
	mkdir -p ../export_include/system
	mkdir -p ../export_include/hardware
	mkdir -p ../export_include/utils
	cp -af sp_hal/include/SpeechFeatureDef.h ../export_include/
	cp -af sp_hal/include/SpeechType.h ../export_include/
	cp -af os/include/* ../export_include/
	cp -af os/system/* ../export_include/system
	cp -af os/hardware/* ../export_include/hardware
	cp -af os/utils/* ../export_include/utils

clean:
	rm -f speech_daemon libspeech_dmn.so libspeech_drv.so libspeechparser_vendor.so
	rm -f *.o *.d
	rm -f export_include/*.h
