CMakeLists.txt 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. cmake_minimum_required(VERSION 3.6)
  2. set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "build type")
  3. project(srpc_tutorial
  4. LANGUAGES C CXX
  5. )
  6. ###Options
  7. if (WIN32)
  8. option(SRPC_TUTORIAL_BUILD_STATIC_RUNTIME "Use static runtime" ON)
  9. endif ()
  10. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR})
  11. if (NOT "$ENV{LIBRARY_PATH}" STREQUAL "")
  12. string(REPLACE ":" ";" LIBRARY_PATH $ENV{LIBRARY_PATH})
  13. set(CMAKE_SYSTEM_LIBRARY_PATH ${LIBRARY_PATH};${CMAKE_SYSTEM_LIBRARY_PATH})
  14. endif ()
  15. if (NOT "$ENV{CPLUS_INCLUDE_PATH}" STREQUAL "")
  16. string(REPLACE ":" ";" INCLUDE_PATH $ENV{CPLUS_INCLUDE_PATH})
  17. set(CMAKE_SYSTEM_INCLUDE_PATH ${INCLUDE_PATH};${CMAKE_SYSTEM_INCLUDE_PATH})
  18. endif ()
  19. find_package(OpenSSL REQUIRED)
  20. find_package(srpc REQUIRED CONFIG HINTS ..)
  21. set(protobuf_MODULE_COMPATIBLE ON CACHE BOOL "")
  22. if (WIN32)
  23. find_package(Protobuf CONFIG REQUIRED)
  24. find_library(LZ4_LIBRARY NAMES lz4)
  25. if(LZ4_LIBRARY STREQUAL "LZ4_LIBRARY-NOTFOUND")
  26. find_package(lz4)
  27. if(lz4_FOUND)
  28. set(LZ4_LIBRARY ${lz4_LIBRARIES})
  29. endif()
  30. endif()
  31. find_package(Snappy CONFIG REQUIRED)
  32. else ()
  33. find_package(Protobuf REQUIRED)
  34. endif ()
  35. if (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../third_party/lz4/lib/lz4.h")
  36. set(LZ4_LIB lz4)
  37. endif ()
  38. if (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../third_party/snappy/cmake")
  39. set(SNAPPY_LIB snappy)
  40. endif ()
  41. if (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/workflow/workflow-config.cmake.in")
  42. find_package(Workflow REQUIRED CONFIG HINTS ../workflow)
  43. endif ()
  44. find_package(ZLIB REQUIRED)
  45. include_directories(
  46. ${OPENSSL_INCLUDE_DIR}
  47. ${CMAKE_CURRENT_BINARY_DIR}
  48. ${Protobuf_INCLUDE_DIR}
  49. ${WORKFLOW_INCLUDE_DIR}
  50. ${SRPC_INCLUDE_DIR}
  51. )
  52. if (WIN32)
  53. link_directories(${SRPC_LIB_DIR} ${WORKFLOW_LIB_DIR} ${Protobuf_LIB_DIR})
  54. set(SRPC_GEN_PROGRAM ${SRPC_BIN_DIR}/Debug/srpc_generator.exe)
  55. else ()
  56. get_filename_component(Protobuf_LIB_DIR ${Protobuf_LIBRARY} DIRECTORY)
  57. link_directories(${SRPC_LIB_DIR} ${WORKFLOW_LIB_DIR} ${Protobuf_LIB_DIR})
  58. set(SRPC_GEN_PROGRAM ${SRPC_BIN_DIR}/srpc_generator)
  59. endif ()
  60. protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS echo_pb.proto)
  61. protobuf_generate_cpp(HELLOWORLD_SRCS HELLOWORLD_HDRS helloworld.proto)
  62. add_custom_target(
  63. TURORIAL_GEN ALL
  64. COMMAND ${SRPC_GEN_PROGRAM} ${PROJECT_SOURCE_DIR}/echo_pb.proto ${PROJECT_SOURCE_DIR}
  65. COMMAND ${SRPC_GEN_PROGRAM} ${PROJECT_SOURCE_DIR}/echo_thrift.thrift ${PROJECT_SOURCE_DIR}
  66. COMMAND ${SRPC_GEN_PROGRAM} protobuf ${PROJECT_SOURCE_DIR}/helloworld.proto ${PROJECT_SOURCE_DIR}
  67. COMMENT "srpc generator..."
  68. )
  69. if (WIN32)
  70. if (SRPC_TUTORIAL_BUILD_STATIC_RUNTIME)
  71. set(CompilerFlags
  72. CMAKE_CXX_FLAGS
  73. CMAKE_CXX_FLAGS_DEBUG
  74. CMAKE_CXX_FLAGS_RELEASE
  75. CMAKE_CXX_FLAGS_MINSIZEREL
  76. CMAKE_C_FLAGS
  77. CMAKE_C_FLAGS_DEBUG
  78. CMAKE_C_FLAGS_RELEASE
  79. CMAKE_C_FLAGS_MINSIZEREL
  80. )
  81. foreach(CompilerFlag ${CompilerFlags})
  82. string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}")
  83. endforeach ()
  84. endif ()
  85. endif ()
  86. if (WIN32)
  87. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP /wd4200")
  88. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP /wd4200 /Zc:__cplusplus /std:c++14")
  89. else ()
  90. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -fPIC -pipe -std=gnu90")
  91. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fPIC -pipe -std=c++11 -fno-exceptions")
  92. endif ()
  93. set(TUTORIAL_PB_LIST
  94. tutorial-01-srpc_pb_server
  95. tutorial-02-srpc_pb_client
  96. tutorial-05-brpc_pb_server
  97. tutorial-06-brpc_pb_client
  98. tutorial-09-client_task
  99. tutorial-10-server_async
  100. tutorial-15-srpc_pb_proxy
  101. tutorial-16-server_with_metrics
  102. )
  103. if (APPLE)
  104. set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ${CMAKE_FIND_LIBRARY_SUFFIXES})
  105. find_library(Workflow_LIB workflow HINTS ../workflow/_lib)
  106. find_library(Srpc_LIB srpc HINTS ../_lib)
  107. set(SRPC_LIB
  108. ${Srpc_LIB}
  109. ${Workflow_LIB}
  110. pthread
  111. OpenSSL::SSL
  112. OpenSSL::Crypto
  113. protobuf
  114. z
  115. )
  116. elseif (WIN32)
  117. set(SRPC_LIB
  118. srpc
  119. workflow
  120. ws2_32
  121. wsock32
  122. OpenSSL::SSL
  123. OpenSSL::Crypto
  124. protobuf::libprotobuf
  125. ZLIB::ZLIB
  126. Snappy::snappy
  127. ${LZ4_LIBRARY}
  128. )
  129. else ()
  130. set(SRPC_LIB
  131. srpc
  132. workflow
  133. pthread
  134. OpenSSL::SSL
  135. OpenSSL::Crypto
  136. protobuf
  137. z
  138. ${SNAPPY_LIB}
  139. ${LZ4_LIB}
  140. )
  141. endif ()
  142. foreach(src ${TUTORIAL_PB_LIST})
  143. string(REPLACE "-" ";" arr ${src})
  144. list(GET arr -1 bin_name)
  145. add_executable(${bin_name} ${src}.cc ${PROTO_SRCS} ${PROTO_HDRS})
  146. target_link_libraries(${bin_name} ${SRPC_LIB})
  147. add_dependencies(${bin_name} TURORIAL_GEN)
  148. endforeach()
  149. set(TUTORIAL_THRIFT_LIST
  150. tutorial-03-srpc_thrift_server
  151. tutorial-04-srpc_thrift_client
  152. tutorial-07-thrift_thrift_server
  153. tutorial-08-thrift_thrift_client
  154. )
  155. foreach(src ${TUTORIAL_THRIFT_LIST})
  156. string(REPLACE "-" ";" arr ${src})
  157. list(GET arr -1 bin_name)
  158. add_executable(${bin_name} ${src}.cc)
  159. target_link_libraries(${bin_name} ${SRPC_LIB})
  160. add_dependencies(${bin_name} TURORIAL_GEN)
  161. endforeach()
  162. set(TUTORIAL_HELLOWORLD_LIST
  163. tutorial-11-trpc_pb_server
  164. tutorial-12-trpc_pb_client
  165. tutorial-13-trpc_http_server
  166. tutorial-14-trpc_http_client
  167. )
  168. foreach(src ${TUTORIAL_HELLOWORLD_LIST})
  169. string(REPLACE "-" ";" arr ${src})
  170. list(GET arr -1 bin_name)
  171. add_executable(${bin_name} ${src}.cc ${HELLOWORLD_SRCS} ${HELLOWORLD_HDRS})
  172. target_link_libraries(${bin_name} ${SRPC_LIB})
  173. add_dependencies(${bin_name} TURORIAL_GEN)
  174. endforeach()
  175. if (NOT WIN32)
  176. set(TUTORIAL_HTTP_LIST
  177. tutorial-17-http_server
  178. tutorial-18-http_client
  179. )
  180. foreach(src ${TUTORIAL_HTTP_LIST})
  181. string(REPLACE "-" ";" arr ${src})
  182. list(GET arr -1 bin_name)
  183. add_executable(${bin_name} ${src}.cc)
  184. target_link_libraries(${bin_name} ${SRPC_LIB})
  185. add_dependencies(${bin_name} TURORIAL_GEN)
  186. endforeach()
  187. endif ()