blob: 3c1459a5c92f5627dce2d3cd1e3c592e1333174a [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)
6 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-declarations -Wmissing-prototypes")
7endif(CMAKE_COMPILER_IS_GNUCC)
8
9if(CMAKE_COMPILER_IS_CLANG)
10 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-declarations -Wmissing-prototypes -Wdocumentation -Wno-documentation-deprecated-sync -Wunreachable-code")
11endif(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 Cronac01d6e2024-07-18 11:34:55 +020058 target_link_libraries(${builtin_static_target} PUBLIC ${libs})
59 if(TARGET ${everest_target})
60 target_link_libraries(${builtin_static_target} PUBLIC ${everest_target})
61 endif()
62
63 if(TARGET ${p256m_target})
64 target_link_libraries(${builtin_static_target} PUBLIC ${p256m_target})
65 endif()
Ronald Cron8d887d12024-07-25 15:43:42 +020066endif(USE_STATIC_TF_PSA_CRYPTO_LIBRARY)
Ronald Cronac01d6e2024-07-18 11:34:55 +020067
Ronald Cron8d887d12024-07-25 15:43:42 +020068if(USE_SHARED_TF_PSA_CRYPTO_LIBRARY)
Ronald Cronac01d6e2024-07-18 11:34:55 +020069 add_library(${builtin_target} SHARED ${src_builtin})
Ronald Cronb2478982024-10-07 16:17:07 +020070 set_base_compile_options(${builtin_target})
Ronald Cronac01d6e2024-07-18 11:34:55 +020071 target_link_libraries(${builtin_target} PUBLIC ${libs})
72 if(TARGET ${everest_target})
73 target_link_libraries(${builtin_target} PUBLIC ${everest_target})
74 endif()
75
76 if(TARGET ${p256m_target})
77 target_link_libraries(${builtin_target} PUBLIC ${p256m_target})
78 endif()
Ronald Cron8d887d12024-07-25 15:43:42 +020079endif(USE_SHARED_TF_PSA_CRYPTO_LIBRARY)
Ronald Cronac01d6e2024-07-18 11:34:55 +020080
81foreach (target IN LISTS target_libraries)
82 target_include_directories(${target}
83 PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
84 $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
85 $<BUILD_INTERFACE:${MBEDTLS_DIR}/include>
Ronald Cron4c670fa2024-07-25 09:22:39 +020086 $<BUILD_INTERFACE:${TF_PSA_CRYPTO_DIR}/include>
87 PRIVATE ${TF_PSA_CRYPTO_DIR}/core)
Ronald Cronac01d6e2024-07-18 11:34:55 +020088
89 # Pass-through MBEDTLS_CONFIG_FILE and MBEDTLS_USER_CONFIG_FILE
90 # This must be duplicated from library/CMakeLists.txt because
91 # everest is not directly linked against any mbedtls targets
92 # so does not inherit the compile definitions.
93 if(MBEDTLS_CONFIG_FILE)
94 target_compile_definitions(${target}
95 PUBLIC MBEDTLS_CONFIG_FILE="${MBEDTLS_CONFIG_FILE}")
96 endif()
97 if(MBEDTLS_USER_CONFIG_FILE)
98 target_compile_definitions(${target}
99 PUBLIC MBEDTLS_USER_CONFIG_FILE="${MBEDTLS_USER_CONFIG_FILE}")
100 endif()
101
Ronald Cron8d887d12024-07-25 15:43:42 +0200102 if(INSTALL_TF_PSA_CRYPTO_HEADERS)
Ronald Cronac01d6e2024-07-18 11:34:55 +0200103
104 install(DIRECTORY include/mbedtls
105 DESTINATION include
106 FILE_PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
107 DIRECTORY_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ
108 GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
109 FILES_MATCHING PATTERN "*.h")
110
Ronald Cron8d887d12024-07-25 15:43:42 +0200111 endif(INSTALL_TF_PSA_CRYPTO_HEADERS)
Ronald Cronac01d6e2024-07-18 11:34:55 +0200112
113 install(TARGETS ${target}
114 EXPORT MbedTLSTargets
115 DESTINATION ${CMAKE_INSTALL_LIBDIR}
116 PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)
117endforeach(target)