CMakeLists.txt 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. cmake_minimum_required(VERSION 3.6)
  2. set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "build type")
  3. project(srpc_test
  4. LANGUAGES C CXX
  5. )
  6. if (NOT "$ENV{LIBRARY_PATH}" STREQUAL "")
  7. string(REPLACE ":" ";" LIBRARY_PATH $ENV{LIBRARY_PATH})
  8. set(CMAKE_SYSTEM_LIBRARY_PATH ${LIBRARY_PATH};${CMAKE_SYSTEM_LIBRARY_PATH})
  9. endif ()
  10. if (NOT "$ENV{CPLUS_INCLUDE_PATH}" STREQUAL "")
  11. string(REPLACE ":" ";" INCLUDE_PATH $ENV{CPLUS_INCLUDE_PATH})
  12. set(CMAKE_SYSTEM_INCLUDE_PATH ${INCLUDE_PATH};${CMAKE_SYSTEM_INCLUDE_PATH})
  13. endif ()
  14. find_package(OpenSSL REQUIRED)
  15. find_package(srpc REQUIRED CONFIG HINTS ..)
  16. set(protobuf_MODULE_COMPATIBLE ON CACHE BOOL "")
  17. if (WIN32)
  18. find_package(Protobuf CONFIG REQUIRED)
  19. else ()
  20. find_package(Protobuf REQUIRED)
  21. endif ()
  22. if (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../third_party/lz4/lib/lz4.h")
  23. set(LZ4_LIB lz4)
  24. endif ()
  25. if (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../third_party/snappy/cmake")
  26. set(SNAPPY_LIB snappy)
  27. endif ()
  28. if (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/workflow/workflow-config.cmake.in")
  29. find_package(Workflow REQUIRED CONFIG HINTS ../workflow)
  30. endif ()
  31. include_directories(
  32. ${OPENSSL_INCLUDE_DIR}
  33. ${CMAKE_CURRENT_BINARY_DIR}
  34. ${Protobuf_INCLUDE_DIR}
  35. ${SRPC_INCLUDE_DIR}
  36. ${WORKFLOW_INCLUDE_DIR}
  37. )
  38. if (WIN32)
  39. link_directories(${SRPC_LIB_DIR} ${WORKFLOW_LIB_DIR} ${Protobuf_LIB_DIR})
  40. set(SRPC_GEN_PROGRAM ${SRPC_BIN_DIR}/Debug/srpc_generator.exe)
  41. else ()
  42. get_filename_component(Protobuf_LIB_DIR ${Protobuf_LIBRARY} DIRECTORY)
  43. link_directories(${SRPC_LIB_DIR} ${WORKFLOW_LIB_DIR} ${Protobuf_LIB_DIR})
  44. set(SRPC_GEN_PROGRAM ${SRPC_BIN_DIR}/srpc_generator)
  45. endif ()
  46. find_program(CMAKE_MEMORYCHECK_COMMAND valgrind)
  47. set(memcheck_command ${CMAKE_MEMORYCHECK_COMMAND} ${CMAKE_MEMORYCHECK_COMMAND_OPTIONS} --error-exitcode=1 --leak-check=full --show-leak-kinds=all)
  48. add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND})
  49. enable_testing()
  50. if (WIN32)
  51. find_package(GTest CONFIG REQUIRED)
  52. else ()
  53. find_package(GTest REQUIRED)
  54. endif ()
  55. set(CXX_STD "c++11")
  56. if (GTest_VERSION VERSION_GREATER_EQUAL "1.13.0")
  57. set(CXX_STD "c++14")
  58. else ()
  59. get_filename_component(GTEST_PATH ${GTEST_LIBRARY} DIRECTORY ABSOLUTE)
  60. execute_process(COMMAND grep Version "${GTEST_PATH}/pkgconfig/gtest.pc"
  61. RESULT_VARIABLE GTEST_VERSION_RESULT
  62. OUTPUT_VARIABLE GTEST_VERSION_OUTPUT)
  63. if (${GTEST_VERSION_RESULT} EQUAL "0")
  64. string(REPLACE " " ";" GTEST_VERSION_STR ${GTEST_VERSION_OUTPUT})
  65. list(GET GTEST_VERSION_STR 1 GTEST_VERSION)
  66. if (${GTEST_VERSION} VERSION_GREATER_EQUAL "1.13.0")
  67. set(CXX_STD "c++14")
  68. endif ()
  69. endif ()
  70. endif ()
  71. if (WIN32)
  72. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP /wd4200")
  73. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP /wd4200 /Zc:__cplusplus /std:c++14")
  74. else ()
  75. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -fPIC -pipe -std=gnu90")
  76. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fPIC -pipe -std=${CXX_STD} -fno-exceptions")
  77. endif ()
  78. protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS test_pb.proto)
  79. add_custom_target(
  80. SRPC_GEN ALL
  81. COMMAND ${SRPC_GEN_PROGRAM} ${PROJECT_SOURCE_DIR}/test_pb.proto ${PROJECT_SOURCE_DIR}
  82. COMMAND ${SRPC_GEN_PROGRAM} ${PROJECT_SOURCE_DIR}/test_thrift.thrift ${PROJECT_SOURCE_DIR}
  83. COMMENT "srpc generator..."
  84. )
  85. set(GTEST_LIB GTest::GTest GTest::Main)
  86. if (APPLE)
  87. set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ${CMAKE_FIND_LIBRARY_SUFFIXES})
  88. find_library(Workflow_LIB workflow HINTS ../workflow/_lib)
  89. find_library(Srpc_LIB srpc HINTS ../_lib)
  90. set(SRPC_LIB
  91. ${Srpc_LIB}
  92. ${Workflow_LIB}
  93. pthread
  94. OpenSSL::SSL
  95. OpenSSL::Crypto
  96. protobuf
  97. z
  98. )
  99. elseif (WIN32)
  100. set(SRPC_LIB
  101. srpc
  102. workflow
  103. ws2_32
  104. wsock32
  105. OpenSSL::SSL
  106. OpenSSL::Crypto
  107. protobuf::libprotobuf
  108. ZLIB::ZLIB
  109. Snappy::snappy
  110. ${LZ4_LIBRARY}
  111. )
  112. set(GTEST_LIB GTest::gtest GTest::gtest_main)
  113. else ()
  114. if (SNAPPY_INSTALLED)
  115. set(SNAPPY_LIB snappy)
  116. endif ()
  117. if (LZ4_INSTALLED)
  118. set(LZ4_LIB lz4)
  119. endif ()
  120. set(SRPC_LIB
  121. srpc
  122. workflow
  123. pthread
  124. OpenSSL::SSL
  125. OpenSSL::Crypto
  126. protobuf
  127. z
  128. ${SNAPPY_LIB}
  129. ${LZ4_LIB}
  130. )
  131. endif ()
  132. set(TEST_LIST unittest)
  133. set(BASIC_TEST var_unittest)
  134. set(ALL_TEST var_unittest unittest)
  135. foreach(src ${TEST_LIST})
  136. add_executable(${src} EXCLUDE_FROM_ALL ${src}.cc ${PROTO_SRCS} ${PROTO_HDRS})
  137. target_link_libraries(${src} ${SRPC_LIB} ${GTEST_LIB})
  138. add_test(${src} ${src})
  139. add_dependencies(${src} SRPC_GEN)
  140. add_dependencies(check ${src})
  141. endforeach()
  142. foreach(src ${BASIC_TEST})
  143. add_executable(${src} EXCLUDE_FROM_ALL ${src}.cc)
  144. target_link_libraries(${src} ${SRPC_LIB} ${GTEST_LIB})
  145. add_test(${src} ${src})
  146. add_dependencies(check ${src})
  147. endforeach()
  148. if (WIN32)
  149. set(memcheck nothing)
  150. elseif (NOT ${CMAKE_MEMORYCHECK_COMMAND} STREQUAL "CMAKE_MEMORYCHECK_COMMAND-NOTFOUND")
  151. foreach(src ${ALL_TEST})
  152. add_test(${src}-memory-check ${memcheck_command} ./${src})
  153. endforeach()
  154. endif ()