CMakeLists.txt 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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. 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. else ()
  20. find_package(Protobuf REQUIRED)
  21. endif ()
  22. find_package(Workflow REQUIRED CONFIG HINTS ../workflow)
  23. find_package(ZLIB REQUIRED)
  24. #if (APPLE)
  25. # if (WORKFLOW_INCLUDE_DIR)
  26. # set (WORKFLOW_INCLUDE_DIR ${Workflow_DIR}/_include)
  27. # set (WORKFLOW_LIB_DIR ${Workflow_DIR}/_lib)
  28. # else ()
  29. # find_package(Workflow REQUIRED)
  30. # endif ()
  31. #else ()
  32. # find_package(Workflow REQUIRED)
  33. #endif()
  34. find_package(srpc REQUIRED CONFIG HINTS ..)
  35. include_directories(
  36. ${OPENSSL_INCLUDE_DIR}
  37. ${CMAKE_CURRENT_BINARY_DIR}
  38. ${Protobuf_INCLUDE_DIR}
  39. ${WORKFLOW_INCLUDE_DIR}
  40. ${SRPC_INCLUDE_DIR}
  41. )
  42. if (WIN32)
  43. link_directories(${SRPC_LIB_DIR} ${WORKFLOW_LIB_DIR} ${Protobuf_LIB_DIR})
  44. set(SRPC_GEN_PROGRAM ${SRPC_BIN_DIR}/Debug/srpc_generator.exe)
  45. else ()
  46. get_filename_component(Protobuf_LIB_DIR ${Protobuf_LIBRARY} DIRECTORY)
  47. link_directories(${SRPC_LIB_DIR} ${WORKFLOW_LIB_DIR} ${Protobuf_LIB_DIR})
  48. set(SRPC_GEN_PROGRAM ${SRPC_BIN_DIR}/srpc_generator)
  49. endif ()
  50. protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS echo_pb.proto)
  51. protobuf_generate_cpp(HELLOWORLD_SRCS HELLOWORLD_HDRS helloworld.proto)
  52. add_custom_target(
  53. TURORIAL_GEN ALL
  54. COMMAND ${SRPC_GEN_PROGRAM} protobuf ${PROJECT_SOURCE_DIR}/echo_pb.proto ${PROJECT_SOURCE_DIR}
  55. COMMAND ${SRPC_GEN_PROGRAM} thrift ${PROJECT_SOURCE_DIR}/echo_thrift.thrift ${PROJECT_SOURCE_DIR}
  56. COMMAND ${SRPC_GEN_PROGRAM} protobuf ${PROJECT_SOURCE_DIR}/helloworld.proto ${PROJECT_SOURCE_DIR}
  57. COMMENT "sprc generator..."
  58. )
  59. if (WIN32)
  60. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP /wd4200")
  61. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP /wd4200 /Zc:__cplusplus /std:c++14")
  62. else ()
  63. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -fPIC -pipe -std=gnu90")
  64. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fPIC -pipe -std=c++11 -fno-exceptions")
  65. endif ()
  66. set(TUTORIAL_PB_LIST
  67. tutorial-01-srpc_pb_server
  68. tutorial-02-srpc_pb_client
  69. tutorial-05-brpc_pb_server
  70. tutorial-06-brpc_pb_client
  71. tutorial-09-client_task
  72. tutorial-10-server_async
  73. )
  74. if (APPLE)
  75. set(SRPC_LIB srpc workflow pthread OpenSSL::SSL OpenSSL::Crypto protobuf z)
  76. elseif (WIN32)
  77. set(SRPC_LIB srpc workflow ws2_32 wsock32 OpenSSL::SSL OpenSSL::Crypto protobuf::libprotobuf ZLIB::ZLIB)
  78. else ()
  79. set(SRPC_LIB srpc)
  80. endif ()
  81. foreach(src ${TUTORIAL_PB_LIST})
  82. string(REPLACE "-" ";" arr ${src})
  83. list(GET arr -1 bin_name)
  84. add_executable(${bin_name} ${src}.cc ${PROTO_SRCS} ${PROTO_HDRS})
  85. target_link_libraries(${bin_name} ${SRPC_LIB})
  86. add_dependencies(${bin_name} TURORIAL_GEN)
  87. endforeach()
  88. set(TUTORIAL_THRIFT_LIST
  89. tutorial-03-srpc_thrift_server
  90. tutorial-04-srpc_thrift_client
  91. tutorial-07-thrift_thrift_server
  92. tutorial-08-thrift_thrift_client
  93. )
  94. foreach(src ${TUTORIAL_THRIFT_LIST})
  95. string(REPLACE "-" ";" arr ${src})
  96. list(GET arr -1 bin_name)
  97. add_executable(${bin_name} ${src}.cc)
  98. target_link_libraries(${bin_name} ${SRPC_LIB})
  99. add_dependencies(${bin_name} TURORIAL_GEN)
  100. endforeach()
  101. set(TUTORIAL_HELLOWORLD_LIST
  102. tutorial-11-trpc_pb_server
  103. tutorial-12-trpc_pb_client
  104. tutorial-13-trpc_http_server
  105. tutorial-14-trpc_http_client
  106. )
  107. foreach(src ${TUTORIAL_HELLOWORLD_LIST})
  108. string(REPLACE "-" ";" arr ${src})
  109. list(GET arr -1 bin_name)
  110. add_executable(${bin_name} ${src}.cc ${HELLOWORLD_SRCS} ${HELLOWORLD_HDRS})
  111. target_link_libraries(${bin_name} ${SRPC_LIB})
  112. add_dependencies(${bin_name} TURORIAL_GEN)
  113. endforeach()