diff --git a/framework/Makefile b/framework/Makefile new file mode 100644 index 0000000..b3eb1a1 --- /dev/null +++ b/framework/Makefile @@ -0,0 +1,88 @@ +#use Bash instead of SH +export SHELL := /bin/bash + +# echo command color definitions +ifndef NO_COLOR +RED=\e[0;31m +GREEN=\e[0;32m +YELLOW=\e[1;33m +NC=\e[0m # No Color +COLOR=-fdiagnostics-color +else +RED= +GREEN= +YELLOW= +NC= +COLOR= +endif + +CXX = g++ +CC = gcc +RM = rm -f +AR = ar rvs + +BUILD_DIR = ./build +RESULT_DIR = ../build +LIB_STATIC = $(RESULT_DIR)/libframework.a + +#Software LABEL, BUILD number, and DATE of build +$(shell mkdir -p ${BUILD_DIR}) +SOFT_BUILD = $(shell STR=`cat $(BUILD_DIR)/version.h 2> /dev/null | grep 'SOFT_BUILD' | sed 's/[a-z A-Z\#\-\._]//g'`; let "STR += 1"; echo $$STR; echo "SOFT_BUILD $$STR" > $(BUILD_DIR)/version.h;) +DATE_BUILD = $(shell date +"%D %T") + +#source and header files search path. add here new directories which contains files specified for $(SRC) +VPATH = . logger storage http/client http/server utils swi rmq interfaces swi/protocols + +SRC = $(wildcard $(addsuffix /*.cpp,${VPATH})) +OBJ = $(patsubst %.cpp,%.o,$(addprefix $(BUILD_DIR)/,$(notdir $(SRC)))) + +INCS = -I"../thirdparty" -I"./" -I"./utils" -I"./rmq" -I"/usr/include/json-c" -I"/usr/include/postgresql" -I /usr/include/libxml2 -I"/opt/swifttest/include" -I"../thirdparty/libswiftclient/src/lib" +FLAGS = -Wall -ggdb -fPIC -O3 -rdynamic -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -std=c++11 -DSOFT_BUILD=$(SOFT_BUILD) -DUSER_BUILD=$(USER) -DDATE_BUILD="$(DATE_BUILD)" + +.PHONY: all clean + +all: $(LIB_STATIC) + +clean: + ${RM} $(BUILD_DIR)/*.o $(BUILD_DIR)/*.dep $(BIN) $(LIB_STATIC) $(BUILD_DIR)/prepare.bld $(RESULT_DIR)/prepare.res $(BUILD_DIR)/version.h + @if [ -z "$$(ls -A $(BUILD_DIR) 2>&1)" ]; then ${RM} -r $(BUILD_DIR); fi + @if [ -z "$$(ls -A $(RESULT_DIR) 2>&1)" ]; then ${RM} -r $(RESULT_DIR); fi + +$(BUILD_DIR)/prepare.bld: + @if [ ! -e $(BUILD_DIR) ]; then mkdir -vp $(BUILD_DIR); fi + @touch $@ + +$(RESULT_DIR)/prepare.res: + @if [ ! -e $(RESULT_DIR) ]; then mkdir -vp $(RESULT_DIR); fi + @touch $@ + +$(BUILD_DIR)/%.o: %.cpp +#compile source code directly to $BUILD_DIR directory + @printf "Building %-60s" $@ + @OUT=$$($(CXX) $(COLOR) -o $@ -c $< $(FLAGS) $(INCS) 2>&1); \ + if [ $$? -ne "0" ]; \ + then echo -e "${RED}[FAILED]${NC}"; echo -e "$$OUT"; \ + else \ + if [ -n "$$OUT" ]; \ + then echo -e "${YELLOW}[DONE]${NC}"; echo -e "'$$OUT'"; \ + else \ + echo -e "${GREEN}[DONE]${NC}"; \ + fi; \ + fi +#create dependencies + @$(CXX) -MM -MT '$@' -c $< > $@.dep $(FLAGS) $(INCS) + +#create library +$(LIB_STATIC): $(RESULT_DIR)/prepare.res $(BUILD_DIR)/prepare.bld $(OBJ) + @rm -fv $@ + @printf "Create %-60s" $@ + @OUT=$$($(AR) $@ $(OBJ) 2>&1); \ + if [ $$? -ne "0" ]; \ + then echo -e "${RED}[FAILED]${NC}"; echo -e "$$OUT"; \ + else \ + echo -e "${GREEN}[DONE]${NC}"; \ + fi + +#include dependencies for track changes in sourcecode and related header files +DEPEND := $(OBJ:.o=.o.dep) +-include $(DEPEND)