1MACRO (SKIP_AWS_SDK MSG) 2 SET(${RETVAL} OFF PARENT_SCOPE) 3 SET(${REASON} ${MSG} PARENT_SCOPE) 4 RETURN() 5ENDMACRO() 6 7FUNCTION (CHECK_AWS_SDK RETVAL REASON) 8 # AWS_SDK_EXTERNAL_PROJECT must be ON 9 IF(NOT AWS_SDK_EXTERNAL_PROJECT) 10 SKIP_AWS_SDK("AWS_SDK_EXTERNAL_PROJECT is not ON") 11 ENDIF() 12 IF(NOT NOT_FOR_DISTRIBUTION) 13 SKIP_AWS_SDK("AWS SDK has Apache 2.0 License which is not complatible with GPLv2. Set -DNOT_FOR_DISTRIBUTION=ON if you need it") 14 ENDIF() 15 # Check compiler support 16 IF(CMAKE_CXX_COMPILER_ID MATCHES "GNU") 17 EXECUTE_PROCESS(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) 18 IF (GCC_VERSION VERSION_LESS 4.8) 19 SKIP_AWS_SDK("GCC VERSION too old (${GCC_VERSION}, required is 4.8 or later") 20 ENDIF() 21 ELSEIF (CMAKE_CXX_COMPILER_ID MATCHES "Clang") 22 IF ((CMAKE_CXX_COMPILER_VERSION AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.3) OR 23 (CLANG_VERSION_STRING AND CLANG_VERSION_STRING VERSION_LESS 3.3)) 24 SKIP_AWS_SDK("Clang version too old, required is 3.3 or later") 25 ENDIF() 26 ELSEIF(MSVC) 27 IF (MSVC_VERSION LESS 1800) 28 SKIP_AWS_SDK("MSVC version too old, required is VS2015 or later") 29 ENDIF() 30 ELSE() 31 SKIP_AWS_SDK("Unsupported compiler") 32 ENDIF() 33 34 # Check OS support 35 IF (NOT(WIN32 OR APPLE OR (CMAKE_SYSTEM_NAME MATCHES "Linux"))) 36 SKIP_AWS_SDK("OS unsupported by AWS SDK") 37 ENDIF() 38 39 # Build from source, using ExternalProject_Add 40 # AWS C++ SDK requires cmake 2.8.12 41 IF(CMAKE_VERSION VERSION_LESS "2.8.12") 42 SKIP_AWS_SDK("CMake is too old") 43 ENDIF() 44 45 IF(UNIX) 46 # Check librairies required for building SDK 47 FIND_PACKAGE(CURL) 48 SET_PACKAGE_PROPERTIES(CURL PROPERTIES TYPE REQUIRED) 49 IF(NOT CURL_FOUND) 50 SKIP_AWS_SDK("AWS C++ SDK requires libcurl development package") 51 ENDIF() 52 FIND_PATH(UUID_INCLUDE_DIR uuid/uuid.h) 53 IF(NOT UUID_INCLUDE_DIR) 54 SKIP_AWS_SDK("AWS C++ SDK requires uuid development package") 55 ENDIF() 56 IF(NOT APPLE) 57 FIND_LIBRARY(UUID_LIBRARIES uuid) 58 SET_PACKAGE_PROPERTIES(UUID_LIBRARIES PROPERTIES TYPE REQUIRED) 59 IF(NOT UUID_LIBRARIES) 60 SKIP_AWS_SDK("AWS C++ SDK requires uuid development package") 61 ENDIF() 62 FIND_PACKAGE(OpenSSL) 63 SET_PACKAGE_PROPERTIES(OpenSSL PROPERTIES TYPE REQUIRED) 64 IF(NOT OPENSSL_FOUND) 65 SKIP_AWS_SDK("AWS C++ SDK requires openssl development package") 66 ENDIF() 67 ENDIF() 68 ENDIF() 69 SET(${RETVAL} ON PARENT_SCOPE) 70ENDFUNCTION() 71 72 73# USE_AWS_SDK_LIBS(target sdk_component1 ... sdk_component_N) 74# Example usage 75# USE_AWS_SDK_LIBS(aws_key_management kms s3) 76FUNCTION(USE_AWS_SDK_LIBS) 77 SET(SDK_COMPONENTS ${ARGN}) 78 LIST(GET SDK_COMPONENTS 0 target) 79 IF(NOT TARGET ${target}) 80 MESSAGE(FATAL_ERROR "${target} is not a valid target") 81 ENDIF() 82 SET(NON_DISTRIBUTABLE_WARNING "Apache 2.0" CACHE INTERNAL "") 83 LIST(REMOVE_AT SDK_COMPONENTS 0) 84 FOREACH(comp ${SDK_COMPONENTS}) 85 SET_PROPERTY(GLOBAL PROPERTY AWS_SDK_LIBS ${comp} APPEND) 86 TARGET_LINK_LIBRARIES(${target} aws-cpp-sdk-${comp}) 87 ENDFOREACH() 88 TARGET_LINK_LIBRARIES(${target} aws-cpp-sdk-core) 89 TARGET_INCLUDE_DIRECTORIES(${target} PRIVATE ${PROJECT_BINARY_DIR}/extra/aws_sdk/aws_sdk_cpp/include) 90 # Link OS libraries that AWS SDK depends on 91 IF(WIN32) 92 TARGET_LINK_LIBRARIES(${target} bcrypt winhttp wininet userenv version) 93 ELSE() 94 FIND_PACKAGE(CURL REQUIRED) 95 FIND_PACKAGE(OpenSSL REQUIRED) 96 TARGET_LINK_LIBRARIES(${target} ${OPENSSL_LIBRARIES} ${CURL_LIBRARIES} ${UUID_LIBRARIES}) 97 ENDIF() 98ENDFUNCTION() 99