CMakeLists.txt 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. cmake_minimum_required(VERSION 3.6)
  2. project(%s LANGUAGES CXX)
  3. set(CMAKE_CXX_STANDARD 11)
  4. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  5. set(CMAKE_BUILD_TYPE RelWithDebInfo)
  6. set(Protobuf_ERROR_MSG "ERROR: Failed to find protobuf. Some suggestions for installation.")
  7. set(Protobuf_ERROR_MSG_LINUX "${Protobuf_ERROR_MSG}
  8. For Debian / Ubuntu ...:
  9. sudo apt-get update
  10. sudo apt-get install -y libprotobuf-dev protobuf-compiler
  11. For RedHat / Fedora / CentOS ...:
  12. sudo yum makecache
  13. sudo yum install -y protobuf-devel protobuf-compiler")
  14. set(Protobuf_ERROR_MSG_MACOS "${Protobuf_ERROR_MSG}
  15. For MacOS :
  16. sudo brew update
  17. sudo brew install protobuf protobuf-c")
  18. # Find all the dependencies
  19. find_package(OpenSSL REQUIRED)
  20. set(Workflow_DIR "%s")
  21. find_package(Workflow REQUIRED CONFIG HINTS ${Workflow_DIR})
  22. set(Srpc_DIR "%s")
  23. find_package(srpc REQUIRED CONFIG HINTS ${Srpc_DIR})
  24. find_package(Protobuf)
  25. if ("x${Protobuf_DIR}" STREQUAL "xProtobuf_DIR-NOTFOUND")
  26. if (APPLE)
  27. message (FATAL_ERROR ${Protobuf_ERROR_MSG_MACOS})
  28. else ()
  29. message (FATAL_ERROR ${Protobuf_ERROR_MSG_LINUX})
  30. endif ()
  31. endif ()
  32. get_filename_component(Protobuf_LIB_DIR ${Protobuf_LIBRARY} DIRECTORY)
  33. if (NOT EXISTS "${Srpc_DIR}/third_party/lz4/lib/lz4.h")
  34. set(LZ4_LIB lz4)
  35. endif ()
  36. if (NOT EXISTS "${Srpc_DIR}/third_party/snappy/cmake")
  37. set(SNAPPY_LIB snappy)
  38. endif ()
  39. find_package(ZLIB REQUIRED)
  40. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR})
  41. # Generate idl code: xx.srpc.h xx.pb.h xx.pb.cc xx.thrift.h
  42. set(IDL_FILE %s)
  43. set(SRPC_GEN_PROGRAM ${SRPC_BIN_DIR}/srpc_generator) %s
  44. add_custom_target(SRPC_GEN ALL
  45. COMMAND ${SRPC_GEN_PROGRAM} ${PROJECT_SOURCE_DIR}/${IDL_FILE} ${PROJECT_SOURCE_DIR} -s
  46. COMMENT "srpc generator..."
  47. )
  48. # Prefer to static link first
  49. set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ${CMAKE_FIND_LIBRARY_SUFFIXES})
  50. find_library(Workflow_LIB workflow HINTS ${Workflow_DIR}/_lib)
  51. find_library(Srpc_LIB srpc HINTS ${Srpc_DIR}/_lib)
  52. # Set all the libraries here
  53. set(LIB ${Srpc_LIB} ${Workflow_LIB} pthread OpenSSL::SSL OpenSSL::Crypto
  54. protobuf z ${SNAPPY_LIB} ${LZ4_LIB})
  55. # Add all the common code here
  56. set(COMMON_CODE config/config.cc config/Json.cc ${PROTO_SRCS})
  57. # Add header directories and library directories here
  58. include_directories(${OPENSSL_INCLUDE_DIR} ${Protobuf_INCLUDE_DIR}
  59. ${WORKFLOW_INCLUDE_DIR} ${SRPC_INCLUDE_DIR}
  60. ${PROJECT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
  61. link_directories(${OPENSSL_LINK_DIR} ${Protobuf_LIB_DIR}
  62. ${WORKFLOW_LIB_DIR} ${SRPC_LIB_DIR})
  63. # Build executable outputs
  64. set(PROJECT_OUTPUT server client%s)
  65. foreach(output ${PROJECT_OUTPUT})
  66. add_executable(${output} ${output}_main.cc ${COMMON_CODE})
  67. target_link_libraries(${output} ${LIB})
  68. endforeach()