Thirdparty.cmake 13 KB

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