CMakeLists.txt 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  1. cmake_minimum_required(VERSION 3.2)
  2. project(tars_cpp)
  3. set(TARS_VERSION "2.0.0")
  4. add_definitions(-DTARS_VERSION="${TARS_VERSION}")
  5. set(TARS_MYSQL 1)
  6. add_definitions(-DTARS_MYSQL=${TARS_MYSQL})
  7. set(TARS_SSL 0)
  8. add_definitions(-DTARS_SSL=${TARS_SSL})
  9. set(TARS_HTTP2 0)
  10. add_definitions(-DTARS_HTTP2=${TARS_HTTP2})
  11. set(TARS_PROTOBUF 0)
  12. add_definitions(-DTARS_PROTOBUF=${TARS_PROTOBUF})
  13. set(TARS_ZLIB 0)
  14. add_definitions(-DTARS_ZLIB=${TARS_ZLIB})
  15. # list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/modules/")
  16. set(CMAKE_VERBOSE_MAKEFILE off)
  17. #for coverage statistics
  18. #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -g -O2 -Wall -Wno-deprecated -fprofile-arcs -ftest-coverage")
  19. #set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O2 -Wall -Wno-deprecated -fprofile-arcs -ftest-coverage")
  20. #set(CMAKE_BUILD_TYPE "Debug")
  21. set(CMAKE_BUILD_TYPE "Release" CACHE STRING "set build type to release default")
  22. IF (CMAKE_BUILD_TYPE STREQUAL "")
  23. set(CMAKE_BUILD_TYPE "Release")
  24. ENDIF()
  25. message("CMAKE_BUILD_TYPE TYPE = " ${CMAKE_BUILD_TYPE})
  26. #编译的可执行程序输出目录
  27. set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
  28. set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
  29. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
  30. set(_USE_OPENTRACKING $ENV{_USE_OPENTRACKING})
  31. if(_USE_OPENTRACKING)
  32. set(OPENTRACKING_INC "/usr/local/include")
  33. add_definitions(-D_USE_OPENTRACKING=${_USE_OPENTRACKING})
  34. endif()
  35. #-------------------------------------------------------------
  36. IF (UNIX)
  37. set(INSTALL_PREFIX "/usr/local/tars/cpp")
  38. ELSE()
  39. set(INSTALL_PREFIX "c:\\tars\\cpp")
  40. ENDIF()
  41. set(CMAKE_INSTALL_PREFIX ${INSTALL_PREFIX})
  42. #-------------------------------------------------------------
  43. set(APP_LIBRARIES)
  44. set(THIRDPARTY_PATH "${CMAKE_BINARY_DIR}/src")
  45. set(MYSQL_DIR_INC "${THIRDPARTY_PATH}/mysql-lib/include")
  46. set(MYSQL_DIR_LIB "${THIRDPARTY_PATH}/mysql-lib/libmysql")
  47. include_directories(${MYSQL_DIR_INC})
  48. link_directories(${MYSQL_DIR_LIB})
  49. set(PROTOBUF_DIR_INC "${THIRDPARTY_PATH}/protobuf-lib/src")
  50. set(PROTOBUF_DIR_LIB "${THIRDPARTY_PATH}/protobuf-lib")
  51. include_directories(${PROTOBUF_DIR_INC})
  52. link_directories(${PROTOBUF_DIR_LIB})
  53. set(ZLIB_DIR_INC "${THIRDPARTY_PATH}/z-lib")
  54. set(ZLIB_DIR_LIB "${THIRDPARTY_PATH}/z-lib")
  55. include_directories(${ZLIB_DIR_INC})
  56. link_directories(${ZLIB_DIR_LIB})
  57. set(NGHTTP2_DIR_INC "${THIRDPARTY_PATH}/nghttp2-lib/lib/includes/")
  58. set(NGHTTP2_DIR_LIB "${THIRDPARTY_PATH}/nghttp2-lib/lib")
  59. include_directories(${NGHTTP2_DIR_INC})
  60. link_directories(${NGHTTP2_DIR_LIB})
  61. set(SSL_DIR_INC "${THIRDPARTY_PATH}/openssl-lib/include/")
  62. set(SSL_DIR_LIB "${THIRDPARTY_PATH}/openssl-lib")
  63. include_directories(${SSL_DIR_INC})
  64. link_directories(${SSL_DIR_LIB})
  65. set(LIB_MYSQL)
  66. set(LIB_NGHTTP2)
  67. set(LIB_SSL)
  68. set(LIB_CRYPTO)
  69. set(LIB_ZLIB)
  70. set(LIB_PROTOBUF)
  71. IF (WIN32)
  72. if(TARS_MYSQL)
  73. set(LIB_MYSQL "libmysql")
  74. endif()
  75. if(TARS_HTTP2)
  76. set(LIB_NGHTTP2 "libnghttp2_static")
  77. endif()
  78. if(TARS_SSL)
  79. set(LIB_SSL "libssl")
  80. set(LIB_CRYPTO "libcrypto")
  81. endif()
  82. if(TARS_ZLIB)
  83. set(LIB_ZLIB "libz")
  84. endif()
  85. if(TARS_PROTOBUF)
  86. set(LIB_PROTOBUF "libprotoc")
  87. endif()
  88. ELSE()
  89. link_libraries(pthread dl)
  90. if(TARS_MYSQL)
  91. set(LIB_MYSQL "mysqlclient")
  92. endif()
  93. if(TARS_HTTP2)
  94. set(LIB_NGHTTP2 "nghttp2_static")
  95. endif()
  96. if(TARS_SSL)
  97. set(LIB_SSL "ssl")
  98. set(LIB_CRYPTO "crypto")
  99. endif()
  100. if(TARS_ZLIB)
  101. set(LIB_ZLIB "z")
  102. endif()
  103. if(TARS_PROTOBUF)
  104. set(LIB_PROTOBUF "protoc")
  105. endif()
  106. ENDIF()
  107. if(TARS_MYSQL)
  108. link_libraries(${LIB_MYSQL})
  109. endif()
  110. if(TARS_ZLIB)
  111. link_libraries(${LIB_ZLIB})
  112. endif()
  113. if(TARS_HTTP2)
  114. list(APPEND APP_LIBRARIES ${LIB_PROTOBUF})
  115. endif()
  116. if(TARS_PROTOBUF)
  117. list(APPEND APP_LIBRARIES ${LIB_NGHTTP2})
  118. endif()
  119. if(TARS_SSL)
  120. list(APPEND APP_LIBRARIES ${LIB_SSL})
  121. list(APPEND APP_LIBRARIES ${LIB_CRYPTO})
  122. endif()
  123. list(LENGTH APP_LIBRARIES RET)
  124. if(${RET} GREATER 0)
  125. link_libraries(${APP_LIBRARIES})
  126. endif()
  127. include(ExternalProject)
  128. if(TARS_PROTOBUF)
  129. ExternalProject_Add(${LIB_PROTOBUF}
  130. URL http://cdn.tarsyun.com/src/protobuf-cpp-3.11.3.tar.gz
  131. PREFIX ${CMAKE_BINARY_DIR}
  132. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  133. CONFIGURE_COMMAND cmake cmake
  134. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/protobuf-lib
  135. BUILD_IN_SOURCE 1
  136. BUILD_COMMAND make -j4 libprotoc
  137. LOG_CONFIGURE 1
  138. LOG_BUILD 1
  139. INSTALL_COMMAND ${CMAKE_COMMAND} -E echo "install"
  140. URL_MD5 fb59398329002c98d4d92238324c4187
  141. )
  142. endif()
  143. if(TARS_MYSQL)
  144. ExternalProject_Add(${LIB_MYSQL}
  145. URL http://cdn.tarsyun.com/src/mysql-5.6.26.tar.gz
  146. PREFIX ${CMAKE_BINARY_DIR}
  147. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  148. CONFIGURE_COMMAND cmake . -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DDISABLE_SHARED=1
  149. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/mysql-lib
  150. BUILD_IN_SOURCE 1
  151. BUILD_COMMAND make -j4 mysqlclient
  152. LOG_CONFIGURE 1
  153. LOG_BUILD 1
  154. INSTALL_COMMAND ${CMAKE_COMMAND} -E echo "install"
  155. URL_MD5 c537c08c1276abc79d76e8e562bbcea5
  156. )
  157. endif()
  158. if(TARS_ZLIB)
  159. ExternalProject_Add(${LIB_ZLIB}
  160. URL http://cdn.tarsyun.com/src/zlib-1.2.11.tar.gz
  161. PREFIX ${CMAKE_BINARY_DIR}
  162. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  163. CONFIGURE_COMMAND cmake .
  164. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/z-lib
  165. BUILD_IN_SOURCE 1
  166. BUILD_COMMAND make zlibstatic
  167. LOG_CONFIGURE 1
  168. LOG_BUILD 1
  169. INSTALL_COMMAND ${CMAKE_COMMAND} -E echo "install"
  170. URL_MD5 1c9f62f0778697a09d36121ead88e08e
  171. )
  172. endif()
  173. if(TARS_HTTP2)
  174. ExternalProject_Add(${LIB_NGHTTP2}
  175. URL http://cdn.tarsyun.com/src/nghttp2-1.40.0.tar.gz
  176. PREFIX ${CMAKE_BINARY_DIR}
  177. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  178. CONFIGURE_COMMAND cmake . -DENABLE_SHARED_LIB=OFF -DENABLE_STATIC_LIB=ON -DENABLE_LIB_ONLY=ON
  179. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/nghttp2-lib
  180. BUILD_IN_SOURCE 1
  181. LOG_BUILD 1
  182. LOG_CONFIGURE 1
  183. BUILD_COMMAND make -j4
  184. INSTALL_COMMAND ${CMAKE_COMMAND} -E echo "install"
  185. URL_MD5 5df375bbd532fcaa7cd4044b54b1188d
  186. )
  187. endif()
  188. if(TARS_SSL)
  189. ExternalProject_Add(${LIB_SSL}
  190. DEPENDS ${LIB_ZLIB}
  191. URL http://cdn.tarsyun.com/src/openssl-1.1.1d.tar.gz
  192. PREFIX ${CMAKE_BINARY_DIR}
  193. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  194. CONFIGURE_COMMAND ./config --with-zlib-lib=${CMAKE_BINARY_DIR}/src/z-lib --with-zlib-include=${CMAKE_BINARY_DIR}/src/z-lib no-shared
  195. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/openssl-lib
  196. BUILD_IN_SOURCE 1
  197. BUILD_COMMAND make -j4
  198. LOG_CONFIGURE 1
  199. LOG_BUILD 1
  200. INSTALL_COMMAND ${CMAKE_COMMAND} -E echo "install"
  201. URL_MD5 3be209000dbc7e1b95bcdf47980a3baa
  202. )
  203. endif()
  204. add_custom_target(thirdparty DEPENDS ${LIB_MYSQL} ${LIB_NGHTTP2} ${LIB_SSL})
  205. #-------------------------------------------------------------
  206. IF (APPLE)
  207. link_libraries(iconv)
  208. ENDIF(APPLE)
  209. IF (UNIX)
  210. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
  211. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -std=c++11 -Wno-deprecated -fno-strict-aliasing -Wno-overloaded-virtual")
  212. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-builtin-macro-redefined -D__FILE__='\"$(notdir $(abspath $<))\"'")
  213. set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -Wall -g")
  214. set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O2 -Wall -fno-strict-aliasing")
  215. IF(APPLE)
  216. message("mac.....")
  217. SET(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>")
  218. SET(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>")
  219. SET(CMAKE_C_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>")
  220. SET(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>")
  221. ENDIF(APPLE)
  222. ELSEIF (WIN32)
  223. message("window.....")
  224. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4101 /wd4244 /wd4996 /wd4091 /wd4503 /wd4819 /wd4200 /wd4800")
  225. set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /bigobj " )
  226. ELSE ()
  227. MESSAGE(STATUS "================ ERROR: This platform is unsupported!!! ================")
  228. ENDIF (UNIX)
  229. #-------------------------------------------------------------
  230. IF(WIN32)
  231. set(TARS2CPP "${CMAKE_BINARY_DIR}/bin/${CMAKE_BUILD_TYPE}/tars2cpp.exe")
  232. ELSE()
  233. set(TARS2CPP "${CMAKE_BINARY_DIR}/bin/tars2cpp")
  234. ENDIF()
  235. #-------------------------------------------------------------
  236. IF(WIN32)
  237. include_directories(${CMAKE_SOURCE_DIR}/util/src/epoll_windows)
  238. ENDIF()
  239. include("${CMAKE_SOURCE_DIR}/cmake/BuildTarsServer.cmake")
  240. include_directories(${CMAKE_SOURCE_DIR}/util/include)
  241. include_directories(${CMAKE_SOURCE_DIR}/servant)
  242. include_directories(${CMAKE_SOURCE_DIR}/servant/protocol)
  243. add_subdirectory(util)
  244. add_subdirectory(tools)
  245. add_subdirectory(servant)
  246. add_subdirectory(examples)
  247. #add_subdirectory(test_deprecated)