
.KEEP_STATE:
.SUFFIXES:
.SUFFIXES: .c .cpp .h .hpp .asm .s .inc .o .elf .d .dep .def .lex .y .ypp

libraries :=
symfiles  :=
objects   :=
linkpath  :=

APPNAME := cmbs_tcx

ifeq ($(OS),Windows_NT)
HOST_OS = WIN32
ifndef HOST_DLL_SUPPORT
HOST_DLL_SUPPORT :=1
endif
else
HOST_OS = UNIX
endif

ifdef SHELL
ifeq ($(notdir $(basename $(SHELL))),cmd)
### SHELL=cmd.exe
RM := del /Q
SL := \$(EMPTY)
else
### SHELL=sh
RM := rm -f
SL := /
endif
else
RM := del /Q
SL := \$(EMPTY)
endif
# To compile without CURL comment the next line
SUOTA_CURL = true
################################################################################
#
# Directory
#
# define output,intermediate, object, project and base directory
#
ifeq ($(BASE),)
BASE :=.
else
CMBSDIR := ..
endif
PROJDIR := ..
TESTDIR :=.

OUTDIR := $(BASE)$(SL)testout
OBJDIR := $(BASE)$(SL)obj

ifeq ($(LIBDIR),)
LIBDIR := $(PROJDIR)$(SL)lib
endif

ifndef LIBCOMA
LIBCOMA:=../../comatools/tools/libcoma-api
endif

ifndef LIBMEM
LIBMEM:=../../comatools/tools/libcmem
endif

# To block HAN_SERVER comment next line:
HAN_SERVER = true
# will compile the han demo + to FB 
ifeq ($(DVF99),1)
HAN_SERVER_DEMO_CROSS_COMPILE = true
CMBS_COMA = true
endif

CMBS_HOST := true

################################################################################
#
# C-Option definition
#
#
#  -DHAN_SERVER_DEMO_CISCO
ifdef HAN_SERVER
coptions := -DHAN_SERVER
else
coptions := 
endif

CMBS_BUF_SIZE := 2560

# CMBS_BUF_SIZE must be a multiply of 20 (8 * 2.5) because CMBS_PARAM_MAX_LENGTH is CMBS_BUF_SIZE/2.5 and it must be multiply of 8
coptions += -DCMBS_API -DDNA_TAG -DCHECKSUM_SUPPORT -D_CONSOLE -DCMBS_BUF_SIZE=$(CMBS_BUF_SIZE) -DCATIQ_2_1
# New host logging functions(with timestamp and module name) to all cmbs_tcx module to log a file.
coptions += -DTCXLOG_FILE

# this flag wil cause appcmbs.c to use appsuotafileentity instead of appsuotaentity
ifeq ($(SUOTA_USE_LOCAL_FILE),1)
coptions += -DSUOTA_USE_LOCAL_FILE_ENTITY
endif

# this flag wil cause hanserver.c to use %x in the payload instead of %d but will not effect the FUN_CONVERT
ifeq ($(HAN_PROTOCOL_PAYLOAD_AS_HEX),1)
coptions += -DHAN_PROTOCOL_PAYLOAD_AS_HEX
endif


################################################################################
#
# include
#
#
includes := -I. -I$(PROJDIR)$(SL)include -I$(PROJDIR)$(SL)cmbs

################################################################################

objects := $(OBJDIR)/tcx_cmbs.o
objects += $(OBJDIR)/tcx_keyb.o
objects += $(OBJDIR)/tcx_log.o
objects += $(OBJDIR)/tcx_hostlog.o
objects += $(OBJDIR)/tcx_eep.o
objects += $(OBJDIR)/tcx_util.o
objects += $(OBJDIR)/keyb_srv.o
objects += $(OBJDIR)/keyb_call.o
objects += $(OBJDIR)/keyb_swup.o
objects += $(OBJDIR)/keyb_facility.o
objects += $(OBJDIR)/keyb_data.o
objects += $(OBJDIR)/keyb_suota.o
objects += $(OBJDIR)/keyb_han.o
objects += $(OBJDIR)/keyb_rtp.o
objects += $(OBJDIR)/cmbs_voipline.o
objects += $(OBJDIR)/cmbs_event.o
objects += $(OBJDIR)/cmbs_fifo.o
objects += $(OBJDIR)/keyb_crashdump.o
ifdef HAN_SERVER
objects += $(OBJDIR)/hanServer.o
endif
ifeq ($(DVF99),1)
ifdef CMBS_PLUGIN
objects += $(OBJDIR)/cmbs_plugin.o
endif
endif

