summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladislav Vaintroub <wlad@mariadb.com>2017-03-30 21:08:06 +0000
committerVladislav Vaintroub <wlad@mariadb.com>2017-03-30 21:08:06 +0000
commit30f9497f35d106c2939c127c5cd550b6ba5c0710 (patch)
tree9f9eb8d0e9dcd6a81a8e35e3dedac6e7bb8f8010
parent86fa73d95597a9ba9742b3c8ad43ea4a473e051b (diff)
downloadmariadb-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.cmake41
-rw-r--r--cmake/zlib.cmake31
-rw-r--r--plugin/aws_key_management/CMakeLists.txt25
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})
+