123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357 |
- 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)
- 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)
- IF(UNIX AND NOT APPLE)
- FIND_PACKAGE(Curses)
- IF(NOT CURSES_FOUND)
- SET(ERRORMSG "Curses 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 libncurses5-dev(apt-get install libncurses5-dev), on Redhat/Centos and derivates "
- "it is ncurses-devel (yum install ncurses-devel).")
- ENDIF()
- MESSAGE(FATAL_ERROR ${ERRORMSG})
- ENDIF()
- ENDIF()
- 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)
- 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)
- # ExternalProject_Add(ADD_BUSYBOX
- # URL http://cdn.tarsyun.com/src/busybox-1.31.1.tar.bz2
- # 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/busybox
- # SOURCE_DIR ${CMAKE_BINARY_DIR}/src/busybox-lib
- # BUILD_IN_SOURCE 1
- # BUILD_COMMAND ${CMAKE_COMMAND} --build . --config release
- # INSTALL_COMMAND ${CMAKE_COMMAND} --build . --config release --target install
- # URL_MD5 70913edaf2263a157393af07565c17f0
- # )
- # add_dependencies(thirdparty ADD_BUSYBOX)
- # INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/busybox/ 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
- 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
- # LOG_CONFIGURE 1
- # LOG_BUILD 1
- 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
- # LOG_CONFIGURE 1
- # LOG_BUILD 1
- # INSTALL_COMMAND ${CMAKE_COMMAND} -P ${RUN_PROTOBUF_INSTALL_FILE}
- URL_MD5 ecd1fa65e7de707cd5c00bdac56022cd
- )
- endif()
- INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/gtest/ DESTINATION thirdparty)
- #INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/gtest/ DESTINATION thirdparty/include)
- 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
- # LOG_CONFIGURE 1
- # LOG_BUILD 1
- 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
- # LOG_CONFIGURE 1
- # LOG_BUILD 1
- # INSTALL_COMMAND ${CMAKE_COMMAND} -P ${RUN_PROTOBUF_INSTALL_FILE}
- URL_MD5 fb59398329002c98d4d92238324c4187
- )
- endif ()
- INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/protobuf/ DESTINATION thirdparty)
- # INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/protobuf/include/google DESTINATION thirdparty/include)
- 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
- # LOG_CONFIGURE 1
- # LOG_BUILD 1
- 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
- # LOG_CONFIGURE 1
- # LOG_BUILD 1
- # INSTALL_COMMAND ${CMAKE_COMMAND} -P ${RUN_SSL_INSTALL_FILE}
- URL_MD5 3be209000dbc7e1b95bcdf47980a3baa
- )
- endif ()
- INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/openssl/ DESTINATION thirdparty)
- # INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/openssl/include/openssl DESTINATION thirdparty/include)
- 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
- # LOG_CONFIGURE 1
- # LOG_BUILD 1
- 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
- # LOG_CONFIGURE 1
- # LOG_BUILD 1
- # INSTALL_COMMAND ${CMAKE_COMMAND} --build . --config release --target install
- 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
- # LOG_BUILD 1
- # LOG_CONFIGURE 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
- # LOG_BUILD 1
- # LOG_CONFIGURE 1
- BUILD_COMMAND make
- # INSTALL_COMMAND incmake --build . --config release --target install
- URL_MD5 5df375bbd532fcaa7cd4044b54b1188d
- )
- endif ()
- INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/nghttp2/ DESTINATION thirdparty)
- # INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/src/nghttp2/include/nghttp2 DESTINATION thirdparty/include)
- 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}")
|