blob: dd1a1130fe492dca3b9a8517b6a9eda570671fbd [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)
Ronald Cronac01d6e2024-07-18 11:34:55 +02004
5if(CMAKE_COMPILER_IS_GNUCC)
Ronald Cron50bd4f82024-10-10 12:17:59 +02006 set(LIBS_C_FLAGS -Wmissing-declarations -Wmissing-prototypes)
Ronald Cronac01d6e2024-07-18 11:34:55 +02007endif(CMAKE_COMPILER_IS_GNUCC)
8
9if(CMAKE_COMPILER_IS_CLANG)
Ronald Cron50bd4f82024-10-10 12:17:59 +020010 set(LIBS_C_FLAGS -Wmissing-declarations -Wmissing-prototypes -Wdocumentation -Wno-documentation-deprecated-sync -Wunreachable-code)
Ronald Cronac01d6e2024-07-18 11:34:55 +020011endif(CMAKE_COMPILER_IS_CLANG)
12
13if(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()
23endif()
24
25if(WIN32)
26 set(libs ${libs} ws2_32 bcrypt)
27endif(WIN32)
28
29if(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>")
32endif()
33if(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>")
36endif()
37
38if(LINK_WITH_PTHREAD)
39 set(libs ${libs} ${CMAKE_THREAD_LIBS_INIT})
40endif()
41
Ronald Cron8d887d12024-07-25 15:43:42 +020042set(builtin_target ${TF_PSA_CRYPTO_TARGET_PREFIX}builtin)
43if (USE_STATIC_TF_PSA_CRYPTO_LIBRARY)
Ronald Cronac01d6e2024-07-18 11:34:55 +020044 set(builtin_static_target ${builtin_target})
45endif()
46set(target_libraries ${builtin_target})
Ronald Cron8d887d12024-07-25 15:43:42 +020047if(USE_STATIC_TF_PSA_CRYPTO_LIBRARY AND USE_SHARED_TF_PSA_CRYPTO_LIBRARY)
Ronald Cronac01d6e2024-07-18 11:34:55 +020048 string(APPEND builtin_static_target "_static")
49 list(APPEND target_libraries ${builtin_static_target})
50endif()
51
Ronald Cron8d887d12024-07-25 15:43:42 +020052set(p256m_target "${TF_PSA_CRYPTO_TARGET_PREFIX}p256m")
53set(everest_target "${TF_PSA_CRYPTO_TARGET_PREFIX}everest")
Ronald Cronac01d6e2024-07-18 11:34:55 +020054
Ronald Cron8d887d12024-07-25 15:43:42 +020055if(USE_STATIC_TF_PSA_CRYPTO_LIBRARY)
Ronald Cronac01d6e2024-07-18 11:34:55 +020056 add_library(${builtin_static_target} STATIC ${src_builtin})
Ronald Cronb2478982024-10-07 16:17:07 +020057 set_base_compile_options(${builtin_static_target})
Ronald Cron50bd4f82024-10-10 12:17:59 +020058 target_compile_options(${builtin_static_target} PRIVATE ${LIBS_C_FLAGS})
Ronald Cronac01d6e2024-07-18 11:34:55 +020059 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 Cron8d887d12024-07-25 15:43:42 +020067endif(USE_STATIC_TF_PSA_CRYPTO_LIBRARY)
Ronald Cronac01d6e2024-07-18 11:34:55 +020068
Ronald Cron8d887d12024-07-25 15:43:42 +020069if(USE_SHARED_TF_PSA_CRYPTO_LIBRARY)
Ronald Cronac01d6e2024-07-18 11:34:55 +020070 add_library(${builtin_target} SHARED ${src_builtin})
Ronald Cronb2478982024-10-07 16:17:07 +020071 set_base_compile_options(${builtin_target})
Ronald Cron50bd4f82024-10-10 12:17:59 +020072 target_compile_options(${builtin_static_target} PRIVATE ${LIBS_C_FLAGS})
Ronald Cronac01d6e2024-07-18 11:34:55 +020073 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 Cron8d887d12024-07-25 15:43:42 +020081endif(USE_SHARED_TF_PSA_CRYPTO_LIBRARY)
Ronald Cronac01d6e2024-07-18 11:34:55 +020082
83foreach (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 Cron4c670fa2024-07-25 09:22:39 +020088 $<BUILD_INTERFACE:${TF_PSA_CRYPTO_DIR}/include>
89 PRIVATE ${TF_PSA_CRYPTO_DIR}/core)
Ronald Cronac01d6e2024-07-18 11:34:55 +020090
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 Cron8d887d12024-07-25 15:43:42 +0200104 if(INSTALL_TF_PSA_CRYPTO_HEADERS)
Ronald Cronac01d6e2024-07-18 11:34:55 +0200105
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 Cron8d887d12024-07-25 15:43:42 +0200113 endif(INSTALL_TF_PSA_CRYPTO_HEADERS)
Ronald Cronac01d6e2024-07-18 11:34:55 +0200114
115 install(TARGETS ${target}
116 EXPORT MbedTLSTargets
117 DESTINATION ${CMAKE_INSTALL_LIBDIR}
118 PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)
119endforeach(target)