blob: 0043fca4e23a0cbb9f7e568a7c371109fde54fda [file] [log] [blame]
Ronald Cronc29afb62024-07-01 14:50:54 +02001add_subdirectory(src)
Ronald Cronac01d6e2024-07-18 11:34:55 +02002
3file(GLOB src_builtin RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} src/*.c)
4if(NOT "src/error.c" IN_LIST "${src_builtin}")
5 list(APPEND src_builtin src/error.c)
6endif()
7if(NOT "src/version_features.c" IN_LIST "${src_builtin}")
8 list(APPEND src_builtin src/version_features.c)
9endif()
10
11if(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 )
47else()
48 link_to_source(src/error.c)
49 link_to_source(src/version_features.c)
50endif()
51
52if(CMAKE_COMPILER_IS_GNUCC)
53 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-declarations -Wmissing-prototypes")
54endif(CMAKE_COMPILER_IS_GNUCC)
55
56if(CMAKE_COMPILER_IS_CLANG)
57 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-declarations -Wmissing-prototypes -Wdocumentation -Wno-documentation-deprecated-sync -Wunreachable-code")
58endif(CMAKE_COMPILER_IS_CLANG)
59
60if(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()
70endif()
71
72if(WIN32)
73 set(libs ${libs} ws2_32 bcrypt)
74endif(WIN32)
75
76if(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>")
79endif()
80if(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>")
83endif()
84
85if(LINK_WITH_PTHREAD)
86 set(libs ${libs} ${CMAKE_THREAD_LIBS_INIT})
87endif()
88
Ronald Cron8d887d12024-07-25 15:43:42 +020089set(builtin_target ${TF_PSA_CRYPTO_TARGET_PREFIX}builtin)
90if (USE_STATIC_TF_PSA_CRYPTO_LIBRARY)
Ronald Cronac01d6e2024-07-18 11:34:55 +020091 set(builtin_static_target ${builtin_target})
92endif()
93set(target_libraries ${builtin_target})
Ronald Cron8d887d12024-07-25 15:43:42 +020094if(USE_STATIC_TF_PSA_CRYPTO_LIBRARY AND USE_SHARED_TF_PSA_CRYPTO_LIBRARY)
Ronald Cronac01d6e2024-07-18 11:34:55 +020095 string(APPEND builtin_static_target "_static")
96 list(APPEND target_libraries ${builtin_static_target})
97endif()
98
Ronald Cron8d887d12024-07-25 15:43:42 +020099set(p256m_target "${TF_PSA_CRYPTO_TARGET_PREFIX}p256m")
100set(everest_target "${TF_PSA_CRYPTO_TARGET_PREFIX}everest")
Ronald Cronac01d6e2024-07-18 11:34:55 +0200101
Ronald Cron8d887d12024-07-25 15:43:42 +0200102if(USE_STATIC_TF_PSA_CRYPTO_LIBRARY)
Ronald Cronac01d6e2024-07-18 11:34:55 +0200103 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 Cron8d887d12024-07-25 15:43:42 +0200112endif(USE_STATIC_TF_PSA_CRYPTO_LIBRARY)
Ronald Cronac01d6e2024-07-18 11:34:55 +0200113
Ronald Cron8d887d12024-07-25 15:43:42 +0200114if(USE_SHARED_TF_PSA_CRYPTO_LIBRARY)
Ronald Cronac01d6e2024-07-18 11:34:55 +0200115 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 Cron8d887d12024-07-25 15:43:42 +0200124endif(USE_SHARED_TF_PSA_CRYPTO_LIBRARY)
Ronald Cronac01d6e2024-07-18 11:34:55 +0200125
126foreach (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 Cron4c670fa2024-07-25 09:22:39 +0200131 $<BUILD_INTERFACE:${TF_PSA_CRYPTO_DIR}/include>
132 PRIVATE ${TF_PSA_CRYPTO_DIR}/core)
Ronald Cronac01d6e2024-07-18 11:34:55 +0200133
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 Cron8d887d12024-07-25 15:43:42 +0200147 if(INSTALL_TF_PSA_CRYPTO_HEADERS)
Ronald Cronac01d6e2024-07-18 11:34:55 +0200148
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 Cron8d887d12024-07-25 15:43:42 +0200156 endif(INSTALL_TF_PSA_CRYPTO_HEADERS)
Ronald Cronac01d6e2024-07-18 11:34:55 +0200157
158 install(TARGETS ${target}
159 EXPORT MbedTLSTargets
160 DESTINATION ${CMAKE_INSTALL_LIBDIR}
161 PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)
162endforeach(target)