mirror of
https://gitee.com/TarsCloud/TarsCpp.git
synced 2024-12-22 22:16:38 +08:00
337 lines
13 KiB
CMake
Executable File
337 lines
13 KiB
CMake
Executable File
|
|
option(TARS_MYSQL "option for mysql" ON)
|
|
option(TARS_SSL "option for ssl" OFF)
|
|
option(TARS_HTTP2 "option for http2" OFF)
|
|
option(TARS_PROTOBUF "option for protocol" OFF)
|
|
option(TARS_GPERF "option for gperf" OFF)
|
|
|
|
IF(UNIX)
|
|
FIND_PACKAGE(ZLIB)
|
|
IF(NOT ZLIB_FOUND)
|
|
SET(ERRORMSG "zlib library not found. Please install appropriate package, remove CMakeCache.txt and rerun cmake.")
|
|
IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
|
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).")
|
|
ENDIF()
|
|
MESSAGE(FATAL_ERROR ${ERRORMSG})
|
|
ENDIF()
|
|
|
|
ENDIF(UNIX)
|
|
|
|
if (TARS_MYSQL)
|
|
add_definitions(-DTARS_MYSQL=1)
|
|
endif ()
|
|
|
|
if (TARS_GPERF)
|
|
add_definitions(-DTARS_GPERF=1)
|
|
endif ()
|
|
|
|
if (TARS_SSL)
|
|
add_definitions(-DTARS_SSL=1)
|
|
endif ()
|
|
|
|
if (TARS_HTTP2)
|
|
add_definitions(-DTARS_HTTP2=1)
|
|
endif ()
|
|
|
|
if (TARS_PROTOBUF)
|
|
add_definitions(-DTARS_PROTOBUF=1)
|
|
endif ()
|
|
|
|
#-------------------------------------------------------------
|
|
|
|
set(THIRDPARTY_PATH "${CMAKE_BINARY_DIR}/src")
|
|
|
|
set(LIB_MYSQL)
|
|
set(LIB_HTTP2)
|
|
set(LIB_SSL)
|
|
set(LIB_CRYPTO)
|
|
set(LIB_PROTOBUF)
|
|
set(LIB_GTEST)
|
|
#-------------------------------------------------------------
|
|
|
|
add_custom_target(thirdparty)
|
|
|
|
include(ExternalProject)
|
|
|
|
if (TARS_GPERF)
|
|
|
|
set(GPERF_DIR_INC "${THIRDPARTY_PATH}/gpref/include")
|
|
set(GRPEF_DIR_LIB "${THIRDPARTY_PATH}/gpref/lib")
|
|
include_directories(${GPERF_DIR_INC})
|
|
link_directories(${GRPEF_DIR_LIB})
|
|
|
|
if (UNIX)
|
|
set(LIB_GPERF "profiler")
|
|
|
|
ExternalProject_Add(ADD_${LIB_GPERF}
|
|
URL https://tars-thirdpart-1300910346.cos.ap-guangzhou.myqcloud.com//src/gperftools-2.7.tar.gz
|
|
DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
|
|
PREFIX ${CMAKE_BINARY_DIR}
|
|
INSTALL_DIR ${CMAKE_SOURCE_DIR}
|
|
CONFIGURE_COMMAND ./configure --prefix=${CMAKE_BINARY_DIR}/src/gpref --disable-shared --disable-debugalloc
|
|
SOURCE_DIR ${CMAKE_BINARY_DIR}/src/gpref-lib
|
|
BUILD_IN_SOURCE 1
|
|
BUILD_COMMAND make
|
|
# INSTALL_COMMAND ${CMAKE_COMMAND} --build . --config release --target install
|
|
URL_MD5 c6a852a817e9160c79bdb2d3101b4601
|
|
)
|
|
|
|
add_dependencies(thirdparty ADD_${LIB_GPERF})
|
|
|
|
INSTALL(FILES ${CMAKE_BINARY_DIR}/src/gpref/bin/pprof
|
|
PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ
|
|
DESTINATION thirdparty/bin/)
|
|
INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/gpref/lib DESTINATION thirdparty)
|
|
INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/gpref/include/gperftools DESTINATION thirdparty/include)
|
|
|
|
endif (UNIX)
|
|
|
|
endif (TARS_GPERF)
|
|
|
|
set(LIB_GTEST "libgtest")
|
|
|
|
if(WIN32)
|
|
ExternalProject_Add(ADD_CURL
|
|
URL http://cdn.tarsyun.com/src/curl-7.69.1.tar.gz
|
|
DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
|
|
PREFIX ${CMAKE_BINARY_DIR}
|
|
INSTALL_DIR ${CMAKE_SOURCE_DIR}
|
|
CONFIGURE_COMMAND ${CMAKE_COMMAND} . -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/curl
|
|
SOURCE_DIR ${CMAKE_BINARY_DIR}/src/curl-lib
|
|
BUILD_IN_SOURCE 1
|
|
BUILD_COMMAND ${CMAKE_COMMAND} --build . --config release
|
|
INSTALL_COMMAND ${CMAKE_COMMAND} --build . --config release --target install
|
|
URL_MD5 b9bb5e11d579425154a9f97ed44be9b8
|
|
)
|
|
|
|
add_dependencies(thirdparty ADD_CURL)
|
|
|
|
INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/curl/ DESTINATION thirdparty)
|
|
endif(WIN32)
|
|
|
|
if (WIN32)
|
|
|
|
ExternalProject_Add(ADD_${LIB_GTEST}
|
|
URL http://cdn.tarsyun.com/src/release-1.10.0.zip
|
|
DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
|
|
PREFIX ${CMAKE_BINARY_DIR}
|
|
INSTALL_DIR ${CMAKE_SOURCE_DIR}
|
|
CONFIGURE_COMMAND ${CMAKE_COMMAND} . -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/gtest -Dgtest_force_shared_crt=ON
|
|
SOURCE_DIR ${CMAKE_BINARY_DIR}/src/gtest-lib
|
|
BUILD_IN_SOURCE 1
|
|
BUILD_COMMAND ${CMAKE_COMMAND} --build . --config release
|
|
INSTALL_COMMAND ${CMAKE_COMMAND} --build . --config release --target install
|
|
URL_MD5 82358affdd7ab94854c8ee73a180fc53
|
|
)
|
|
else()
|
|
ExternalProject_Add(ADD_${LIB_GTEST}
|
|
URL http://cdn.tarsyun.com/src/release-1.10.0.tar.gz
|
|
DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
|
|
PREFIX ${CMAKE_BINARY_DIR}
|
|
INSTALL_DIR ${CMAKE_SOURCE_DIR}
|
|
CONFIGURE_COMMAND ${CMAKE_COMMAND} . -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/gtest
|
|
SOURCE_DIR ${CMAKE_BINARY_DIR}/src/gtest-lib
|
|
BUILD_IN_SOURCE 1
|
|
BUILD_COMMAND make
|
|
URL_MD5 ecd1fa65e7de707cd5c00bdac56022cd
|
|
)
|
|
endif()
|
|
|
|
INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/gtest/ DESTINATION thirdparty)
|
|
|
|
add_dependencies(thirdparty ADD_${LIB_GTEST})
|
|
|
|
if (TARS_PROTOBUF)
|
|
set(PROTOBUF_DIR_INC "${THIRDPARTY_PATH}/protobuf/include")
|
|
set(PROTOBUF_DIR_LIB "${THIRDPARTY_PATH}/protobuf/lib")
|
|
set(PROTOBUF_DIR_LIB64 "${THIRDPARTY_PATH}/protobuf/lib64")
|
|
include_directories(${PROTOBUF_DIR_INC})
|
|
link_directories(${PROTOBUF_DIR_LIB})
|
|
link_directories(${PROTOBUF_DIR_LIB64})
|
|
|
|
if (WIN32)
|
|
set(LIB_PROTOC "libprotoc")
|
|
set(LIB_PROTOBUF "libprotobuf")
|
|
|
|
ExternalProject_Add(ADD_${LIB_PROTOBUF}
|
|
URL http://cdn.tarsyun.com/src/protobuf-cpp-3.11.3.tar.gz
|
|
DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
|
|
PREFIX ${CMAKE_BINARY_DIR}
|
|
INSTALL_DIR ${CMAKE_SOURCE_DIR}
|
|
CONFIGURE_COMMAND ${CMAKE_COMMAND} cmake -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/protobuf -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON
|
|
SOURCE_DIR ${CMAKE_BINARY_DIR}/src/protobuf-lib
|
|
BUILD_IN_SOURCE 1
|
|
BUILD_COMMAND ${CMAKE_COMMAND} --build . --config release
|
|
INSTALL_COMMAND ${CMAKE_COMMAND} --build . --config release --target install
|
|
URL_MD5 fb59398329002c98d4d92238324c4187
|
|
)
|
|
else ()
|
|
set(LIB_PROTOC "protoc")
|
|
set(LIB_PROTOBUF "protobuf")
|
|
|
|
ExternalProject_Add(ADD_${LIB_PROTOBUF}
|
|
URL http://cdn.tarsyun.com/src/protobuf-cpp-3.11.3.tar.gz
|
|
DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
|
|
PREFIX ${CMAKE_BINARY_DIR}
|
|
INSTALL_DIR ${CMAKE_SOURCE_DIR}
|
|
CONFIGURE_COMMAND ${CMAKE_COMMAND} cmake -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/protobuf -DBUILD_SHARED_LIBS=OFF
|
|
SOURCE_DIR ${CMAKE_BINARY_DIR}/src/protobuf-lib
|
|
BUILD_IN_SOURCE 1
|
|
BUILD_COMMAND make
|
|
URL_MD5 fb59398329002c98d4d92238324c4187
|
|
)
|
|
|
|
endif ()
|
|
|
|
INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/protobuf/ DESTINATION thirdparty)
|
|
|
|
add_dependencies(thirdparty ADD_${LIB_PROTOBUF})
|
|
|
|
endif ()
|
|
|
|
|
|
if (TARS_SSL)
|
|
set(SSL_DIR "${THIRDPARTY_PATH}/openssl")
|
|
set(SSL_DIR_INC "${THIRDPARTY_PATH}/openssl/include/")
|
|
set(SSL_DIR_LIB "${THIRDPARTY_PATH}/openssl/lib")
|
|
include_directories(${SSL_DIR_INC})
|
|
link_directories(${SSL_DIR_LIB})
|
|
|
|
if (WIN32)
|
|
set(LIB_SSL "libssl")
|
|
set(LIB_CRYPTO "libcrypto")
|
|
|
|
ExternalProject_Add(ADD_${LIB_SSL}
|
|
URL http://cdn.tarsyun.com/src/openssl-1.1.1d.tar.gz
|
|
DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
|
|
PREFIX ${CMAKE_BINARY_DIR}
|
|
INSTALL_DIR ${CMAKE_SOURCE_DIR}
|
|
CONFIGURE_COMMAND perl Configure --prefix=${CMAKE_BINARY_DIR}/src/openssl VC-WIN64A no-asm
|
|
SOURCE_DIR ${CMAKE_BINARY_DIR}/src/openssl-lib
|
|
BUILD_IN_SOURCE 1
|
|
BUILD_COMMAND nmake
|
|
INSTALL_COMMAND nmake install
|
|
URL_MD5 3be209000dbc7e1b95bcdf47980a3baa
|
|
)
|
|
else ()
|
|
set(LIB_SSL "ssl")
|
|
set(LIB_CRYPTO "crypto")
|
|
|
|
ExternalProject_Add(ADD_${LIB_SSL}
|
|
URL http://cdn.tarsyun.com/src/openssl-1.1.1d.tar.gz
|
|
DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
|
|
PREFIX ${CMAKE_BINARY_DIR}
|
|
INSTALL_DIR ${CMAKE_SOURCE_DIR}
|
|
CONFIGURE_COMMAND ./config --prefix=${CMAKE_BINARY_DIR}/src/openssl no-shared
|
|
SOURCE_DIR ${CMAKE_BINARY_DIR}/src/openssl-lib
|
|
BUILD_IN_SOURCE 1
|
|
BUILD_COMMAND make
|
|
URL_MD5 3be209000dbc7e1b95bcdf47980a3baa
|
|
)
|
|
|
|
endif ()
|
|
|
|
INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/openssl/ DESTINATION thirdparty)
|
|
|
|
add_dependencies(thirdparty ADD_${LIB_SSL})
|
|
endif ()
|
|
|
|
if (TARS_MYSQL)
|
|
set(MYSQL_DIR_INC "${THIRDPARTY_PATH}/mysql/include")
|
|
set(MYSQL_DIR_LIB "${THIRDPARTY_PATH}/mysql/lib")
|
|
include_directories(${MYSQL_DIR_INC})
|
|
link_directories(${MYSQL_DIR_LIB})
|
|
|
|
if (WIN32)
|
|
set(LIB_MYSQL "libmysql")
|
|
|
|
ExternalProject_Add(ADD_${LIB_MYSQL}
|
|
URL http://cdn.tarsyun.com/src/mysql-connector-c-6.1.11-src.zip
|
|
DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
|
|
PREFIX ${CMAKE_BINARY_DIR}
|
|
INSTALL_DIR ${CMAKE_SOURCE_DIR}
|
|
CONFIGURE_COMMAND ${CMAKE_COMMAND} . -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/mysql -DBUILD_CONFIG=mysql_release
|
|
SOURCE_DIR ${CMAKE_BINARY_DIR}/src/mysql-lib
|
|
BUILD_IN_SOURCE 1
|
|
BUILD_COMMAND ${CMAKE_COMMAND} --build . --config release
|
|
INSTALL_COMMAND ${CMAKE_COMMAND} --build . --config release --target install
|
|
URL_MD5 62de01beffc48348708c983a585b4dc1
|
|
)
|
|
|
|
else ()
|
|
set(LIB_MYSQL "mysqlclient")
|
|
|
|
ExternalProject_Add(ADD_${LIB_MYSQL}
|
|
URL http://cdn.tarsyun.com/src/mysql-connector-c-6.1.11-src.tar.gz
|
|
DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
|
|
PREFIX ${CMAKE_BINARY_DIR}
|
|
INSTALL_DIR ${CMAKE_SOURCE_DIR}
|
|
CONFIGURE_COMMAND ${CMAKE_COMMAND} . -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DDISABLE_SHARED=1
|
|
SOURCE_DIR ${CMAKE_BINARY_DIR}/src/mysql-lib
|
|
BUILD_IN_SOURCE 1
|
|
BUILD_COMMAND make mysqlclient
|
|
URL_MD5 98ca2071f9d4c6b73146cc0455f6b914
|
|
)
|
|
|
|
endif ()
|
|
|
|
INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/mysql/lib DESTINATION thirdparty)
|
|
INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/mysql/include/ DESTINATION thirdparty/include/mysql)
|
|
|
|
add_dependencies(thirdparty ADD_${LIB_MYSQL})
|
|
endif ()
|
|
|
|
|
|
if (TARS_HTTP2)
|
|
|
|
set(NGHTTP2_DIR_INC "${THIRDPARTY_PATH}/nghttp2/include/")
|
|
set(NGHTTP2_DIR_LIB "${THIRDPARTY_PATH}/nghttp2/lib")
|
|
set(NGHTTP2_DIR_LIB64 "${THIRDPARTY_PATH}/nghttp2/lib64")
|
|
include_directories(${NGHTTP2_DIR_INC})
|
|
link_directories(${NGHTTP2_DIR_LIB})
|
|
link_directories(${NGHTTP2_DIR_LIB64})
|
|
|
|
set(LIB_HTTP2 "nghttp2_static")
|
|
|
|
if (WIN32)
|
|
ExternalProject_Add(ADD_${LIB_HTTP2}
|
|
URL http://cdn.tarsyun.com/src/nghttp2-1.40.0.tar.gz
|
|
DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
|
|
PREFIX ${CMAKE_BINARY_DIR}
|
|
INSTALL_DIR ${CMAKE_SOURCE_DIR}
|
|
CONFIGURE_COMMAND ${CMAKE_COMMAND} . -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/nghttp2 -DENABLE_LIB_ONLY=ON -DENABLE_STATIC_LIB=ON
|
|
SOURCE_DIR ${CMAKE_BINARY_DIR}/src/nghttp2-lib
|
|
BUILD_IN_SOURCE 1
|
|
BUILD_COMMAND ${CMAKE_COMMAND} --build . --config release
|
|
INSTALL_COMMAND ${CMAKE_COMMAND} --build . --config release --target install
|
|
URL_MD5 5df375bbd532fcaa7cd4044b54b1188d
|
|
)
|
|
|
|
else ()
|
|
ExternalProject_Add(ADD_${LIB_HTTP2}
|
|
URL http://cdn.tarsyun.com/src/nghttp2-1.40.0.tar.gz
|
|
DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/download
|
|
PREFIX ${CMAKE_BINARY_DIR}
|
|
INSTALL_DIR ${CMAKE_SOURCE_DIR}
|
|
CONFIGURE_COMMAND ${CMAKE_COMMAND} . -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/src/nghttp2 -DENABLE_LIB_ONLY=ON -DENABLE_STATIC_LIB=ON
|
|
SOURCE_DIR ${CMAKE_BINARY_DIR}/src/nghttp2-lib
|
|
BUILD_IN_SOURCE 1
|
|
BUILD_COMMAND make
|
|
URL_MD5 5df375bbd532fcaa7cd4044b54b1188d
|
|
)
|
|
|
|
endif ()
|
|
|
|
INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/nghttp2/ DESTINATION thirdparty)
|
|
|
|
add_dependencies(thirdparty ADD_${LIB_HTTP2})
|
|
|
|
endif ()
|
|
|
|
message("----------------------------------------------------")
|
|
message("TARS_MYSQL: ${TARS_MYSQL}")
|
|
message("TARS_HTTP2: ${TARS_HTTP2}")
|
|
message("TARS_SSL: ${TARS_SSL}")
|
|
message("TARS_PROTOBUF: ${TARS_PROTOBUF}")
|
|
message("TARS_GPERF: ${TARS_GPERF}")
|