Makefile 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. # Licensed to the Apache Software Foundation (ASF) under one
  2. # or more contributor license agreements. See the NOTICE file
  3. # distributed with this work for additional information
  4. # regarding copyright ownership. The ASF licenses this file
  5. # to you under the Apache License, Version 2.0 (the
  6. # "License"); you may not use this file except in compliance
  7. # with the License. You may obtain a copy of the License at
  8. #
  9. # http://www.apache.org/licenses/LICENSE-2.0
  10. #
  11. # Unless required by applicable law or agreed to in writing,
  12. # software distributed under the License is distributed on an
  13. # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  14. # KIND, either express or implied. See the License for the
  15. # specific language governing permissions and limitations
  16. # under the License.
  17. NEED_GPERFTOOLS=1
  18. NEED_GTEST=1
  19. include ../config.mk
  20. CPPFLAGS+=-DBTHREAD_USE_FAST_PTHREAD_MUTEX -D__const__= -D_GNU_SOURCE -DUSE_SYMBOLIZE -DNO_TCMALLOC -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -DUNIT_TEST -Dprivate=public -Dprotected=public -DBVAR_NOT_LINK_DEFAULT_VARIABLES --include sstream_workaround.h
  21. CXXFLAGS=$(CPPFLAGS) -pipe -Wall -W -fPIC -fstrict-aliasing -Wno-invalid-offsetof -Wno-unused-parameter -fno-omit-frame-pointer -std=c++0x
  22. #required by butil/crc32.cc to boost performance for 10x
  23. ifeq ($(shell test $(GCC_VERSION) -ge 40400; echo $$?),0)
  24. CXXFLAGS+=-msse4 -msse4.2
  25. endif
  26. #not solved yet
  27. ifeq ($(CC),gcc)
  28. ifeq ($(shell test $(GCC_VERSION) -ge 70000; echo $$?),0)
  29. CXXFLAGS+=-Wno-aligned-new
  30. endif
  31. endif
  32. LIBS += .
  33. HDRPATHS=-I. -I../src $(addprefix -I, $(HDRS))
  34. LIBPATHS=$(addprefix -L, $(LIBS))
  35. COMMA = ,
  36. SOPATHS = $(addprefix -Wl$(COMMA)-rpath$(COMMA), $(LIBS))
  37. SOEXT = so
  38. ifeq ($(SYSTEM),Darwin)
  39. SOEXT = dylib
  40. endif
  41. TEST_BUTIL_SOURCES = \
  42. at_exit_unittest.cc \
  43. atomicops_unittest.cc \
  44. base64_unittest.cc \
  45. big_endian_unittest.cc \
  46. bits_unittest.cc \
  47. hash_tables_unittest.cc \
  48. linked_list_unittest.cc \
  49. mru_cache_unittest.cc \
  50. small_map_unittest.cc \
  51. stack_container_unittest.cc \
  52. cpu_unittest.cc \
  53. crash_logging_unittest.cc \
  54. leak_tracker_unittest.cc \
  55. stack_trace_unittest.cc \
  56. environment_unittest.cc \
  57. file_util_unittest.cc \
  58. dir_reader_posix_unittest.cc \
  59. file_path_unittest.cc \
  60. file_unittest.cc \
  61. scoped_temp_dir_unittest.cc \
  62. guid_unittest.cc \
  63. hash_unittest.cc \
  64. lazy_instance_unittest.cc \
  65. aligned_memory_unittest.cc \
  66. linked_ptr_unittest.cc \
  67. ref_counted_memory_unittest.cc \
  68. ref_counted_unittest.cc \
  69. scoped_ptr_unittest.cc \
  70. scoped_vector_unittest.cc \
  71. singleton_unittest.cc \
  72. weak_ptr_unittest.cc \
  73. observer_list_unittest.cc \
  74. file_descriptor_shuffle_unittest.cc \
  75. rand_util_unittest.cc \
  76. safe_numerics_unittest.cc \
  77. scoped_clear_errno_unittest.cc \
  78. scoped_generic_unittest.cc \
  79. security_unittest.cc \
  80. sha1_unittest.cc \
  81. stl_util_unittest.cc \
  82. nullable_string16_unittest.cc \
  83. safe_sprintf_unittest.cc \
  84. string16_unittest.cc \
  85. stringprintf_unittest.cc \
  86. string_number_conversions_unittest.cc \
  87. string_piece_unittest.cc \
  88. string_split_unittest.cc \
  89. string_tokenizer_unittest.cc \
  90. string_util_unittest.cc \
  91. stringize_macros_unittest.cc \
  92. sys_string_conversions_unittest.cc \
  93. utf_offset_string_conversions_unittest.cc \
  94. utf_string_conversions_unittest.cc \
  95. cancellation_flag_unittest.cc \
  96. condition_variable_unittest.cc \
  97. lock_unittest.cc \
  98. waitable_event_unittest.cc \
  99. type_traits_unittest.cc \
  100. non_thread_safe_unittest.cc \
  101. platform_thread_unittest.cc \
  102. simple_thread_unittest.cc \
  103. thread_checker_unittest.cc \
  104. thread_collision_warner_unittest.cc \
  105. thread_id_name_manager_unittest.cc \
  106. thread_local_storage_unittest.cc \
  107. thread_local_unittest.cc \
  108. watchdog_unittest.cc \
  109. time_unittest.cc \
  110. version_unittest.cc \
  111. logging_unittest.cc \
  112. cacheline_unittest.cpp \
  113. class_name_unittest.cpp \
  114. endpoint_unittest.cpp \
  115. unique_ptr_unittest.cpp \
  116. errno_unittest.cpp \
  117. fd_guard_unittest.cpp \
  118. file_watcher_unittest.cpp \
  119. find_cstr_unittest.cpp \
  120. scoped_lock_unittest.cpp \
  121. status_unittest.cpp \
  122. string_printf_unittest.cpp \
  123. string_splitter_unittest.cpp \
  124. synchronous_event_unittest.cpp \
  125. temp_file_unittest.cpp \
  126. baidu_thread_local_unittest.cpp \
  127. baidu_time_unittest.cpp \
  128. flat_map_unittest.cpp \
  129. crc32c_unittest.cc \
  130. iobuf_unittest.cpp \
  131. object_pool_unittest.cpp \
  132. recordio_unittest.cpp \
  133. test_switches.cc \
  134. scoped_locale.cc \
  135. popen_unittest.cpp \
  136. bounded_queue_unittest.cc \
  137. butil_unittest_main.cpp
  138. ifeq ($(SYSTEM), Linux)
  139. TEST_BUTIL_SOURCES += test_file_util_linux.cc \
  140. proc_maps_linux_unittest.cc
  141. endif
  142. # bthread_* functions are used in logging.cc, and they need to be marked as
  143. # weak symbols explicitly in Darwin system.
  144. ifeq ($(SYSTEM), Darwin)
  145. DYNAMIC_LINKINGS+=-Wl,-U,_bthread_getspecific
  146. DYNAMIC_LINKINGS+=-Wl,-U,_bthread_setspecific
  147. DYNAMIC_LINKINGS+=-Wl,-U,_bthread_key_create
  148. endif
  149. UT_DYNAMIC_LINKINGS = $(DYNAMIC_LINKINGS) -lbrpc.dbg
  150. TEST_BUTIL_OBJS = iobuf.pb.o $(addsuffix .o, $(basename $(TEST_BUTIL_SOURCES)))
  151. TEST_BVAR_SOURCES = $(wildcard bvar_*_unittest.cpp)
  152. TEST_BVAR_OBJS = $(addsuffix .o, $(basename $(TEST_BVAR_SOURCES)))
  153. TEST_BTHREAD_SOURCES = $(wildcard bthread_*unittest.cpp)
  154. TEST_BTHREAD_OBJS = $(addsuffix .o, $(basename $(TEST_BTHREAD_SOURCES)))
  155. TEST_BRPC_SOURCES = $(wildcard brpc_*unittest.cpp)
  156. TEST_BRPC_OBJS = $(addsuffix .o, $(basename $(TEST_BRPC_SOURCES)))
  157. TEST_PROTO_SOURCES = $(wildcard *.proto)
  158. TEST_PROTO_OBJS = $(TEST_PROTO_SOURCES:.proto=.pb.o)
  159. TEST_BINS = test_butil test_bvar $(TEST_BTHREAD_SOURCES:.cpp=) $(TEST_BRPC_SOURCES:.cpp=)
  160. .PHONY:all
  161. all: $(TEST_BINS)
  162. .PHONY:clean
  163. clean:clean_bins
  164. @echo "> Cleaning"
  165. rm -rf $(TEST_BUTIL_OBJS) $(TEST_BVAR_OBJS) $(TEST_BTHREAD_OBJS) $(TEST_BRPC_OBJS) $(TEST_PROTO_OBJS) $(TEST_PROTO_SOURCES:.proto=.pb.h) $(TEST_PROTO_SOURCES:.proto=.pb.cc)
  166. $(MAKE) -C.. clean_debug
  167. .PHONY:clean_bins
  168. clean_bins:
  169. rm -rf $(TEST_BINS)
  170. libbrpc.dbg.$(SOEXT):FORCE
  171. $(MAKE) -C.. test/libbrpc.dbg.$(SOEXT)
  172. libbvar.dbg.a:FORCE
  173. $(MAKE) -C.. test/libbvar.dbg.a
  174. FORCE:
  175. .PRECIOUS: %.o
  176. test_butil:$(TEST_BUTIL_OBJS) | libbrpc.dbg.$(SOEXT)
  177. @echo "> Linking $@"
  178. ifeq ($(SYSTEM),Linux)
  179. $(CXX) -o $@ $(LIBPATHS) $(SOPATHS) -Xlinker "-(" $^ -Xlinker "-)" $(STATIC_LINKINGS) $(UT_DYNAMIC_LINKINGS)
  180. else ifeq ($(SYSTEM),Darwin)
  181. $(CXX) -o $@ $(LIBPATHS) $(SOPATHS) $^ $(STATIC_LINKINGS) $(UT_DYNAMIC_LINKINGS)
  182. endif
  183. test_bvar:libbvar.dbg.a $(TEST_BVAR_OBJS)
  184. @echo "> Linking $@"
  185. ifeq ($(SYSTEM),Linux)
  186. $(CXX) -o $@ $(LIBPATHS) $(SOPATHS) -Xlinker "-(" $^ -Wl,-Bstatic $(STATIC_LINKINGS) -Wl,-Bdynamic -Xlinker "-)" $(DYNAMIC_LINKINGS)
  187. else ifeq ($(SYSTEM),Darwin)
  188. $(CXX) -o $@ $(LIBPATHS) $(SOPATHS) $^ $(STATIC_LINKINGS) $(DYNAMIC_LINKINGS)
  189. endif
  190. bthread%unittest:bthread%unittest.o | libbrpc.dbg.$(SOEXT)
  191. @echo "> Linking $@"
  192. ifeq ($(SYSTEM),Linux)
  193. $(CXX) -o $@ $(LIBPATHS) $(SOPATHS) -Xlinker "-(" $^ -Xlinker "-)" $(STATIC_LINKINGS) $(UT_DYNAMIC_LINKINGS)
  194. else ifeq ($(SYSTEM),Darwin)
  195. $(CXX) -o $@ $(LIBPATHS) $(SOPATHS) $^ $(STATIC_LINKINGS) $(UT_DYNAMIC_LINKINGS)
  196. endif
  197. brpc_%_unittest:$(TEST_PROTO_OBJS) brpc_%_unittest.o | libbrpc.dbg.$(SOEXT)
  198. @echo "> Linking $@"
  199. ifeq ($(SYSTEM),Linux)
  200. $(CXX) -o $@ $(LIBPATHS) $(SOPATHS) -Xlinker "-(" $^ -Xlinker "-)" $(STATIC_LINKINGS) $(UT_DYNAMIC_LINKINGS)
  201. else ifeq ($(SYSTEM),Darwin)
  202. $(CXX) -o $@ $(LIBPATHS) $(SOPATHS) $^ $(STATIC_LINKINGS) $(UT_DYNAMIC_LINKINGS)
  203. endif
  204. %.pb.cc %.pb.h:%.proto
  205. @echo "> Generating $@"
  206. $(PROTOC) --cpp_out=. --proto_path=. --proto_path=../src --proto_path=$(PROTOBUF_HDR) $<
  207. baidu_time_unittest.o:baidu_time_unittest.cpp | libbrpc.dbg.$(SOEXT)
  208. @echo "> Compiling $@"
  209. $(CXX) -c $(HDRPATHS) -O2 $(CXXFLAGS) $< -o $@
  210. brpc_h2_unsent_message_unittest.o:brpc_h2_unsent_message_unittest.cpp | libbrpc.dbg.$(SOEXT)
  211. @echo "> Compiling $@"
  212. $(CXX) -c $(HDRPATHS) -O2 $(CXXFLAGS) $< -o $@
  213. %.o:%.cpp | libbrpc.dbg.$(SOEXT)
  214. @echo "> Compiling $@"
  215. $(CXX) -c $(HDRPATHS) $(CXXFLAGS) $< -o $@
  216. %.o:%.cc | libbrpc.dbg.$(SOEXT)
  217. @echo "> Compiling $@"
  218. $(CXX) -c $(HDRPATHS) $(CXXFLAGS) $< -o $@