cmake_minimum_required(VERSION 3.28)
option(SYMBIAN_MBEDTLS_HOST "Build native verification libraries, not guest artifacts" OFF)
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR AND NOT SYMBIAN_MBEDTLS_HOST)
  include(cmake/sdk.cmake)
endif()
project(SymbianMbedTLS VERSION 3.4.1 LANGUAGES C CXX)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS OFF)
option(SYMBIAN_MBEDTLS_TLS13 "Compile TLS 1.3 alongside TLS 1.2" ON)
option(SYMBIAN_MBEDTLS_TESTS "Build native verification tests" OFF)
option(SYMBIAN_MBEDTLS_GUEST_PROBE "Build the SDK-linked crypto execution probe" OFF)
if(NOT SYMBIAN_MBEDTLS_HOST)
  if(NOT TARGET Symbian::Runtime)
    list(PREPEND CMAKE_MODULE_PATH "${SYMBIAN_SDK_PREFIX}/cmake")
    include(SymbianApp)
  endif()
  if(NOT CMAKE_C_COMPILER_TARGET STREQUAL "${SYMBIAN_TARGET_ARCH}-none-eabi")
    message(FATAL_ERROR "C compiler must use the same Symbian ARM target as C++")
  endif()
endif()
include(CMakePackageConfigHelpers)
add_subdirectory(library)
add_subdirectory(include)
option(SYMBIAN_MBEDTLS_OPENSSL_COMPAT "Build the separate Qt OpenSSL 1.0.2u compatibility port" ON)
if(SYMBIAN_MBEDTLS_OPENSSL_COMPAT)
  add_subdirectory(compat/openssl)
endif()
configure_package_config_file(cmake/MbedTLSConfig.cmake.in
  "${CMAKE_CURRENT_BINARY_DIR}/MbedTLSConfig.cmake"
  INSTALL_DESTINATION lib/cmake/MbedTLS)
write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/MbedTLSConfigVersion.cmake"
  VERSION ${PROJECT_VERSION} COMPATIBILITY ExactVersion)
install(EXPORT MbedTLSTargets NAMESPACE MbedTLS:: DESTINATION lib/cmake/MbedTLS)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/MbedTLSConfig.cmake"
  "${CMAKE_CURRENT_BINARY_DIR}/MbedTLSConfigVersion.cmake" DESTINATION lib/cmake/MbedTLS)
install(FILES LICENSE docs/PROVENANCE.md DESTINATION share/licenses/symbian-mbedtls)
if(SYMBIAN_MBEDTLS_TESTS)
  if(NOT SYMBIAN_MBEDTLS_HOST)
    message(FATAL_ERROR "Native tests require the host-debug preset; use GUEST_PROBE for ARM")
  endif()
  enable_testing()
  add_subdirectory(tests)
endif()
if(SYMBIAN_MBEDTLS_GUEST_PROBE)
  if(SYMBIAN_MBEDTLS_HOST)
    message(FATAL_ERROR "The execution probe requires the Symbian SDK")
  endif()
  enable_language(ASM)
  add_subdirectory(examples/crypto_probe)
endif()
