CMakeLists.txt 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. cmake_minimum_required(VERSION 3.6)
  2. if (NOT "$ENV{LIBRARY_PATH}" STREQUAL "")
  3. string(REPLACE ":" ";" LIBRARY_PATH $ENV{LIBRARY_PATH})
  4. set(CMAKE_SYSTEM_LIBRARY_PATH ${LIBRARY_PATH};${CMAKE_SYSTEM_LIBRARY_PATH})
  5. endif ()
  6. if (NOT "$ENV{CPLUS_INCLUDE_PATH}" STREQUAL "")
  7. string(REPLACE ":" ";" INCLUDE_PATH $ENV{CPLUS_INCLUDE_PATH})
  8. set(CMAKE_SYSTEM_INCLUDE_PATH ${INCLUDE_PATH};${CMAKE_SYSTEM_INCLUDE_PATH})
  9. endif ()
  10. find_package(OpenSSL REQUIRED)
  11. set(protobuf_MODULE_COMPATIBLE ON CACHE BOOL "")
  12. if (WIN32)
  13. find_package(Protobuf REQUIRED CONFIG)
  14. else ()
  15. find_package(Protobuf 3.5.0 REQUIRED)
  16. endif ()
  17. if (WIN32)
  18. set (HAVE_SYS_UIO_H_01 false)
  19. else ()
  20. set (HAVE_SYS_UIO_H_01 true)
  21. endif ()
  22. if (WITH_VCPKG_TOOLCHAIN)
  23. find_package(Workflow REQUIRED CONFIG)
  24. else ()
  25. # Try to find the package if workflow is nor installed, otherwise proceed with find_package()
  26. if (NOT WORKFLOW_INSTALLED)
  27. find_package(Workflow REQUIRED CONFIG HINTS ../workflow)
  28. endif ()
  29. if (NOT SNAPPY_INSTALLED)
  30. set(SNAPPY_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../third_party/snappy)
  31. configure_file(${SNAPPY_DIR}/cmake/config.h.in ${SNAPPY_DIR}/config.h)
  32. configure_file(${SNAPPY_DIR}/snappy-stubs-public.h.in ${SNAPPY_DIR}/snappy-stubs-public.h)
  33. else ()
  34. find_package(Snappy 1.1.6 REQUIRED CONFIG)
  35. set(SNAPPY_LIB snappy)
  36. endif ()
  37. if (LZ4_INSTALLED)
  38. set(LZ4_LIB lz4)
  39. endif ()
  40. endif()
  41. include_directories(
  42. ${OPENSSL_INCLUDE_DIR}
  43. ${CMAKE_CURRENT_SOURCE_DIR}
  44. ${Protobuf_INCLUDE_DIR}
  45. ${WORKFLOW_INCLUDE_DIR}
  46. ${INC_DIR}/srpc
  47. )
  48. if (WIN32)
  49. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP /wd4200")
  50. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP /wd4200 /Zc:__cplusplus /std:c++14")
  51. else ()
  52. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -fPIC -pipe -std=gnu90")
  53. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fPIC -pipe -std=c++11 -fno-exceptions")
  54. endif ()
  55. add_subdirectory(generator)
  56. set(SRC
  57. rpc_buffer.cc
  58. rpc_basic.cc
  59. rpc_global.cc
  60. )
  61. add_subdirectory(module)
  62. add_subdirectory(var)
  63. add_subdirectory(thrift)
  64. add_subdirectory(compress)
  65. add_subdirectory(message)
  66. add_dependencies(module LINK_HEADERS)
  67. add_dependencies(var LINK_HEADERS)
  68. add_dependencies(thrift LINK_HEADERS)
  69. add_dependencies(compress LINK_HEADERS)
  70. add_dependencies(message LINK_HEADERS)
  71. if (NOT WIN32)
  72. add_subdirectory(http)
  73. add_dependencies(http LINK_HEADERS)
  74. endif ()
  75. if (WIN32)
  76. add_library(
  77. ${PROJECT_NAME} STATIC
  78. ${SRC}
  79. $<TARGET_OBJECTS:module>
  80. $<TARGET_OBJECTS:var>
  81. $<TARGET_OBJECTS:thrift>
  82. $<TARGET_OBJECTS:compress>
  83. $<TARGET_OBJECTS:message>
  84. )
  85. add_dependencies(${PROJECT_NAME} LINK_HEADERS)
  86. target_compile_definitions(
  87. ${PROJECT_NAME} PRIVATE
  88. strdup=_strdup
  89. strcasecmp=_stricmp
  90. strncasecmp=_strnicmp
  91. )
  92. install(
  93. TARGETS ${PROJECT_NAME}
  94. ARCHIVE
  95. DESTINATION ${CMAKE_INSTALL_LIBDIR}
  96. COMPONENT devel
  97. )
  98. else ()
  99. set(STATIC_LIB_NAME ${PROJECT_NAME}-static)
  100. set(SHARED_LIB_NAME ${PROJECT_NAME}-shared)
  101. link_directories(${OPENSSL_LINK_DIR} ${WORKFLOW_LIB_DIR} ${Protobuf_LIB_DIR})
  102. add_library(
  103. ${STATIC_LIB_NAME} STATIC
  104. ${SRC}
  105. $<TARGET_OBJECTS:module>
  106. $<TARGET_OBJECTS:var>
  107. $<TARGET_OBJECTS:thrift>
  108. $<TARGET_OBJECTS:compress>
  109. $<TARGET_OBJECTS:message>
  110. $<TARGET_OBJECTS:http>
  111. )
  112. add_library(
  113. ${SHARED_LIB_NAME} SHARED
  114. ${SRC}
  115. $<TARGET_OBJECTS:module>
  116. $<TARGET_OBJECTS:var>
  117. $<TARGET_OBJECTS:thrift>
  118. $<TARGET_OBJECTS:compress>
  119. $<TARGET_OBJECTS:message>
  120. $<TARGET_OBJECTS:http>
  121. )
  122. target_link_libraries(${SHARED_LIB_NAME}
  123. OpenSSL::SSL
  124. OpenSSL::Crypto
  125. pthread
  126. protobuf
  127. workflow
  128. z ${SNAPPY_LIB} ${LZ4_LIB})
  129. set_target_properties(${STATIC_LIB_NAME} PROPERTIES OUTPUT_NAME ${PROJECT_NAME})
  130. set_target_properties(${SHARED_LIB_NAME} PROPERTIES OUTPUT_NAME ${PROJECT_NAME} VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR} )
  131. add_dependencies(${STATIC_LIB_NAME} LINK_HEADERS)
  132. add_dependencies(${SHARED_LIB_NAME} LINK_HEADERS)
  133. install(
  134. TARGETS ${STATIC_LIB_NAME}
  135. ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
  136. COMPONENT devel
  137. )
  138. install(
  139. TARGETS ${SHARED_LIB_NAME}
  140. LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  141. COMPONENT devel
  142. )
  143. endif ()