Thirdparty.cmake 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349
  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. set(LIB_GPERF)
  40. set(LIB_TCMALLOC_PROFILER)
  41. set(LIB_TCMALLOC_MINIMAL)
  42. #-------------------------------------------------------------
  43. add_custom_target(thirdparty)
  44. include(ExternalProject)
  45. if (TARS_GPERF)
  46. set(GPERF_DIR_INC "${THIRDPARTY_PATH}/gperf/include")
  47. set(GRPEF_DIR_LIB "${THIRDPARTY_PATH}/gperf/lib")
  48. include_directories(${GPERF_DIR_INC})
  49. link_directories(${GRPEF_DIR_LIB})
  50. if (UNIX)
  51. set(LIB_GPERF "profiler")
  52. set(LIB_TCMALLOC_PROFILER "tcmalloc_and_profiler")
  53. set(LIB_TCMALLOC_MINIMAL "tcmalloc_and_minimal")
  54. ExternalProject_Add(ADD_${LIB_GPERF}
  55. URL https://tars-thirdpart-1300910346.cos.ap-guangzhou.myqcloud.com//src/gperftools-2.7.tar.gz
  56. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  57. PREFIX ${CMAKE_BINARY_DIR}
  58. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  59. CONFIGURE_COMMAND ./configure --prefix=${CMAKE_BINARY_DIR}/src/gperf --disable-shared --disable-debugalloc
  60. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/gperf-lib
  61. BUILD_IN_SOURCE 1
  62. BUILD_COMMAND make
  63. # INSTALL_COMMAND ${CMAKE_COMMAND} --build . --config release --target install
  64. URL_MD5 c6a852a817e9160c79bdb2d3101b4601
  65. )
  66. add_dependencies(thirdparty ADD_${LIB_GPERF})
  67. INSTALL(FILES ${CMAKE_BINARY_DIR}/src/gperf/bin/pprof
  68. PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ
  69. DESTINATION thirdparty/bin/)
  70. INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/gperf/lib DESTINATION thirdparty)
  71. INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/gperf/include/gperftools DESTINATION thirdparty/include)
  72. endif (UNIX)
  73. endif (TARS_GPERF)
  74. if(WIN32)
  75. ExternalProject_Add(ADD_CURL
  76. URL http://cdn.tarsyun.com/src/curl-7.69.1.tar.gz
  77. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  78. PREFIX ${CMAKE_BINARY_DIR}
  79. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  80. CONFIGURE_COMMAND ${CMAKE_COMMAND} . -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/curl
  81. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/curl-lib
  82. BUILD_IN_SOURCE 1
  83. BUILD_COMMAND ${CMAKE_COMMAND} --build . --config release
  84. INSTALL_COMMAND ${CMAKE_COMMAND} --build . --config release --target install
  85. URL_MD5 b9bb5e11d579425154a9f97ed44be9b8
  86. )
  87. add_dependencies(thirdparty ADD_CURL)
  88. INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/curl/ DESTINATION thirdparty)
  89. endif(WIN32)
  90. if (WIN32)
  91. set(LIB_GTEST "gtest")
  92. if (CMAKE_BUILD_TYPE STREQUAL "Debug")
  93. set(LIB_GTEST "${LIB_GTEST}d")
  94. endif()
  95. ExternalProject_Add(ADD_${LIB_GTEST}
  96. URL http://cdn.tarsyun.com/src/release-1.10.0.zip
  97. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  98. PREFIX ${CMAKE_BINARY_DIR}
  99. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  100. 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
  101. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/gtest-lib
  102. BUILD_IN_SOURCE 1
  103. BUILD_COMMAND ${CMAKE_COMMAND} --build . --config ${CMAKE_BUILD_TYPE}
  104. INSTALL_COMMAND ${CMAKE_COMMAND} --build . --config ${CMAKE_BUILD_TYPE} --target install
  105. URL_MD5 82358affdd7ab94854c8ee73a180fc53
  106. )
  107. else()
  108. set(LIB_GTEST "gtest")
  109. ExternalProject_Add(ADD_${LIB_GTEST}
  110. URL http://cdn.tarsyun.com/src/release-1.10.0.fixed.tar.gz
  111. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  112. PREFIX ${CMAKE_BINARY_DIR}
  113. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  114. CONFIGURE_COMMAND ${CMAKE_COMMAND} . -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/gtest
  115. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/gtest-lib
  116. BUILD_IN_SOURCE 1
  117. BUILD_COMMAND make
  118. URL_MD5 6f26d634fa9cac718263c2df20df21a4
  119. )
  120. endif()
  121. INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/gtest/ DESTINATION thirdparty)
  122. add_dependencies(thirdparty ADD_${LIB_GTEST})
  123. if (TARS_PROTOBUF)
  124. set(PROTOBUF_DIR_INC "${THIRDPARTY_PATH}/protobuf/include")
  125. set(PROTOBUF_DIR_LIB "${THIRDPARTY_PATH}/protobuf/lib")
  126. set(PROTOBUF_DIR_LIB64 "${THIRDPARTY_PATH}/protobuf/lib64")
  127. include_directories(${PROTOBUF_DIR_INC})
  128. link_directories(${PROTOBUF_DIR_LIB})
  129. link_directories(${PROTOBUF_DIR_LIB64})
  130. if (WIN32)
  131. set(LIB_PROTOC "libprotoc")
  132. set(LIB_PROTOBUF "libprotobuf")
  133. ExternalProject_Add(ADD_${LIB_PROTOBUF}
  134. URL http://cdn.tarsyun.com/src/protobuf-cpp-3.11.3.tar.gz
  135. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  136. PREFIX ${CMAKE_BINARY_DIR}
  137. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  138. CONFIGURE_COMMAND ${CMAKE_COMMAND} cmake -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/protobuf -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON
  139. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/protobuf-lib
  140. BUILD_IN_SOURCE 1
  141. BUILD_COMMAND ${CMAKE_COMMAND} --build . --config release
  142. INSTALL_COMMAND ${CMAKE_COMMAND} --build . --config release --target install
  143. URL_MD5 fb59398329002c98d4d92238324c4187
  144. )
  145. else ()
  146. set(LIB_PROTOC "protoc")
  147. set(LIB_PROTOBUF "protobuf")
  148. ExternalProject_Add(ADD_${LIB_PROTOBUF}
  149. URL http://cdn.tarsyun.com/src/protobuf-cpp-3.11.3.tar.gz
  150. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  151. PREFIX ${CMAKE_BINARY_DIR}
  152. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  153. CONFIGURE_COMMAND ${CMAKE_COMMAND} cmake -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/protobuf -DBUILD_SHARED_LIBS=OFF
  154. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/protobuf-lib
  155. BUILD_IN_SOURCE 1
  156. BUILD_COMMAND make
  157. URL_MD5 fb59398329002c98d4d92238324c4187
  158. )
  159. endif ()
  160. INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/protobuf/ DESTINATION thirdparty)
  161. add_dependencies(thirdparty ADD_${LIB_PROTOBUF})
  162. endif ()
  163. if (TARS_SSL)
  164. set(SSL_DIR "${THIRDPARTY_PATH}/openssl")
  165. set(SSL_DIR_INC "${THIRDPARTY_PATH}/openssl/include/")
  166. set(SSL_DIR_LIB "${THIRDPARTY_PATH}/openssl/lib")
  167. include_directories(${SSL_DIR_INC})
  168. link_directories(${SSL_DIR_LIB})
  169. if (WIN32)
  170. set(LIB_SSL "libssl")
  171. set(LIB_CRYPTO "libcrypto")
  172. ExternalProject_Add(ADD_${LIB_SSL}
  173. URL http://cdn.tarsyun.com/src/openssl-1.1.1l.tar.gz
  174. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  175. PREFIX ${CMAKE_BINARY_DIR}
  176. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  177. CONFIGURE_COMMAND perl Configure --prefix=${CMAKE_BINARY_DIR}/src/openssl --openssldir=ssl VC-WIN64A no-asm
  178. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/openssl-lib
  179. BUILD_IN_SOURCE 1
  180. BUILD_COMMAND nmake
  181. INSTALL_COMMAND nmake install_sw
  182. URL_MD5 ac0d4387f3ba0ad741b0580dd45f6ff3
  183. )
  184. else ()
  185. set(LIB_SSL "ssl")
  186. set(LIB_CRYPTO "crypto")
  187. ExternalProject_Add(ADD_${LIB_SSL}
  188. URL http://cdn.tarsyun.com/src/openssl-1.1.1l.tar.gz
  189. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  190. PREFIX ${CMAKE_BINARY_DIR}
  191. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  192. CONFIGURE_COMMAND ./config --prefix=${CMAKE_BINARY_DIR}/src/openssl --openssldir=ssl no-shared
  193. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/openssl-lib
  194. BUILD_IN_SOURCE 1
  195. BUILD_COMMAND make
  196. INSTALL_COMMAND make install_sw
  197. URL_MD5 ac0d4387f3ba0ad741b0580dd45f6ff3
  198. )
  199. endif ()
  200. INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/openssl/ DESTINATION thirdparty)
  201. add_dependencies(thirdparty ADD_${LIB_SSL})
  202. endif ()
  203. if (TARS_MYSQL)
  204. set(MYSQL_DIR_INC "${THIRDPARTY_PATH}/mysql/include")
  205. set(MYSQL_DIR_LIB "${THIRDPARTY_PATH}/mysql/lib")
  206. include_directories(${MYSQL_DIR_INC})
  207. link_directories(${MYSQL_DIR_LIB})
  208. if (WIN32)
  209. set(LIB_MYSQL "libmysql")
  210. ExternalProject_Add(ADD_${LIB_MYSQL}
  211. URL http://cdn.tarsyun.com/src/mysql-connector-c-6.1.11-src.fixed.zip
  212. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  213. PREFIX ${CMAKE_BINARY_DIR}
  214. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  215. CONFIGURE_COMMAND ${CMAKE_COMMAND} . -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/mysql -DBUILD_CONFIG=mysql_release
  216. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/mysql-lib
  217. BUILD_IN_SOURCE 1
  218. BUILD_COMMAND ${CMAKE_COMMAND} --build . --config release
  219. INSTALL_COMMAND ${CMAKE_COMMAND} --build . --config release --target install
  220. URL_MD5 bad636fe9bcc9bb62e3f5b784495a9b5
  221. )
  222. else ()
  223. set(LIB_MYSQL "mysqlclient")
  224. ExternalProject_Add(ADD_${LIB_MYSQL}
  225. URL http://cdn.tarsyun.com/src/mysql-connector-c-6.1.11-src.fixed.tar.gz
  226. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  227. PREFIX ${CMAKE_BINARY_DIR}
  228. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  229. CONFIGURE_COMMAND ${CMAKE_COMMAND} . -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DDISABLE_SHARED=1
  230. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/mysql-lib
  231. BUILD_IN_SOURCE 1
  232. BUILD_COMMAND make mysqlclient
  233. URL_MD5 3578d736b9d493eae076a67e3ed473eb
  234. )
  235. endif ()
  236. INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/mysql/lib DESTINATION thirdparty)
  237. INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/mysql/include/ DESTINATION thirdparty/include/mysql)
  238. add_dependencies(thirdparty ADD_${LIB_MYSQL})
  239. endif ()
  240. if (TARS_HTTP2)
  241. set(NGHTTP2_DIR_INC "${THIRDPARTY_PATH}/nghttp2/include/")
  242. set(NGHTTP2_DIR_LIB "${THIRDPARTY_PATH}/nghttp2/lib")
  243. set(NGHTTP2_DIR_LIB64 "${THIRDPARTY_PATH}/nghttp2/lib64")
  244. include_directories(${NGHTTP2_DIR_INC})
  245. link_directories(${NGHTTP2_DIR_LIB})
  246. link_directories(${NGHTTP2_DIR_LIB64})
  247. set(LIB_HTTP2 "nghttp2_static")
  248. if (WIN32)
  249. ExternalProject_Add(ADD_${LIB_HTTP2}
  250. URL http://cdn.tarsyun.com/src/nghttp2-1.40.0.tar.gz
  251. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  252. PREFIX ${CMAKE_BINARY_DIR}
  253. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  254. CONFIGURE_COMMAND ${CMAKE_COMMAND} . -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/nghttp2 -DENABLE_LIB_ONLY=ON -DENABLE_STATIC_LIB=ON
  255. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/nghttp2-lib
  256. BUILD_IN_SOURCE 1
  257. BUILD_COMMAND ${CMAKE_COMMAND} --build . --config release
  258. INSTALL_COMMAND ${CMAKE_COMMAND} --build . --config release --target install
  259. URL_MD5 5df375bbd532fcaa7cd4044b54b1188d
  260. )
  261. else ()
  262. ExternalProject_Add(ADD_${LIB_HTTP2}
  263. URL http://cdn.tarsyun.com/src/nghttp2-1.40.0.tar.gz
  264. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  265. PREFIX ${CMAKE_BINARY_DIR}
  266. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  267. CONFIGURE_COMMAND ${CMAKE_COMMAND} . -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/nghttp2 -DENABLE_LIB_ONLY=ON -DENABLE_STATIC_LIB=ON
  268. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/nghttp2-lib
  269. BUILD_IN_SOURCE 1
  270. BUILD_COMMAND make
  271. URL_MD5 5df375bbd532fcaa7cd4044b54b1188d
  272. )
  273. endif ()
  274. INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/nghttp2/ DESTINATION thirdparty)
  275. add_dependencies(thirdparty ADD_${LIB_HTTP2})
  276. endif ()
  277. message("----------------------------------------------------")
  278. message("TARS_MYSQL: ${TARS_MYSQL}")
  279. message("TARS_HTTP2: ${TARS_HTTP2}")
  280. message("TARS_SSL: ${TARS_SSL}")
  281. message("TARS_PROTOBUF: ${TARS_PROTOBUF}")
  282. message("TARS_GPERF: ${TARS_GPERF}")