vpath %.c $(BASE) .$(SL)han$(SL)HAN_Server

ifeq ($(HOST_OS),WIN32)
CMBS_LIBNAME := cmbs_host_win32.lib
CMBS_LIB := $(LIBDIR)$(SL)$(CMBS_LIBNAME)
ifeq ($(HOST_DLL_SUPPORT),1)
CMBS_LIB += $(LIBDIR)$(SL)cfr_core.lib
endif
else
CMBS_LIBNAME := cmbs_host_lnx
CMBS_LIB := $(LIBDIR)/lib$(CMBS_LIBNAME).a
linkpath += -L$(LIBDIR)
endif

################################################################################
# tcx core
ifeq ($(TC),XML)
include $(CORE)$(SL)tcx$(SL)tcx.mak
endif

################################################################################
# host cmbs application
include $(TESTDIR)$(SL)appcmbs$(SL)happcmbs.mak

################################################################################
# List Access
include $(TESTDIR)$(SL)ListAccess$(SL)ListAccess.mak

################################################################################
# framework
ifeq ($(HOST_OS),WIN32)
include $(PROJDIR)$(SL)frame$(SL)win32$(SL)frame.mak
else
include $(PROJDIR)/frame/linux/frame.mak
endif

################################################################################
# CMBS
include $(PROJDIR)$(SL)cmbs$(SL)cmbs.mak

################################################################################

################################################################################
# SUOTA
include $(TESTDIR)$(SL)suota$(SL)suota.mak

################################################################################

# rules

ifeq ($(HOST_OS),WIN32)
include  win32.mak
else
include  linux.mak
endif

ifdef CMBS_COMA
	COMA_LIB_DIR:=$(LIBCOMA)/linux	

	coptions+= -DCMBS_COMA -DUSE_COMA_SOCK	
	LFLAGS+= -lrt -lcoma -pthread -L $(COMA_LIB_DIR)  -L /usr/local/lib
ifeq ($(SUOTA_CURL),true)
	LFLAGS+= -lgcrypt -lgnutls -lgpg-error -ltasn1
endif	
endif

ifeq ($(NBS),1)
coptions += -DNBS=1
endif

ifdef CMBS_PLUGIN
	coptions+= -DCMBS_PLUGIN	
	LFLAGS+= -rdynamic -ldl 
endif

all:  dirs $(OUTDIR)/$(APPNAME)

dirs: $(OBJDIR) $(OUTDIR) $(LIBDIR)	

$(OBJDIR):
	mkdir -p $(OBJDIR)

$(OUTDIR):
	mkdir -p $(OUTDIR)

$(LIBDIR):
	mkdir -p $(LIBDIR)

$(CMBS_LIB):	$(cfr_objects) $(cmbs_objects)
	$(ARCHIEVE) $(cfr_objects) $(cmbs_objects)


clean:
	$(RM) $(OBJDIR)$(SL)*

mframe:
	$(LINK) -shared -nostartfiles -o libRTPFramePlugin.so mframe_plugin.c cfifo.c rtp_jpeg.c frame_jpeg.c -lrt -lmem -lcoma -lpthread -L$(LIBMEM) -I$(LIBMEM) -I$(LIBCOMA)/inc -I$(LIBCOMA) -DUSE_COMA_SOCK -DCMBS_FRAME_DATA_RT -DCMBS_BUF_SIZE=$(CMBS_BUF_SIZE) -L $(COMA_LIB_DIR) -I$(PROJDIR)$(SL)include -I$(PROJDIR)$(SL)cmbs

ifeq ($(HOST_OS),WIN32)
#	$(RM) $(OUTDIR)$(SL)$(APPNAME).exe
else
#	$(RM) $(OUTDIR)$(SL)$(APPNAME)
endif

$(OUTDIR)/$(APPNAME): $(CMBS_LIB) $(objects) 
ifeq ($(HOST_OS),WIN32)
	$(LINK)  $(LFLAGS) $(objects) $(linkpath)
else
	$(LINK)  $(objects) $(LFLAGS) $(linkpath)
endif


################################################################################
#
# END
