Thirdparty.cmake 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357
  1. option(TARS_MYSQL "option for mysql" ON)
  2. option(TARS_SSL "option for ssl" OFF)
  3. option(TARS_HTTP2 "option for http2" OFF)
  4. option(TARS_PROTOBUF "option for protocol" OFF)
  5. IF(UNIX)
  6. FIND_PACKAGE(ZLIB)
  7. IF(NOT ZLIB_FOUND)
  8. SET(ERRORMSG "zlib library not found. Please install appropriate package, remove CMakeCache.txt and rerun cmake.")
  9. IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
  10. SET(ERRORMSG ${ERRORMSG} "On Debian/Ubuntu, package name is zlib1g-dev(apt-get install zlib1g-dev), on Redhat/Centos and derivates it is zlib-devel (yum install zlib-devel).")
  11. ENDIF()
  12. MESSAGE(FATAL_ERROR ${ERRORMSG})
  13. ENDIF()
  14. ENDIF(UNIX)
  15. if (TARS_MYSQL)
  16. add_definitions(-DTARS_MYSQL=1)
  17. IF(UNIX AND NOT APPLE)
  18. FIND_PACKAGE(Curses)
  19. IF(NOT CURSES_FOUND)
  20. SET(ERRORMSG "Curses library not found. Please install appropriate package,
  21. remove CMakeCache.txt and rerun cmake.")
  22. IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
  23. SET(ERRORMSG ${ERRORMSG}
  24. "On Debian/Ubuntu, package name is libncurses5-dev(apt-get install libncurses5-dev), on Redhat/Centos and derivates "
  25. "it is ncurses-devel (yum install ncurses-devel).")
  26. ENDIF()
  27. MESSAGE(FATAL_ERROR ${ERRORMSG})
  28. ENDIF()
  29. ENDIF()
  30. endif ()
  31. if (TARS_SSL)
  32. add_definitions(-DTARS_SSL=1)
  33. endif ()
  34. if (TARS_HTTP2)
  35. add_definitions(-DTARS_HTTP2=1)
  36. endif ()
  37. if (TARS_PROTOBUF)
  38. add_definitions(-DTARS_PROTOBUF=1)
  39. endif ()
  40. #-------------------------------------------------------------
  41. set(THIRDPARTY_PATH "${CMAKE_BINARY_DIR}/src")
  42. set(LIB_MYSQL)
  43. set(LIB_HTTP2)
  44. set(LIB_SSL)
  45. set(LIB_CRYPTO)
  46. set(LIB_PROTOBUF)
  47. set(LIB_GTEST)
  48. #-------------------------------------------------------------
  49. add_custom_target(thirdparty)
  50. include(ExternalProject)
  51. set(LIB_GTEST "libgtest")
  52. if(WIN32)
  53. ExternalProject_Add(ADD_CURL
  54. URL http://cdn.tarsyun.com/src/curl-7.69.1.tar.gz
  55. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  56. PREFIX ${CMAKE_BINARY_DIR}
  57. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  58. CONFIGURE_COMMAND ${CMAKE_COMMAND} . -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/curl
  59. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/curl-lib
  60. BUILD_IN_SOURCE 1
  61. BUILD_COMMAND ${CMAKE_COMMAND} --build . --config release
  62. INSTALL_COMMAND ${CMAKE_COMMAND} --build . --config release --target install
  63. URL_MD5 b9bb5e11d579425154a9f97ed44be9b8
  64. )
  65. add_dependencies(thirdparty ADD_CURL)
  66. INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/curl/ DESTINATION thirdparty)
  67. # ExternalProject_Add(ADD_BUSYBOX
  68. # URL http://cdn.tarsyun.com/src/busybox-1.31.1.tar.bz2
  69. # DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  70. # PREFIX ${CMAKE_BINARY_DIR}
  71. # INSTALL_DIR ${CMAKE_SOURCE_DIR}
  72. # CONFIGURE_COMMAND ${CMAKE_COMMAND} . -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/busybox
  73. # SOURCE_DIR ${CMAKE_BINARY_DIR}/src/busybox-lib
  74. # BUILD_IN_SOURCE 1
  75. # BUILD_COMMAND ${CMAKE_COMMAND} --build . --config release
  76. # INSTALL_COMMAND ${CMAKE_COMMAND} --build . --config release --target install
  77. # URL_MD5 70913edaf2263a157393af07565c17f0
  78. # )
  79. # add_dependencies(thirdparty ADD_BUSYBOX)
  80. # INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/busybox/ DESTINATION thirdparty)
  81. endif(WIN32)
  82. if (WIN32)
  83. ExternalProject_Add(ADD_${LIB_GTEST}
  84. URL http://cdn.tarsyun.com/src/release-1.10.0.zip
  85. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  86. PREFIX ${CMAKE_BINARY_DIR}
  87. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  88. CONFIGURE_COMMAND ${CMAKE_COMMAND} . -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/gtest
  89. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/gtest-lib
  90. BUILD_IN_SOURCE 1
  91. BUILD_COMMAND ${CMAKE_COMMAND} --build . --config release
  92. INSTALL_COMMAND ${CMAKE_COMMAND} --build . --config release --target install
  93. # LOG_CONFIGURE 1
  94. # LOG_BUILD 1
  95. URL_MD5 82358affdd7ab94854c8ee73a180fc53
  96. )
  97. else()
  98. ExternalProject_Add(ADD_${LIB_GTEST}
  99. URL http://cdn.tarsyun.com/src/release-1.10.0.tar.gz
  100. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  101. PREFIX ${CMAKE_BINARY_DIR}
  102. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  103. CONFIGURE_COMMAND ${CMAKE_COMMAND} . -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/gtest
  104. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/gtest-lib
  105. BUILD_IN_SOURCE 1
  106. BUILD_COMMAND make
  107. # LOG_CONFIGURE 1
  108. # LOG_BUILD 1
  109. # INSTALL_COMMAND ${CMAKE_COMMAND} -P ${RUN_PROTOBUF_INSTALL_FILE}
  110. URL_MD5 ecd1fa65e7de707cd5c00bdac56022cd
  111. )
  112. endif()
  113. INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/gtest/ DESTINATION thirdparty)
  114. #INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/gtest/ DESTINATION thirdparty/include)
  115. add_dependencies(thirdparty ADD_${LIB_GTEST})
  116. if (TARS_PROTOBUF)
  117. set(PROTOBUF_DIR_INC "${THIRDPARTY_PATH}/protobuf/include")
  118. set(PROTOBUF_DIR_LIB "${THIRDPARTY_PATH}/protobuf/lib")
  119. set(PROTOBUF_DIR_LIB64 "${THIRDPARTY_PATH}/protobuf/lib64")
  120. include_directories(${PROTOBUF_DIR_INC})
  121. link_directories(${PROTOBUF_DIR_LIB})
  122. link_directories(${PROTOBUF_DIR_LIB64})
  123. if (WIN32)
  124. set(LIB_PROTOC "libprotoc")
  125. set(LIB_PROTOBUF "libprotobuf")
  126. ExternalProject_Add(ADD_${LIB_PROTOBUF}
  127. URL http://cdn.tarsyun.com/src/protobuf-cpp-3.11.3.tar.gz
  128. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  129. PREFIX ${CMAKE_BINARY_DIR}
  130. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  131. CONFIGURE_COMMAND ${CMAKE_COMMAND} cmake -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/protobuf -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON
  132. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/protobuf-lib
  133. BUILD_IN_SOURCE 1
  134. BUILD_COMMAND ${CMAKE_COMMAND} --build . --config release
  135. # LOG_CONFIGURE 1
  136. # LOG_BUILD 1
  137. INSTALL_COMMAND ${CMAKE_COMMAND} --build . --config release --target install
  138. URL_MD5 fb59398329002c98d4d92238324c4187
  139. )
  140. else ()
  141. set(LIB_PROTOC "protoc")
  142. set(LIB_PROTOBUF "protobuf")
  143. ExternalProject_Add(ADD_${LIB_PROTOBUF}
  144. URL http://cdn.tarsyun.com/src/protobuf-cpp-3.11.3.tar.gz
  145. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  146. PREFIX ${CMAKE_BINARY_DIR}
  147. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  148. CONFIGURE_COMMAND ${CMAKE_COMMAND} cmake -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/protobuf -DBUILD_SHARED_LIBS=OFF
  149. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/protobuf-lib
  150. BUILD_IN_SOURCE 1
  151. BUILD_COMMAND make
  152. # LOG_CONFIGURE 1
  153. # LOG_BUILD 1
  154. # INSTALL_COMMAND ${CMAKE_COMMAND} -P ${RUN_PROTOBUF_INSTALL_FILE}
  155. URL_MD5 fb59398329002c98d4d92238324c4187
  156. )
  157. endif ()
  158. INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/protobuf/ DESTINATION thirdparty)
  159. # INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/protobuf/include/google DESTINATION thirdparty/include)
  160. add_dependencies(thirdparty ADD_${LIB_PROTOBUF})
  161. endif ()
  162. if (TARS_SSL)
  163. set(SSL_DIR "${THIRDPARTY_PATH}/openssl")
  164. set(SSL_DIR_INC "${THIRDPARTY_PATH}/openssl/include/")
  165. set(SSL_DIR_LIB "${THIRDPARTY_PATH}/openssl/lib")
  166. include_directories(${SSL_DIR_INC})
  167. link_directories(${SSL_DIR_LIB})
  168. if (WIN32)
  169. set(LIB_SSL "libssl")
  170. set(LIB_CRYPTO "libcrypto")
  171. ExternalProject_Add(ADD_${LIB_SSL}
  172. URL http://cdn.tarsyun.com/src/openssl-1.1.1d.tar.gz
  173. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  174. PREFIX ${CMAKE_BINARY_DIR}
  175. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  176. CONFIGURE_COMMAND perl Configure --prefix=${CMAKE_BINARY_DIR}/src/openssl VC-WIN64A no-asm
  177. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/openssl-lib
  178. BUILD_IN_SOURCE 1
  179. BUILD_COMMAND nmake
  180. # LOG_CONFIGURE 1
  181. # LOG_BUILD 1
  182. INSTALL_COMMAND nmake install
  183. URL_MD5 3be209000dbc7e1b95bcdf47980a3baa
  184. )
  185. else ()
  186. set(LIB_SSL "ssl")
  187. set(LIB_CRYPTO "crypto")
  188. ExternalProject_Add(ADD_${LIB_SSL}
  189. URL http://cdn.tarsyun.com/src/openssl-1.1.1d.tar.gz
  190. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  191. PREFIX ${CMAKE_BINARY_DIR}
  192. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  193. CONFIGURE_COMMAND ./config --prefix=${CMAKE_BINARY_DIR}/src/openssl no-shared
  194. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/openssl-lib
  195. BUILD_IN_SOURCE 1
  196. BUILD_COMMAND make
  197. # LOG_CONFIGURE 1
  198. # LOG_BUILD 1
  199. # INSTALL_COMMAND ${CMAKE_COMMAND} -P ${RUN_SSL_INSTALL_FILE}
  200. URL_MD5 3be209000dbc7e1b95bcdf47980a3baa
  201. )
  202. endif ()
  203. INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/openssl/ DESTINATION thirdparty)
  204. # INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/openssl/include/openssl DESTINATION thirdparty/include)
  205. add_dependencies(thirdparty ADD_${LIB_SSL})
  206. endif ()
  207. if (TARS_MYSQL)
  208. set(MYSQL_DIR_INC "${THIRDPARTY_PATH}/mysql/include")
  209. set(MYSQL_DIR_LIB "${THIRDPARTY_PATH}/mysql/lib")
  210. include_directories(${MYSQL_DIR_INC})
  211. link_directories(${MYSQL_DIR_LIB})
  212. if (WIN32)
  213. set(LIB_MYSQL "libmysql")
  214. ExternalProject_Add(ADD_${LIB_MYSQL}
  215. URL http://cdn.tarsyun.com/src/mysql-connector-c-6.1.11-src.zip
  216. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  217. PREFIX ${CMAKE_BINARY_DIR}
  218. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  219. CONFIGURE_COMMAND ${CMAKE_COMMAND} . -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/mysql -DBUILD_CONFIG=mysql_release
  220. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/mysql-lib
  221. BUILD_IN_SOURCE 1
  222. BUILD_COMMAND ${CMAKE_COMMAND} --build . --config release
  223. # LOG_CONFIGURE 1
  224. # LOG_BUILD 1
  225. INSTALL_COMMAND ${CMAKE_COMMAND} --build . --config release --target install
  226. URL_MD5 62de01beffc48348708c983a585b4dc1
  227. )
  228. else ()
  229. set(LIB_MYSQL "mysqlclient")
  230. ExternalProject_Add(ADD_${LIB_MYSQL}
  231. URL http://cdn.tarsyun.com/src/mysql-connector-c-6.1.11-src.tar.gz
  232. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  233. PREFIX ${CMAKE_BINARY_DIR}
  234. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  235. CONFIGURE_COMMAND ${CMAKE_COMMAND} . -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DDISABLE_SHARED=1
  236. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/mysql-lib
  237. BUILD_IN_SOURCE 1
  238. BUILD_COMMAND make mysqlclient
  239. # LOG_CONFIGURE 1
  240. # LOG_BUILD 1
  241. # INSTALL_COMMAND ${CMAKE_COMMAND} --build . --config release --target install
  242. URL_MD5 98ca2071f9d4c6b73146cc0455f6b914
  243. )
  244. endif ()
  245. INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/mysql/lib DESTINATION thirdparty)
  246. INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/mysql/include/ DESTINATION thirdparty/include/mysql)
  247. add_dependencies(thirdparty ADD_${LIB_MYSQL})
  248. endif ()
  249. if (TARS_HTTP2)
  250. set(NGHTTP2_DIR_INC "${THIRDPARTY_PATH}/nghttp2/include/")
  251. set(NGHTTP2_DIR_LIB "${THIRDPARTY_PATH}/nghttp2/lib")
  252. set(NGHTTP2_DIR_LIB64 "${THIRDPARTY_PATH}/nghttp2/lib64")
  253. include_directories(${NGHTTP2_DIR_INC})
  254. link_directories(${NGHTTP2_DIR_LIB})
  255. link_directories(${NGHTTP2_DIR_LIB64})
  256. set(LIB_HTTP2 "nghttp2_static")
  257. if (WIN32)
  258. ExternalProject_Add(ADD_${LIB_HTTP2}
  259. URL http://cdn.tarsyun.com/src/nghttp2-1.40.0.tar.gz
  260. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  261. PREFIX ${CMAKE_BINARY_DIR}
  262. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  263. CONFIGURE_COMMAND ${CMAKE_COMMAND} . -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/nghttp2 -DENABLE_LIB_ONLY=ON -DENABLE_STATIC_LIB=ON
  264. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/nghttp2-lib
  265. BUILD_IN_SOURCE 1
  266. # LOG_BUILD 1
  267. # LOG_CONFIGURE 1
  268. BUILD_COMMAND ${CMAKE_COMMAND} --build . --config release
  269. INSTALL_COMMAND ${CMAKE_COMMAND} --build . --config release --target install
  270. URL_MD5 5df375bbd532fcaa7cd4044b54b1188d
  271. )
  272. else ()
  273. ExternalProject_Add(ADD_${LIB_HTTP2}
  274. URL http://cdn.tarsyun.com/src/nghttp2-1.40.0.tar.gz
  275. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  276. PREFIX ${CMAKE_BINARY_DIR}
  277. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  278. CONFIGURE_COMMAND ${CMAKE_COMMAND} . -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/nghttp2 -DENABLE_LIB_ONLY=ON -DENABLE_STATIC_LIB=ON
  279. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/nghttp2-lib
  280. BUILD_IN_SOURCE 1
  281. # LOG_BUILD 1
  282. # LOG_CONFIGURE 1
  283. BUILD_COMMAND make
  284. # INSTALL_COMMAND incmake --build . --config release --target install
  285. URL_MD5 5df375bbd532fcaa7cd4044b54b1188d
  286. )
  287. endif ()
  288. INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/nghttp2/ DESTINATION thirdparty)
  289. # INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/nghttp2/include/nghttp2 DESTINATION thirdparty/include)
  290. add_dependencies(thirdparty ADD_${LIB_HTTP2})
  291. endif ()
  292. message("----------------------------------------------------")
  293. message("TARS_MYSQL: ${TARS_MYSQL}")
  294. message("TARS_HTTP2: ${TARS_HTTP2}")
  295. message("TARS_SSL: ${TARS_SSL}")
  296. message("TARS_PROTOBUF: ${TARS_PROTOBUF}")