Make CMakeLists.txt discover if mbed TLS is being built as subproject

The main CMakeLists.txt is capable to detect if it's being built as
a subproject (i.e. through add_subdirectory()) hence allowing to
disable the package configuration, target export and installation
that generally are not required when mbed TLS is being built as
part of another project.

Signed-off-by: Antonio de Angelis <antonio.deangelis@arm.com>
This commit is contained in:
Antonio de Angelis 2021-12-07 20:45:55 +00:00
parent 8c8cea25c7
commit 2869c67d63

View file

@ -39,6 +39,14 @@ else()
project("mbed TLS" C) project("mbed TLS" C)
endif() endif()
# Determine if mbed TLS is being built as a subproject using add_subdirectory()
if(NOT DEFINED MBEDTLS_AS_SUBPROJECT)
set(MBEDTLS_AS_SUBPROJECT ON)
if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
set(MBEDTLS_AS_SUBPROJECT OFF)
endif()
endif()
# Set the project root directory. # Set the project root directory.
set(MBEDTLS_DIR ${CMAKE_CURRENT_SOURCE_DIR}) set(MBEDTLS_DIR ${CMAKE_CURRENT_SOURCE_DIR})
@ -52,6 +60,8 @@ else()
option(GEN_FILES "Generate the auto-generated files as needed" ON) option(GEN_FILES "Generate the auto-generated files as needed" ON)
endif() endif()
option(DISABLE_PACKAGE_CONFIG_AND_INSTALL "Disable package configuration, target export and installation" ${MBEDTLS_AS_SUBPROJECT})
string(REGEX MATCH "Clang" CMAKE_COMPILER_IS_CLANG "${CMAKE_C_COMPILER_ID}") string(REGEX MATCH "Clang" CMAKE_COMPILER_IS_CLANG "${CMAKE_C_COMPILER_ID}")
string(REGEX MATCH "GNU" CMAKE_COMPILER_IS_GNU "${CMAKE_C_COMPILER_ID}") string(REGEX MATCH "GNU" CMAKE_COMPILER_IS_GNU "${CMAKE_C_COMPILER_ID}")
string(REGEX MATCH "IAR" CMAKE_COMPILER_IS_IAR "${CMAKE_C_COMPILER_ID}") string(REGEX MATCH "IAR" CMAKE_COMPILER_IS_IAR "${CMAKE_C_COMPILER_ID}")
@ -325,36 +335,38 @@ if(ENABLE_TESTING)
endif() endif()
endif() endif()
configure_package_config_file( if(NOT DISABLE_PACKAGE_CONFIG_AND_INSTALL)
"cmake/MbedTLSConfig.cmake.in" configure_package_config_file(
"cmake/MbedTLSConfig.cmake" "cmake/MbedTLSConfig.cmake.in"
INSTALL_DESTINATION "cmake") "cmake/MbedTLSConfig.cmake"
INSTALL_DESTINATION "cmake")
write_basic_package_version_file( write_basic_package_version_file(
"cmake/MbedTLSConfigVersion.cmake" "cmake/MbedTLSConfigVersion.cmake"
COMPATIBILITY SameMajorVersion COMPATIBILITY SameMajorVersion
VERSION 3.0.0) VERSION 3.0.0)
install( install(
FILES "${CMAKE_CURRENT_BINARY_DIR}/cmake/MbedTLSConfig.cmake" FILES "${CMAKE_CURRENT_BINARY_DIR}/cmake/MbedTLSConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/cmake/MbedTLSConfigVersion.cmake" "${CMAKE_CURRENT_BINARY_DIR}/cmake/MbedTLSConfigVersion.cmake"
DESTINATION "cmake") DESTINATION "cmake")
export( export(
EXPORT MbedTLSTargets EXPORT MbedTLSTargets
NAMESPACE MbedTLS:: NAMESPACE MbedTLS::
FILE "cmake/MbedTLSTargets.cmake") FILE "cmake/MbedTLSTargets.cmake")
install( install(
EXPORT MbedTLSTargets EXPORT MbedTLSTargets
NAMESPACE MbedTLS:: NAMESPACE MbedTLS::
DESTINATION "cmake" DESTINATION "cmake"
FILE "MbedTLSTargets.cmake") FILE "MbedTLSTargets.cmake")
if(CMAKE_VERSION VERSION_GREATER 3.15 OR CMAKE_VERSION VERSION_EQUAL 3.15) if(CMAKE_VERSION VERSION_GREATER 3.15 OR CMAKE_VERSION VERSION_EQUAL 3.15)
# Do not export the package by default # Do not export the package by default
cmake_policy(SET CMP0090 NEW) cmake_policy(SET CMP0090 NEW)
# Make this package visible to the system # Make this package visible to the system
export(PACKAGE MbedTLS) export(PACKAGE MbedTLS)
endif()
endif() endif()