CMakeLists.txt 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. find_package(Gperftools)
  2. include_directories(${GPERFTOOLS_INCLUDE_DIR})
  3. include_directories(${CMAKE_CURRENT_BINARY_DIR})
  4. file(GLOB PROTOS "*.proto")
  5. list(APPEND PROTO_FLAGS -I${CMAKE_CURRENT_BINARY_DIR})
  6. foreach(PROTO ${PROTOS})
  7. get_filename_component(PROTO_WE ${PROTO} NAME_WE)
  8. list(APPEND TEST_PROTO_SRCS "${CMAKE_CURRENT_BINARY_DIR}/${PROTO_WE}.pb.cc")
  9. execute_process(
  10. COMMAND ${PROTOBUF_PROTOC_EXECUTABLE} ${PROTO_FLAGS} --cpp_out=${CMAKE_CURRENT_BINARY_DIR} --proto_path=${PROTOBUF_INCLUDE_DIR} --proto_path=${CMAKE_SOURCE_DIR}/src --proto_path=${CMAKE_SOURCE_DIR}/test ${PROTO}
  11. WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
  12. )
  13. endforeach()
  14. find_path(GTEST_HEADER NAMES gtest/gtest.h)
  15. find_library(GTEST_LIB NAMES gtest)
  16. find_library(GTEST_MAIN_LIB NAMES gtest_main)
  17. set(CMAKE_CPP_FLAGS "-DBRPC_WITH_GLOG=${WITH_GLOG_VAL} -DGFLAGS_NS=${GFLAGS_NS}")
  18. set(CMAKE_CPP_FLAGS "${CMAKE_CPP_FLAGS} -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 -D__STRICT_ANSI__ -include ${CMAKE_SOURCE_DIR}/test/sstream_workaround.h")
  19. set(CMAKE_CXX_FLAGS "${CMAKE_CPP_FLAGS} -O2 -g -pipe -Wall -W -fPIC -fstrict-aliasing -Wno-invalid-offsetof -Wno-unused-parameter -fno-omit-frame-pointer")
  20. use_cxx11()
  21. if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
  22. #required by butil/crc32.cc to boost performance for 10x
  23. if(NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.4))
  24. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4 -msse4.2")
  25. endif()
  26. if(NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.0))
  27. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-aligned-new")
  28. endif()
  29. endif()
  30. file(COPY ${CMAKE_SOURCE_DIR}/test/cert1.key DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
  31. file(COPY ${CMAKE_SOURCE_DIR}/test/cert2.key DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
  32. file(COPY ${CMAKE_SOURCE_DIR}/test/cert1.crt DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
  33. file(COPY ${CMAKE_SOURCE_DIR}/test/cert2.crt DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
  34. file(COPY ${CMAKE_SOURCE_DIR}/test/jsonout DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
  35. file(COPY ${CMAKE_SOURCE_DIR}/test/run_tests.sh DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
  36. SET(TEST_BUTIL_SOURCES
  37. ${CMAKE_SOURCE_DIR}/test/popen_unittest.cpp
  38. ${CMAKE_SOURCE_DIR}/test/at_exit_unittest.cc
  39. ${CMAKE_SOURCE_DIR}/test/atomicops_unittest.cc
  40. ${CMAKE_SOURCE_DIR}/test/base64_unittest.cc
  41. ${CMAKE_SOURCE_DIR}/test/big_endian_unittest.cc
  42. ${CMAKE_SOURCE_DIR}/test/bits_unittest.cc
  43. ${CMAKE_SOURCE_DIR}/test/hash_tables_unittest.cc
  44. ${CMAKE_SOURCE_DIR}/test/linked_list_unittest.cc
  45. ${CMAKE_SOURCE_DIR}/test/mru_cache_unittest.cc
  46. ${CMAKE_SOURCE_DIR}/test/small_map_unittest.cc
  47. ${CMAKE_SOURCE_DIR}/test/stack_container_unittest.cc
  48. ${CMAKE_SOURCE_DIR}/test/cpu_unittest.cc
  49. ${CMAKE_SOURCE_DIR}/test/crash_logging_unittest.cc
  50. ${CMAKE_SOURCE_DIR}/test/leak_tracker_unittest.cc
  51. ${CMAKE_SOURCE_DIR}/test/stack_trace_unittest.cc
  52. ${CMAKE_SOURCE_DIR}/test/environment_unittest.cc
  53. ${CMAKE_SOURCE_DIR}/test/file_util_unittest.cc
  54. ${CMAKE_SOURCE_DIR}/test/dir_reader_posix_unittest.cc
  55. ${CMAKE_SOURCE_DIR}/test/file_path_unittest.cc
  56. ${CMAKE_SOURCE_DIR}/test/file_unittest.cc
  57. ${CMAKE_SOURCE_DIR}/test/scoped_temp_dir_unittest.cc
  58. ${CMAKE_SOURCE_DIR}/test/guid_unittest.cc
  59. ${CMAKE_SOURCE_DIR}/test/hash_unittest.cc
  60. ${CMAKE_SOURCE_DIR}/test/lazy_instance_unittest.cc
  61. ${CMAKE_SOURCE_DIR}/test/md5_unittest.cc
  62. ${CMAKE_SOURCE_DIR}/test/aligned_memory_unittest.cc
  63. ${CMAKE_SOURCE_DIR}/test/linked_ptr_unittest.cc
  64. ${CMAKE_SOURCE_DIR}/test/ref_counted_memory_unittest.cc
  65. ${CMAKE_SOURCE_DIR}/test/ref_counted_unittest.cc
  66. ${CMAKE_SOURCE_DIR}/test/scoped_ptr_unittest.cc
  67. ${CMAKE_SOURCE_DIR}/test/scoped_vector_unittest.cc
  68. ${CMAKE_SOURCE_DIR}/test/singleton_unittest.cc
  69. ${CMAKE_SOURCE_DIR}/test/weak_ptr_unittest.cc
  70. ${CMAKE_SOURCE_DIR}/test/observer_list_unittest.cc
  71. ${CMAKE_SOURCE_DIR}/test/file_descriptor_shuffle_unittest.cc
  72. ${CMAKE_SOURCE_DIR}/test/rand_util_unittest.cc
  73. ${CMAKE_SOURCE_DIR}/test/safe_numerics_unittest.cc
  74. ${CMAKE_SOURCE_DIR}/test/scoped_clear_errno_unittest.cc
  75. ${CMAKE_SOURCE_DIR}/test/scoped_generic_unittest.cc
  76. ${CMAKE_SOURCE_DIR}/test/security_unittest.cc
  77. ${CMAKE_SOURCE_DIR}/test/sha1_unittest.cc
  78. ${CMAKE_SOURCE_DIR}/test/stl_util_unittest.cc
  79. ${CMAKE_SOURCE_DIR}/test/nullable_string16_unittest.cc
  80. ${CMAKE_SOURCE_DIR}/test/safe_sprintf_unittest.cc
  81. ${CMAKE_SOURCE_DIR}/test/string16_unittest.cc
  82. ${CMAKE_SOURCE_DIR}/test/stringprintf_unittest.cc
  83. ${CMAKE_SOURCE_DIR}/test/string_number_conversions_unittest.cc
  84. ${CMAKE_SOURCE_DIR}/test/string_piece_unittest.cc
  85. ${CMAKE_SOURCE_DIR}/test/string_split_unittest.cc
  86. ${CMAKE_SOURCE_DIR}/test/string_tokenizer_unittest.cc
  87. ${CMAKE_SOURCE_DIR}/test/string_util_unittest.cc
  88. ${CMAKE_SOURCE_DIR}/test/stringize_macros_unittest.cc
  89. ${CMAKE_SOURCE_DIR}/test/sys_string_conversions_unittest.cc
  90. ${CMAKE_SOURCE_DIR}/test/utf_offset_string_conversions_unittest.cc
  91. ${CMAKE_SOURCE_DIR}/test/utf_string_conversions_unittest.cc
  92. ${CMAKE_SOURCE_DIR}/test/cancellation_flag_unittest.cc
  93. ${CMAKE_SOURCE_DIR}/test/condition_variable_unittest.cc
  94. ${CMAKE_SOURCE_DIR}/test/lock_unittest.cc
  95. ${CMAKE_SOURCE_DIR}/test/waitable_event_unittest.cc
  96. ${CMAKE_SOURCE_DIR}/test/type_traits_unittest.cc
  97. ${CMAKE_SOURCE_DIR}/test/non_thread_safe_unittest.cc
  98. ${CMAKE_SOURCE_DIR}/test/platform_thread_unittest.cc
  99. ${CMAKE_SOURCE_DIR}/test/simple_thread_unittest.cc
  100. ${CMAKE_SOURCE_DIR}/test/thread_checker_unittest.cc
  101. ${CMAKE_SOURCE_DIR}/test/thread_collision_warner_unittest.cc
  102. ${CMAKE_SOURCE_DIR}/test/thread_id_name_manager_unittest.cc
  103. ${CMAKE_SOURCE_DIR}/test/thread_local_storage_unittest.cc
  104. ${CMAKE_SOURCE_DIR}/test/thread_local_unittest.cc
  105. ${CMAKE_SOURCE_DIR}/test/watchdog_unittest.cc
  106. ${CMAKE_SOURCE_DIR}/test/pr_time_unittest.cc
  107. ${CMAKE_SOURCE_DIR}/test/time_unittest.cc
  108. ${CMAKE_SOURCE_DIR}/test/version_unittest.cc
  109. ${CMAKE_SOURCE_DIR}/test/logging_unittest.cc
  110. ${CMAKE_SOURCE_DIR}/test/cacheline_unittest.cpp
  111. ${CMAKE_SOURCE_DIR}/test/class_name_unittest.cpp
  112. ${CMAKE_SOURCE_DIR}/test/endpoint_unittest.cpp
  113. ${CMAKE_SOURCE_DIR}/test/unique_ptr_unittest.cpp
  114. ${CMAKE_SOURCE_DIR}/test/errno_unittest.cpp
  115. ${CMAKE_SOURCE_DIR}/test/fd_guard_unittest.cpp
  116. ${CMAKE_SOURCE_DIR}/test/file_watcher_unittest.cpp
  117. ${CMAKE_SOURCE_DIR}/test/find_cstr_unittest.cpp
  118. ${CMAKE_SOURCE_DIR}/test/scoped_lock_unittest.cpp
  119. ${CMAKE_SOURCE_DIR}/test/status_unittest.cpp
  120. ${CMAKE_SOURCE_DIR}/test/string_printf_unittest.cpp
  121. ${CMAKE_SOURCE_DIR}/test/string_splitter_unittest.cpp
  122. ${CMAKE_SOURCE_DIR}/test/synchronous_event_unittest.cpp
  123. ${CMAKE_SOURCE_DIR}/test/temp_file_unittest.cpp
  124. ${CMAKE_SOURCE_DIR}/test/baidu_thread_local_unittest.cpp
  125. ${CMAKE_SOURCE_DIR}/test/baidu_time_unittest.cpp
  126. ${CMAKE_SOURCE_DIR}/test/flat_map_unittest.cpp
  127. ${CMAKE_SOURCE_DIR}/test/crc32c_unittest.cc
  128. ${CMAKE_SOURCE_DIR}/test/iobuf_unittest.cpp
  129. ${CMAKE_SOURCE_DIR}/test/test_switches.cc
  130. ${CMAKE_SOURCE_DIR}/test/scoped_locale.cc
  131. ${CMAKE_SOURCE_DIR}/test/butil_unittest_main.cpp
  132. ${CMAKE_SOURCE_DIR}/test/butil_unittest_main.cpp
  133. )
  134. if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
  135. SET(TEST_BUTIL_SOURCES ${TEST_BUTIL_SOURCES}
  136. ${CMAKE_SOURCE_DIR}/test/proc_maps_linux_unittest.cc
  137. ${CMAKE_SOURCE_DIR}/test/test_file_util_linux.cc)
  138. endif()
  139. # -DBVAR_NOT_LINK_DEFAULT_VARIABLES not work for gcc >= 5.0, just remove the file to prevent linking into unit tests
  140. list(REMOVE_ITEM BVAR_SOURCES ${CMAKE_SOURCE_DIR}/src/bvar/default_variables.cpp)
  141. file(GLOB TEST_BVAR_SRCS "bvar_*_unittest.cpp")
  142. add_executable(test_bvar $<TARGET_OBJECTS:BUTIL_LIB>
  143. ${BTHREAD_SOURCES}
  144. ${BVAR_SOURCES}
  145. ${TEST_BVAR_SRCS})
  146. target_link_libraries(test_bvar ${GTEST_LIB}
  147. ${GPERFTOOLS_LIBRARIES}
  148. ${DYNAMIC_LIB})
  149. add_library(TEST_PROTO_OBJ OBJECT ${TEST_PROTO_SRCS})
  150. add_executable(test_butil ${TEST_BUTIL_SOURCES}
  151. $<TARGET_OBJECTS:TEST_PROTO_OBJ>
  152. $<TARGET_OBJECTS:BUTIL_LIB>
  153. $<TARGET_OBJECTS:OBJ_LIB>)
  154. target_link_libraries(test_butil ${GTEST_LIB} ${GPERFTOOLS_LIBRARIES} ${DYNAMIC_LIB})
  155. file(GLOB BTHREAD_UNITTESTS "bthread*unittest.cpp")
  156. foreach(BTHREAD_UT ${BTHREAD_UNITTESTS})
  157. get_filename_component(BTHREAD_UT_WE ${BTHREAD_UT} NAME_WE)
  158. add_executable(${BTHREAD_UT_WE} ${BTHREAD_UT}
  159. $<TARGET_OBJECTS:TEST_PROTO_OBJ>
  160. $<TARGET_OBJECTS:BUTIL_LIB>
  161. $<TARGET_OBJECTS:OBJ_LIB>)
  162. target_link_libraries(${BTHREAD_UT_WE}
  163. ${GTEST_MAIN_LIB}
  164. ${GTEST_LIB}
  165. ${GPERFTOOLS_LIBRARIES}
  166. ${DYNAMIC_LIB})
  167. endforeach()
  168. file(GLOB BRPC_UNITTESTS "brpc_*_unittest.cpp")
  169. foreach(BRPC_UT ${BRPC_UNITTESTS})
  170. get_filename_component(BRPC_UT_WE ${BRPC_UT} NAME_WE)
  171. add_executable(${BRPC_UT_WE} ${BRPC_UT}
  172. $<TARGET_OBJECTS:TEST_PROTO_OBJ>
  173. $<TARGET_OBJECTS:BUTIL_LIB>
  174. $<TARGET_OBJECTS:OBJ_LIB>)
  175. target_link_libraries(${BRPC_UT_WE}
  176. ${GTEST_MAIN_LIB}
  177. ${GPERFTOOLS_LIBRARIES}
  178. ${GTEST_LIB}
  179. ${DYNAMIC_LIB})
  180. endforeach()