# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 OR ISC cmake_minimum_required(VERSION 3.5...3.31) project(AWS_LC_RUST NONE) enable_language(C) function(set_my_target_properties ...) set_target_properties(crypto PROPERTIES ${ARGV}) if (BUILD_LIBSSL) set_target_properties(ssl PROPERTIES ${ARGV}) endif() endfunction() if(BUILD_SHARED_LIBS) add_definitions(-DBORINGSSL_SHARED_LIBRARY) endif() add_subdirectory(aws-lc aws-lc EXCLUDE_FROM_ALL) if(NOT EXISTS "${AWS_LC_RUST_SOURCE_DIR}/aws-lc/CMakeLists.txt") message(WARNING "###### WARNING: MISSING GIT SUBMODULE ###### Did you initialize the repo's git submodules? CMakeLists.txt not found.\n -- run 'git submodule update --init --recursive' to initialize.") endif() if (BUILD_LIBSSL) add_definitions(-DAWS_LC_RUST_INCLUDE_SSL) endif() # Custom target needed because aws-lc is added with EXCLUDE_FROM_ALL, so its targets aren't built by default. if (BUILD_LIBSSL) add_custom_target(aws_lc_sys ALL DEPENDS crypto ssl) else() add_custom_target(aws_lc_sys ALL DEPENDS crypto) endif() set(FINAL_ARTIFACTS_DIRECTORY ${CMAKE_BINARY_DIR}/artifacts) # Places the compiled library files at the root of the binary directory so we can have a consistent # location to find the artifacts cross-platform. set_my_target_properties( ARCHIVE_OUTPUT_DIRECTORY ${FINAL_ARTIFACTS_DIRECTORY} RUNTIME_OUTPUT_DIRECTORY ${FINAL_ARTIFACTS_DIRECTORY} LIBRARY_OUTPUT_DIRECTORY ${FINAL_ARTIFACTS_DIRECTORY}) # Based on https://stackoverflow.com/a/7750816 as some generators, like MSVC, will try to prefix the output directory # which is not needed in our case. foreach (OUT_NAME ${CMAKE_CONFIGURATION_TYPES}) string(TOUPPER ${OUT_NAME} OUT_NAME) set_my_target_properties( ARCHIVE_OUTPUT_DIRECTORY_${OUT_NAME} ${FINAL_ARTIFACTS_DIRECTORY} RUNTIME_OUTPUT_DIRECTORY_${OUT_NAME} ${FINAL_ARTIFACTS_DIRECTORY} LIBRARY_OUTPUT_DIRECTORY_${OUT_NAME} ${FINAL_ARTIFACTS_DIRECTORY}) endforeach () if (BORINGSSL_PREFIX) if (MSVC) set(TARGET_PREFIX "${BORINGSSL_PREFIX}") set_my_target_properties(IMPORT_PREFIX ${TARGET_PREFIX}) else() set(TARGET_PREFIX "lib${BORINGSSL_PREFIX}") endif() set_my_target_properties(PREFIX ${TARGET_PREFIX}) # This BORINGSSL_PREFIX has an "_" appended, so we must remove it string(REGEX REPLACE "_$" "" BORINGSSL_PREFIX_MACRO ${BORINGSSL_PREFIX}) add_definitions(-DBORINGSSL_PREFIX=${BORINGSSL_PREFIX_MACRO}) endif ()