diff options
author | Vladislav Vaintroub <wlad@mariadb.com> | 2017-03-30 21:08:06 +0000 |
---|---|---|
committer | Vladislav Vaintroub <wlad@mariadb.com> | 2017-03-30 21:08:06 +0000 |
commit | 30f9497f35d106c2939c127c5cd550b6ba5c0710 (patch) | |
tree | 9f9eb8d0e9dcd6a81a8e35e3dedac6e7bb8f8010 | |
parent | 86fa73d95597a9ba9742b3c8ad43ea4a473e051b (diff) | |
download | mariadb-git-30f9497f35d106c2939c127c5cd550b6ba5c0710.tar.gz |
Windows build : use vcpkg libraroes if VCPKG_ROOT is set
- Allow vcpkg's-build zlib and AWS c++ sdk (for KMS plugin)
- Simplify zlib detection
- Allow AWS SDK to be built with precompiled libraries,
on Windows
-rw-r--r-- | cmake/os/Windows.cmake | 41 | ||||
-rw-r--r-- | cmake/zlib.cmake | 31 | ||||
-rw-r--r-- | plugin/aws_key_management/CMakeLists.txt | 25 |
3 files changed, 53 insertions, 44 deletions
diff --git a/cmake/os/Windows.cmake b/cmake/os/Windows.cmake index 96dc992079e..50ee75fe3a3 100644 --- a/cmake/os/Windows.cmake +++ b/cmake/os/Windows.cmake @@ -23,6 +23,7 @@ INCLUDE (CheckFunctionExists) INCLUDE (CheckCSourceRuns) INCLUDE (CheckSymbolExists) INCLUDE (CheckTypeSize) +INCLUDE (misc) # message_once # Optionally read user configuration, generated by configure.js. # This is left for backward compatibility reasons only. @@ -109,7 +110,6 @@ IF(MSVC) STRING(REPLACE "/Zi" "/Z7" "${flag}" "${${flag}}") ENDFOREACH() - # Fix CMake's predefined huge stack size FOREACH(type EXE SHARED MODULE) STRING(REGEX REPLACE "/STACK:([^ ]+)" "" CMAKE_${type}_LINKER_FLAGS "${CMAKE_${type}_LINKER_FLAGS}") @@ -120,7 +120,6 @@ IF(MSVC) SET(CMAKE_${type}_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_${type}_LINKER_FLAGS_RELWITHDEBINFO} /OPT:REF /release") ENDFOREACH() - # Mark 32 bit executables large address aware so they can # use > 2GB address space IF(CMAKE_SIZEOF_VOID_P MATCHES 4) @@ -136,10 +135,42 @@ IF(MSVC) #TODO: update the code and remove the disabled warnings SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4800 /wd4805 /wd4996") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4800 /wd4805 /wd4996 /wd4291 /wd4577 /we4099") - set(CMAKE_SYSTEM_IGNORE_PATH ${CMAKE_SYSTEM_IGNORE_PATH}) -ENDIF() -set(CMAKE_SYSTEM_IGNORE_PATH ${CMAKE_SYSTEM_IGNORE_PATH}) + # VCPKG integration + SET(VCPKG_ROOT "" CACHE STRING "Root vcpkg directory") + IF (VCPKG_ROOT_DIR) + SET(_VCPKG_INSTALLED_DIR ${VCPKG_ROOT_DIR}/installed) + + IF(CMAKE_SIZEOF_VOID_P MATCHES 4) + SET(_VCPKG_TARGET_TRIPLET_ARCH x86) + ELSE() + SET(_VCPKG_TARGET_TRIPLET_ARCH x64) + ENDIF() + + IF (MSVC_CRT_TYPE MATCHES "/MT") + SET(_VCPKG_TARGET_TRIPLET ${_VCPKG_TARGET_TRIPLET_ARCH}-windows-static) + ELSE() + SET(_VCPKG_TARGET_TRIPLET ${_VCPKG_TARGET_TRIPLET_ARCH}-windows) + ENDIF() + + IF(MSVC_CRT_TYPE MATCHES "/M[TD]d") + LIST(APPEND CMAKE_LIBRARY_PATH ${_VCPKG_INSTALLED_DIR}/${_VCPKG_TARGET_TRIPLET}/debug) + ELSE() + LIST(APPEND CMAKE_LIBRARY_PATH ${_VCPKG_INSTALLED_DIR}/${_VCPKG_TARGET_TRIPLET}/lib) + ENDIF() + LIST(APPEND CMAKE_INCLUDE_PATH ${_VCPKG_INSTALLED_DIR}/${_VCPKG_TARGET_TRIPLET}/include) + MESSAGE_ONCE(VCPKG_MSG "VCPKG settings : CMAKE_LIBRARY_PATH=${CMAKE_LIBRARY_PATH} ,CMAKE_INCLUDE_PATH=${CMAKE_INCLUDE_PATH}") + + # Fix FindZLIB.cmake on Windows + IF(MSVC_CRT_TYPE MATCHES "/M[TD]d") + FIND_LIBRARY(ZLIB_LIBRARY NAMES zlibd) + ELSE() + FIND_LIBRARY(ZLIB_LIBRARY NAMES zlib) + ENDIF() + ENDIF(VCPKG_ROOT_DIR) + +ENDIF(MSVC) + # Always link with socket library crypt is required for 3rd party (like openssl, if it is used) LINK_LIBRARIES(ws2_32 crypt32) # ..also for tests diff --git a/cmake/zlib.cmake b/cmake/zlib.cmake index 03d2c542ba4..ade5f6e70df 100644 --- a/cmake/zlib.cmake +++ b/cmake/zlib.cmake @@ -35,38 +35,11 @@ ENDMACRO() # ZLIB_LIBRARIES, ZLIB_INCLUDE_DIR and ZLIB_SOURCES # are set after this macro has run -MACRO (MYSQL_CHECK_ZLIB_WITH_COMPRESS) - - IF(CMAKE_SYSTEM_NAME STREQUAL "OS400" OR - CMAKE_SYSTEM_NAME STREQUAL "AIX" OR - CMAKE_SYSTEM_NAME STREQUAL "Windows") - # Use bundled zlib on some platforms by default (system one is too - # old or not existent) - IF (NOT WITH_ZLIB) - SET(WITH_ZLIB "bundled" CACHE STRING "By default use bundled zlib on this platform") - ENDIF() - ENDIF() - +MACRO (MYSQL_CHECK_ZLIB_WITH_COMPRESS) IF(WITH_ZLIB STREQUAL "bundled") MYSQL_USE_BUNDLED_ZLIB() ELSE() - INCLUDE(FindZLIB) - IF(ZLIB_FOUND) - INCLUDE(CheckFunctionExists) - SET(CMAKE_REQUIRED_LIBRARIES z) - CHECK_FUNCTION_EXISTS(crc32 HAVE_CRC32) - CHECK_FUNCTION_EXISTS(compressBound HAVE_COMPRESSBOUND) - CHECK_FUNCTION_EXISTS(deflateBound HAVE_DEFLATEBOUND) - SET(CMAKE_REQUIRED_LIBRARIES) - IF(HAVE_CRC32 AND HAVE_COMPRESSBOUND AND HAVE_DEFLATEBOUND) - SET(WITH_ZLIB "system" CACHE STRING - "Which zlib to use (possible values are 'bundled' or 'system')") - SET(ZLIB_SOURCES "") - ELSE() - SET(ZLIB_FOUND FALSE CACHE INTERNAL "Zlib found but not usable") - MESSAGE(STATUS "system zlib found but not usable") - ENDIF() - ENDIF() + FIND_PACKAGE(ZLIB) IF(NOT ZLIB_FOUND) MYSQL_USE_BUNDLED_ZLIB() ENDIF() diff --git a/plugin/aws_key_management/CMakeLists.txt b/plugin/aws_key_management/CMakeLists.txt index 26c74047b8b..ff55bb975fc 100644 --- a/plugin/aws_key_management/CMakeLists.txt +++ b/plugin/aws_key_management/CMakeLists.txt @@ -49,13 +49,15 @@ ENDIF() FIND_LIBRARY(AWS_CPP_SDK_CORE NAMES aws-cpp-sdk-core PATH_SUFFIXES "${SDK_INSTALL_BINARY_PREFIX}") -FIND_LIBRARY(AWS_CPP_SDK_KMS NAMES aws-cpp-sdk-core PATH_SUFFIXES "${SDK_INSTALL_BINARY_PREFIX}") +FIND_LIBRARY(AWS_CPP_SDK_KMS NAMES aws-cpp-sdk-kms PATH_SUFFIXES "${SDK_INSTALL_BINARY_PREFIX}") SET(CMAKE_REQUIRED_FLAGS ${CXX11_FLAGS}) -CHECK_INCLUDE_FILE_CXX(aws/kms/KMSClient.h HAVE_AWS_HEADERS) +FIND_PATH(AWS_CPP_SDK_INCLUDE_DIR NAMES aws/kms/KMSClient.h) -IF(AWS_CPP_SDK_CORE AND AWS_CPP_SDK_KMS AND HAVE_AWS_HEADERS) - # AWS C++ SDK installed +IF(AWS_CPP_SDK_CORE AND AWS_CPP_SDK_KMS AND AWS_CPP_SDK_INCLUDE_DIR) + # AWS C++ SDK installed + INCLUDE_DIRECTORIES(${AWS_CPP_SDK_INCLUDE_DIR}) SET(AWS_SDK_LIBS ${AWS_CPP_SDK_CORE} ${AWS_CPP_SDK_KMS}) + MESSAGE_ONCE(AWS_CPP_SDK_FOUND_MSG "Found AWS C++ SDK : Libraries : ${AWS_SDK_LIBS}, include : ${AWS_CPP_SDK_INCLUDE_DIR}") ELSE() OPTION(AWS_SDK_EXTERNAL_PROJECT "Allow download and build AWS C++ SDK" OFF) IF(NOT AWS_SDK_EXTERNAL_PROJECT) @@ -122,11 +124,6 @@ ELSE() ADD_DEPENDENCIES(${lib} aws_sdk_cpp) SET(loc "${CMAKE_BINARY_DIR}/aws_sdk_cpp/lib/${CMAKE_STATIC_LIBRARY_PREFIX}${lib}${CMAKE_STATIC_LIBRARY_SUFFIX}") SET_TARGET_PROPERTIES(${lib} PROPERTIES IMPORTED_LOCATION ${loc}) - IF(WIN32) - SET_TARGET_PROPERTIES(${lib} PROPERTIES IMPORTED_LINK_INTERFACE_LIBRARIES "bcrypt;winhttp;wininet;userenv") - ELSE() - SET_TARGET_PROPERTIES(${lib} PROPERTIES IMPORTED_LINK_INTERFACE_LIBRARIES "${SSL_LIBRARIES};${CURL_LIBRARIES};${UUID_LIBRARIES}") - ENDIF() ENDFOREACH() IF(CMAKE_SYSTEM_NAME MATCHES "Linux") @@ -141,4 +138,12 @@ MYSQL_ADD_PLUGIN(aws_key_management aws_key_management_plugin.cc COMPONENT aws-key-management) ADD_DEFINITIONS(${SSL_DEFINES}) # Need to know whether openssl should be initialized SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX11_FLAGS}") -TARGET_LINK_LIBRARIES(aws_key_management ${AWS_SDK_LIBS}) + +IF(WIN32) + SET(AWS_CPP_SDK_DEPENDENCIES bcrypt winhttp wininet userenv version) +ELSE() + SET(AWS_CPP_SDK_DEPENDENCIES ${SSL_LIBRARIES} ${CURL_LIBRARIES} ${UUID_LIBRARIES}) +ENDIF() + +TARGET_LINK_LIBRARIES(aws_key_management ${AWS_SDK_LIBS} ${AWS_CPP_SDK_DEPENDENCIES}) + |