diff --git a/CMakeLists.txt b/CMakeLists.txt index ea072c8b641..294a5eff2d9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -76,7 +76,7 @@ else () message(STATUS "Building tests") enable_testing() # Testing dependency - find_package(GTest 1.11 REQUIRED ) + find_package(GTest 1.11 REQUIRED) include(GoogleTest) # for gtest_discover_tests() endif () @@ -88,6 +88,12 @@ else () pkg_check_modules(CJSON REQUIRED IMPORTED_TARGET libcjson>=1.7.15) find_package(aws-crt-cpp 0.17.9 EXACT REQUIRED COMPONENTS io) + message(STATUS "Preparing core library build") + add_subdirectory(src) + + message(STATUS "Preparing CPack metadata") + add_subdirectory(packaging) + message(WARNING "The dependencies are currently checked only for a basic Linux build, new ones need to be added for other platforms yet") message(WARNING "Anything below this warning is a TODO not yet implemented.") @@ -104,5 +110,4 @@ else () message(STATUS "Setting up docs.") message(STATUS "Add support support for SDK flags.") message(STATUS "Add previously available options.") - endif () diff --git a/cmake/Findaws-crt-cpp.cmake b/cmake/Findaws-crt-cpp.cmake index d09d3e6a231..96e74632f48 100644 --- a/cmake/Findaws-crt-cpp.cmake +++ b/cmake/Findaws-crt-cpp.cmake @@ -1,3 +1,3 @@ # This is a temporary mock file to be able to test our current build setup. # The file will later be read from CRTpp installation -message(WARNING "AWSCRTpp is mocked for testing of experimental feature branch. Remove this file when CRT starts providing it.") \ No newline at end of file +message(WARNING "aws-crt-cpp package is mocked for testing of experimental feature branch. Remove this file when CRT starts providing it.") \ No newline at end of file diff --git a/packaging/CMakeLists.txt b/packaging/CMakeLists.txt new file mode 100644 index 00000000000..e4c68551487 --- /dev/null +++ b/packaging/CMakeLists.txt @@ -0,0 +1,23 @@ +if (WIN32) #Starting simple with archive only packages + set(CPACK_GENERATOR ZIP) +else () + set(CPACK_GENERATOR TGZ) +endif () + +set(CPACK_PACKAGE_NAME "aws-cpp-sdk") +set(CPACK_PACKAGE_VENDOR "Amazon Web Services") +set(CPACK_PACKAGE_INSTALL_DIRECTORY ${CPACK_PACKAGE_NAME}) +set(CPACK_PACKAGE_VERSION_MAJOR ${aws-cpp-sdk_VERSION_MAJOR}) +set(CPACK_PACKAGE_VERSION_MINOR ${aws-cpp-sdk_VERSION_MINOR}) +set(CPACK_PACKAGE_VERSION_PATCH ${aws-cpp-sdk_VERSION_PATCH}) +set(CPACK_VERBATIM_VARIABLES YES) +set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_LIST_DIR}/../LICENSE) +set(CPACK_RESOURCE_FILE_README${CMAKE_CURRENT_LIST_DIR}/../Readme.md) +set(CPACK_MONOLITHIC_INSTALL OFF) +set(CPACK_COMPONENTS_GROUPING IGNORE) +include(CPack) +cpack_add_component(aws-cpp-sdk_core + DISPLAY_NAME Core + DESCRIPTION "Core library" + REQUIRED + ) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 00000000000..0da163c8464 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,4 @@ +add_subdirectory(aws-cpp-sdk-core) +if (BUILD_TESTING) + add_subdirectory(aws-cpp-sdk-core-tests) +endif () \ No newline at end of file diff --git a/src/aws-cpp-sdk-core-tests/CMakeLists.txt b/src/aws-cpp-sdk-core-tests/CMakeLists.txt index 9ac4c22e81f..3aeeaecb1f9 100644 --- a/src/aws-cpp-sdk-core-tests/CMakeLists.txt +++ b/src/aws-cpp-sdk-core-tests/CMakeLists.txt @@ -1,123 +1,127 @@ -add_project(aws-cpp-sdk-core-tests - "Tests for the AWS Core C++ Library" - testing-resources - aws-cpp-sdk-core ) - -# Headers are included in the source so that they show up in Visual Studio. -# They are included elsewhere for consistency. -file(GLOB AWS_SRC "${CMAKE_CURRENT_SOURCE_DIR}/aws/*.cpp") -file(GLOB AWS_AUTH_SRC "${CMAKE_CURRENT_SOURCE_DIR}/aws/auth/*.cpp") -file(GLOB AWS_CONFIG_SRC "${CMAKE_CURRENT_SOURCE_DIR}/aws/config/*.cpp") -file(GLOB AWS_CLIENT_SRC "${CMAKE_CURRENT_SOURCE_DIR}/aws/client/*.cpp") -file(GLOB AWS_NET_SRC "${CMAKE_CURRENT_SOURCE_DIR}/aws/net/*.cpp") -file(GLOB HTTP_SRC "${CMAKE_CURRENT_SOURCE_DIR}/http/*.cpp") -file(GLOB UTILS_SRC "${CMAKE_CURRENT_SOURCE_DIR}/utils/*.cpp") -file(GLOB UTILS_CRYPTO_SRC "${CMAKE_CURRENT_SOURCE_DIR}/utils/crypto/*.cpp") -file(GLOB UTILS_EVENT_SRC "${CMAKE_CURRENT_SOURCE_DIR}/utils/event/*.cpp") -file(GLOB UTILS_JSON_SRC "${CMAKE_CURRENT_SOURCE_DIR}/utils/json/*.cpp") -file(GLOB UTILS_STREAM_SRC "${CMAKE_CURRENT_SOURCE_DIR}/utils/stream/*.cpp") -file(GLOB UTILS_LOGGING_SRC "${CMAKE_CURRENT_SOURCE_DIR}/utils/logging/*.cpp") -file(GLOB UTILS_RATE_LIMITER_SRC "${CMAKE_CURRENT_SOURCE_DIR}/utils/ratelimiter/*.cpp") -file(GLOB UTILS_XML_SRC "${CMAKE_CURRENT_SOURCE_DIR}/utils/xml/*.cpp") -file(GLOB UTILS_THREADING_SRC "${CMAKE_CURRENT_SOURCE_DIR}/utils/threading/*.cpp") -file(GLOB UTILS_MEMORY_SRC "${CMAKE_CURRENT_SOURCE_DIR}/utils/memory/*.cpp") -file(GLOB MONITORING_SRC "${CMAKE_CURRENT_SOURCE_DIR}/monitoring/*.cpp") - - -file(GLOB AWS_CPP_SDK_CORE_TESTS_SRC - "${CMAKE_CURRENT_SOURCE_DIR}/RunTests.cpp" - "${CMAKE_CURRENT_SOURCE_DIR}/VersionTests.cpp" - ${AWS_SRC} - ${AWS_AUTH_SRC} - ${AWS_CONFIG_SRC} - ${MONITORING_SRC} - ${AWS_CLIENT_SRC} - ${AWS_NET_SRC} - ${HTTP_SRC} - ${UTILS_SRC} - ${UTILS_CRYPTO_SRC} - ${UTILS_EVENT_SRC} - ${UTILS_JSON_SRC} - ${UTILS_STREAM_SRC} - ${UTILS_XML_SRC} - ${UTILS_THREADING_SRC} - ${UTILS_MEMORY_SRC} - ${UTILS_LOGGING_SRC} - ${UTILS_RATE_LIMITER_SRC} -) - -if(PLATFORM_WINDOWS) - if(MSVC) - source_group("Source Files\\aws" FILES ${AWS_SRC}) - source_group("Source Files\\aws\\auth" FILES ${AWS_AUTH_SRC}) - source_group("Source Files\\aws\\config" FILES ${AWS_CONFIG_SRC}) - source_group("Source Files\\aws\\client" FILES ${AWS_CLIENT_SRC}) - source_group("Source Files\\aws\\net" FILES ${AWS_NET_SRC}) - source_group("Source Files\\http" FILES ${HTTP_SRC}) - source_group("Source Files\\monitoring" FILES ${MONITORING_SRC}) - source_group("Source Files\\utils" FILES ${UTILS_SRC}) - source_group("Source Files\\utils\\crypto" FILES ${UTILS_CRYPTO_SRC}) - source_group("Source Files\\utils\\event" FILES ${UTILS_EVENT_SRC}) - source_group("Source Files\\utils\\json" FILES ${UTILS_JSON_SRC}) - source_group("Source Files\\utils\\stream" FILES ${UTILS_STREAM_SRC}) - source_group("Source Files\\utils\\xml" FILES ${UTILS_XML_SRC}) - source_group("Source Files\\utils\\logging" FILES ${UTILS_LOGGING_SRC}) - source_group("Source Files\\utils\\ratelimiter" FILES ${UTILS_RATE_LIMITER_SRC}) - source_group("Source Files\\utils\\memory" FILES ${UTILS_MEMORY_SRC}) - source_group("Source Files\\utils\\threading" FILES ${UTILS_THREADING_SRC}) - endif() -endif() - -if(PLATFORM_CUSTOM) - if(COMMAND add_custom_core_testing_definitions) - add_custom_core_testing_definitions() - endif() -endif() - -if (CMAKE_CROSSCOMPILING) - set(AUTORUN_UNIT_TESTS OFF) -endif() - -if (AUTORUN_UNIT_TESTS) - enable_testing() -endif() - -if(USE_WINDOWS_DLL_SEMANTICS AND BUILD_SHARED_LIBS) - add_definitions(-DGTEST_LINKED_AS_SHARED_LIBRARY=1) -endif() - -if(PLATFORM_ANDROID AND BUILD_SHARED_LIBS) - add_library(${PROJECT_NAME} ${AWS_CPP_SDK_CORE_TESTS_SRC}) -else() - add_executable(${PROJECT_NAME} ${AWS_CPP_SDK_CORE_TESTS_SRC}) -endif() - -set_compiler_flags(${PROJECT_NAME}) -set_compiler_warnings(${PROJECT_NAME}) - -if (NO_HTTP_CLIENT) - target_compile_definitions(${PROJECT_NAME} PRIVATE "NO_HTTP_CLIENT") -endif() - -target_link_libraries(${PROJECT_NAME} ${PROJECT_LIBS} ${CLIENT_LIBS}) - -if(ENABLE_FUNCTIONAL_TESTING) - target_link_libraries(${PROJECT_NAME} aws-cpp-sdk-document-test) -endif() - -add_custom_command(TARGET aws-cpp-sdk-core-tests PRE_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_directory - ${CMAKE_CURRENT_SOURCE_DIR}/resources ${CMAKE_CURRENT_BINARY_DIR}) - -if (ENABLE_HTTP_CLIENT_TESTING) - add_definitions(-DENABLE_HTTP_CLIENT_TESTING) -endif() - -if (AUTORUN_UNIT_TESTS) - ADD_CUSTOM_COMMAND( TARGET ${PROJECT_NAME} POST_BUILD COMMAND $ - ARGS "--gtest_shuffle" "--gtest_repeat=3") -endif() - -if(NOT CMAKE_CROSSCOMPILING) - SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES OUTPUT_NAME ${PROJECT_NAME}) -endif() +if (NOT LEGACY_BUILD) + message(WARNING "Building core with new cmake scripts not yet implemented") +else () + add_project(aws-cpp-sdk-core-tests + "Tests for the AWS Core C++ Library" + testing-resources + aws-cpp-sdk-core) + + # Headers are included in the source so that they show up in Visual Studio. + # They are included elsewhere for consistency. + file(GLOB AWS_SRC "${CMAKE_CURRENT_SOURCE_DIR}/aws/*.cpp") + file(GLOB AWS_AUTH_SRC "${CMAKE_CURRENT_SOURCE_DIR}/aws/auth/*.cpp") + file(GLOB AWS_CONFIG_SRC "${CMAKE_CURRENT_SOURCE_DIR}/aws/config/*.cpp") + file(GLOB AWS_CLIENT_SRC "${CMAKE_CURRENT_SOURCE_DIR}/aws/client/*.cpp") + file(GLOB AWS_NET_SRC "${CMAKE_CURRENT_SOURCE_DIR}/aws/net/*.cpp") + file(GLOB HTTP_SRC "${CMAKE_CURRENT_SOURCE_DIR}/http/*.cpp") + file(GLOB UTILS_SRC "${CMAKE_CURRENT_SOURCE_DIR}/utils/*.cpp") + file(GLOB UTILS_CRYPTO_SRC "${CMAKE_CURRENT_SOURCE_DIR}/utils/crypto/*.cpp") + file(GLOB UTILS_EVENT_SRC "${CMAKE_CURRENT_SOURCE_DIR}/utils/event/*.cpp") + file(GLOB UTILS_JSON_SRC "${CMAKE_CURRENT_SOURCE_DIR}/utils/json/*.cpp") + file(GLOB UTILS_STREAM_SRC "${CMAKE_CURRENT_SOURCE_DIR}/utils/stream/*.cpp") + file(GLOB UTILS_LOGGING_SRC "${CMAKE_CURRENT_SOURCE_DIR}/utils/logging/*.cpp") + file(GLOB UTILS_RATE_LIMITER_SRC "${CMAKE_CURRENT_SOURCE_DIR}/utils/ratelimiter/*.cpp") + file(GLOB UTILS_XML_SRC "${CMAKE_CURRENT_SOURCE_DIR}/utils/xml/*.cpp") + file(GLOB UTILS_THREADING_SRC "${CMAKE_CURRENT_SOURCE_DIR}/utils/threading/*.cpp") + file(GLOB UTILS_MEMORY_SRC "${CMAKE_CURRENT_SOURCE_DIR}/utils/memory/*.cpp") + file(GLOB MONITORING_SRC "${CMAKE_CURRENT_SOURCE_DIR}/monitoring/*.cpp") + + + file(GLOB AWS_CPP_SDK_CORE_TESTS_SRC + "${CMAKE_CURRENT_SOURCE_DIR}/RunTests.cpp" + "${CMAKE_CURRENT_SOURCE_DIR}/VersionTests.cpp" + ${AWS_SRC} + ${AWS_AUTH_SRC} + ${AWS_CONFIG_SRC} + ${MONITORING_SRC} + ${AWS_CLIENT_SRC} + ${AWS_NET_SRC} + ${HTTP_SRC} + ${UTILS_SRC} + ${UTILS_CRYPTO_SRC} + ${UTILS_EVENT_SRC} + ${UTILS_JSON_SRC} + ${UTILS_STREAM_SRC} + ${UTILS_XML_SRC} + ${UTILS_THREADING_SRC} + ${UTILS_MEMORY_SRC} + ${UTILS_LOGGING_SRC} + ${UTILS_RATE_LIMITER_SRC} + ) + + if (PLATFORM_WINDOWS) + if (MSVC) + source_group("Source Files\\aws" FILES ${AWS_SRC}) + source_group("Source Files\\aws\\auth" FILES ${AWS_AUTH_SRC}) + source_group("Source Files\\aws\\config" FILES ${AWS_CONFIG_SRC}) + source_group("Source Files\\aws\\client" FILES ${AWS_CLIENT_SRC}) + source_group("Source Files\\aws\\net" FILES ${AWS_NET_SRC}) + source_group("Source Files\\http" FILES ${HTTP_SRC}) + source_group("Source Files\\monitoring" FILES ${MONITORING_SRC}) + source_group("Source Files\\utils" FILES ${UTILS_SRC}) + source_group("Source Files\\utils\\crypto" FILES ${UTILS_CRYPTO_SRC}) + source_group("Source Files\\utils\\event" FILES ${UTILS_EVENT_SRC}) + source_group("Source Files\\utils\\json" FILES ${UTILS_JSON_SRC}) + source_group("Source Files\\utils\\stream" FILES ${UTILS_STREAM_SRC}) + source_group("Source Files\\utils\\xml" FILES ${UTILS_XML_SRC}) + source_group("Source Files\\utils\\logging" FILES ${UTILS_LOGGING_SRC}) + source_group("Source Files\\utils\\ratelimiter" FILES ${UTILS_RATE_LIMITER_SRC}) + source_group("Source Files\\utils\\memory" FILES ${UTILS_MEMORY_SRC}) + source_group("Source Files\\utils\\threading" FILES ${UTILS_THREADING_SRC}) + endif () + endif () + + if (PLATFORM_CUSTOM) + if (COMMAND add_custom_core_testing_definitions) + add_custom_core_testing_definitions() + endif () + endif () + + if (CMAKE_CROSSCOMPILING) + set(AUTORUN_UNIT_TESTS OFF) + endif () + + if (AUTORUN_UNIT_TESTS) + enable_testing() + endif () + + if (USE_WINDOWS_DLL_SEMANTICS AND BUILD_SHARED_LIBS) + add_definitions(-DGTEST_LINKED_AS_SHARED_LIBRARY=1) + endif () + + if (PLATFORM_ANDROID AND BUILD_SHARED_LIBS) + add_library(${PROJECT_NAME} ${AWS_CPP_SDK_CORE_TESTS_SRC}) + else () + add_executable(${PROJECT_NAME} ${AWS_CPP_SDK_CORE_TESTS_SRC}) + endif () + + set_compiler_flags(${PROJECT_NAME}) + set_compiler_warnings(${PROJECT_NAME}) + + if (NO_HTTP_CLIENT) + target_compile_definitions(${PROJECT_NAME} PRIVATE "NO_HTTP_CLIENT") + endif () + + target_link_libraries(${PROJECT_NAME} ${PROJECT_LIBS} ${CLIENT_LIBS}) + + if (ENABLE_FUNCTIONAL_TESTING) + target_link_libraries(${PROJECT_NAME} aws-cpp-sdk-document-test) + endif () + + add_custom_command(TARGET aws-cpp-sdk-core-tests PRE_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_directory + ${CMAKE_CURRENT_SOURCE_DIR}/resources ${CMAKE_CURRENT_BINARY_DIR}) + + if (ENABLE_HTTP_CLIENT_TESTING) + add_definitions(-DENABLE_HTTP_CLIENT_TESTING) + endif () + + if (AUTORUN_UNIT_TESTS) + ADD_CUSTOM_COMMAND(TARGET ${PROJECT_NAME} POST_BUILD COMMAND $ + ARGS "--gtest_shuffle" "--gtest_repeat=3") + endif () + + if (NOT CMAKE_CROSSCOMPILING) + SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES OUTPUT_NAME ${PROJECT_NAME}) + endif () +endif () \ No newline at end of file diff --git a/src/aws-cpp-sdk-core/CMakeLists.txt b/src/aws-cpp-sdk-core/CMakeLists.txt index c44546b0e56..f5d577a487e 100644 --- a/src/aws-cpp-sdk-core/CMakeLists.txt +++ b/src/aws-cpp-sdk-core/CMakeLists.txt @@ -1,154 +1,157 @@ -add_project(aws-cpp-sdk-core "Core http and utility library for the AWS C++ SDK") - -if(VERSION_STRING) - set(AWSSDK_VERSION_STRING ${VERSION_STRING}) - - message(STATUS "Updating version info to ${VERSION_STRING}") - if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/include/aws/core/VersionConfig.h}) - FILE(REMOVE ${CMAKE_CURRENT_SOURCE_DIR}/include/aws/core/VersionConfig.h}) - endif() - string(REPLACE "." ";" VERSION_LIST ${VERSION_STRING}) - list(GET VERSION_LIST 0 AWSSDK_VERSION_MAJOR) - list(GET VERSION_LIST 1 AWSSDK_VERSION_MINOR) - list(GET VERSION_LIST 2 AWSSDK_VERSION_FULLPATCH) - string(REPLACE "-" ";" AWSSDK_VERSION_PRERELEASE ${AWSSDK_VERSION_FULLPATCH}) - list(GET AWSSDK_VERSION_PRERELEASE 0 AWSSDK_VERSION_PATCH) - list(GET AWSSDK_VERSION_PRERELEASE -1 AWSSDK_VERSION_PRERELEASE) - - set(AWSSDK_VERSION_MAJOR ${AWSSDK_VERSION_MAJOR}) - set(AWSSDK_VERSION_MINOR ${AWSSDK_VERSION_MINOR}) - set(AWSSDK_VERSION_PATCH ${AWSSDK_VERSION_PATCH}) - configure_file( - "${CMAKE_CURRENT_SOURCE_DIR}/include/aws/core/VersionConfig.h.in" - "${CMAKE_CURRENT_SOURCE_DIR}/include/aws/core/VersionConfig.h") -else() - message("Not able to compute versioning string, not updating.") -endif() - -# If building shared libraries, custom memory management enabled is the default, otherwise regular memory management is the default. -# We make custom memory management the default on shared library builds because it is safer and much more difficult to accidentally -# allocate in one DLLs heap while freeing in another (which will lead to runtime crashes) -if(CUSTOM_MEMORY_MANAGEMENT OR (BUILD_SHARED_LIBS AND NOT DEFINED CUSTOM_MEMORY_MANAGEMENT)) - set(USE_AWS_MEMORY_MANAGEMENT ON) - message(STATUS "Custom memory management enabled; stl objects now using custom allocators") -else() - set(USE_AWS_MEMORY_MANAGEMENT OFF) - message(STATUS "Custom memory management disabled") -endif() - -configure_file("${CMAKE_CURRENT_SOURCE_DIR}/include/aws/core/SDKConfig.h.in" - "${CMAKE_CURRENT_SOURCE_DIR}/include/aws/core/SDKConfig.h") - -# Pretty sure we can use a regex here... -# Go ahead and glob every directory so we can work around Visual Studio's crap. -file(GLOB AWS_HEADERS "include/aws/core/*.h") -file(GLOB AWS_AUTH_HEADERS "include/aws/core/auth/*.h") -file(GLOB AWS_CLIENT_HEADERS "include/aws/core/client/*.h") -file(GLOB AWS_INTERNAL_HEADERS "include/aws/core/internal/*.h") -file(GLOB NET_HEADERS "include/aws/core/net/*.h") -file(GLOB HTTP_HEADERS "include/aws/core/http/*.h") -file(GLOB HTTP_STANDARD_HEADERS "include/aws/core/http/standard/*.h") -file(GLOB CONFIG_HEADERS "include/aws/core/config/*.h") -file(GLOB CONFIG_DEFAULTS_HEADERS "include/aws/core/config/defaults/*.h") -file(GLOB MONITORING_HEADERS "include/aws/core/monitoring/*.h") -file(GLOB PLATFORM_HEADERS "include/aws/core/platform/*.h") -file(GLOB UTILS_HEADERS "include/aws/core/utils/*.h") -file(GLOB UTILS_EVENT_HEADERS "include/aws/core/utils/event/*.h") -file(GLOB UTILS_BASE64_HEADERS "include/aws/core/utils/base64/*.h") -file(GLOB UTILS_CRYPTO_HEADERS "include/aws/core/utils/crypto/*.h") -file(GLOB UTILS_JSON_HEADERS "include/aws/core/utils/json/*.h") -file(GLOB UTILS_THREADING_HEADERS "include/aws/core/utils/threading/*.h") -file(GLOB UTILS_XML_HEADERS "include/aws/core/utils/xml/*.h") -file(GLOB UTILS_MEMORY_HEADERS "include/aws/core/utils/memory/*.h") -file(GLOB UTILS_STL_HEADERS "include/aws/core/utils/memory/stl/*.h") -file(GLOB UTILS_LOGGING_HEADERS "include/aws/core/utils/logging/*.h") -file(GLOB UTILS_RATE_LIMITER_HEADERS "include/aws/core/utils/ratelimiter/*.h") -file(GLOB UTILS_STREAM_HEADERS "include/aws/core/utils/stream/*.h") -file(GLOB CJSON_HEADERS "include/aws/core/external/cjson/*.h") -file(GLOB TINYXML2_HEADERS "include/aws/core/external/tinyxml2/tinyxml2.h") - -file(GLOB AWS_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/*.cpp") -file(GLOB AWS_TINYXML2_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/external/tinyxml2/*.cpp") -file(GLOB CJSON_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/external/cjson/*.cpp") -file(GLOB AWS_AUTH_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/auth/*.cpp") -file(GLOB AWS_CLIENT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/client/*.cpp") -file(GLOB AWS_INTERNAL_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/internal/*.cpp") -file(GLOB AWS_MODEL_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/aws/model/*.cpp") -file(GLOB HTTP_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/http/*.cpp") -file(GLOB HTTP_STANDARD_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/http/standard/*.cpp") -file(GLOB CONFIG_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/config/*.cpp") -file(GLOB CONFIG_DEFAULTS_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/config/defaults/*.cpp") -file(GLOB MONITORING_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/monitoring/*.cpp") -file(GLOB UTILS_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/utils/*.cpp") -file(GLOB UTILS_EVENT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/utils/event/*.cpp") -file(GLOB UTILS_BASE64_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/utils/base64/*.cpp") -file(GLOB UTILS_CRYPTO_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/utils/crypto/*.cpp") -file(GLOB UTILS_JSON_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/utils/json/*.cpp") -file(GLOB UTILS_THREADING_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/utils/threading/*.cpp") -file(GLOB UTILS_XML_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/utils/xml/*.cpp") -file(GLOB UTILS_LOGGING_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/utils/logging/*.cpp") -file(GLOB UTILS_MEMORY_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/utils/memory/*.cpp") -file(GLOB UTILS_MEMORY_STL_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/utils/memory/stl/*.cpp") -file(GLOB UTILS_STREAM_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/utils/stream/*.cpp") -file(GLOB UTILS_CRYPTO_FACTORY_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/utils/crypto/factory/*.cpp") - -include(CheckCSourceCompiles) -include(CheckCXXSourceCompiles) -include(CheckCSourceRuns) -include(CheckCXXSourceRuns) - - -# http client implementations -if(ENABLE_CURL_CLIENT) - file(GLOB HTTP_CURL_CLIENT_HEADERS "include/aws/core/http/curl/*.h") - file(GLOB HTTP_CURL_CLIENT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/http/curl/*.cpp") - set(CMAKE_REQUIRED_LIBRARIES ${CURL_LIBRARIES}) - set(CHECK_CURL_HAS_H2 " +if (NOT LEGACY_BUILD) + message(WARNING "Building core with new cmake scripts not yet implemented") +else () + add_project(aws-cpp-sdk-core "Core http and utility library for the AWS C++ SDK") + + if (VERSION_STRING) + set(AWSSDK_VERSION_STRING ${VERSION_STRING}) + + message(STATUS "Updating version info to ${VERSION_STRING}") + if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/include/aws/core/VersionConfig.h}) + FILE(REMOVE ${CMAKE_CURRENT_SOURCE_DIR}/include/aws/core/VersionConfig.h}) + endif () + string(REPLACE "." ";" VERSION_LIST ${VERSION_STRING}) + list(GET VERSION_LIST 0 AWSSDK_VERSION_MAJOR) + list(GET VERSION_LIST 1 AWSSDK_VERSION_MINOR) + list(GET VERSION_LIST 2 AWSSDK_VERSION_FULLPATCH) + string(REPLACE "-" ";" AWSSDK_VERSION_PRERELEASE ${AWSSDK_VERSION_FULLPATCH}) + list(GET AWSSDK_VERSION_PRERELEASE 0 AWSSDK_VERSION_PATCH) + list(GET AWSSDK_VERSION_PRERELEASE -1 AWSSDK_VERSION_PRERELEASE) + + set(AWSSDK_VERSION_MAJOR ${AWSSDK_VERSION_MAJOR}) + set(AWSSDK_VERSION_MINOR ${AWSSDK_VERSION_MINOR}) + set(AWSSDK_VERSION_PATCH ${AWSSDK_VERSION_PATCH}) + configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/include/aws/core/VersionConfig.h.in" + "${CMAKE_CURRENT_SOURCE_DIR}/include/aws/core/VersionConfig.h") + else () + message("Not able to compute versioning string, not updating.") + endif () + + # If building shared libraries, custom memory management enabled is the default, otherwise regular memory management is the default. + # We make custom memory management the default on shared library builds because it is safer and much more difficult to accidentally + # allocate in one DLLs heap while freeing in another (which will lead to runtime crashes) + if (CUSTOM_MEMORY_MANAGEMENT OR (BUILD_SHARED_LIBS AND NOT DEFINED CUSTOM_MEMORY_MANAGEMENT)) + set(USE_AWS_MEMORY_MANAGEMENT ON) + message(STATUS "Custom memory management enabled; stl objects now using custom allocators") + else () + set(USE_AWS_MEMORY_MANAGEMENT OFF) + message(STATUS "Custom memory management disabled") + endif () + + configure_file("${CMAKE_CURRENT_SOURCE_DIR}/include/aws/core/SDKConfig.h.in" + "${CMAKE_CURRENT_SOURCE_DIR}/include/aws/core/SDKConfig.h") + + # Pretty sure we can use a regex here... + # Go ahead and glob every directory so we can work around Visual Studio's crap. + file(GLOB AWS_HEADERS "include/aws/core/*.h") + file(GLOB AWS_AUTH_HEADERS "include/aws/core/auth/*.h") + file(GLOB AWS_CLIENT_HEADERS "include/aws/core/client/*.h") + file(GLOB AWS_INTERNAL_HEADERS "include/aws/core/internal/*.h") + file(GLOB NET_HEADERS "include/aws/core/net/*.h") + file(GLOB HTTP_HEADERS "include/aws/core/http/*.h") + file(GLOB HTTP_STANDARD_HEADERS "include/aws/core/http/standard/*.h") + file(GLOB CONFIG_HEADERS "include/aws/core/config/*.h") + file(GLOB CONFIG_DEFAULTS_HEADERS "include/aws/core/config/defaults/*.h") + file(GLOB MONITORING_HEADERS "include/aws/core/monitoring/*.h") + file(GLOB PLATFORM_HEADERS "include/aws/core/platform/*.h") + file(GLOB UTILS_HEADERS "include/aws/core/utils/*.h") + file(GLOB UTILS_EVENT_HEADERS "include/aws/core/utils/event/*.h") + file(GLOB UTILS_BASE64_HEADERS "include/aws/core/utils/base64/*.h") + file(GLOB UTILS_CRYPTO_HEADERS "include/aws/core/utils/crypto/*.h") + file(GLOB UTILS_JSON_HEADERS "include/aws/core/utils/json/*.h") + file(GLOB UTILS_THREADING_HEADERS "include/aws/core/utils/threading/*.h") + file(GLOB UTILS_XML_HEADERS "include/aws/core/utils/xml/*.h") + file(GLOB UTILS_MEMORY_HEADERS "include/aws/core/utils/memory/*.h") + file(GLOB UTILS_STL_HEADERS "include/aws/core/utils/memory/stl/*.h") + file(GLOB UTILS_LOGGING_HEADERS "include/aws/core/utils/logging/*.h") + file(GLOB UTILS_RATE_LIMITER_HEADERS "include/aws/core/utils/ratelimiter/*.h") + file(GLOB UTILS_STREAM_HEADERS "include/aws/core/utils/stream/*.h") + file(GLOB CJSON_HEADERS "include/aws/core/external/cjson/*.h") + file(GLOB TINYXML2_HEADERS "include/aws/core/external/tinyxml2/tinyxml2.h") + + file(GLOB AWS_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/*.cpp") + file(GLOB AWS_TINYXML2_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/external/tinyxml2/*.cpp") + file(GLOB CJSON_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/external/cjson/*.cpp") + file(GLOB AWS_AUTH_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/auth/*.cpp") + file(GLOB AWS_CLIENT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/client/*.cpp") + file(GLOB AWS_INTERNAL_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/internal/*.cpp") + file(GLOB AWS_MODEL_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/aws/model/*.cpp") + file(GLOB HTTP_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/http/*.cpp") + file(GLOB HTTP_STANDARD_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/http/standard/*.cpp") + file(GLOB CONFIG_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/config/*.cpp") + file(GLOB CONFIG_DEFAULTS_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/config/defaults/*.cpp") + file(GLOB MONITORING_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/monitoring/*.cpp") + file(GLOB UTILS_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/utils/*.cpp") + file(GLOB UTILS_EVENT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/utils/event/*.cpp") + file(GLOB UTILS_BASE64_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/utils/base64/*.cpp") + file(GLOB UTILS_CRYPTO_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/utils/crypto/*.cpp") + file(GLOB UTILS_JSON_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/utils/json/*.cpp") + file(GLOB UTILS_THREADING_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/utils/threading/*.cpp") + file(GLOB UTILS_XML_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/utils/xml/*.cpp") + file(GLOB UTILS_LOGGING_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/utils/logging/*.cpp") + file(GLOB UTILS_MEMORY_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/utils/memory/*.cpp") + file(GLOB UTILS_MEMORY_STL_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/utils/memory/stl/*.cpp") + file(GLOB UTILS_STREAM_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/utils/stream/*.cpp") + file(GLOB UTILS_CRYPTO_FACTORY_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/utils/crypto/factory/*.cpp") + + include(CheckCSourceCompiles) + include(CheckCXXSourceCompiles) + include(CheckCSourceRuns) + include(CheckCXXSourceRuns) + + + # http client implementations + if (ENABLE_CURL_CLIENT) + file(GLOB HTTP_CURL_CLIENT_HEADERS "include/aws/core/http/curl/*.h") + file(GLOB HTTP_CURL_CLIENT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/http/curl/*.cpp") + set(CMAKE_REQUIRED_LIBRARIES ${CURL_LIBRARIES}) + set(CHECK_CURL_HAS_H2 " #include int main() { CURL* handle = curl_easy_init(); return curl_easy_setopt(handle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0); }") - set(CHECK_CURL_HAS_TLS_PROXY " + set(CHECK_CURL_HAS_TLS_PROXY " #include int main() { CURL* handle = curl_easy_init(); return curl_easy_setopt(handle, CURLOPT_PROXY_SSLCERT, \"client.pem\"); }") - if (CMAKE_CROSSCOMPILING) - check_c_source_compiles("${CHECK_CURL_HAS_H2}" CURL_HAS_H2) - check_c_source_compiles("${CHECK_CURL_HAS_TLS_PROXY}" CURL_HAS_TLS_PROXY) - else() - check_c_source_runs("${CHECK_CURL_HAS_H2}" CURL_HAS_H2) - check_c_source_runs("${CHECK_CURL_HAS_TLS_PROXY}" CURL_HAS_TLS_PROXY) - endif() -elseif(ENABLE_WINDOWS_CLIENT) - # NOTE: HTTP/2 is not supported when using IXML_HTTP_REQUEST_2 - if(USE_IXML_HTTP_REQUEST_2) - set(HTTP_WINDOWS_CLIENT_HEADERS "include/aws/core/http/windows/IXmlHttpRequest2HttpClient.h") - set(HTTP_WINDOWS_CLIENT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/http/windows/IXmlHttpRequest2HttpClient.cpp") - if(BYPASS_DEFAULT_PROXY) - # add winhttp since IXmlHttpRequest2 can't bypass proxy - list(APPEND HTTP_WINDOWS_CLIENT_HEADERS - "include/aws/core/http/windows/WinSyncHttpClient.h" - "include/aws/core/http/windows/WinHttpSyncHttpClient.h" - "include/aws/core/http/windows/WinConnectionPoolMgr.h" - "include/aws/core/http/windows/WinHttpConnectionPoolMgr.h") - - list(APPEND HTTP_WINDOWS_CLIENT_SOURCE - "${CMAKE_CURRENT_SOURCE_DIR}/source/http/windows/WinSyncHttpClient.cpp" - "${CMAKE_CURRENT_SOURCE_DIR}/source/http/windows/WinHttpSyncHttpClient.cpp" - "${CMAKE_CURRENT_SOURCE_DIR}/source/http/windows/WinConnectionPoolMgr.cpp" - "${CMAKE_CURRENT_SOURCE_DIR}/source/http/windows/WinHttpConnectionPoolMgr.cpp") - endif() - else() - file(GLOB HTTP_WINDOWS_CLIENT_HEADERS "include/aws/core/http/windows/Win*.h") - file(GLOB HTTP_WINDOWS_CLIENT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/http/windows/Win*.cpp") - - # Starting with Windows 10, version 1507, WinINet supports HTTP2. - # https://docs.microsoft.com/en-us/windows/desktop/WinInet/option-flags#INTERNET_OPTION_ENABLE_HTTP_PROTOCOL - # Starting with Windows 10, version 1607, WinHttp supports HTTP2. - # https://docs.microsoft.com/en-us/windows/desktop/WinHttp/option-flags#WINHTTP_OPTION_ENABLE_HTTP_PROTOCOL - set(CMAKE_REQUIRED_LIBRARIES "WinHttp.lib") - check_cxx_source_runs(" + if (CMAKE_CROSSCOMPILING) + check_c_source_compiles("${CHECK_CURL_HAS_H2}" CURL_HAS_H2) + check_c_source_compiles("${CHECK_CURL_HAS_TLS_PROXY}" CURL_HAS_TLS_PROXY) + else () + check_c_source_runs("${CHECK_CURL_HAS_H2}" CURL_HAS_H2) + check_c_source_runs("${CHECK_CURL_HAS_TLS_PROXY}" CURL_HAS_TLS_PROXY) + endif () + elseif (ENABLE_WINDOWS_CLIENT) + # NOTE: HTTP/2 is not supported when using IXML_HTTP_REQUEST_2 + if (USE_IXML_HTTP_REQUEST_2) + set(HTTP_WINDOWS_CLIENT_HEADERS "include/aws/core/http/windows/IXmlHttpRequest2HttpClient.h") + set(HTTP_WINDOWS_CLIENT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/http/windows/IXmlHttpRequest2HttpClient.cpp") + if (BYPASS_DEFAULT_PROXY) + # add winhttp since IXmlHttpRequest2 can't bypass proxy + list(APPEND HTTP_WINDOWS_CLIENT_HEADERS + "include/aws/core/http/windows/WinSyncHttpClient.h" + "include/aws/core/http/windows/WinHttpSyncHttpClient.h" + "include/aws/core/http/windows/WinConnectionPoolMgr.h" + "include/aws/core/http/windows/WinHttpConnectionPoolMgr.h") + + list(APPEND HTTP_WINDOWS_CLIENT_SOURCE + "${CMAKE_CURRENT_SOURCE_DIR}/source/http/windows/WinSyncHttpClient.cpp" + "${CMAKE_CURRENT_SOURCE_DIR}/source/http/windows/WinHttpSyncHttpClient.cpp" + "${CMAKE_CURRENT_SOURCE_DIR}/source/http/windows/WinConnectionPoolMgr.cpp" + "${CMAKE_CURRENT_SOURCE_DIR}/source/http/windows/WinHttpConnectionPoolMgr.cpp") + endif () + else () + file(GLOB HTTP_WINDOWS_CLIENT_HEADERS "include/aws/core/http/windows/Win*.h") + file(GLOB HTTP_WINDOWS_CLIENT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/http/windows/Win*.cpp") + + # Starting with Windows 10, version 1507, WinINet supports HTTP2. + # https://docs.microsoft.com/en-us/windows/desktop/WinInet/option-flags#INTERNET_OPTION_ENABLE_HTTP_PROTOCOL + # Starting with Windows 10, version 1607, WinHttp supports HTTP2. + # https://docs.microsoft.com/en-us/windows/desktop/WinHttp/option-flags#WINHTTP_OPTION_ENABLE_HTTP_PROTOCOL + set(CMAKE_REQUIRED_LIBRARIES "WinHttp.lib") + check_cxx_source_runs(" #include #include int main() { @@ -167,8 +170,8 @@ elseif(ENABLE_WINDOWS_CLIENT) return 1; }" WINHTTP_HAS_H2) - set(CMAKE_REQUIRED_LIBRARIES "Wininet.lib") - check_cxx_source_runs(" + set(CMAKE_REQUIRED_LIBRARIES "Wininet.lib") + check_cxx_source_runs(" #include #include int main() { @@ -184,424 +187,425 @@ elseif(ENABLE_WINDOWS_CLIENT) } return 1; }" WININET_HAS_H2) - unset(CMAKE_REQUIRED_LIBRARIES) - - endif() -endif() - -if (PLATFORM_WINDOWS) - file(GLOB NET_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/net/windows/*.cpp") -elseif(PLATFORM_LINUX OR PLATFORM_APPLE OR PLATFORM_ANDROID) - file(GLOB NET_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/net/linux-shared/*.cpp") -else() - file(GLOB NET_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/net/*.cpp") -endif() - -# encryption implementations -if(ENABLE_BCRYPT_ENCRYPTION) - file(GLOB UTILS_CRYPTO_BCRYPT_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/include/aws/core/utils/crypto/bcrypt/*.h") - file(GLOB UTILS_CRYPTO_BCRYPT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/utils/crypto/bcrypt/*.cpp") -elseif(ENABLE_OPENSSL_ENCRYPTION) - file(GLOB UTILS_CRYPTO_OPENSSL_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/include/aws/core/utils/crypto/openssl/*.h") - file(GLOB UTILS_CRYPTO_OPENSSL_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/utils/crypto/openssl/*.cpp") -elseif(ENABLE_COMMONCRYPTO_ENCRYPTION) - file(GLOB UTILS_CRYPTO_COMMONCRYPTO_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/include/aws/core/utils/crypto/commoncrypto/*.h") - file(GLOB UTILS_CRYPTO_COMMONCRYPTO_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/utils/crypto/commoncrypto/*.cpp") -endif() - - -file(GLOB AWS_NATIVE_SDK_COMMON_SRC - ${AWS_TINYXML2_SOURCE} - ${AWS_AUTH_SOURCE} - ${AWS_CLIENT_SOURCE} - ${HTTP_STANDARD_SOURCE} - ${HTTP_CLIENT_SOURCE} - ${CONFIG_SOURCE} - ${CONFIG_DEFAULTS_SOURCE} - ${UTILS_BASE64_SOURCE} - ${UTILS_THREADING_SOURCE} - ${UTILS_RETRY_SOURCE} - ${UTILS_XML_SOURCE} - ${UTILS_STREAM_SOURCE} - ${UTILS_LOGGING_SOURCE} - ${UTILS_MEMORY_SOURCE} - ${UTILS_MEMORY_STL_SOURCE} - ${UTILS_CRYPTO_OPENSSL_SOURCE} - ${UTILS_CRYPTO_COMMONCRYPTO_SOURCE} -) - -file(GLOB AWS_NATIVE_SDK_COMMON_HEADERS - ${AWS_HEADERS} - ${AWS_AUTH_HEADERS} - ${AWS_CLIENT_HEADERS} - ${AWS_INTERNAL_HEADERS} - ${NET_HEADERS} - ${HTTP_HEADERS} - ${HTTP_STANDARD_HEADERS} - ${CONFIG_HEADERS} - ${CONFIG_DEFAULTS_HEADERS} - ${MONITORING_HEADERS} - ${HTTP_CLIENT_HEADERS} - ${PLATFORM_HEADERS} - ${UTILS_HEADERS} - ${UTILS_EVENT_HEADERS} - ${UTILS_BASE64_HEADERS} - ${UTILS_CRYPTO_HEADERS} - ${UTILS_JSON_HEADERS} - ${UTILS_THREADING_HEADERS} - ${UTILS_RETRY_HEADERS} - ${UTILS_XML_HEADERS} - ${UTILS_LOGGING_HEADERS} - ${UTILS_MEMORY_HEADERS} - ${UTILS_STL_HEADERS} - ${UTILS_STREAM_HEADERS} - ${UTILS_RATE_LIMITER_HEADERS} - ${CJSON_HEADERS} - ${TINYXML2_HEADERS} - ${HTTP_CURL_CLIENT_HEADERS} - ${HTTP_WINDOWS_CLIENT_HEADERS} - ${UTILS_CRYPTO_BCRYPT_HEADERS} - ${UTILS_CRYPTO_OPENSSL_HEADERS} - ${UTILS_CRYPTO_COMMONCRYPTO_HEADERS} -) - -# misc platform-specific, not related to features (encryption/http clients) -if(PLATFORM_WINDOWS) - - #add your windows specific impl stuff here. - file(GLOB PLATFORM_WINDOWS_SOURCE = "${CMAKE_CURRENT_SOURCE_DIR}/source/platform/windows/*.cpp") - - file(GLOB AWS_NATIVE_SDK_WINDOWS_SRC - ${PLATFORM_WINDOWS_SOURCE} - ) -elseif(PLATFORM_LINUX OR PLATFORM_APPLE) - - #add unix specific impl stuff here. - - file(GLOB PLATFORM_LINUX_SHARED_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/platform/linux-shared/*.cpp") - - file(GLOB AWS_NATIVE_SDK_LINUX_SHARED_SRC - ${PLATFORM_LINUX_SHARED_SOURCE} - ) -elseif(PLATFORM_ANDROID) - file(GLOB UTILS_LOGGING_ANDROID_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/include/aws/core/utils/logging/android/*.h") - file(GLOB PLATFORM_ANDROID_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/platform/android/*.cpp") - - file(GLOB AWS_NATIVE_SDK_ANDROID_SRC - ${PLATFORM_ANDROID_SOURCE} - ) - file(GLOB AWS_NATIVE_SDK_ANDROID_HEADERS - ${UTILS_LOGGING_ANDROID_HEADERS} - ) -elseif(PLATFORM_CUSTOM) - gather_custom_core_source(AWS_NATIVE_SDK_CUSTOM_SRC) -endif() - -# TODO: Could have different non unity source lists for different platforms. -# One reason we have this list is to resolve Windows pre-defined type conflicts with those in C++ SDK. -file(GLOB AWS_NATIVE_SDK_NON_UNITY_SRC - ${AWS_SOURCE} - ${HTTP_WINDOWS_CLIENT_SOURCE} - ${HTTP_CURL_CLIENT_SOURCE} - ${AWS_INTERNAL_SOURCE} - ${UTILS_CRYPTO_BCRYPT_SOURCE} - ${AWS_NATIVE_SDK_WINDOWS_SRC} - ${MONITORING_SOURCE} - ${UTILS_CRYPTO_FACTORY_SOURCE} - ${UTILS_JSON_SOURCE} - ${UTILS_EVENT_SOURCE} - ${UTILS_SOURCE} - ${NET_SOURCE} - ${HTTP_SOURCE} - ${CJSON_SOURCE} - ${AWS_NATIVE_SDK_CUSTOM_SRC} - ${UTILS_CRYPTO_SOURCE} -) - -file(GLOB AWS_NATIVE_SDK_UNITY_SRC - ${AWS_NATIVE_SDK_COMMON_SRC} - ${AWS_NATIVE_SDK_LINUX_SHARED_SRC} - ${AWS_NATIVE_SDK_ANDROID_SRC} -) - -if(ENABLE_UNITY_BUILD) - enable_unity_build("core" AWS_NATIVE_SDK_UNITY_SRC) -endif() - -file(GLOB AWS_NATIVE_SDK_UNIFIED_HEADERS - ${AWS_NATIVE_SDK_COMMON_HEADERS} - ${AWS_NATIVE_SDK_WINDOWS_HEADERS} - ${AWS_NATIVE_SDK_UNIX_HEADERS} - ${AWS_NATIVE_SDK_ANDROID_HEADERS} -) - -file(GLOB AWS_NATIVE_SDK_SRC - ${AWS_NATIVE_SDK_UNIFIED_HEADERS} - ${AWS_NATIVE_SDK_UNITY_SRC} - ${AWS_NATIVE_SDK_NON_UNITY_SRC} -) - -# Visual studio project directory structure -if(MSVC) - source_group("Header Files\\aws\\core" FILES ${AWS_HEADERS}) - source_group("Header Files\\aws\\core\\auth" FILES ${AWS_AUTH_HEADERS}) - source_group("Header Files\\aws\\core\\client" FILES ${AWS_CLIENT_HEADERS}) - source_group("Header Files\\aws\\core\\internal" FILES ${AWS_INTERNAL_HEADERS}) - source_group("Header Files\\aws\\core\\net" FILES ${NET_HEADERS}) - source_group("Header Files\\aws\\core\\http" FILES ${HTTP_HEADERS}) - source_group("Header Files\\aws\\core\\http\\standard" FILES ${HTTP_STANDARD_HEADERS}) - source_group("Header Files\\aws\\core\\config" FILES ${CONFIG_HEADERS}) - source_group("Header Files\\aws\\core\\config\\defaults" FILES ${CONFIG_DEFAULTS_HEADERS}) - source_group("Header Files\\aws\\core\\monitoring" FILES ${MONITORING_HEADERS}) - source_group("Header Files\\aws\\core\\platform" FILES ${PLATFORM_HEADERS}) - source_group("Header Files\\aws\\core\\utils" FILES ${UTILS_HEADERS}) - source_group("Header Files\\aws\\core\\utils\\base64" FILES ${UTILS_BASE64_HEADERS}) - source_group("Header Files\\aws\\core\\utils\\crypto" FILES ${UTILS_CRYPTO_HEADERS}) - source_group("Header Files\\aws\\core\\utils\\event" FILES ${UTILS_EVENT_HEADERS}) - source_group("Header Files\\aws\\core\\utils\\exceptions" FILES ${UTILS_EXCEPTIONS_HEADERS}) - source_group("Header Files\\aws\\core\\utils\\json" FILES ${UTILS_JSON_HEADERS}) - source_group("Header Files\\aws\\core\\utils\\threading" FILES ${UTILS_THREADING_HEADERS}) - source_group("Header Files\\aws\\core\\utils\\xml" FILES ${UTILS_XML_HEADERS}) - source_group("Header Files\\aws\\core\\utils\\logging" FILES ${UTILS_LOGGING_HEADERS}) - source_group("Header Files\\aws\\core\\utils\\memory" FILES ${UTILS_MEMORY_HEADERS}) - source_group("Header Files\\aws\\core\\utils\\memory\\stl" FILES ${UTILS_STL_HEADERS}) - source_group("Header Files\\aws\\core\\utils\\stream" FILES ${UTILS_STREAM_HEADERS}) - source_group("Header Files\\aws\\core\\utils\\ratelimiter" FILES ${UTILS_RATE_LIMITER_HEADERS}) - source_group("Header Files\\aws\\core\\external\\cjson" FILES ${CJSON_HEADERS}) - source_group("Header Files\\aws\\core\\external\\tinyxml2" FILES ${TINYXML2_HEADERS}) - - # http client conditional headers - if(ENABLE_CURL_CLIENT) - source_group("Header Files\\aws\\core\\http\\curl" FILES ${HTTP_CURL_CLIENT_HEADERS}) - elseif(ENABLE_WINDOWS_CLIENT) - source_group("Header Files\\aws\\core\\http\\windows" FILES ${HTTP_WINDOWS_CLIENT_HEADERS}) - endif() - - # encryption conditional headers - if(ENABLE_BCRYPT_ENCRYPTION) - source_group("Header Files\\aws\\core\\utils\\crypto\\bcrypt" FILES ${UTILS_CRYPTO_BCRYPT_HEADERS}) - elseif(ENABLE_OPENSSL_ENCRYPTION) - source_group("Header Files\\aws\\core\\utils\\crypto\\openssl" FILES ${UTILS_CRYPTO_OPENSSL_HEADERS}) - elseif(ENABLE_COMMONCRYPTO_ENCRYPTION) - source_group("Header Files\\aws\\core\\utils\\crypto\\commoncrypto" FILES ${UTILS_CRYPTO_COMMONCRYPTO_HEADERS}) - endif() - - source_group("Source Files" FILES ${AWS_SOURCE}) - source_group("Source Files\\external\\cjson" FILES ${CJSON_SOURCE}) - source_group("Source Files\\external\\tinyxml2" FILES ${AWS_TINYXML2_SOURCE}) - source_group("Source Files\\auth" FILES ${AWS_AUTH_SOURCE}) - source_group("Source Files\\client" FILES ${AWS_CLIENT_SOURCE}) - source_group("Source Files\\internal" FILES ${AWS_INTERNAL_SOURCE}) - source_group("Source Files\\net\\windows" FILES ${NET_SOURCE}) - source_group("Source Files\\http" FILES ${HTTP_SOURCE}) - source_group("Source Files\\http\\standard" FILES ${HTTP_STANDARD_SOURCE}) - source_group("Source Files\\config" FILES ${CONFIG_SOURCE}) - source_group("Source Files\\config\\defaults" FILES ${CONFIG_DEFAULTS_SOURCE}) - source_group("Source Files\\monitoring" FILES ${MONITORING_SOURCE}) - source_group("Source Files\\platform\\windows" FILES ${PLATFORM_WINDOWS_SOURCE}) - source_group("Source Files\\utils" FILES ${UTILS_SOURCE}) - source_group("Source Files\\utils\\base64" FILES ${UTILS_BASE64_SOURCE}) - source_group("Source Files\\utils\\crypto" FILES ${UTILS_CRYPTO_SOURCE}) - source_group("Source Files\\utils\\crypto\\factory" FILES ${UTILS_CRYPTO_FACTORY_SOURCE}) - source_group("Source Files\\utils\\event" FILES ${UTILS_EVENT_SOURCE}) - source_group("Source Files\\utils\\exceptions" FILES ${UTILS_EXCEPTIONS_SOURCE}) - source_group("Source Files\\utils\\json" FILES ${UTILS_JSON_SOURCE}) - source_group("Source Files\\utils\\threading" FILES ${UTILS_THREADING_SOURCE}) - source_group("Source Files\\utils\\xml" FILES ${UTILS_XML_SOURCE}) - source_group("Source Files\\utils\\stream" FILES ${UTILS_STREAM_SOURCE}) - source_group("Source Files\\utils\\logging" FILES ${UTILS_LOGGING_SOURCE}) - source_group("Source Files\\utils\\memory" FILES ${UTILS_MEMORY_SOURCE}) - source_group("Source Files\\utils\\memory\\stl" FILES ${UTILS_MEMORY_STL_SOURCE}) - - # http client conditional source - if(ENABLE_CURL_CLIENT) - source_group("Source Files\\http\\curl" FILES ${HTTP_CURL_CLIENT_SOURCE}) - elseif(ENABLE_WINDOWS_CLIENT) - source_group("Source Files\\http\\windows" FILES ${HTTP_WINDOWS_CLIENT_SOURCE}) - endif() - - # encryption conditional source - if(ENABLE_BCRYPT_ENCRYPTION) - source_group("Source Files\\utils\\crypto\\bcrypt" FILES ${UTILS_CRYPTO_BCRYPT_SOURCE}) - elseif(ENABLE_OPENSSL_ENCRYPTION) - source_group("Source Files\\utils\\crypto\\openssl" FILES ${UTILS_CRYPTO_OPENSSL_SOURCE}) - elseif(ENABLE_COMMONCRYPTO_ENCRYPTION) + unset(CMAKE_REQUIRED_LIBRARIES) + + endif () + endif () + + if (PLATFORM_WINDOWS) + file(GLOB NET_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/net/windows/*.cpp") + elseif (PLATFORM_LINUX OR PLATFORM_APPLE OR PLATFORM_ANDROID) + file(GLOB NET_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/net/linux-shared/*.cpp") + else () + file(GLOB NET_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/net/*.cpp") + endif () + + # encryption implementations + if (ENABLE_BCRYPT_ENCRYPTION) + file(GLOB UTILS_CRYPTO_BCRYPT_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/include/aws/core/utils/crypto/bcrypt/*.h") + file(GLOB UTILS_CRYPTO_BCRYPT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/utils/crypto/bcrypt/*.cpp") + elseif (ENABLE_OPENSSL_ENCRYPTION) + file(GLOB UTILS_CRYPTO_OPENSSL_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/include/aws/core/utils/crypto/openssl/*.h") + file(GLOB UTILS_CRYPTO_OPENSSL_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/utils/crypto/openssl/*.cpp") + elseif (ENABLE_COMMONCRYPTO_ENCRYPTION) + file(GLOB UTILS_CRYPTO_COMMONCRYPTO_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/include/aws/core/utils/crypto/commoncrypto/*.h") + file(GLOB UTILS_CRYPTO_COMMONCRYPTO_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/utils/crypto/commoncrypto/*.cpp") + endif () + + + file(GLOB AWS_NATIVE_SDK_COMMON_SRC + ${AWS_TINYXML2_SOURCE} + ${AWS_AUTH_SOURCE} + ${AWS_CLIENT_SOURCE} + ${HTTP_STANDARD_SOURCE} + ${HTTP_CLIENT_SOURCE} + ${CONFIG_SOURCE} + ${CONFIG_DEFAULTS_SOURCE} + ${UTILS_BASE64_SOURCE} + ${UTILS_THREADING_SOURCE} + ${UTILS_RETRY_SOURCE} + ${UTILS_XML_SOURCE} + ${UTILS_STREAM_SOURCE} + ${UTILS_LOGGING_SOURCE} + ${UTILS_MEMORY_SOURCE} + ${UTILS_MEMORY_STL_SOURCE} + ${UTILS_CRYPTO_OPENSSL_SOURCE} + ${UTILS_CRYPTO_COMMONCRYPTO_SOURCE} + ) + + file(GLOB AWS_NATIVE_SDK_COMMON_HEADERS + ${AWS_HEADERS} + ${AWS_AUTH_HEADERS} + ${AWS_CLIENT_HEADERS} + ${AWS_INTERNAL_HEADERS} + ${NET_HEADERS} + ${HTTP_HEADERS} + ${HTTP_STANDARD_HEADERS} + ${CONFIG_HEADERS} + ${CONFIG_DEFAULTS_HEADERS} + ${MONITORING_HEADERS} + ${HTTP_CLIENT_HEADERS} + ${PLATFORM_HEADERS} + ${UTILS_HEADERS} + ${UTILS_EVENT_HEADERS} + ${UTILS_BASE64_HEADERS} + ${UTILS_CRYPTO_HEADERS} + ${UTILS_JSON_HEADERS} + ${UTILS_THREADING_HEADERS} + ${UTILS_RETRY_HEADERS} + ${UTILS_XML_HEADERS} + ${UTILS_LOGGING_HEADERS} + ${UTILS_MEMORY_HEADERS} + ${UTILS_STL_HEADERS} + ${UTILS_STREAM_HEADERS} + ${UTILS_RATE_LIMITER_HEADERS} + ${CJSON_HEADERS} + ${TINYXML2_HEADERS} + ${HTTP_CURL_CLIENT_HEADERS} + ${HTTP_WINDOWS_CLIENT_HEADERS} + ${UTILS_CRYPTO_BCRYPT_HEADERS} + ${UTILS_CRYPTO_OPENSSL_HEADERS} + ${UTILS_CRYPTO_COMMONCRYPTO_HEADERS} + ) + + # misc platform-specific, not related to features (encryption/http clients) + if (PLATFORM_WINDOWS) + + #add your windows specific impl stuff here. + file(GLOB PLATFORM_WINDOWS_SOURCE = "${CMAKE_CURRENT_SOURCE_DIR}/source/platform/windows/*.cpp") + + file(GLOB AWS_NATIVE_SDK_WINDOWS_SRC + ${PLATFORM_WINDOWS_SOURCE} + ) + elseif (PLATFORM_LINUX OR PLATFORM_APPLE) + + #add unix specific impl stuff here. + + file(GLOB PLATFORM_LINUX_SHARED_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/platform/linux-shared/*.cpp") + + file(GLOB AWS_NATIVE_SDK_LINUX_SHARED_SRC + ${PLATFORM_LINUX_SHARED_SOURCE} + ) + elseif (PLATFORM_ANDROID) + file(GLOB UTILS_LOGGING_ANDROID_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/include/aws/core/utils/logging/android/*.h") + file(GLOB PLATFORM_ANDROID_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/source/platform/android/*.cpp") + + file(GLOB AWS_NATIVE_SDK_ANDROID_SRC + ${PLATFORM_ANDROID_SOURCE} + ) + file(GLOB AWS_NATIVE_SDK_ANDROID_HEADERS + ${UTILS_LOGGING_ANDROID_HEADERS} + ) + elseif (PLATFORM_CUSTOM) + gather_custom_core_source(AWS_NATIVE_SDK_CUSTOM_SRC) + endif () + + # TODO: Could have different non unity source lists for different platforms. + # One reason we have this list is to resolve Windows pre-defined type conflicts with those in C++ SDK. + file(GLOB AWS_NATIVE_SDK_NON_UNITY_SRC + ${AWS_SOURCE} + ${HTTP_WINDOWS_CLIENT_SOURCE} + ${HTTP_CURL_CLIENT_SOURCE} + ${AWS_INTERNAL_SOURCE} + ${UTILS_CRYPTO_BCRYPT_SOURCE} + ${AWS_NATIVE_SDK_WINDOWS_SRC} + ${MONITORING_SOURCE} + ${UTILS_CRYPTO_FACTORY_SOURCE} + ${UTILS_JSON_SOURCE} + ${UTILS_EVENT_SOURCE} + ${UTILS_SOURCE} + ${NET_SOURCE} + ${HTTP_SOURCE} + ${CJSON_SOURCE} + ${AWS_NATIVE_SDK_CUSTOM_SRC} + ${UTILS_CRYPTO_SOURCE} + ) + + file(GLOB AWS_NATIVE_SDK_UNITY_SRC + ${AWS_NATIVE_SDK_COMMON_SRC} + ${AWS_NATIVE_SDK_LINUX_SHARED_SRC} + ${AWS_NATIVE_SDK_ANDROID_SRC} + ) + + if (ENABLE_UNITY_BUILD) + enable_unity_build("core" AWS_NATIVE_SDK_UNITY_SRC) + endif () + + file(GLOB AWS_NATIVE_SDK_UNIFIED_HEADERS + ${AWS_NATIVE_SDK_COMMON_HEADERS} + ${AWS_NATIVE_SDK_WINDOWS_HEADERS} + ${AWS_NATIVE_SDK_UNIX_HEADERS} + ${AWS_NATIVE_SDK_ANDROID_HEADERS} + ) + + file(GLOB AWS_NATIVE_SDK_SRC + ${AWS_NATIVE_SDK_UNIFIED_HEADERS} + ${AWS_NATIVE_SDK_UNITY_SRC} + ${AWS_NATIVE_SDK_NON_UNITY_SRC} + ) + + # Visual studio project directory structure + if (MSVC) + source_group("Header Files\\aws\\core" FILES ${AWS_HEADERS}) + source_group("Header Files\\aws\\core\\auth" FILES ${AWS_AUTH_HEADERS}) + source_group("Header Files\\aws\\core\\client" FILES ${AWS_CLIENT_HEADERS}) + source_group("Header Files\\aws\\core\\internal" FILES ${AWS_INTERNAL_HEADERS}) + source_group("Header Files\\aws\\core\\net" FILES ${NET_HEADERS}) + source_group("Header Files\\aws\\core\\http" FILES ${HTTP_HEADERS}) + source_group("Header Files\\aws\\core\\http\\standard" FILES ${HTTP_STANDARD_HEADERS}) + source_group("Header Files\\aws\\core\\config" FILES ${CONFIG_HEADERS}) + source_group("Header Files\\aws\\core\\config\\defaults" FILES ${CONFIG_DEFAULTS_HEADERS}) + source_group("Header Files\\aws\\core\\monitoring" FILES ${MONITORING_HEADERS}) + source_group("Header Files\\aws\\core\\platform" FILES ${PLATFORM_HEADERS}) + source_group("Header Files\\aws\\core\\utils" FILES ${UTILS_HEADERS}) + source_group("Header Files\\aws\\core\\utils\\base64" FILES ${UTILS_BASE64_HEADERS}) + source_group("Header Files\\aws\\core\\utils\\crypto" FILES ${UTILS_CRYPTO_HEADERS}) + source_group("Header Files\\aws\\core\\utils\\event" FILES ${UTILS_EVENT_HEADERS}) + source_group("Header Files\\aws\\core\\utils\\exceptions" FILES ${UTILS_EXCEPTIONS_HEADERS}) + source_group("Header Files\\aws\\core\\utils\\json" FILES ${UTILS_JSON_HEADERS}) + source_group("Header Files\\aws\\core\\utils\\threading" FILES ${UTILS_THREADING_HEADERS}) + source_group("Header Files\\aws\\core\\utils\\xml" FILES ${UTILS_XML_HEADERS}) + source_group("Header Files\\aws\\core\\utils\\logging" FILES ${UTILS_LOGGING_HEADERS}) + source_group("Header Files\\aws\\core\\utils\\memory" FILES ${UTILS_MEMORY_HEADERS}) + source_group("Header Files\\aws\\core\\utils\\memory\\stl" FILES ${UTILS_STL_HEADERS}) + source_group("Header Files\\aws\\core\\utils\\stream" FILES ${UTILS_STREAM_HEADERS}) + source_group("Header Files\\aws\\core\\utils\\ratelimiter" FILES ${UTILS_RATE_LIMITER_HEADERS}) + source_group("Header Files\\aws\\core\\external\\cjson" FILES ${CJSON_HEADERS}) + source_group("Header Files\\aws\\core\\external\\tinyxml2" FILES ${TINYXML2_HEADERS}) + + # http client conditional headers + if (ENABLE_CURL_CLIENT) + source_group("Header Files\\aws\\core\\http\\curl" FILES ${HTTP_CURL_CLIENT_HEADERS}) + elseif (ENABLE_WINDOWS_CLIENT) + source_group("Header Files\\aws\\core\\http\\windows" FILES ${HTTP_WINDOWS_CLIENT_HEADERS}) + endif () + + # encryption conditional headers + if (ENABLE_BCRYPT_ENCRYPTION) + source_group("Header Files\\aws\\core\\utils\\crypto\\bcrypt" FILES ${UTILS_CRYPTO_BCRYPT_HEADERS}) + elseif (ENABLE_OPENSSL_ENCRYPTION) + source_group("Header Files\\aws\\core\\utils\\crypto\\openssl" FILES ${UTILS_CRYPTO_OPENSSL_HEADERS}) + elseif (ENABLE_COMMONCRYPTO_ENCRYPTION) + source_group("Header Files\\aws\\core\\utils\\crypto\\commoncrypto" FILES ${UTILS_CRYPTO_COMMONCRYPTO_HEADERS}) + endif () + + source_group("Source Files" FILES ${AWS_SOURCE}) + source_group("Source Files\\external\\cjson" FILES ${CJSON_SOURCE}) + source_group("Source Files\\external\\tinyxml2" FILES ${AWS_TINYXML2_SOURCE}) + source_group("Source Files\\auth" FILES ${AWS_AUTH_SOURCE}) + source_group("Source Files\\client" FILES ${AWS_CLIENT_SOURCE}) + source_group("Source Files\\internal" FILES ${AWS_INTERNAL_SOURCE}) + source_group("Source Files\\net\\windows" FILES ${NET_SOURCE}) + source_group("Source Files\\http" FILES ${HTTP_SOURCE}) + source_group("Source Files\\http\\standard" FILES ${HTTP_STANDARD_SOURCE}) + source_group("Source Files\\config" FILES ${CONFIG_SOURCE}) + source_group("Source Files\\config\\defaults" FILES ${CONFIG_DEFAULTS_SOURCE}) + source_group("Source Files\\monitoring" FILES ${MONITORING_SOURCE}) + source_group("Source Files\\platform\\windows" FILES ${PLATFORM_WINDOWS_SOURCE}) + source_group("Source Files\\utils" FILES ${UTILS_SOURCE}) + source_group("Source Files\\utils\\base64" FILES ${UTILS_BASE64_SOURCE}) + source_group("Source Files\\utils\\crypto" FILES ${UTILS_CRYPTO_SOURCE}) + source_group("Source Files\\utils\\crypto\\factory" FILES ${UTILS_CRYPTO_FACTORY_SOURCE}) + source_group("Source Files\\utils\\event" FILES ${UTILS_EVENT_SOURCE}) + source_group("Source Files\\utils\\exceptions" FILES ${UTILS_EXCEPTIONS_SOURCE}) + source_group("Source Files\\utils\\json" FILES ${UTILS_JSON_SOURCE}) + source_group("Source Files\\utils\\threading" FILES ${UTILS_THREADING_SOURCE}) + source_group("Source Files\\utils\\xml" FILES ${UTILS_XML_SOURCE}) + source_group("Source Files\\utils\\stream" FILES ${UTILS_STREAM_SOURCE}) + source_group("Source Files\\utils\\logging" FILES ${UTILS_LOGGING_SOURCE}) + source_group("Source Files\\utils\\memory" FILES ${UTILS_MEMORY_SOURCE}) + source_group("Source Files\\utils\\memory\\stl" FILES ${UTILS_MEMORY_STL_SOURCE}) + + # http client conditional source + if (ENABLE_CURL_CLIENT) + source_group("Source Files\\http\\curl" FILES ${HTTP_CURL_CLIENT_SOURCE}) + elseif (ENABLE_WINDOWS_CLIENT) + source_group("Source Files\\http\\windows" FILES ${HTTP_WINDOWS_CLIENT_SOURCE}) + endif () + + # encryption conditional source + if (ENABLE_BCRYPT_ENCRYPTION) + source_group("Source Files\\utils\\crypto\\bcrypt" FILES ${UTILS_CRYPTO_BCRYPT_SOURCE}) + elseif (ENABLE_OPENSSL_ENCRYPTION) + source_group("Source Files\\utils\\crypto\\openssl" FILES ${UTILS_CRYPTO_OPENSSL_SOURCE}) + elseif (ENABLE_COMMONCRYPTO_ENCRYPTION) source_group("Source Files\\utils\\crypto\\commoncrypto" FILES ${UTILS_CRYPTO_COMMONCRYPTO_SOURCE}) - endif() + endif () -endif(MSVC) + endif (MSVC) -add_library(${PROJECT_NAME} ${AWS_NATIVE_SDK_SRC}) -add_library(AWS::${PROJECT_NAME} ALIAS ${PROJECT_NAME}) + add_library(${PROJECT_NAME} ${AWS_NATIVE_SDK_SRC}) + add_library(AWS::${PROJECT_NAME} ALIAS ${PROJECT_NAME}) -target_compile_definitions(${PROJECT_NAME} PUBLIC "AWS_SDK_VERSION_MAJOR=${AWSSDK_VERSION_MAJOR}") -target_compile_definitions(${PROJECT_NAME} PUBLIC "AWS_SDK_VERSION_MINOR=${AWSSDK_VERSION_MINOR}") -target_compile_definitions(${PROJECT_NAME} PUBLIC "AWS_SDK_VERSION_PATCH=${AWSSDK_VERSION_PATCH}") + target_compile_definitions(${PROJECT_NAME} PUBLIC "AWS_SDK_VERSION_MAJOR=${AWSSDK_VERSION_MAJOR}") + target_compile_definitions(${PROJECT_NAME} PUBLIC "AWS_SDK_VERSION_MINOR=${AWSSDK_VERSION_MINOR}") + target_compile_definitions(${PROJECT_NAME} PUBLIC "AWS_SDK_VERSION_PATCH=${AWSSDK_VERSION_PATCH}") -if (WININET_HAS_H2) - target_compile_definitions(${PROJECT_NAME} PRIVATE "WININET_HAS_H2") -endif() + if (WININET_HAS_H2) + target_compile_definitions(${PROJECT_NAME} PRIVATE "WININET_HAS_H2") + endif () -if (WINHTTP_HAS_H2) - target_compile_definitions(${PROJECT_NAME} PRIVATE "WINHTTP_HAS_H2") -endif() + if (WINHTTP_HAS_H2) + target_compile_definitions(${PROJECT_NAME} PRIVATE "WINHTTP_HAS_H2") + endif () -if (CURL_HAS_H2) - target_compile_definitions(${PROJECT_NAME} PRIVATE "CURL_HAS_H2") -endif() + if (CURL_HAS_H2) + target_compile_definitions(${PROJECT_NAME} PRIVATE "CURL_HAS_H2") + endif () -if (CURL_HAS_TLS_PROXY) - target_compile_definitions(${PROJECT_NAME} PRIVATE "CURL_HAS_TLS_PROXY") -endif() + if (CURL_HAS_TLS_PROXY) + target_compile_definitions(${PROJECT_NAME} PRIVATE "CURL_HAS_TLS_PROXY") + endif () -set(Core_INCLUDES "${CMAKE_CURRENT_SOURCE_DIR}/include/") + set(Core_INCLUDES "${CMAKE_CURRENT_SOURCE_DIR}/include/") -if(PLATFORM_CUSTOM) - if(COMMAND add_custom_core_include_directories) - add_custom_core_include_directories(CORE_CUSTOM_INCLUDE) - SET(Core_INCLUDES ${Core_INCLUDES} ${CORE_CUSTOM_INCLUDE}) - target_include_directories(${PROJECT_NAME} PRIVATE "${Core_INCLUDES}") - endif() - if(COMMAND add_custom_definitions) - add_custom_definitions() - endif() -endif() + if (PLATFORM_CUSTOM) + if (COMMAND add_custom_core_include_directories) + add_custom_core_include_directories(CORE_CUSTOM_INCLUDE) + SET(Core_INCLUDES ${Core_INCLUDES} ${CORE_CUSTOM_INCLUDE}) + target_include_directories(${PROJECT_NAME} PRIVATE "${Core_INCLUDES}") + endif () + if (COMMAND add_custom_definitions) + add_custom_definitions() + endif () + endif () -if(NOT PLATFORM_CUSTOM) - target_include_directories(${PROJECT_NAME} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/include/aws/core/platform/refs") -endif() + if (NOT PLATFORM_CUSTOM) + target_include_directories(${PROJECT_NAME} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/include/aws/core/platform/refs") + endif () -if(BUILD_CURL) - target_include_directories(${PROJECT_NAME} PRIVATE "${CURL_INCLUDE_DIR}") -endif() + if (BUILD_CURL) + target_include_directories(${PROJECT_NAME} PRIVATE "${CURL_INCLUDE_DIR}") + endif () -if(BUILD_OPENSSL) - target_include_directories(${PROJECT_NAME} PRIVATE "${OPENSSL_INCLUDE_DIR}") -endif() + if (BUILD_OPENSSL) + target_include_directories(${PROJECT_NAME} PRIVATE "${OPENSSL_INCLUDE_DIR}") + endif () -set(PKG_CONFIG_LIB "-l${PROJECT_NAME}") + set(PKG_CONFIG_LIB "-l${PROJECT_NAME}") -if (ENABLE_CURL_LOGGING) - target_compile_definitions(${PROJECT_NAME} PRIVATE "ENABLE_CURL_LOGGING") -endif() + if (ENABLE_CURL_LOGGING) + target_compile_definitions(${PROJECT_NAME} PRIVATE "ENABLE_CURL_LOGGING") + endif () -if(PLATFORM_CUSTOM) - if(COMMAND add_custom_core_libraries) - add_custom_core_libraries() - endif() -endif() + if (PLATFORM_CUSTOM) + if (COMMAND add_custom_core_libraries) + add_custom_core_libraries() + endif () + endif () -target_include_directories(${PROJECT_NAME} PUBLIC - $ - $) - -if (EXTERNAL_DEPS_INCLUDE_DIRS) - foreach(DIR IN LISTS EXTERNAL_DEPS_INCLUDE_DIRS) - target_include_directories(${PROJECT_NAME} PUBLIC - $ + target_include_directories(${PROJECT_NAME} PUBLIC + $ $) - endforeach() -endif() - -target_link_libraries(${PROJECT_NAME} PRIVATE ${PLATFORM_DEP_LIBS} ${CLIENT_LIBS} ${CRYPTO_LIBS} ${AWS_SDK_ADDITIONAL_LIBRARIES}) - -aws_use_package(aws-crt-cpp) - -target_link_libraries(${PROJECT_NAME} PUBLIC ${DEP_AWS_LIBS}) - -if(USE_WINDOWS_DLL_SEMANTICS) - target_compile_definitions(${PROJECT_NAME} PUBLIC "USE_WINDOWS_DLL_SEMANTICS") - - if(BUILD_SHARED_LIBS) - target_compile_definitions(${PROJECT_NAME} PUBLIC "USE_IMPORT_EXPORT=1") - target_compile_definitions(${PROJECT_NAME} PRIVATE "AWS_CORE_EXPORTS=1") - endif() -endif() - -set_compiler_flags(${PROJECT_NAME}) -set_compiler_warnings(${PROJECT_NAME}) - -if(SIMPLE_INSTALL) - install ( - TARGETS ${PROJECT_NAME} - EXPORT "${PROJECT_NAME}-targets" - ARCHIVE DESTINATION ${ARCHIVE_DIRECTORY} - LIBRARY DESTINATION ${LIBRARY_DIRECTORY} - RUNTIME DESTINATION ${BINARY_DIRECTORY} - ) -else() - if(PLATFORM_CUSTOM) - install_custom_library(${PROJECT_NAME}) - else() - install (TARGETS ${PROJECT_NAME} ARCHIVE DESTINATION ${ARCHIVE_DIRECTORY}/${SDK_INSTALL_BINARY_PREFIX}/${PLATFORM_INSTALL_QUALIFIER}/\${CMAKE_INSTALL_CONFIG_NAME} - LIBRARY DESTINATION ${LIBRARY_DIRECTORY}/${SDK_INSTALL_BINARY_PREFIX}/${PLATFORM_INSTALL_QUALIFIER}/\${CMAKE_INSTALL_CONFIG_NAME} - RUNTIME DESTINATION ${BINARY_DIRECTORY}/${SDK_INSTALL_BINARY_PREFIX}/${PLATFORM_INSTALL_QUALIFIER}/\${CMAKE_INSTALL_CONFIG_NAME}) - endif() -endif() - -if(SIMPLE_INSTALL) - # These libs are needed by aws-cpp-sdk-core only. - set(ALL_DEP_LIBS ${AWS_COMMON_RUNTIME_LIBS} ${PLATFORM_DEP_LIBS_ABSTRACT_NAME} ${CLIENT_LIBS_ABSTRACT_NAME} ${CRYPTO_LIBS_ABSTRACT_NAME}) - generate_pkgconfig_link_flags(ALL_DEP_LIBS ALL_DEP_LIBS_LINK_FLAGS) - set(ALL_DEP_LIBS_LINK_FLAGS "${ALL_DEP_LIBS_LINK_FLAGS}") - configure_file("${AWS_NATIVE_SDK_ROOT}/toolchains/pkg-config.pc.in" "${PROJECT_NAME}.pc" @ONLY) - - if(BUILD_SHARED_LIBS) - install( - FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" - DESTINATION ${LIBRARY_DIRECTORY}/pkgconfig) - endif() -endif() - -install (FILES ${AWS_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core) -install (FILES ${AWS_AUTH_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/auth) -install (FILES ${AWS_CLIENT_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/client) -install (FILES ${AWS_INTERNAL_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/internal) -install (FILES ${NET_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/net) -install (FILES ${HTTP_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/http) -install (FILES ${HTTP_STANDARD_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/http/standard) -install (FILES ${CONFIG_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/config/) -install (FILES ${CONFIG_DEFAULTS_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/config/defaults) -install (FILES ${MONITORING_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/monitoring) -install (FILES ${PLATFORM_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/platform) -install (FILES ${UTILS_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils) -install (FILES ${UTILS_EVENT_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils/event) -install (FILES ${UTILS_BASE64_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils/base64) -install (FILES ${UTILS_CRYPTO_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils/crypto) -install (FILES ${UTILS_JSON_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils/json) -install (FILES ${UTILS_RETRY_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils/retry) -install (FILES ${UTILS_XML_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils/xml) -install (FILES ${UTILS_LOGGING_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils/logging) -install (FILES ${UTILS_MEMORY_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils/memory) -install (FILES ${UTILS_STL_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils/memory/stl) -install (FILES ${UTILS_RATE_LIMITER_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils/ratelimiter) -install (FILES ${UTILS_STREAM_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils/stream) -install (FILES ${UTILS_THREADING_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils/threading) -install (FILES ${CJSON_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/external/cjson) -install (FILES ${TINYXML2_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/external/tinyxml2) - -# android logcat headers -if(PLATFORM_ANDROID) - install (FILES ${UTILS_LOGGING_ANDROID_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils/logging/android) -endif() - -# http client headers -if(ENABLE_CURL_CLIENT) - install (FILES ${HTTP_CURL_CLIENT_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/http/curl) -elseif(ENABLE_WINDOWS_CLIENT) - install (FILES ${HTTP_WINDOWS_CLIENT_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/http/windows) -endif() - -# encryption headers -if(ENABLE_BCRYPT_ENCRYPTION) - install (FILES ${UTILS_CRYPTO_BCRYPT_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils/crypto/bcrypt) -elseif(ENABLE_OPENSSL_ENCRYPTION) - install (FILES ${UTILS_CRYPTO_OPENSSL_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils/crypto/openssl) -elseif(ENABLE_COMMONCRYPTO_ENCRYPTION) - install (FILES ${UTILS_CRYPTO_COMMONCRYPTO_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils/crypto/commoncrypto) -endif() - -do_packaging() + if (EXTERNAL_DEPS_INCLUDE_DIRS) + foreach (DIR IN LISTS EXTERNAL_DEPS_INCLUDE_DIRS) + target_include_directories(${PROJECT_NAME} PUBLIC + $ + $) + endforeach () + endif () + + target_link_libraries(${PROJECT_NAME} PRIVATE ${PLATFORM_DEP_LIBS} ${CLIENT_LIBS} ${CRYPTO_LIBS} ${AWS_SDK_ADDITIONAL_LIBRARIES}) + + aws_use_package(aws-crt-cpp) + + target_link_libraries(${PROJECT_NAME} PUBLIC ${DEP_AWS_LIBS}) + + if (USE_WINDOWS_DLL_SEMANTICS) + target_compile_definitions(${PROJECT_NAME} PUBLIC "USE_WINDOWS_DLL_SEMANTICS") + + if (BUILD_SHARED_LIBS) + target_compile_definitions(${PROJECT_NAME} PUBLIC "USE_IMPORT_EXPORT=1") + target_compile_definitions(${PROJECT_NAME} PRIVATE "AWS_CORE_EXPORTS=1") + endif () + endif () + + set_compiler_flags(${PROJECT_NAME}) + set_compiler_warnings(${PROJECT_NAME}) + + if (SIMPLE_INSTALL) + install( + TARGETS ${PROJECT_NAME} + EXPORT "${PROJECT_NAME}-targets" + ARCHIVE DESTINATION ${ARCHIVE_DIRECTORY} + LIBRARY DESTINATION ${LIBRARY_DIRECTORY} + RUNTIME DESTINATION ${BINARY_DIRECTORY} + ) + else () + if (PLATFORM_CUSTOM) + install_custom_library(${PROJECT_NAME}) + else () + install(TARGETS ${PROJECT_NAME} ARCHIVE DESTINATION ${ARCHIVE_DIRECTORY}/${SDK_INSTALL_BINARY_PREFIX}/${PLATFORM_INSTALL_QUALIFIER}/\${CMAKE_INSTALL_CONFIG_NAME} + LIBRARY DESTINATION ${LIBRARY_DIRECTORY}/${SDK_INSTALL_BINARY_PREFIX}/${PLATFORM_INSTALL_QUALIFIER}/\${CMAKE_INSTALL_CONFIG_NAME} + RUNTIME DESTINATION ${BINARY_DIRECTORY}/${SDK_INSTALL_BINARY_PREFIX}/${PLATFORM_INSTALL_QUALIFIER}/\${CMAKE_INSTALL_CONFIG_NAME}) + endif () + endif () + + if (SIMPLE_INSTALL) + # These libs are needed by aws-cpp-sdk-core only. + set(ALL_DEP_LIBS ${AWS_COMMON_RUNTIME_LIBS} ${PLATFORM_DEP_LIBS_ABSTRACT_NAME} ${CLIENT_LIBS_ABSTRACT_NAME} ${CRYPTO_LIBS_ABSTRACT_NAME}) + generate_pkgconfig_link_flags(ALL_DEP_LIBS ALL_DEP_LIBS_LINK_FLAGS) + set(ALL_DEP_LIBS_LINK_FLAGS "${ALL_DEP_LIBS_LINK_FLAGS}") + configure_file("${AWS_NATIVE_SDK_ROOT}/toolchains/pkg-config.pc.in" "${PROJECT_NAME}.pc" @ONLY) + + if (BUILD_SHARED_LIBS) + install( + FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" + DESTINATION ${LIBRARY_DIRECTORY}/pkgconfig) + endif () + endif () + + install(FILES ${AWS_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core) + install(FILES ${AWS_AUTH_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/auth) + install(FILES ${AWS_CLIENT_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/client) + install(FILES ${AWS_INTERNAL_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/internal) + install(FILES ${NET_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/net) + install(FILES ${HTTP_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/http) + install(FILES ${HTTP_STANDARD_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/http/standard) + install(FILES ${CONFIG_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/config/) + install(FILES ${CONFIG_DEFAULTS_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/config/defaults) + install(FILES ${MONITORING_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/monitoring) + install(FILES ${PLATFORM_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/platform) + install(FILES ${UTILS_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils) + install(FILES ${UTILS_EVENT_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils/event) + install(FILES ${UTILS_BASE64_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils/base64) + install(FILES ${UTILS_CRYPTO_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils/crypto) + install(FILES ${UTILS_JSON_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils/json) + install(FILES ${UTILS_RETRY_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils/retry) + install(FILES ${UTILS_XML_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils/xml) + install(FILES ${UTILS_LOGGING_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils/logging) + install(FILES ${UTILS_MEMORY_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils/memory) + install(FILES ${UTILS_STL_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils/memory/stl) + install(FILES ${UTILS_RATE_LIMITER_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils/ratelimiter) + install(FILES ${UTILS_STREAM_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils/stream) + install(FILES ${UTILS_THREADING_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils/threading) + install(FILES ${CJSON_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/external/cjson) + install(FILES ${TINYXML2_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/external/tinyxml2) + + # android logcat headers + if (PLATFORM_ANDROID) + install(FILES ${UTILS_LOGGING_ANDROID_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils/logging/android) + endif () + + # http client headers + if (ENABLE_CURL_CLIENT) + install(FILES ${HTTP_CURL_CLIENT_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/http/curl) + elseif (ENABLE_WINDOWS_CLIENT) + install(FILES ${HTTP_WINDOWS_CLIENT_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/http/windows) + endif () + + # encryption headers + if (ENABLE_BCRYPT_ENCRYPTION) + install(FILES ${UTILS_CRYPTO_BCRYPT_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils/crypto/bcrypt) + elseif (ENABLE_OPENSSL_ENCRYPTION) + install(FILES ${UTILS_CRYPTO_OPENSSL_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils/crypto/openssl) + elseif (ENABLE_COMMONCRYPTO_ENCRYPTION) + install(FILES ${UTILS_CRYPTO_COMMONCRYPTO_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/core/utils/crypto/commoncrypto) + endif () + + do_packaging() + +endif () \ No newline at end of file