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

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

#****************************************************************************
UNAME_S := $(shell uname -s)
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 			 :=
DSTSTATICLIBDIR	 :=
DSTDYNAMICLIBDIR :=
PREFIX 			 :=


LIBDIR			 := ../depends/lib/x64 
DSTDYNAMICLIBDIR += ${LIBDIR}


# 仅在 Linux 上添加 -rpath-link
ifeq ($(UNAME_S),Linux)
    DEBUG_LDFLAGS    += -g -Wl,-rpath-link, -L./lib/
	RELEASE_LDFLAGS  += -Wl,-rpath-link, -L$(LIBDIR)
else 
	DEBUG_LDFLAGS    += -g -Wl, -L./lib/
	RELEASE_LDFLAGS  += -Wl, -L$(LIBDIR)
endif



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 

EXTRA_LIBS :=

ifeq (test, ${env})
#测试环境
CFLAGS += -DTEST_ENV
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 -rdynamic
CFLAGS += -D__BUILD_MEM_STAT__ -g
CXXFLAGS += -D__BUILD_MEM_STAT__ -g
endif

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

LOCAL_SRC_FILES := ./iot_demo.c ./iot_demo_cb.c ./udp_channel.c ./iot_demo_utils.c

ifeq ($(enable_memstat), yes)
LOCAL_SRC_FILES += ./mem_stat.cpp
endif
#../hal/xs_lpw_hal_linux.c  ../hal/json/cJSON.c ../hal/xs_hal_tcp_linux.c 

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


# 定义 SSL 库相关的链接标志
SSL_LIBS = -lmbedtls -lmbedx509 -lmbedcrypto

# 基础链接标志
BASE_LIBS = -ldl -lpthread -lxsIotSdk 

# 综合链接标志
LDFLAGS += $(BASE_LIBS) $(SSL_LIBS)

# 默认目标
iotDemo: ${DEMO_OBJS}
	${CXX} $^ -o $@ ${LDFLAGS}

#${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 ../hal/*.o ../hal/json/*.o ./iotDemo

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

