1
0

makefile.tars 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. # -------------------------------------------------------------------------------
  2. TARS_PATH :=/usr/local/tars/cpp
  3. #-------------------------------------------------------------------------------
  4. CC = gcc
  5. CXX = g++
  6. CFLAGS += -std=c++11 -g -O2 -Wno-deprecated -Wall
  7. #-------------------------------------------------------------------------------
  8. TARS2CPP := ${TARS_PATH}/tools/tars2cpp ${TARS2CPP_FLAG}
  9. PROTO2TARS := ${TARS_PATH}/tools/pb2tarscpp
  10. #-------------------------------------------------------------------------------
  11. TARS_SRC := $(wildcard *.tars)
  12. TARS_H := $(patsubst %.tars,%.h, $(TARS_SRC))
  13. PB_SRC := $(wildcard *.proto)
  14. PB_H := $(patsubst %.proto,%.pb.h, $(PB_SRC))
  15. PB_TARS_H := $(patsubst %.proto,%.tars.h, $(PB_SRC))
  16. PB_CPP := $(patsubst %.proto,%.pb.cc, $(PB_SRC))
  17. PB_OBJ := $(patsubst %.proto,%.pb.o, $(PB_SRC))
  18. ifneq ($(PB_SRC),)
  19. LIB += -lprotobuf
  20. endif
  21. LOCAL_SRC += $(sort $(wildcard *.cpp *.c) $(PB_CPP))
  22. LOCAL_OBJ += $(patsubst %.cpp,%.o, $(patsubst %.cc,%.o, $(LOCAL_SRC)))
  23. DEP_FILE := $(foreach obj, $(LOCAL_OBJ), $(dir $(obj)).$(basename $(notdir $(obj))).d)
  24. #-------------------------------------------------------------------------------
  25. MYSQL_INC += -I/usr/local/mysql/include/mysql -I/usr/local/mysql/include -I/usr/include/mysql
  26. MYSQL_LIB_DIR += -L/usr/local/mysql/lib/mysql -L/usr/local/mysql/lib -L/usr/lib/mysql
  27. LIB_DIR += ${MYSQL_LIB_DIR}
  28. INC_DIR += ${MYSQL_INC}
  29. ifneq ($(TARS_OPENTRACKING), 0)
  30. ifneq ($(TARS_OPENTRACKING), )
  31. OPENTRACKING_INC += -I/usr/local/include
  32. OPENTRACKING_LIB_DIR += -L/usr/local/lib
  33. LIB_DIR += ${OPENTRACKING_LIB_DIR}
  34. INC_DIR += ${OPENTRACKING_INC}
  35. endif
  36. endif
  37. INCLUDE += -I${TARS_PATH}/include -I./ ${INC_DIR}
  38. LIB += -L${TARS_PATH}/lib -ltarsservant -ltarsparse -ltarsutil -lpthread ${LIB_DIR}
  39. ifneq ($(TARS_SSL), 0)
  40. ifneq ($(TARS_SSL), )
  41. #业务编译
  42. CFLAGS += -DTARS_SSL=1
  43. LIB += -lssl -lcrypto
  44. endif
  45. endif
  46. ifneq ($(TARS_HTTP2), 0)
  47. ifneq ($(TARS_HTTP2), )
  48. #业务编译
  49. CFLAGS += -DTARS_HTTP2=1
  50. LIB += -lnghttp2_static
  51. endif
  52. endif
  53. ifneq ($(TARS_OPENTRACKING), 0)
  54. ifneq ($(TARS_OPENTRACKING), )
  55. #业务编译
  56. CFLAGS += -D_USE_OPENTRACKING=1
  57. LIB += -lopentracing -lzipkin_opentracing -lzipkin -lcurl
  58. endif
  59. endif
  60. #-----------------------------------------------------------------------------
  61. TARGET := $(strip $(TARGET))
  62. IS_LIB := F
  63. ifeq ($(SUFFIX),.a)
  64. IS_LIB := T
  65. endif
  66. ifeq ($(SUFFIX),.so)
  67. IS_LIB := T
  68. endif
  69. #-------------------------------------------------------------------------------
  70. all : $(PB_H) $(TARS_H) $(LOCAL_OBJ) $(TARGET) FORSTRIP
  71. #-------------------------------------------------------------------------------
  72. ifeq ($(IS_LIB),T)
  73. $(filter %.a,$(TARGET)) : $(LOCAL_OBJ) $(REMOTE_OBJ)
  74. ar r $@ $(LOCAL_OBJ)
  75. $(filter %.so,$(TARGET)) : $(LOCAL_OBJ) $(REMOTE_OBJ)
  76. $(CC) $(LFLAGS) -shared -o $@ $(LOCAL_OBJ) $(LIB)
  77. $(filter-out %.so %.a,$(TARGET)) : $(LOCAL_OBJ) $(REMOTE_OBJ)
  78. $(CXX) $(CFLAGS) -o $@ $^ $(INCLUDE) $(LIB)
  79. FORSTRIP:$(TARGET)
  80. ifeq ($(STRIP_FLAG),Y)
  81. @strip $(TARGET)
  82. endif
  83. else
  84. $(filter %.a,$(TARGET)) : $(LOCAL_OBJ) $(REMOTE_OBJ)
  85. ar r $@ $(LOCAL_OBJ)
  86. $(filter %.so,$(TARGET)) : $(LOCAL_OBJ) $(REMOTE_OBJ)
  87. $(CC) $(LFLAGS) -shared -o $@ $(LOCAL_OBJ) $(LIB)
  88. $(filter-out %.so %.a,$(TARGET)) : $(LOCAL_OBJ) $(REMOTE_OBJ)
  89. $(CXX) $(CFLAGS) -o $@ $^ $(INCLUDE) $(LIB)
  90. FORSTRIP:$(TARGET)
  91. ifeq ($(STRIP_FLAG),Y)
  92. @strip $(TARGET)
  93. endif
  94. endif
  95. #----------------------------------------------------------------------------------
  96. copyfile = if test -z "$(APP)" || test -z "$(TARGET)"; then \
  97. echo "['APP' or 'TARGET' option is empty.]"; exit 1; \
  98. else \
  99. if test ! -d $(2); then \
  100. echo "[No such dir:$(2), now we create it.]";\
  101. mkdir -p $(2);\
  102. fi; \
  103. echo "[Copy file $(1) -> $(2)]"; \
  104. cp -v $(1) $(2); \
  105. fi;
  106. #----------------------------------------------------------------------------------
  107. $(PB_H) : $(PB_SRC)
  108. rm -vf $(PB_H) $(PB_CPP)
  109. protoc --plugin=protoc-gen-custom=${PROTO2TARS} --custom_out=./ ${PB_SRC} --cpp_out=./
  110. #ifneq ($(TARS_SRC),)
  111. $(TARS_H) : $(TARS_SRC)
  112. @echo "tars2cpp ${TARS2CPP_FLAG} "
  113. rm -vf $(TARS_H)
  114. @echo "tars2cpp ${TARS2CPP_FLAG} "
  115. $(TARS2CPP) ${TARS2CPP_FLAG} $(TARS_SRC)
  116. #endif
  117. #----------------------------------------------------------------------------------
  118. tar: $(TARGET) $(CONFIG)
  119. @if [ -d $(TARGET)_tmp_dir ]; then \
  120. echo "dir has exist:$(TARGET)_tmp_dir, abort."; \
  121. exit 1; \
  122. else \
  123. mkdir $(TARGET)_tmp_dir $(TARGET)_tmp_dir/$(TARGET);\
  124. cp -rf $(TARGET) $(CONFIG) $(TARGET)_tmp_dir/$(TARGET)/; \
  125. cd $(TARGET)_tmp_dir; tar --exclude=".svn" --exclude="_svn" -czvf $(TARGET).tgz $(TARGET)/; cd ..; \
  126. if [ -f "$(TARGET).tgz" ]; then \
  127. mv -vf $(TARGET).tgz $(TARGET).`date +%Y%m%d%H%M%S`.tgz; \
  128. fi; \
  129. mv $(TARGET)_tmp_dir/$(TARGET).tgz ./; \
  130. rm -rf $(TARGET)_tmp_dir; \
  131. echo "tar cvfz $(TARGET).tgz ..."; \
  132. fi
  133. HELP += $(HELP_TAR)
  134. ifneq ($(TARS_SRC),)
  135. SERVER_NAME := $(TARGET)
  136. SERVER_DIR := /home/tarsproto/$(APP)/$(SERVER_NAME)
  137. RELEASE_TARS += $(TARS_SRC) $(TARS_H)
  138. release: $(TARS_H)
  139. @$(call copyfile, $(RELEASE_TARS) [Mm]akefile , $(SERVER_DIR))
  140. echo "INCLUDE += -I$(SERVER_DIR)" > $(SERVER_DIR)/$(SERVER_NAME).mk;
  141. HELP += $(HELP_RELEASE)
  142. endif
  143. #----------------------------------------------------------------------------------
  144. clean:
  145. rm -vf $(LOCAL_OBJ) $(TARS_H) $(TARGET) $(TARGETS) ${CLEANFILE} .*.d.tmp gmon.out
  146. cleanall:
  147. rm -vf $(LOCAL_OBJ) $(PB_TARS_H) $(TARS_H) $(PB_H) $(PB_CPP) $(TARGET) $(TARGETS) $(DEP_FILE) ${CLEANFILE} *.o .*.d.tmp .*.d gmon.out
  148. rm -vf $(TARGET)*.tgz
  149. HELP += $(HELP_CLEAN)
  150. HELP += $(HELP_CLEANALL)
  151. ifneq ($(DEP_FILE),)
  152. -include $(DEP_FILE)
  153. endif
  154. HELP_RELEASE = "\n\e[1;33mrelease\e[0m:\t[copy '\e[1;32m$(TARS_SRC) $(TARS_H)\e[0m' -> '/home/tarsproto/$(APP)/$(TARGET)']"
  155. HELP_CLEAN = "\n\e[1;33mclean\e[0m:\t\t[remove $(LOCAL_OBJ) $(TARGET)]"
  156. HELP_CLEANALL = "\n\e[1;33mcleanall\e[0m:\t[clean & rm .*.d]"
  157. HELP_TAR = "\n\e[1;33mtar\e[0m:\t\t[will do 'tar $(TARGET).tgz $(RELEASE_FILE)']"
  158. help:
  159. @echo -e $(HELP)"\n"
  160. #----------------------------------------------------------------------------------
  161. .%.d: %.cc
  162. @echo "update $@ ..."; \
  163. echo -n $< | sed s/\.cc/\.o:/ > $@; \
  164. $(CXX) $(CFLAGS) $(INCLUDE) -MM $< | sed '1s/.*.://' >> $@;
  165. %.o: %.cc
  166. $(CXX) $(CFLAGS) $(INCLUDE) -o $@ -c $<
  167. .%.d: %.cpp
  168. @echo "update $@ ..."; \
  169. echo -n $< | sed s/\.cpp/\.o:/ > $@; \
  170. $(CXX) $(CFLAGS) $(INCLUDE) -MM $< | sed '1s/.*.://' >> $@;
  171. %.o: %.cpp
  172. $(CXX) $(CFLAGS) $(INCLUDE) -o $@ -c $<
  173. .%.d: %.c
  174. @echo "update $@ ..."; \
  175. echo -n $< | sed s/\.c/\.o:/ > $@; \
  176. $(CC) $(INCLUDE) -MM $< | sed '1s/.*.://' >> $@;
  177. %.o: %.c
  178. $(CC) $(CFLAGS) $(INCLUDE) -o $@ -c $<
  179. #----------------------------------------------------------------------------------