# # Copyright (c) Contributors to the Open 3D Engine Project. # For complete copyright and license terms please see the LICENSE at the root of this distribution. # # SPDX-License-Identifier: Apache-2.0 OR MIT # include(CMakeParseArguments) set(AWSNATIVESDK_PACKAGE_NAME AWSNativeSDK) set(AWS_BASE_PATH ${CMAKE_CURRENT_LIST_DIR}/${AWSNATIVESDK_PACKAGE_NAME}) # Include Path set(AWSNATIVESDK_INCLUDE_PATH ${AWS_BASE_PATH}/include) # Determine the lib path if(LY_MONOLITHIC_GAME) # Monolithic builds uses the static libraries set(AWSNATIVE_SDK_LIB_PATH ${AWS_BASE_PATH}/lib) else() # Non-monolithic builds uses the shared libraries set(AWSNATIVE_SDK_LIB_PATH ${AWS_BASE_PATH}/bin) endif() # AWS Compile Definitions set(AWSNATIVESDK_COMPILE_DEFINITIONS AWS_CUSTOM_MEMORY_MANAGEMENT PLATFORM_SUPPORTS_AWS_NATIVE_SDK) # Helper function to define individual AWSNativeSDK Libraries function(ly_declare_aws_library) set(options) set(oneValueArgs NAME LIB_FILE) set(multiValueArgs BUILD_DEPENDENCIES) cmake_parse_arguments(ly_declare_aws_library "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) set(TARGET_WITH_NAMESPACE "3rdParty::${AWSNATIVESDK_PACKAGE_NAME}::${ly_declare_aws_library_NAME}") if (NOT TARGET ${TARGET_WITH_NAMESPACE}) add_library(${TARGET_WITH_NAMESPACE} INTERFACE IMPORTED GLOBAL) ly_target_include_system_directories(TARGET ${TARGET_WITH_NAMESPACE} INTERFACE ${AWSNATIVESDK_INCLUDE_PATH}) if (ly_declare_aws_library_LIB_FILE) if (LY_MONOLITHIC_GAME) target_link_libraries(${TARGET_WITH_NAMESPACE} INTERFACE ${AWSNATIVE_SDK_LIB_PATH}/${CMAKE_STATIC_LIBRARY_PREFIX}${ly_declare_aws_library_LIB_FILE}${CMAKE_STATIC_LIBRARY_SUFFIX} ${AWSNATIVESDK_BUILD_DEPENDENCIES} ${ly_declare_aws_library_BUILD_DEPENDENCIES} ) else() target_link_libraries(${TARGET_WITH_NAMESPACE} INTERFACE ${AWSNATIVE_SDK_LIB_PATH}/${CMAKE_STATIC_LIBRARY_PREFIX}${ly_declare_aws_library_LIB_FILE}${CMAKE_SHARED_LIBRARY_SUFFIX} ${AWSNATIVESDK_BUILD_DEPENDENCIES} ${ly_declare_aws_library_BUILD_DEPENDENCIES} ) ly_add_dependencies(${TARGET_WITH_NAMESPACE} ${AWSNATIVE_SDK_LIB_PATH}/${CMAKE_SHARED_LIBRARY_PREFIX}${ly_declare_aws_library_LIB_FILE}${CMAKE_SHARED_LIBRARY_SUFFIX} ${ly_declare_aws_library_BUILD_DEPENDENCIES}) endif() elseif (ly_declare_aws_library_BUILD_DEPENDENCIES) target_link_libraries(${TARGET_WITH_NAMESPACE} INTERFACE ${ly_declare_aws_library_BUILD_DEPENDENCIES} ) endif() target_link_options(${TARGET_WITH_NAMESPACE} INTERFACE ${AWSNATIVESDK_LINK_OPTIONS}) target_compile_definitions(${TARGET_WITH_NAMESPACE} INTERFACE ${AWSNATIVESDK_COMPILE_DEFINITIONS}) endif() endfunction() #### Core #### set(CORE_STATIC_LIBS ${AWSNATIVE_SDK_LIB_PATH}/libaws-crt-cpp.a ${AWSNATIVE_SDK_LIB_PATH}/libaws-c-s3.a ${AWSNATIVE_SDK_LIB_PATH}/libaws-c-auth.a ${AWSNATIVE_SDK_LIB_PATH}/libaws-c-mqtt.a ${AWSNATIVE_SDK_LIB_PATH}/libaws-c-http.a ${AWSNATIVE_SDK_LIB_PATH}/libaws-c-event-stream.a ${AWSNATIVE_SDK_LIB_PATH}/libaws-c-io.a ${AWSNATIVE_SDK_LIB_PATH}/libaws-checksums.a ${AWSNATIVE_SDK_LIB_PATH}/libaws-c-compression.a ${AWSNATIVE_SDK_LIB_PATH}/libaws-c-cal.a ${AWSNATIVE_SDK_LIB_PATH}/libaws-c-common.a ${AWSNATIVE_SDK_LIB_PATH}/libaws-c-sdkutils.a ${AWSNATIVE_SDK_LIB_PATH}/libs2n.a ${AWSNATIVE_SDK_LIB_PATH}/libcurl.a ) if(LY_MONOLITHIC_GAME) ly_declare_aws_library( NAME Core LIB_FILE aws-cpp-sdk-core BUILD_DEPENDENCIES ${CORE_STATIC_LIBS} ) else() ly_declare_aws_library( NAME Core LIB_FILE aws-cpp-sdk-core curl ) endif() #### AccessManagement #### ly_declare_aws_library( NAME AccessManagement LIB_FILE aws-cpp-sdk-access-management BUILD_DEPENDENCIES # Even though AWS Core is a sibling module, make sure it's linked in first because this module depends on it. 3rdParty::AWSNativeSDK::Core ) #### BedrockRuntime #### ly_declare_aws_library( NAME BedrockRuntime LIB_FILE aws-cpp-sdk-bedrock-runtime BUILD_DEPENDENCIES # Even though AWS Core is a sibling module, make sure it's linked in first because this module depends on it. 3rdParty::AWSNativeSDK::Core ) #### CognitoIdentity #### ly_declare_aws_library( NAME CognitoIdentity LIB_FILE aws-cpp-sdk-cognito-identity BUILD_DEPENDENCIES # Even though AWS Core is a sibling module, make sure it's linked in first because this module depends on it. 3rdParty::AWSNativeSDK::Core ) #### CognitoIdp #### ly_declare_aws_library( NAME CognitoIdp LIB_FILE aws-cpp-sdk-cognito-idp BUILD_DEPENDENCIES # Even though AWS Core is a sibling module, make sure it's linked in first because this module depends on it. 3rdParty::AWSNativeSDK::Core ) #### DeviceFarm #### ly_declare_aws_library( NAME DeviceFarm LIB_FILE aws-cpp-sdk-devicefarm BUILD_DEPENDENCIES # Even though AWS Core is a sibling module, make sure it's linked in first because this module depends on it. 3rdParty::AWSNativeSDK::Core ) #### DynamoDB #### ly_declare_aws_library( NAME DynamoDB LIB_FILE aws-cpp-sdk-dynamodb BUILD_DEPENDENCIES # Even though AWS Core is a sibling module, make sure it's linked in first because this module depends on it. 3rdParty::AWSNativeSDK::Core ) #### GameLift #### ly_declare_aws_library( NAME GameLift LIB_FILE aws-cpp-sdk-gamelift BUILD_DEPENDENCIES # Even though AWS Core is a sibling module, make sure it's linked in first because this module depends on it. 3rdParty::AWSNativeSDK::Core ) #### IdentityManagement #### ly_declare_aws_library( NAME IdentityManagement LIB_FILE aws-cpp-sdk-identity-management BUILD_DEPENDENCIES # Even though AWS Core is a sibling module, make sure it's linked in first because this module depends on it. 3rdParty::AWSNativeSDK::Core ) #### Kinesis #### ly_declare_aws_library( NAME Kinesis LIB_FILE aws-cpp-sdk-kinesis BUILD_DEPENDENCIES # Even though AWS Core is a sibling module, make sure it's linked in first because this module depends on it. 3rdParty::AWSNativeSDK::Core ) #### Lambda #### ly_declare_aws_library( NAME Lambda LIB_FILE aws-cpp-sdk-lambda BUILD_DEPENDENCIES # Even though AWS Core is a sibling module, make sure it's linked in first because this module depends on it. 3rdParty::AWSNativeSDK::Core ) #### MobileAnalytics #### # MobileAnalytics library no longer exists and should be replaced with AWS PinPoint or other equivalent API #### Queues #### ly_declare_aws_library( NAME Queues LIB_FILE aws-cpp-sdk-queues BUILD_DEPENDENCIES # Even though AWS Core is a sibling module, make sure it's linked in first because this module depends on it. 3rdParty::AWSNativeSDK::Core ) #### S3 #### ly_declare_aws_library( NAME S3 LIB_FILE aws-cpp-sdk-s3 BUILD_DEPENDENCIES # Even though AWS Core is a sibling module, make sure it's linked in first because this module depends on it. 3rdParty::AWSNativeSDK::Core ) #### SNS #### ly_declare_aws_library( NAME SNS LIB_FILE aws-cpp-sdk-sns BUILD_DEPENDENCIES # Even though AWS Core is a sibling module, make sure it's linked in first because this module depends on it. 3rdParty::AWSNativeSDK::Core ) #### SQS #### ly_declare_aws_library( NAME SQS LIB_FILE aws-cpp-sdk-sqs BUILD_DEPENDENCIES # Even though AWS Core is a sibling module, make sure it's linked in first because this module depends on it. 3rdParty::AWSNativeSDK::Core ) #### STS #### ly_declare_aws_library( NAME STS LIB_FILE aws-cpp-sdk-sts BUILD_DEPENDENCIES # Even though AWS Core is a sibling module, make sure it's linked in first because this module depends on it. 3rdParty::AWSNativeSDK::Core ) #### Transfer #### ly_declare_aws_library( NAME Transfer LIB_FILE aws-cpp-sdk-transfer BUILD_DEPENDENCIES # Even though AWS Core is a sibling module, make sure it's linked in first because this module depends on it. 3rdParty::AWSNativeSDK::Core ) ######### ######### Grouping Definitions ######### ######### #### GameLiftClient #### ly_declare_aws_library( NAME GameLiftClient BUILD_DEPENDENCIES 3rdParty::AWSNativeSDK::GameLift 3rdParty::AWSNativeSDK::Core ) #### AWSClientAuth #### ly_declare_aws_library( NAME AWSClientAuth BUILD_DEPENDENCIES 3rdParty::AWSNativeSDK::CognitoIdentity 3rdParty::AWSNativeSDK::CognitoIdp 3rdParty::AWSNativeSDK::IdentityManagement 3rdParty::AWSNativeSDK::STS 3rdParty::AWSNativeSDK::Core ) #### AWSCore #### ly_declare_aws_library( NAME AWSCore BUILD_DEPENDENCIES 3rdParty::AWSNativeSDK::DynamoDB 3rdParty::AWSNativeSDK::Lambda 3rdParty::AWSNativeSDK::S3 3rdParty::AWSNativeSDK::Core )