CMakeLists.txt 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  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. find_package(Gperftools)
  18. include_directories(${GPERFTOOLS_INCLUDE_DIR})
  19. include_directories(${CMAKE_CURRENT_BINARY_DIR})
  20. include(CompileProto)
  21. set(TEST_PROTO_FILES addressbook1.proto
  22. addressbook_encode_decode.proto
  23. addressbook_map.proto
  24. addressbook.proto
  25. echo.proto
  26. iobuf.proto
  27. message.proto
  28. repeated.proto
  29. snappy_message.proto
  30. v1.proto
  31. v2.proto
  32. grpc.proto
  33. health_check.proto)
  34. file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/test/hdrs)
  35. set(PROTOC_FLAGS ${PROTOC_FLAGS} -I${CMAKE_SOURCE_DIR}/src)
  36. compile_proto(PROTO_HDRS PROTO_SRCS ${CMAKE_BINARY_DIR}/test
  37. ${CMAKE_BINARY_DIR}/test/hdrs
  38. ${CMAKE_SOURCE_DIR}/test
  39. "${TEST_PROTO_FILES}")
  40. add_library(TEST_PROTO_LIB OBJECT ${PROTO_SRCS} ${PROTO_HDRS})
  41. set(BRPC_SYSTEM_GTEST_SOURCE_DIR "" CACHE PATH "System googletest source directory.")
  42. if(DOWNLOAD_GTEST)
  43. include(SetupGtest)
  44. elseif(BRPC_SYSTEM_GTEST_SOURCE_DIR)
  45. add_subdirectory("${BRPC_SYSTEM_GTEST_SOURCE_DIR}" "${PROJECT_BINARY_DIR}/system-googletest-build")
  46. else()
  47. message(FATAL_ERROR "Googletest is not available")
  48. endif()
  49. set(CMAKE_CPP_FLAGS "${DEFINE_CLOCK_GETTIME} -DBRPC_WITH_GLOG=${WITH_GLOG_VAL} -DGFLAGS_NS=${GFLAGS_NS}")
  50. 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 ${PROJECT_SOURCE_DIR}/test/sstream_workaround.h")
  51. set(CMAKE_CXX_FLAGS "${CMAKE_CPP_FLAGS} -g -O2 -pipe -Wall -W -fPIC -fstrict-aliasing -Wno-invalid-offsetof -Wno-unused-parameter -fno-omit-frame-pointer")
  52. use_cxx11()
  53. if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
  54. #required by butil/crc32.cc to boost performance for 10x
  55. if(NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.4))
  56. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4 -msse4.2")
  57. endif()
  58. if(NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.0))
  59. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-aligned-new")
  60. endif()
  61. endif()
  62. file(COPY ${PROJECT_SOURCE_DIR}/test/cert1.key DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
  63. file(COPY ${PROJECT_SOURCE_DIR}/test/cert2.key DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
  64. file(COPY ${PROJECT_SOURCE_DIR}/test/cert1.crt DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
  65. file(COPY ${PROJECT_SOURCE_DIR}/test/cert2.crt DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
  66. file(COPY ${PROJECT_SOURCE_DIR}/test/jsonout DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
  67. file(COPY ${PROJECT_SOURCE_DIR}/test/run_tests.sh DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
  68. SET(TEST_BUTIL_SOURCES
  69. ${PROJECT_SOURCE_DIR}/test/recordio_unittest.cpp
  70. ${PROJECT_SOURCE_DIR}/test/popen_unittest.cpp
  71. ${PROJECT_SOURCE_DIR}/test/bounded_queue_unittest.cc
  72. ${PROJECT_SOURCE_DIR}/test/at_exit_unittest.cc
  73. ${PROJECT_SOURCE_DIR}/test/atomicops_unittest.cc
  74. ${PROJECT_SOURCE_DIR}/test/base64_unittest.cc
  75. ${PROJECT_SOURCE_DIR}/test/big_endian_unittest.cc
  76. ${PROJECT_SOURCE_DIR}/test/bits_unittest.cc
  77. ${PROJECT_SOURCE_DIR}/test/hash_tables_unittest.cc
  78. ${PROJECT_SOURCE_DIR}/test/linked_list_unittest.cc
  79. ${PROJECT_SOURCE_DIR}/test/mru_cache_unittest.cc
  80. ${PROJECT_SOURCE_DIR}/test/small_map_unittest.cc
  81. ${PROJECT_SOURCE_DIR}/test/stack_container_unittest.cc
  82. ${PROJECT_SOURCE_DIR}/test/cpu_unittest.cc
  83. ${PROJECT_SOURCE_DIR}/test/crash_logging_unittest.cc
  84. ${PROJECT_SOURCE_DIR}/test/leak_tracker_unittest.cc
  85. ${PROJECT_SOURCE_DIR}/test/stack_trace_unittest.cc
  86. ${PROJECT_SOURCE_DIR}/test/environment_unittest.cc
  87. ${PROJECT_SOURCE_DIR}/test/file_util_unittest.cc
  88. ${PROJECT_SOURCE_DIR}/test/dir_reader_posix_unittest.cc
  89. ${PROJECT_SOURCE_DIR}/test/file_path_unittest.cc
  90. ${PROJECT_SOURCE_DIR}/test/file_unittest.cc
  91. ${PROJECT_SOURCE_DIR}/test/scoped_temp_dir_unittest.cc
  92. ${PROJECT_SOURCE_DIR}/test/guid_unittest.cc
  93. ${PROJECT_SOURCE_DIR}/test/hash_unittest.cc
  94. ${PROJECT_SOURCE_DIR}/test/lazy_instance_unittest.cc
  95. ${PROJECT_SOURCE_DIR}/test/aligned_memory_unittest.cc
  96. ${PROJECT_SOURCE_DIR}/test/linked_ptr_unittest.cc
  97. ${PROJECT_SOURCE_DIR}/test/ref_counted_memory_unittest.cc
  98. ${PROJECT_SOURCE_DIR}/test/ref_counted_unittest.cc
  99. ${PROJECT_SOURCE_DIR}/test/scoped_ptr_unittest.cc
  100. ${PROJECT_SOURCE_DIR}/test/scoped_vector_unittest.cc
  101. ${PROJECT_SOURCE_DIR}/test/singleton_unittest.cc
  102. ${PROJECT_SOURCE_DIR}/test/weak_ptr_unittest.cc
  103. ${PROJECT_SOURCE_DIR}/test/observer_list_unittest.cc
  104. ${PROJECT_SOURCE_DIR}/test/file_descriptor_shuffle_unittest.cc
  105. ${PROJECT_SOURCE_DIR}/test/rand_util_unittest.cc
  106. ${PROJECT_SOURCE_DIR}/test/safe_numerics_unittest.cc
  107. ${PROJECT_SOURCE_DIR}/test/scoped_clear_errno_unittest.cc
  108. ${PROJECT_SOURCE_DIR}/test/scoped_generic_unittest.cc
  109. ${PROJECT_SOURCE_DIR}/test/security_unittest.cc
  110. ${PROJECT_SOURCE_DIR}/test/sha1_unittest.cc
  111. ${PROJECT_SOURCE_DIR}/test/stl_util_unittest.cc
  112. ${PROJECT_SOURCE_DIR}/test/nullable_string16_unittest.cc
  113. ${PROJECT_SOURCE_DIR}/test/safe_sprintf_unittest.cc
  114. ${PROJECT_SOURCE_DIR}/test/string16_unittest.cc
  115. ${PROJECT_SOURCE_DIR}/test/stringprintf_unittest.cc
  116. ${PROJECT_SOURCE_DIR}/test/string_number_conversions_unittest.cc
  117. ${PROJECT_SOURCE_DIR}/test/string_piece_unittest.cc
  118. ${PROJECT_SOURCE_DIR}/test/string_split_unittest.cc
  119. ${PROJECT_SOURCE_DIR}/test/string_tokenizer_unittest.cc
  120. ${PROJECT_SOURCE_DIR}/test/string_util_unittest.cc
  121. ${PROJECT_SOURCE_DIR}/test/stringize_macros_unittest.cc
  122. ${PROJECT_SOURCE_DIR}/test/sys_string_conversions_unittest.cc
  123. ${PROJECT_SOURCE_DIR}/test/utf_offset_string_conversions_unittest.cc
  124. ${PROJECT_SOURCE_DIR}/test/utf_string_conversions_unittest.cc
  125. ${PROJECT_SOURCE_DIR}/test/cancellation_flag_unittest.cc
  126. ${PROJECT_SOURCE_DIR}/test/condition_variable_unittest.cc
  127. ${PROJECT_SOURCE_DIR}/test/lock_unittest.cc
  128. ${PROJECT_SOURCE_DIR}/test/waitable_event_unittest.cc
  129. ${PROJECT_SOURCE_DIR}/test/type_traits_unittest.cc
  130. ${PROJECT_SOURCE_DIR}/test/non_thread_safe_unittest.cc
  131. ${PROJECT_SOURCE_DIR}/test/platform_thread_unittest.cc
  132. ${PROJECT_SOURCE_DIR}/test/simple_thread_unittest.cc
  133. ${PROJECT_SOURCE_DIR}/test/thread_checker_unittest.cc
  134. ${PROJECT_SOURCE_DIR}/test/thread_collision_warner_unittest.cc
  135. ${PROJECT_SOURCE_DIR}/test/thread_id_name_manager_unittest.cc
  136. ${PROJECT_SOURCE_DIR}/test/thread_local_storage_unittest.cc
  137. ${PROJECT_SOURCE_DIR}/test/thread_local_unittest.cc
  138. ${PROJECT_SOURCE_DIR}/test/watchdog_unittest.cc
  139. ${PROJECT_SOURCE_DIR}/test/time_unittest.cc
  140. ${PROJECT_SOURCE_DIR}/test/version_unittest.cc
  141. ${PROJECT_SOURCE_DIR}/test/logging_unittest.cc
  142. ${PROJECT_SOURCE_DIR}/test/cacheline_unittest.cpp
  143. ${PROJECT_SOURCE_DIR}/test/class_name_unittest.cpp
  144. ${PROJECT_SOURCE_DIR}/test/endpoint_unittest.cpp
  145. ${PROJECT_SOURCE_DIR}/test/unique_ptr_unittest.cpp
  146. ${PROJECT_SOURCE_DIR}/test/errno_unittest.cpp
  147. ${PROJECT_SOURCE_DIR}/test/fd_guard_unittest.cpp
  148. ${PROJECT_SOURCE_DIR}/test/file_watcher_unittest.cpp
  149. ${PROJECT_SOURCE_DIR}/test/find_cstr_unittest.cpp
  150. ${PROJECT_SOURCE_DIR}/test/scoped_lock_unittest.cpp
  151. ${PROJECT_SOURCE_DIR}/test/status_unittest.cpp
  152. ${PROJECT_SOURCE_DIR}/test/string_printf_unittest.cpp
  153. ${PROJECT_SOURCE_DIR}/test/string_splitter_unittest.cpp
  154. ${PROJECT_SOURCE_DIR}/test/synchronous_event_unittest.cpp
  155. ${PROJECT_SOURCE_DIR}/test/temp_file_unittest.cpp
  156. ${PROJECT_SOURCE_DIR}/test/baidu_thread_local_unittest.cpp
  157. ${PROJECT_SOURCE_DIR}/test/baidu_time_unittest.cpp
  158. ${PROJECT_SOURCE_DIR}/test/flat_map_unittest.cpp
  159. ${PROJECT_SOURCE_DIR}/test/crc32c_unittest.cc
  160. ${PROJECT_SOURCE_DIR}/test/iobuf_unittest.cpp
  161. ${PROJECT_SOURCE_DIR}/test/object_pool_unittest.cpp
  162. ${PROJECT_SOURCE_DIR}/test/test_switches.cc
  163. ${PROJECT_SOURCE_DIR}/test/scoped_locale.cc
  164. ${PROJECT_SOURCE_DIR}/test/butil_unittest_main.cpp
  165. ${PROJECT_SOURCE_DIR}/test/butil_unittest_main.cpp
  166. )
  167. if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
  168. SET(TEST_BUTIL_SOURCES ${TEST_BUTIL_SOURCES}
  169. ${PROJECT_SOURCE_DIR}/test/proc_maps_linux_unittest.cc
  170. ${PROJECT_SOURCE_DIR}/test/test_file_util_linux.cc)
  171. endif()
  172. # bthread_* functions are used in logging.cc, and they need to be marked as
  173. # weak symbols explicitly in Darwin system.
  174. if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
  175. set(DYNAMIC_LIB ${DYNAMIC_LIB}
  176. "-Wl,-U,_bthread_getspecific"
  177. "-Wl,-U,_bthread_setspecific"
  178. "-Wl,-U,_bthread_key_create")
  179. endif()
  180. add_library(BUTIL_DEBUG_LIB OBJECT ${BUTIL_SOURCES})
  181. add_library(SOURCES_DEBUG_LIB OBJECT ${SOURCES})
  182. add_dependencies(SOURCES_DEBUG_LIB PROTO_LIB)
  183. # shared library needs POSITION_INDEPENDENT_CODE
  184. set_property(TARGET ${BUTIL_DEBUG_LIB} PROPERTY POSITION_INDEPENDENT_CODE 1)
  185. set_property(TARGET ${SOURCES_DEBUG_LIB} PROPERTY POSITION_INDEPENDENT_CODE 1)
  186. add_library(brpc-shared-debug SHARED $<TARGET_OBJECTS:BUTIL_DEBUG_LIB>
  187. $<TARGET_OBJECTS:SOURCES_DEBUG_LIB>
  188. $<TARGET_OBJECTS:PROTO_LIB>)
  189. # change the debug lib output dir to be different from the release output
  190. set_target_properties(brpc-shared-debug PROPERTIES
  191. LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/test)
  192. target_link_libraries(brpc-shared-debug ${DYNAMIC_LIB})
  193. if(BRPC_WITH_GLOG)
  194. target_link_libraries(brpc-shared-debug ${GLOG_LIB})
  195. endif()
  196. # test_butil
  197. add_executable(test_butil ${TEST_BUTIL_SOURCES}
  198. ${CMAKE_CURRENT_BINARY_DIR}/iobuf.pb.cc)
  199. target_link_libraries(test_butil brpc-shared-debug
  200. gtest
  201. ${GPERFTOOLS_LIBRARIES})
  202. add_test(NAME test_butil COMMAND test_butil)
  203. # test_bvar
  204. # -DBVAR_NOT_LINK_DEFAULT_VARIABLES not work for gcc >= 5.0, just remove the file to prevent linking into unit tests
  205. list(REMOVE_ITEM BVAR_SOURCES ${PROJECT_SOURCE_DIR}/src/bvar/default_variables.cpp)
  206. add_library(BVAR_DEBUG_LIB OBJECT ${BVAR_SOURCES})
  207. file(GLOB TEST_BVAR_SRCS "bvar_*_unittest.cpp")
  208. add_executable(test_bvar ${TEST_BVAR_SRCS}
  209. $<TARGET_OBJECTS:BVAR_DEBUG_LIB>
  210. $<TARGET_OBJECTS:BUTIL_DEBUG_LIB>)
  211. target_link_libraries(test_bvar gtest
  212. ${GPERFTOOLS_LIBRARIES}
  213. ${DYNAMIC_LIB})
  214. add_test(NAME test_bvar COMMAND test_bvar)
  215. # bthread tests
  216. file(GLOB BTHREAD_UNITTESTS "bthread*unittest.cpp")
  217. foreach(BTHREAD_UT ${BTHREAD_UNITTESTS})
  218. get_filename_component(BTHREAD_UT_WE ${BTHREAD_UT} NAME_WE)
  219. add_executable(${BTHREAD_UT_WE} ${BTHREAD_UT})
  220. target_link_libraries(${BTHREAD_UT_WE} gtest_main
  221. brpc-shared-debug
  222. ${GPERFTOOLS_LIBRARIES})
  223. add_test(NAME ${BTHREAD_UT_WE} COMMAND ${BTHREAD_UT_WE})
  224. endforeach()
  225. # brpc tests
  226. file(GLOB BRPC_UNITTESTS "brpc_*_unittest.cpp")
  227. foreach(BRPC_UT ${BRPC_UNITTESTS})
  228. get_filename_component(BRPC_UT_WE ${BRPC_UT} NAME_WE)
  229. add_executable(${BRPC_UT_WE} ${BRPC_UT} $<TARGET_OBJECTS:TEST_PROTO_LIB>)
  230. target_link_libraries(${BRPC_UT_WE} brpc-shared-debug
  231. gtest_main
  232. ${GPERFTOOLS_LIBRARIES})
  233. add_test(NAME ${BRPC_UT_WE} COMMAND ${BRPC_UT_WE})
  234. endforeach()