CMakeLists.txt 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. cmake_minimum_required(VERSION 3.6)
  2. set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "build type")
  3. project(srpc_benchmark
  4. LANGUAGES C CXX
  5. )
  6. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR})
  7. if (NOT "$ENV{LIBRARY_PATH}" STREQUAL "")
  8. string(REPLACE ":" ";" LIBRARY_PATH $ENV{LIBRARY_PATH})
  9. set(CMAKE_SYSTEM_LIBRARY_PATH ${LIBRARY_PATH};${CMAKE_SYSTEM_LIBRARY_PATH})
  10. endif ()
  11. if (NOT "$ENV{CPLUS_INCLUDE_PATH}" STREQUAL "")
  12. string(REPLACE ":" ";" INCLUDE_PATH $ENV{CPLUS_INCLUDE_PATH})
  13. set(CMAKE_SYSTEM_INCLUDE_PATH ${INCLUDE_PATH};${CMAKE_SYSTEM_INCLUDE_PATH})
  14. endif ()
  15. find_package(OpenSSL REQUIRED)
  16. set(protobuf_MODULE_COMPATIBLE ON CACHE BOOL "")
  17. if (WIN32)
  18. find_package(Protobuf CONFIG REQUIRED)
  19. find_library(LZ4_LIBRARY NAMES lz4)
  20. find_package(Snappy CONFIG REQUIRED)
  21. else ()
  22. find_package(Protobuf REQUIRED)
  23. endif ()
  24. if (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../third_party/lz4/lib/lz4.h")
  25. set(LZ4_LIB lz4)
  26. endif ()
  27. if (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../third_party/snappy/cmake")
  28. set(SNAPPY_LIB snappy)
  29. endif ()
  30. if (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/workflow/workflow-config.cmake.in")
  31. find_package(Workflow REQUIRED CONFIG HINTS ../workflow)
  32. endif ()
  33. find_package(srpc REQUIRED CONFIG HINTS ..)
  34. include_directories(
  35. ${OPENSSL_INCLUDE_DIR}
  36. ${CMAKE_CURRENT_BINARY_DIR}
  37. ${Protobuf_INCLUDE_DIR}
  38. ${WORKFLOW_INCLUDE_DIR}
  39. ${SRPC_INCLUDE_DIR}
  40. )
  41. if (WIN32)
  42. link_directories(${SRPC_LIB_DIR} ${WORKFLOW_LIB_DIR} ${Protobuf_LIB_DIR})
  43. set(SRPC_GEN_PROGRAM ${SRPC_BIN_DIR}/Debug/srpc_generator.exe)
  44. else ()
  45. get_filename_component(Protobuf_LIB_DIR ${Protobuf_LIBRARY} DIRECTORY)
  46. link_directories(${SRPC_LIB_DIR} ${WORKFLOW_LIB_DIR} ${Protobuf_LIB_DIR})
  47. set(SRPC_GEN_PROGRAM ${SRPC_BIN_DIR}/srpc_generator)
  48. endif ()
  49. protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS benchmark_pb.proto)
  50. add_custom_target(
  51. BENCHMARK_GEN ALL
  52. COMMAND ${SRPC_GEN_PROGRAM} ${PROJECT_SOURCE_DIR}/benchmark_pb.proto ${PROJECT_SOURCE_DIR}
  53. COMMAND ${SRPC_GEN_PROGRAM} ${PROJECT_SOURCE_DIR}/benchmark_thrift.thrift ${PROJECT_SOURCE_DIR}
  54. COMMENT "srpc generator..."
  55. )
  56. if (WIN32)
  57. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP /wd4200")
  58. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP /wd4200 /Zc:__cplusplus /std:c++14")
  59. else ()
  60. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -fPIC -pipe -std=gnu90")
  61. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fPIC -pipe -std=c++11 -fno-exceptions")
  62. endif ()
  63. if (APPLE)
  64. set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ${CMAKE_FIND_LIBRARY_SUFFIXES})
  65. find_library(Workflow_LIB workflow HINTS ../workflow/_lib)
  66. find_library(Srpc_LIB srpc HINTS ../_lib)
  67. set(SRPC_LIB
  68. ${Srpc_LIB}
  69. ${Workflow_LIB}
  70. pthread
  71. OpenSSL::SSL
  72. OpenSSL::Crypto
  73. protobuf
  74. z
  75. )
  76. elseif (WIN32)
  77. set(SRPC_LIB
  78. srpc
  79. workflow
  80. ws2_32
  81. wsock32
  82. OpenSSL::SSL
  83. OpenSSL::Crypto
  84. protobuf::libprotobuf
  85. ZLIB::ZLIB
  86. Snappy::snappy
  87. ${LZ4_LIBRARY}
  88. )
  89. else ()
  90. set(SRPC_LIB
  91. srpc
  92. workflow
  93. pthread
  94. OpenSSL::SSL
  95. OpenSSL::Crypto
  96. protobuf
  97. z
  98. ${SNAPPY_LIB}
  99. ${LZ4_LIB}
  100. )
  101. endif ()
  102. add_executable(server server.cc ${PROTO_SRCS} ${PROTO_HDRS})
  103. target_link_libraries(server ${SRPC_LIB})
  104. add_dependencies(server BENCHMARK_GEN)
  105. add_executable(client client.cc ${PROTO_SRCS} ${PROTO_HDRS})
  106. target_link_libraries(client ${SRPC_LIB})
  107. add_dependencies(client BENCHMARK_GEN)
  108. add_executable(client_cdf client_cdf.cc ${PROTO_SRCS} ${PROTO_HDRS})
  109. target_link_libraries(client_cdf ${SRPC_LIB})
  110. add_dependencies(client_cdf BENCHMARK_GEN)
  111. add_executable(proxy proxy.cc ${PROTO_SRCS} ${PROTO_HDRS})
  112. target_link_libraries(proxy ${SRPC_LIB})
  113. add_dependencies(proxy BENCHMARK_GEN)