Ronald Cron | c29afb6 | 2024-07-01 14:50:54 +0200 | [diff] [blame] | 1 | add_subdirectory(src) |
Ronald Cron | ac01d6e | 2024-07-18 11:34:55 +0200 | [diff] [blame] | 2 | |
| 3 | file(GLOB src_builtin RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} src/*.c) |
Ronald Cron | ac01d6e | 2024-07-18 11:34:55 +0200 | [diff] [blame] | 4 | |
| 5 | if(CMAKE_COMPILER_IS_GNUCC) |
Ronald Cron | 50bd4f8 | 2024-10-10 12:17:59 +0200 | [diff] [blame] | 6 | set(LIBS_C_FLAGS -Wmissing-declarations -Wmissing-prototypes) |
Ronald Cron | ac01d6e | 2024-07-18 11:34:55 +0200 | [diff] [blame] | 7 | endif(CMAKE_COMPILER_IS_GNUCC) |
| 8 | |
| 9 | if(CMAKE_COMPILER_IS_CLANG) |
Ronald Cron | 50bd4f8 | 2024-10-10 12:17:59 +0200 | [diff] [blame] | 10 | set(LIBS_C_FLAGS -Wmissing-declarations -Wmissing-prototypes -Wdocumentation -Wno-documentation-deprecated-sync -Wunreachable-code) |
Ronald Cron | ac01d6e | 2024-07-18 11:34:55 +0200 | [diff] [blame] | 11 | endif(CMAKE_COMPILER_IS_CLANG) |
| 12 | |
| 13 | if(CMAKE_COMPILER_IS_MSVC) |
| 14 | option(MSVC_STATIC_RUNTIME "Build the libraries with /MT compiler flag" OFF) |
| 15 | if(MSVC_STATIC_RUNTIME) |
| 16 | foreach(flag_var |
| 17 | CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE |
| 18 | CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO |
| 19 | CMAKE_C_FLAGS_CHECK) |
| 20 | string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") |
| 21 | endforeach(flag_var) |
| 22 | endif() |
| 23 | endif() |
| 24 | |
| 25 | if(WIN32) |
| 26 | set(libs ${libs} ws2_32 bcrypt) |
| 27 | endif(WIN32) |
| 28 | |
| 29 | if(CMAKE_C_COMPILER_ID MATCHES "AppleClang") |
| 30 | set(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>") |
| 31 | set(CMAKE_C_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>") |
| 32 | endif() |
| 33 | if(CMAKE_CXX_COMPILER_ID MATCHES "AppleClang") |
| 34 | set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>") |
| 35 | set(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>") |
| 36 | endif() |
| 37 | |
| 38 | if(LINK_WITH_PTHREAD) |
| 39 | set(libs ${libs} ${CMAKE_THREAD_LIBS_INIT}) |
| 40 | endif() |
| 41 | |
Ronald Cron | 8d887d1 | 2024-07-25 15:43:42 +0200 | [diff] [blame] | 42 | set(builtin_target ${TF_PSA_CRYPTO_TARGET_PREFIX}builtin) |
| 43 | if (USE_STATIC_TF_PSA_CRYPTO_LIBRARY) |
Ronald Cron | ac01d6e | 2024-07-18 11:34:55 +0200 | [diff] [blame] | 44 | set(builtin_static_target ${builtin_target}) |
| 45 | endif() |
| 46 | set(target_libraries ${builtin_target}) |
Ronald Cron | 8d887d1 | 2024-07-25 15:43:42 +0200 | [diff] [blame] | 47 | if(USE_STATIC_TF_PSA_CRYPTO_LIBRARY AND USE_SHARED_TF_PSA_CRYPTO_LIBRARY) |
Ronald Cron | ac01d6e | 2024-07-18 11:34:55 +0200 | [diff] [blame] | 48 | string(APPEND builtin_static_target "_static") |
| 49 | list(APPEND target_libraries ${builtin_static_target}) |
| 50 | endif() |
| 51 | |
Ronald Cron | 8d887d1 | 2024-07-25 15:43:42 +0200 | [diff] [blame] | 52 | set(p256m_target "${TF_PSA_CRYPTO_TARGET_PREFIX}p256m") |
| 53 | set(everest_target "${TF_PSA_CRYPTO_TARGET_PREFIX}everest") |
Ronald Cron | ac01d6e | 2024-07-18 11:34:55 +0200 | [diff] [blame] | 54 | |
Ronald Cron | 8d887d1 | 2024-07-25 15:43:42 +0200 | [diff] [blame] | 55 | if(USE_STATIC_TF_PSA_CRYPTO_LIBRARY) |
Ronald Cron | ac01d6e | 2024-07-18 11:34:55 +0200 | [diff] [blame] | 56 | add_library(${builtin_static_target} STATIC ${src_builtin}) |
Ronald Cron | b247898 | 2024-10-07 16:17:07 +0200 | [diff] [blame] | 57 | set_base_compile_options(${builtin_static_target}) |
Ronald Cron | 50bd4f8 | 2024-10-10 12:17:59 +0200 | [diff] [blame] | 58 | target_compile_options(${builtin_static_target} PRIVATE ${LIBS_C_FLAGS}) |
Ronald Cron | ac01d6e | 2024-07-18 11:34:55 +0200 | [diff] [blame] | 59 | target_link_libraries(${builtin_static_target} PUBLIC ${libs}) |
| 60 | if(TARGET ${everest_target}) |
| 61 | target_link_libraries(${builtin_static_target} PUBLIC ${everest_target}) |
| 62 | endif() |
| 63 | |
| 64 | if(TARGET ${p256m_target}) |
| 65 | target_link_libraries(${builtin_static_target} PUBLIC ${p256m_target}) |
| 66 | endif() |
Ronald Cron | 8d887d1 | 2024-07-25 15:43:42 +0200 | [diff] [blame] | 67 | endif(USE_STATIC_TF_PSA_CRYPTO_LIBRARY) |
Ronald Cron | ac01d6e | 2024-07-18 11:34:55 +0200 | [diff] [blame] | 68 | |
Ronald Cron | 8d887d1 | 2024-07-25 15:43:42 +0200 | [diff] [blame] | 69 | if(USE_SHARED_TF_PSA_CRYPTO_LIBRARY) |
Ronald Cron | ac01d6e | 2024-07-18 11:34:55 +0200 | [diff] [blame] | 70 | add_library(${builtin_target} SHARED ${src_builtin}) |
Ronald Cron | b247898 | 2024-10-07 16:17:07 +0200 | [diff] [blame] | 71 | set_base_compile_options(${builtin_target}) |
Ronald Cron | 50bd4f8 | 2024-10-10 12:17:59 +0200 | [diff] [blame] | 72 | target_compile_options(${builtin_static_target} PRIVATE ${LIBS_C_FLAGS}) |
Ronald Cron | ac01d6e | 2024-07-18 11:34:55 +0200 | [diff] [blame] | 73 | target_link_libraries(${builtin_target} PUBLIC ${libs}) |
| 74 | if(TARGET ${everest_target}) |
| 75 | target_link_libraries(${builtin_target} PUBLIC ${everest_target}) |
| 76 | endif() |
| 77 | |
| 78 | if(TARGET ${p256m_target}) |
| 79 | target_link_libraries(${builtin_target} PUBLIC ${p256m_target}) |
| 80 | endif() |
Ronald Cron | 8d887d1 | 2024-07-25 15:43:42 +0200 | [diff] [blame] | 81 | endif(USE_SHARED_TF_PSA_CRYPTO_LIBRARY) |
Ronald Cron | ac01d6e | 2024-07-18 11:34:55 +0200 | [diff] [blame] | 82 | |
| 83 | foreach (target IN LISTS target_libraries) |
| 84 | target_include_directories(${target} |
| 85 | PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src> |
| 86 | $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> |
| 87 | $<BUILD_INTERFACE:${MBEDTLS_DIR}/include> |
Ronald Cron | 4c670fa | 2024-07-25 09:22:39 +0200 | [diff] [blame] | 88 | $<BUILD_INTERFACE:${TF_PSA_CRYPTO_DIR}/include> |
| 89 | PRIVATE ${TF_PSA_CRYPTO_DIR}/core) |
Ronald Cron | ac01d6e | 2024-07-18 11:34:55 +0200 | [diff] [blame] | 90 | |
| 91 | # Pass-through MBEDTLS_CONFIG_FILE and MBEDTLS_USER_CONFIG_FILE |
| 92 | # This must be duplicated from library/CMakeLists.txt because |
| 93 | # everest is not directly linked against any mbedtls targets |
| 94 | # so does not inherit the compile definitions. |
| 95 | if(MBEDTLS_CONFIG_FILE) |
| 96 | target_compile_definitions(${target} |
| 97 | PUBLIC MBEDTLS_CONFIG_FILE="${MBEDTLS_CONFIG_FILE}") |
| 98 | endif() |
| 99 | if(MBEDTLS_USER_CONFIG_FILE) |
| 100 | target_compile_definitions(${target} |
| 101 | PUBLIC MBEDTLS_USER_CONFIG_FILE="${MBEDTLS_USER_CONFIG_FILE}") |
| 102 | endif() |
| 103 | |
Ronald Cron | 8d887d1 | 2024-07-25 15:43:42 +0200 | [diff] [blame] | 104 | if(INSTALL_TF_PSA_CRYPTO_HEADERS) |
Ronald Cron | ac01d6e | 2024-07-18 11:34:55 +0200 | [diff] [blame] | 105 | |
| 106 | install(DIRECTORY include/mbedtls |
| 107 | DESTINATION include |
| 108 | FILE_PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ |
| 109 | DIRECTORY_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ |
| 110 | GROUP_EXECUTE WORLD_READ WORLD_EXECUTE |
| 111 | FILES_MATCHING PATTERN "*.h") |
| 112 | |
Ronald Cron | 8d887d1 | 2024-07-25 15:43:42 +0200 | [diff] [blame] | 113 | endif(INSTALL_TF_PSA_CRYPTO_HEADERS) |
Ronald Cron | ac01d6e | 2024-07-18 11:34:55 +0200 | [diff] [blame] | 114 | |
| 115 | install(TARGETS ${target} |
| 116 | EXPORT MbedTLSTargets |
| 117 | DESTINATION ${CMAKE_INSTALL_LIBDIR} |
| 118 | PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ) |
| 119 | endforeach(target) |