
#****************************************************************************
#
#****************************************************************************

# DEBUG can be set to YES to include debugging info, or NO otherwise
DEBUG          := YES

#****************************************************************************

CURDIR			 := ${shell pwd}
TOPDIR 			 := ${CURDIR}/../..
DEBUG_CFLAGS     := -Wall -Wno-format -g -DDEBUG 
RELEASE_CFLAGS   := -Wall -Wno-unknown-pragmas -Wno-format -O3 
DEBUG_LDFLAGS    := 
RELEASE_LDFLAGS  := 

LIBS		     :=	
LIBDIR 			 := ./libs
DSTSTATICLIBDIR	 :=
DSTDYNAMICLIBDIR :=
DEFS             :=


DEBUG_LDFLAGS    += -std=gnu99 -g -Wl,-rpath-link, -L$(LIBDIR)
RELEASE_LDFLAGS  += -std=gnu99 -Wl,-rpath-link, -L$(LIBDIR)

CC     := $(PREFIX)gcc
CXX    := $(PREFIX)g++  
LD     := $(PREFIX)ld
AR     := $(PREFIX)ar
RANLIB := $(PREFIX)ranlib
STRIP  := $(PREFIX)strip

DEBUG_CXXFLAGS   := ${DEBUG_CFLAGS}
RELEASE_CXXFLAGS := ${RELEASE_CFLAGS}

ifeq (YES, ${DEBUG})
   CFLAGS       := ${DEBUG_CFLAGS}
   CXXFLAGS     := ${DEBUG_CXXFLAGS}
   LDFLAGS      := ${DEBUG_LDFLAGS}
else
   CFLAGS       := ${RELEASE_CFLAGS}
   CXXFLAGS     := ${RELEASE_CXXFLAGS}
   LDFLAGS      := ${RELEASE_LDFLAGS}
endif

INCS := -I./include -I./3rdParty/mbedtls-3.6.6

SRC_DIRS = ./  ./udpChannel ./cjson 
LOCAL_SRC_FILES = $(foreach dir, $(SRC_DIRS), $(wildcard $(dir)/*.c) $(wildcard $(dir)/*.cpp))  
#LOCAL_SRC_FILES :=$(wildcard *.c)


ifeq (yes, ${lowpower})
	$(warning WARNING: 'lowpower' 选项已迁移至 config.json → runtime_options.lowpower_mode，此参数不再生效，请修改 config.json)
endif

#是否编译iotsdk相关功能
ifeq (no, ${enableiot})
else
	DEFS += -DENABLE_IOT_SDK
	LIBS +=  -lxsIotSdk
endif

# env 环境选项已迁移至 config.json → runtime_options.server_hostname / lan_mode，不再需要编译时指定
ifeq (test, ${env})
	$(warning WARNING: 'env=test' 已迁移至 config.json runtime_options.server_hostname，此参数不再生效)
else ifeq (private, ${env})
	$(warning WARNING: 'env=private' 已迁移至 config.json runtime_options.server_hostname，此参数不再生效)
else ifeq (ap, ${env})
	$(warning WARNING: 'env=ap' 已迁移至 config.json runtime_options.lan_mode，此参数不再生效)
endif

# mode=nvr 已迁移至 config.json → runtime_options.nvr_mode，无需重新编译即可切换
ifeq (nvr, ${mode})
	$(warning WARNING: 'mode=nvr' 已迁移至 config.json runtime_options.nvr_mode，此参数不再生效，请修改 config.json)
endif

#是否启用内存统计（hook malloc/free函数）
ifeq ($(enable_memstat), yes)
LDFLAGS += -Wl,-wrap,malloc -Wl,-wrap,free -Wl,-wrap,calloc -Wl,-wrap,realloc -Wl,-wrap,strdup  -Wl,-wrap,__strdup
CFLAGS += -D__BUILD_MEM_STAT__
CXXFLAGS += -D__BUILD_MEM_STAT__
endif

ifeq (no, ${enableaudio})
	$(warning WARNING: 'enableaudio=no' 已迁移至 config.json → runtime_options.enable_audio=0，此参数不再生效)
endif

# OPUS 音频对讲录制支持（可选编译）：
# - 不加此参数（默认）：收到 OPUS 格式对讲音频时退化为保存裸文件 /tmp/audio.g711
# - enable_opus=yes：链接 libopus/libogg，对讲收到 OPUS 时封装为标准 .ogg 文件（可用 VLC 播放）
# 注意：推流方向的 audio_codec 选 OPUS 时，也需要此参数来链接 libopus 解码依赖
ifeq (yes, ${enable_opus})
	LDFLAGS += -lopus -logg
	DEFS += -DBUILD_DEMO_OPUS
endif

ifeq (yes, ${push_always})
	$(warning WARNING: 'push_always' 已迁移至 config.json → runtime_options.push_stream_always，此参数不再生效)
endif

LIBS += -latomic  -ldl -lpthread   -lxsStreamSdk -lcurl -ljsoncpp -lmbedtls -lmbedx509 -lmbedcrypto -lz -lcares -lrt 


#****************************************************************************
# Makefile code common to all platforms
#****************************************************************************

CFLAGS   := ${CFLAGS}   ${DEFS}
CXXFLAGS := ${CXXFLAGS} ${DEFS}



export	DSTSTATICLIBDIR DSTDYNAMICLIBDIR TOPDIR LIBDIR
export	UBUNTU	DEFAULT	LINARO	LINARO10	ZHIYUAN	
export	CXX STRIP AR CC 
export	CXXFLAGS CFLAGS LDFLAGS LIBS EXTRA_LIBS INCS

#LOCAL_SRC_FILES := $(call find-local-source-files, src)


DEMO_OBJS := $(addsuffix .o,$(basename ${LOCAL_SRC_FILES}))
all: streamDemo

streamDemo: ${DEMO_OBJS}
	${CXX} $^ -o $@ ${LDFLAGS}  ${LIBS}
#${STRIP} $@
	
%.o : %.cpp
	${CXX} -c ${CXXFLAGS} ${INCS} $< -o $@

%.o : %.cc
	${CXX} -c ${CXXFLAGS} ${INCS} $< -o $@

%.o : %.c
	${CC} -c ${CFLAGS} ${INCS} $< -o $@

dist:
	bash makedistlinux
clean:
	rm -rf ./*.o ./streamDemo ./lowPwr/*.o ./hal/*.o ./udpChannel/*.o ./cjson/*.o

show:
	@echo 'CXX :' $(CXX)
	@echo 'STRIP :' $(STRIP)
	@echo 'AR :' $(AR)
	@echo 'CC :' $(CC)
	@echo 'CXXFLAGS :' $(CXXFLAGS)
	@echo 'CFLAGS :' $(CFLAGS)
	@echo 'LDFLAGS :' $(LDFLAGS)
	@echo 'LIBS :' $(LIBS)
	@echo 'EXTRA_LIBS :' $(EXTRA_LIBS)
	@echo 'INCS :' $(INCS)

.PHONY: all clean show

