Thirdparty.cmake 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343
  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. option(TARS_GPERF "option for gperf" OFF)
  6. IF(UNIX)
  7. FIND_PACKAGE(ZLIB)
  8. IF(NOT ZLIB_FOUND)
  9. SET(ERRORMSG "zlib library not found. Please install appropriate package, remove CMakeCache.txt and rerun cmake.")
  10. IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
  11. 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).")
  12. ENDIF()
  13. MESSAGE(FATAL_ERROR ${ERRORMSG})
  14. ENDIF()
  15. ENDIF(UNIX)
  16. if (TARS_MYSQL)
  17. add_definitions(-DTARS_MYSQL=1)
  18. endif ()
  19. if (TARS_GPERF)
  20. add_definitions(-DTARS_GPERF=1)
  21. endif ()
  22. if (TARS_SSL)
  23. add_definitions(-DTARS_SSL=1)
  24. endif ()
  25. if (TARS_HTTP2)
  26. add_definitions(-DTARS_HTTP2=1)
  27. endif ()
  28. if (TARS_PROTOBUF)
  29. add_definitions(-DTARS_PROTOBUF=1)
  30. endif ()
  31. #-------------------------------------------------------------
  32. set(THIRDPARTY_PATH "${CMAKE_BINARY_DIR}/src")
  33. set(LIB_MYSQL)
  34. set(LIB_HTTP2)
  35. set(LIB_SSL)
  36. set(LIB_CRYPTO)
  37. set(LIB_PROTOBUF)
  38. set(LIB_GTEST)
  39. #-------------------------------------------------------------
  40. add_custom_target(thirdparty)
  41. include(ExternalProject)
  42. if (TARS_GPERF)
  43. set(GPERF_DIR_INC "${THIRDPARTY_PATH}/gpref/include")
  44. set(GRPEF_DIR_LIB "${THIRDPARTY_PATH}/gpref/lib")
  45. include_directories(${GPERF_DIR_INC})
  46. link_directories(${GRPEF_DIR_LIB})
  47. if (UNIX)
  48. set(LIB_GPERF "profiler")
  49. ExternalProject_Add(ADD_${LIB_GPERF}
  50. URL https://tars-thirdpart-1300910346.cos.ap-guangzhou.myqcloud.com//src/gperftools-2.7.tar.gz
  51. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  52. PREFIX ${CMAKE_BINARY_DIR}
  53. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  54. CONFIGURE_COMMAND ./configure --prefix=${CMAKE_BINARY_DIR}/src/gpref --disable-shared --disable-debugalloc
  55. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/gpref-lib
  56. BUILD_IN_SOURCE 1
  57. BUILD_COMMAND make
  58. # INSTALL_COMMAND ${CMAKE_COMMAND} --build . --config release --target install
  59. URL_MD5 c6a852a817e9160c79bdb2d3101b4601
  60. )
  61. add_dependencies(thirdparty ADD_${LIB_GPERF})
  62. INSTALL(FILES ${CMAKE_BINARY_DIR}/src/gpref/bin/pprof
  63. PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ
  64. DESTINATION thirdparty/bin/)
  65. INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/gpref/lib DESTINATION thirdparty)
  66. INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/gpref/include/gperftools DESTINATION thirdparty/include)
  67. endif (UNIX)
  68. endif (TARS_GPERF)
  69. if(WIN32)
  70. ExternalProject_Add(ADD_CURL
  71. URL http://cdn.tarsyun.com/src/curl-7.69.1.tar.gz
  72. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  73. PREFIX ${CMAKE_BINARY_DIR}
  74. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  75. CONFIGURE_COMMAND ${CMAKE_COMMAND} . -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/curl
  76. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/curl-lib
  77. BUILD_IN_SOURCE 1
  78. BUILD_COMMAND ${CMAKE_COMMAND} --build . --config release
  79. INSTALL_COMMAND ${CMAKE_COMMAND} --build . --config release --target install
  80. URL_MD5 b9bb5e11d579425154a9f97ed44be9b8
  81. )
  82. add_dependencies(thirdparty ADD_CURL)
  83. INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/curl/ DESTINATION thirdparty)
  84. endif(WIN32)
  85. if (WIN32)
  86. set(LIB_GTEST "gtest")
  87. if (CMAKE_BUILD_TYPE STREQUAL "Debug")
  88. set(LIB_GTEST "${LIB_GTEST}d")
  89. endif()
  90. ExternalProject_Add(ADD_${LIB_GTEST}
  91. URL http://cdn.tarsyun.com/src/release-1.10.0.zip
  92. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  93. PREFIX ${CMAKE_BINARY_DIR}
  94. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  95. CONFIGURE_COMMAND ${CMAKE_COMMAND} . -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/gtest -A x64 -Dgtest_force_shared_crt=on
  96. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/gtest-lib
  97. BUILD_IN_SOURCE 1
  98. BUILD_COMMAND ${CMAKE_COMMAND} --build . --config ${CMAKE_BUILD_TYPE}
  99. INSTALL_COMMAND ${CMAKE_COMMAND} --build . --config ${CMAKE_BUILD_TYPE} --target install
  100. URL_MD5 82358affdd7ab94854c8ee73a180fc53
  101. )
  102. else()
  103. set(LIB_GTEST "gtest")
  104. ExternalProject_Add(ADD_${LIB_GTEST}
  105. URL http://cdn.tarsyun.com/src/release-1.10.0.tar.gz
  106. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  107. PREFIX ${CMAKE_BINARY_DIR}
  108. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  109. CONFIGURE_COMMAND ${CMAKE_COMMAND} . -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/gtest
  110. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/gtest-lib
  111. BUILD_IN_SOURCE 1
  112. BUILD_COMMAND make
  113. URL_MD5 ecd1fa65e7de707cd5c00bdac56022cd
  114. )
  115. endif()
  116. INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/gtest/ DESTINATION thirdparty)
  117. add_dependencies(thirdparty ADD_${LIB_GTEST})
  118. if (TARS_PROTOBUF)
  119. set(PROTOBUF_DIR_INC "${THIRDPARTY_PATH}/protobuf/include")
  120. set(PROTOBUF_DIR_LIB "${THIRDPARTY_PATH}/protobuf/lib")
  121. set(PROTOBUF_DIR_LIB64 "${THIRDPARTY_PATH}/protobuf/lib64")
  122. include_directories(${PROTOBUF_DIR_INC})
  123. link_directories(${PROTOBUF_DIR_LIB})
  124. link_directories(${PROTOBUF_DIR_LIB64})
  125. if (WIN32)
  126. set(LIB_PROTOC "libprotoc")
  127. set(LIB_PROTOBUF "libprotobuf")
  128. ExternalProject_Add(ADD_${LIB_PROTOBUF}
  129. URL http://cdn.tarsyun.com/src/protobuf-cpp-3.11.3.tar.gz
  130. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  131. PREFIX ${CMAKE_BINARY_DIR}
  132. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  133. CONFIGURE_COMMAND ${CMAKE_COMMAND} cmake -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/protobuf -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON
  134. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/protobuf-lib
  135. BUILD_IN_SOURCE 1
  136. BUILD_COMMAND ${CMAKE_COMMAND} --build . --config release
  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. URL_MD5 fb59398329002c98d4d92238324c4187
  153. )
  154. endif ()
  155. INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/protobuf/ DESTINATION thirdparty)
  156. add_dependencies(thirdparty ADD_${LIB_PROTOBUF})
  157. endif ()
  158. if (TARS_SSL)
  159. set(SSL_DIR "${THIRDPARTY_PATH}/openssl")
  160. set(SSL_DIR_INC "${THIRDPARTY_PATH}/openssl/include/")
  161. set(SSL_DIR_LIB "${THIRDPARTY_PATH}/openssl/lib")
  162. include_directories(${SSL_DIR_INC})
  163. link_directories(${SSL_DIR_LIB})
  164. if (WIN32)
  165. set(LIB_SSL "libssl")
  166. set(LIB_CRYPTO "libcrypto")
  167. ExternalProject_Add(ADD_${LIB_SSL}
  168. URL http://cdn.tarsyun.com/src/openssl-1.1.1d.tar.gz
  169. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  170. PREFIX ${CMAKE_BINARY_DIR}
  171. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  172. CONFIGURE_COMMAND perl Configure --prefix=${CMAKE_BINARY_DIR}/src/openssl VC-WIN64A no-asm
  173. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/openssl-lib
  174. BUILD_IN_SOURCE 1
  175. BUILD_COMMAND nmake
  176. INSTALL_COMMAND nmake install
  177. URL_MD5 3be209000dbc7e1b95bcdf47980a3baa
  178. )
  179. else ()
  180. set(LIB_SSL "ssl")
  181. set(LIB_CRYPTO "crypto")
  182. ExternalProject_Add(ADD_${LIB_SSL}
  183. URL http://cdn.tarsyun.com/src/openssl-1.1.1d.tar.gz
  184. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  185. PREFIX ${CMAKE_BINARY_DIR}
  186. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  187. CONFIGURE_COMMAND ./config --prefix=${CMAKE_BINARY_DIR}/src/openssl no-shared
  188. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/openssl-lib
  189. BUILD_IN_SOURCE 1
  190. BUILD_COMMAND make
  191. URL_MD5 3be209000dbc7e1b95bcdf47980a3baa
  192. )
  193. endif ()
  194. INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/openssl/ DESTINATION thirdparty)
  195. add_dependencies(thirdparty ADD_${LIB_SSL})
  196. endif ()
  197. if (TARS_MYSQL)
  198. set(MYSQL_DIR_INC "${THIRDPARTY_PATH}/mysql/include")
  199. set(MYSQL_DIR_LIB "${THIRDPARTY_PATH}/mysql/lib")
  200. include_directories(${MYSQL_DIR_INC})
  201. link_directories(${MYSQL_DIR_LIB})
  202. if (WIN32)
  203. set(LIB_MYSQL "libmysql")
  204. ExternalProject_Add(ADD_${LIB_MYSQL}
  205. URL http://cdn.tarsyun.com/src/mysql-connector-c-6.1.11-src.fixed.zip
  206. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  207. PREFIX ${CMAKE_BINARY_DIR}
  208. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  209. CONFIGURE_COMMAND ${CMAKE_COMMAND} . -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/mysql -DBUILD_CONFIG=mysql_release
  210. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/mysql-lib
  211. BUILD_IN_SOURCE 1
  212. BUILD_COMMAND ${CMAKE_COMMAND} --build . --config release
  213. INSTALL_COMMAND ${CMAKE_COMMAND} --build . --config release --target install
  214. URL_MD5 bad636fe9bcc9bb62e3f5b784495a9b5
  215. )
  216. else ()
  217. set(LIB_MYSQL "mysqlclient")
  218. ExternalProject_Add(ADD_${LIB_MYSQL}
  219. URL http://cdn.tarsyun.com/src/mysql-connector-c-6.1.11-src.fixed.tar.gz
  220. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  221. PREFIX ${CMAKE_BINARY_DIR}
  222. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  223. CONFIGURE_COMMAND ${CMAKE_COMMAND} . -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DDISABLE_SHARED=1
  224. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/mysql-lib
  225. BUILD_IN_SOURCE 1
  226. BUILD_COMMAND make mysqlclient
  227. URL_MD5 3578d736b9d493eae076a67e3ed473eb
  228. )
  229. endif ()
  230. INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/mysql/lib DESTINATION thirdparty)
  231. INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/mysql/include/ DESTINATION thirdparty/include/mysql)
  232. add_dependencies(thirdparty ADD_${LIB_MYSQL})
  233. endif ()
  234. if (TARS_HTTP2)
  235. set(NGHTTP2_DIR_INC "${THIRDPARTY_PATH}/nghttp2/include/")
  236. set(NGHTTP2_DIR_LIB "${THIRDPARTY_PATH}/nghttp2/lib")
  237. set(NGHTTP2_DIR_LIB64 "${THIRDPARTY_PATH}/nghttp2/lib64")
  238. include_directories(${NGHTTP2_DIR_INC})
  239. link_directories(${NGHTTP2_DIR_LIB})
  240. link_directories(${NGHTTP2_DIR_LIB64})
  241. set(LIB_HTTP2 "nghttp2_static")
  242. if (WIN32)
  243. ExternalProject_Add(ADD_${LIB_HTTP2}
  244. URL http://cdn.tarsyun.com/src/nghttp2-1.40.0.tar.gz
  245. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  246. PREFIX ${CMAKE_BINARY_DIR}
  247. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  248. CONFIGURE_COMMAND ${CMAKE_COMMAND} . -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/nghttp2 -DENABLE_LIB_ONLY=ON -DENABLE_STATIC_LIB=ON
  249. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/nghttp2-lib
  250. BUILD_IN_SOURCE 1
  251. BUILD_COMMAND ${CMAKE_COMMAND} --build . --config release
  252. INSTALL_COMMAND ${CMAKE_COMMAND} --build . --config release --target install
  253. URL_MD5 5df375bbd532fcaa7cd4044b54b1188d
  254. )
  255. else ()
  256. ExternalProject_Add(ADD_${LIB_HTTP2}
  257. URL http://cdn.tarsyun.com/src/nghttp2-1.40.0.tar.gz
  258. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  259. PREFIX ${CMAKE_BINARY_DIR}
  260. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  261. CONFIGURE_COMMAND ${CMAKE_COMMAND} . -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/nghttp2 -DENABLE_LIB_ONLY=ON -DENABLE_STATIC_LIB=ON
  262. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/nghttp2-lib
  263. BUILD_IN_SOURCE 1
  264. BUILD_COMMAND make
  265. URL_MD5 5df375bbd532fcaa7cd4044b54b1188d
  266. )
  267. endif ()
  268. INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/nghttp2/ DESTINATION thirdparty)
  269. add_dependencies(thirdparty ADD_${LIB_HTTP2})
  270. endif ()
  271. message("----------------------------------------------------")
  272. message("TARS_MYSQL: ${TARS_MYSQL}")
  273. message("TARS_HTTP2: ${TARS_HTTP2}")
  274. message("TARS_SSL: ${TARS_SSL}")
  275. message("TARS_PROTOBUF: ${TARS_PROTOBUF}")
  276. message("TARS_GPERF: ${TARS_GPERF}")