Thirdparty.cmake 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345
  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. message("CMAKE_BUILD_TYPE:${CMAKE_BUILD_TYPE}")
  91. ExternalProject_Add(ADD_${LIB_GTEST}
  92. URL http://cdn.tarsyun.com/src/release-1.10.0.zip
  93. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  94. PREFIX ${CMAKE_BINARY_DIR}
  95. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  96. 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
  97. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/gtest-lib
  98. BUILD_IN_SOURCE 1
  99. BUILD_COMMAND ${CMAKE_COMMAND} --build . --config ${CMAKE_BUILD_TYPE}
  100. INSTALL_COMMAND ${CMAKE_COMMAND} --build . --config ${CMAKE_BUILD_TYPE} --target install
  101. URL_MD5 82358affdd7ab94854c8ee73a180fc53
  102. )
  103. else()
  104. set(LIB_GTEST "libgtest")
  105. ExternalProject_Add(ADD_${LIB_GTEST}
  106. URL http://cdn.tarsyun.com/src/release-1.10.0.tar.gz
  107. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  108. PREFIX ${CMAKE_BINARY_DIR}
  109. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  110. CONFIGURE_COMMAND ${CMAKE_COMMAND} . -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/gtest
  111. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/gtest-lib
  112. BUILD_IN_SOURCE 1
  113. BUILD_COMMAND make
  114. URL_MD5 ecd1fa65e7de707cd5c00bdac56022cd
  115. )
  116. endif()
  117. INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/gtest/ DESTINATION thirdparty)
  118. add_dependencies(thirdparty ADD_${LIB_GTEST})
  119. if (TARS_PROTOBUF)
  120. set(PROTOBUF_DIR_INC "${THIRDPARTY_PATH}/protobuf/include")
  121. set(PROTOBUF_DIR_LIB "${THIRDPARTY_PATH}/protobuf/lib")
  122. set(PROTOBUF_DIR_LIB64 "${THIRDPARTY_PATH}/protobuf/lib64")
  123. include_directories(${PROTOBUF_DIR_INC})
  124. link_directories(${PROTOBUF_DIR_LIB})
  125. link_directories(${PROTOBUF_DIR_LIB64})
  126. if (WIN32)
  127. set(LIB_PROTOC "libprotoc")
  128. set(LIB_PROTOBUF "libprotobuf")
  129. ExternalProject_Add(ADD_${LIB_PROTOBUF}
  130. URL http://cdn.tarsyun.com/src/protobuf-cpp-3.11.3.tar.gz
  131. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  132. PREFIX ${CMAKE_BINARY_DIR}
  133. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  134. CONFIGURE_COMMAND ${CMAKE_COMMAND} cmake -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/protobuf -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON
  135. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/protobuf-lib
  136. BUILD_IN_SOURCE 1
  137. BUILD_COMMAND ${CMAKE_COMMAND} --build . --config release
  138. INSTALL_COMMAND ${CMAKE_COMMAND} --build . --config release --target install
  139. URL_MD5 fb59398329002c98d4d92238324c4187
  140. )
  141. else ()
  142. set(LIB_PROTOC "protoc")
  143. set(LIB_PROTOBUF "protobuf")
  144. ExternalProject_Add(ADD_${LIB_PROTOBUF}
  145. URL http://cdn.tarsyun.com/src/protobuf-cpp-3.11.3.tar.gz
  146. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  147. PREFIX ${CMAKE_BINARY_DIR}
  148. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  149. CONFIGURE_COMMAND ${CMAKE_COMMAND} cmake -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/protobuf -DBUILD_SHARED_LIBS=OFF
  150. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/protobuf-lib
  151. BUILD_IN_SOURCE 1
  152. BUILD_COMMAND make
  153. URL_MD5 fb59398329002c98d4d92238324c4187
  154. )
  155. endif ()
  156. INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/protobuf/ DESTINATION thirdparty)
  157. add_dependencies(thirdparty ADD_${LIB_PROTOBUF})
  158. endif ()
  159. if (TARS_SSL)
  160. set(SSL_DIR "${THIRDPARTY_PATH}/openssl")
  161. set(SSL_DIR_INC "${THIRDPARTY_PATH}/openssl/include/")
  162. set(SSL_DIR_LIB "${THIRDPARTY_PATH}/openssl/lib")
  163. include_directories(${SSL_DIR_INC})
  164. link_directories(${SSL_DIR_LIB})
  165. if (WIN32)
  166. set(LIB_SSL "libssl")
  167. set(LIB_CRYPTO "libcrypto")
  168. ExternalProject_Add(ADD_${LIB_SSL}
  169. URL http://cdn.tarsyun.com/src/openssl-1.1.1d.tar.gz
  170. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  171. PREFIX ${CMAKE_BINARY_DIR}
  172. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  173. CONFIGURE_COMMAND perl Configure --prefix=${CMAKE_BINARY_DIR}/src/openssl VC-WIN64A no-asm
  174. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/openssl-lib
  175. BUILD_IN_SOURCE 1
  176. BUILD_COMMAND nmake
  177. INSTALL_COMMAND nmake install
  178. URL_MD5 3be209000dbc7e1b95bcdf47980a3baa
  179. )
  180. else ()
  181. set(LIB_SSL "ssl")
  182. set(LIB_CRYPTO "crypto")
  183. ExternalProject_Add(ADD_${LIB_SSL}
  184. URL http://cdn.tarsyun.com/src/openssl-1.1.1d.tar.gz
  185. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  186. PREFIX ${CMAKE_BINARY_DIR}
  187. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  188. CONFIGURE_COMMAND ./config --prefix=${CMAKE_BINARY_DIR}/src/openssl no-shared
  189. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/openssl-lib
  190. BUILD_IN_SOURCE 1
  191. BUILD_COMMAND make
  192. URL_MD5 3be209000dbc7e1b95bcdf47980a3baa
  193. )
  194. endif ()
  195. INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/openssl/ DESTINATION thirdparty)
  196. add_dependencies(thirdparty ADD_${LIB_SSL})
  197. endif ()
  198. if (TARS_MYSQL)
  199. set(MYSQL_DIR_INC "${THIRDPARTY_PATH}/mysql/include")
  200. set(MYSQL_DIR_LIB "${THIRDPARTY_PATH}/mysql/lib")
  201. include_directories(${MYSQL_DIR_INC})
  202. link_directories(${MYSQL_DIR_LIB})
  203. if (WIN32)
  204. set(LIB_MYSQL "libmysql")
  205. ExternalProject_Add(ADD_${LIB_MYSQL}
  206. URL http://cdn.tarsyun.com/src/mysql-connector-c-6.1.11-src.zip
  207. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  208. PREFIX ${CMAKE_BINARY_DIR}
  209. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  210. CONFIGURE_COMMAND ${CMAKE_COMMAND} . -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/mysql -DBUILD_CONFIG=mysql_release
  211. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/mysql-lib
  212. BUILD_IN_SOURCE 1
  213. BUILD_COMMAND ${CMAKE_COMMAND} --build . --config release
  214. INSTALL_COMMAND ${CMAKE_COMMAND} --build . --config release --target install
  215. URL_MD5 62de01beffc48348708c983a585b4dc1
  216. )
  217. else ()
  218. set(LIB_MYSQL "mysqlclient")
  219. ExternalProject_Add(ADD_${LIB_MYSQL}
  220. URL http://cdn.tarsyun.com/src/mysql-connector-c-6.1.11-src.tar.gz
  221. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  222. PREFIX ${CMAKE_BINARY_DIR}
  223. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  224. CONFIGURE_COMMAND ${CMAKE_COMMAND} . -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DDISABLE_SHARED=1
  225. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/mysql-lib
  226. BUILD_IN_SOURCE 1
  227. BUILD_COMMAND make mysqlclient
  228. URL_MD5 98ca2071f9d4c6b73146cc0455f6b914
  229. )
  230. endif ()
  231. INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/mysql/lib DESTINATION thirdparty)
  232. INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/mysql/include/ DESTINATION thirdparty/include/mysql)
  233. add_dependencies(thirdparty ADD_${LIB_MYSQL})
  234. endif ()
  235. if (TARS_HTTP2)
  236. set(NGHTTP2_DIR_INC "${THIRDPARTY_PATH}/nghttp2/include/")
  237. set(NGHTTP2_DIR_LIB "${THIRDPARTY_PATH}/nghttp2/lib")
  238. set(NGHTTP2_DIR_LIB64 "${THIRDPARTY_PATH}/nghttp2/lib64")
  239. include_directories(${NGHTTP2_DIR_INC})
  240. link_directories(${NGHTTP2_DIR_LIB})
  241. link_directories(${NGHTTP2_DIR_LIB64})
  242. set(LIB_HTTP2 "nghttp2_static")
  243. if (WIN32)
  244. ExternalProject_Add(ADD_${LIB_HTTP2}
  245. URL http://cdn.tarsyun.com/src/nghttp2-1.40.0.tar.gz
  246. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  247. PREFIX ${CMAKE_BINARY_DIR}
  248. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  249. CONFIGURE_COMMAND ${CMAKE_COMMAND} . -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/nghttp2 -DENABLE_LIB_ONLY=ON -DENABLE_STATIC_LIB=ON
  250. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/nghttp2-lib
  251. BUILD_IN_SOURCE 1
  252. BUILD_COMMAND ${CMAKE_COMMAND} --build . --config release
  253. INSTALL_COMMAND ${CMAKE_COMMAND} --build . --config release --target install
  254. URL_MD5 5df375bbd532fcaa7cd4044b54b1188d
  255. )
  256. else ()
  257. ExternalProject_Add(ADD_${LIB_HTTP2}
  258. URL http://cdn.tarsyun.com/src/nghttp2-1.40.0.tar.gz
  259. DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
  260. PREFIX ${CMAKE_BINARY_DIR}
  261. INSTALL_DIR ${CMAKE_SOURCE_DIR}
  262. CONFIGURE_COMMAND ${CMAKE_COMMAND} . -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/nghttp2 -DENABLE_LIB_ONLY=ON -DENABLE_STATIC_LIB=ON
  263. SOURCE_DIR ${CMAKE_BINARY_DIR}/src/nghttp2-lib
  264. BUILD_IN_SOURCE 1
  265. BUILD_COMMAND make
  266. URL_MD5 5df375bbd532fcaa7cd4044b54b1188d
  267. )
  268. endif ()
  269. INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/nghttp2/ DESTINATION thirdparty)
  270. add_dependencies(thirdparty ADD_${LIB_HTTP2})
  271. endif ()
  272. message("----------------------------------------------------")
  273. message("TARS_MYSQL: ${TARS_MYSQL}")
  274. message("TARS_HTTP2: ${TARS_HTTP2}")
  275. message("TARS_SSL: ${TARS_SSL}")
  276. message("TARS_PROTOBUF: ${TARS_PROTOBUF}")
  277. message("TARS_GPERF: ${TARS_GPERF}")