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) |
| 4 | if(NOT "src/error.c" IN_LIST "${src_builtin}") |
| 5 | list(APPEND src_builtin src/error.c) |
| 6 | endif() |
| 7 | if(NOT "src/version_features.c" IN_LIST "${src_builtin}") |
| 8 | list(APPEND src_builtin src/version_features.c) |
| 9 | endif() |
| 10 | |
| 11 | if(GEN_FILES) |
| 12 | find_package(Perl REQUIRED) |
| 13 | |
| 14 | file(GLOB crypto_error_headers ${CMAKE_CURRENT_SOURCE_DIR}/include/mbedtls/*.h) |
| 15 | file(GLOB tls_error_headers ${MBEDTLS_DIR}/include/mbedtls/*.h) |
| 16 | add_custom_command( |
| 17 | OUTPUT |
| 18 | ${CMAKE_CURRENT_BINARY_DIR}/src/error.c |
| 19 | COMMAND |
| 20 | ${PERL_EXECUTABLE} |
| 21 | ${MBEDTLS_DIR}/scripts/generate_errors.pl |
| 22 | ${CMAKE_CURRENT_SOURCE_DIR}/include/mbedtls |
| 23 | ${MBEDTLS_DIR}/include/mbedtls |
| 24 | ${MBEDTLS_DIR}/scripts/data_files |
| 25 | ${CMAKE_CURRENT_BINARY_DIR}/src/error.c |
| 26 | DEPENDS |
| 27 | ${MBEDTLS_DIR}/scripts/generate_errors.pl |
| 28 | ${crypto_error_headers} |
| 29 | ${tls_error_headers} |
| 30 | ${MBEDTLS_DIR}/scripts/data_files/error.fmt |
| 31 | ) |
| 32 | |
| 33 | add_custom_command( |
| 34 | OUTPUT |
| 35 | ${CMAKE_CURRENT_BINARY_DIR}/src/version_features.c |
| 36 | COMMAND |
| 37 | ${PERL_EXECUTABLE} |
| 38 | ${MBEDTLS_DIR}/scripts/generate_features.pl |
| 39 | ${MBEDTLS_DIR}/include/mbedtls |
| 40 | ${MBEDTLS_DIR}/scripts/data_files |
| 41 | ${CMAKE_CURRENT_BINARY_DIR}/src/version_features.c |
| 42 | DEPENDS |
| 43 | ${MBEDTLS_DIR}/scripts/generate_features.pl |
| 44 | ${MBEDTLS_DIR}/include/mbedtls/mbedtls_config.h |
| 45 | ${MBEDTLS_DIR}/scripts/data_files/version_features.fmt |
| 46 | ) |
| 47 | else() |
| 48 | link_to_source(src/error.c) |
| 49 | link_to_source(src/version_features.c) |
| 50 | endif() |
| 51 | |
| 52 | if(CMAKE_COMPILER_IS_GNUCC) |
| 53 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-declarations -Wmissing-prototypes") |
| 54 | endif(CMAKE_COMPILER_IS_GNUCC) |
| 55 | |
| 56 | if(CMAKE_COMPILER_IS_CLANG) |
| 57 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-declarations -Wmissing-prototypes -Wdocumentation -Wno-documentation-deprecated-sync -Wunreachable-code") |
| 58 | endif(CMAKE_COMPILER_IS_CLANG) |
| 59 | |
| 60 | if(CMAKE_COMPILER_IS_MSVC) |
| 61 | option(MSVC_STATIC_RUNTIME "Build the libraries with /MT compiler flag" OFF) |
| 62 | if(MSVC_STATIC_RUNTIME) |
| 63 | foreach(flag_var |
| 64 | CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE |
| 65 | CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO |
| 66 | CMAKE_C_FLAGS_CHECK) |
| 67 | string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") |
| 68 | endforeach(flag_var) |
| 69 | endif() |
| 70 | endif() |
| 71 | |
| 72 | if(WIN32) |
| 73 | set(libs ${libs} ws2_32 bcrypt) |
| 74 | endif(WIN32) |
| 75 | |
| 76 | if(CMAKE_C_COMPILER_ID MATCHES "AppleClang") |
| 77 | set(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>") |
| 78 | set(CMAKE_C_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>") |
| 79 | endif() |
| 80 | if(CMAKE_CXX_COMPILER_ID MATCHES "AppleClang") |
| 81 | set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>") |
| 82 | set(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>") |
| 83 | endif() |
| 84 | |
| 85 | if(LINK_WITH_PTHREAD) |
| 86 | set(libs ${libs} ${CMAKE_THREAD_LIBS_INIT}) |
| 87 | endif() |
| 88 | |
Ronald Cron | 8d887d1 | 2024-07-25 15:43:42 +0200 | [diff] [blame] | 89 | set(builtin_target ${TF_PSA_CRYPTO_TARGET_PREFIX}builtin) |
| 90 | if (USE_STATIC_TF_PSA_CRYPTO_LIBRARY) |
Ronald Cron | ac01d6e | 2024-07-18 11:34:55 +0200 | [diff] [blame] | 91 | set(builtin_static_target ${builtin_target}) |
| 92 | endif() |
| 93 | set(target_libraries ${builtin_target}) |
Ronald Cron | 8d887d1 | 2024-07-25 15:43:42 +0200 | [diff] [blame] | 94 | 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] | 95 | string(APPEND builtin_static_target "_static") |
| 96 | list(APPEND target_libraries ${builtin_static_target}) |
| 97 | endif() |
| 98 | |
Ronald Cron | 8d887d1 | 2024-07-25 15:43:42 +0200 | [diff] [blame] | 99 | set(p256m_target "${TF_PSA_CRYPTO_TARGET_PREFIX}p256m") |
| 100 | set(everest_target "${TF_PSA_CRYPTO_TARGET_PREFIX}everest") |
Ronald Cron | ac01d6e | 2024-07-18 11:34:55 +0200 | [diff] [blame] | 101 | |
Ronald Cron | 8d887d1 | 2024-07-25 15:43:42 +0200 | [diff] [blame] | 102 | if(USE_STATIC_TF_PSA_CRYPTO_LIBRARY) |
Ronald Cron | ac01d6e | 2024-07-18 11:34:55 +0200 | [diff] [blame] | 103 | add_library(${builtin_static_target} STATIC ${src_builtin}) |
| 104 | target_link_libraries(${builtin_static_target} PUBLIC ${libs}) |
| 105 | if(TARGET ${everest_target}) |
| 106 | target_link_libraries(${builtin_static_target} PUBLIC ${everest_target}) |
| 107 | endif() |
| 108 | |
| 109 | if(TARGET ${p256m_target}) |
| 110 | target_link_libraries(${builtin_static_target} PUBLIC ${p256m_target}) |
| 111 | endif() |
Ronald Cron | 8d887d1 | 2024-07-25 15:43:42 +0200 | [diff] [blame] | 112 | endif(USE_STATIC_TF_PSA_CRYPTO_LIBRARY) |
Ronald Cron | ac01d6e | 2024-07-18 11:34:55 +0200 | [diff] [blame] | 113 | |
Ronald Cron | 8d887d1 | 2024-07-25 15:43:42 +0200 | [diff] [blame] | 114 | if(USE_SHARED_TF_PSA_CRYPTO_LIBRARY) |
Ronald Cron | ac01d6e | 2024-07-18 11:34:55 +0200 | [diff] [blame] | 115 | add_library(${builtin_target} SHARED ${src_builtin}) |
| 116 | target_link_libraries(${builtin_target} PUBLIC ${libs}) |
| 117 | if(TARGET ${everest_target}) |
| 118 | target_link_libraries(${builtin_target} PUBLIC ${everest_target}) |
| 119 | endif() |
| 120 | |
| 121 | if(TARGET ${p256m_target}) |
| 122 | target_link_libraries(${builtin_target} PUBLIC ${p256m_target}) |
| 123 | endif() |
Ronald Cron | 8d887d1 | 2024-07-25 15:43:42 +0200 | [diff] [blame] | 124 | endif(USE_SHARED_TF_PSA_CRYPTO_LIBRARY) |
Ronald Cron | ac01d6e | 2024-07-18 11:34:55 +0200 | [diff] [blame] | 125 | |
| 126 | foreach (target IN LISTS target_libraries) |
| 127 | target_include_directories(${target} |
| 128 | PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src> |
| 129 | $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> |
| 130 | $<BUILD_INTERFACE:${MBEDTLS_DIR}/include> |
Ronald Cron | 4c670fa | 2024-07-25 09:22:39 +0200 | [diff] [blame] | 131 | $<BUILD_INTERFACE:${TF_PSA_CRYPTO_DIR}/include> |
| 132 | PRIVATE ${TF_PSA_CRYPTO_DIR}/core) |
Ronald Cron | ac01d6e | 2024-07-18 11:34:55 +0200 | [diff] [blame] | 133 | |
| 134 | # Pass-through MBEDTLS_CONFIG_FILE and MBEDTLS_USER_CONFIG_FILE |
| 135 | # This must be duplicated from library/CMakeLists.txt because |
| 136 | # everest is not directly linked against any mbedtls targets |
| 137 | # so does not inherit the compile definitions. |
| 138 | if(MBEDTLS_CONFIG_FILE) |
| 139 | target_compile_definitions(${target} |
| 140 | PUBLIC MBEDTLS_CONFIG_FILE="${MBEDTLS_CONFIG_FILE}") |
| 141 | endif() |
| 142 | if(MBEDTLS_USER_CONFIG_FILE) |
| 143 | target_compile_definitions(${target} |
| 144 | PUBLIC MBEDTLS_USER_CONFIG_FILE="${MBEDTLS_USER_CONFIG_FILE}") |
| 145 | endif() |
| 146 | |
Ronald Cron | 8d887d1 | 2024-07-25 15:43:42 +0200 | [diff] [blame] | 147 | if(INSTALL_TF_PSA_CRYPTO_HEADERS) |
Ronald Cron | ac01d6e | 2024-07-18 11:34:55 +0200 | [diff] [blame] | 148 | |
| 149 | install(DIRECTORY include/mbedtls |
| 150 | DESTINATION include |
| 151 | FILE_PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ |
| 152 | DIRECTORY_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ |
| 153 | GROUP_EXECUTE WORLD_READ WORLD_EXECUTE |
| 154 | FILES_MATCHING PATTERN "*.h") |
| 155 | |
Ronald Cron | 8d887d1 | 2024-07-25 15:43:42 +0200 | [diff] [blame] | 156 | endif(INSTALL_TF_PSA_CRYPTO_HEADERS) |
Ronald Cron | ac01d6e | 2024-07-18 11:34:55 +0200 | [diff] [blame] | 157 | |
| 158 | install(TARGETS ${target} |
| 159 | EXPORT MbedTLSTargets |
| 160 | DESTINATION ${CMAKE_INSTALL_LIBDIR} |
| 161 | PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ) |
| 162 | endforeach(target) |