makefile.tars 7.0 KB

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