xref: /aosp_15_r20/external/openthread/third_party/mbedtls/CMakeLists.txt (revision cfb92d1480a9e65faed56933e9c12405f45898b4)
1#
2#  Copyright (c) 2020, The OpenThread Authors.
3#  All rights reserved.
4#
5#  Redistribution and use in source and binary forms, with or without
6#  modification, are permitted provided that the following conditions are met:
7#  1. Redistributions of source code must retain the above copyright
8#     notice, this list of conditions and the following disclaimer.
9#  2. Redistributions in binary form must reproduce the above copyright
10#     notice, this list of conditions and the following disclaimer in the
11#     documentation and/or other materials provided with the distribution.
12#  3. Neither the name of the copyright holder nor the
13#     names of its contributors may be used to endorse or promote products
14#     derived from this software without specific prior written permission.
15#
16#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17#  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18#  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19#  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20#  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21#  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22#  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23#  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24#  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25#  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26#  POSSIBILITY OF SUCH DAMAGE.
27#
28
29set(OT_MBEDTLS_DEFAULT_CONFIG_FILE \"openthread-mbedtls-config.h\")
30
31set(OT_MBEDTLS_CONFIG_FILE "" CACHE STRING "The mbedTLS config file")
32
33set(ENABLE_TESTING OFF CACHE BOOL "Disable mbedtls test" FORCE)
34set(ENABLE_PROGRAMS OFF CACHE BOOL "Disable mbetls program" FORCE)
35
36find_program(UNIFDEFALL_EXE unifdefall)
37find_program(UNIFDEF_EXE unifdef)
38if(UNIFDEF_EXE)
39    execute_process(COMMAND ${UNIFDEF_EXE} -V ERROR_VARIABLE VERSION_OUTPUT)
40    string(REGEX MATCH "Version: unifdef-([0-9]+\\.[0-9]+)" VERSION_MATCH "${VERSION_OUTPUT}")
41    set(UNIFDEF_VERSION ${CMAKE_MATCH_1})
42endif()
43find_program(SED_EXE sed)
44
45string(REPLACE "-Wconversion" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
46string(REPLACE "-Wconversion" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
47
48set(MBEDTLS_FATAL_WARNINGS OFF CACHE BOOL "Compiler warnings treated as errors" FORCE)
49
50add_subdirectory(repo)
51
52if(UNIFDEFALL_EXE AND SED_EXE AND UNIFDEF_VERSION VERSION_GREATER_EQUAL 2.10)
53    add_custom_command(OUTPUT openthread-mbedtls-config.h
54        COMMAND ${UNIFDEFALL_EXE}
55            "'-D$<JOIN:$<TARGET_PROPERTY:ot-config,INTERFACE_COMPILE_DEFINITIONS>,';'-D>'"
56            "-I$<JOIN:$<TARGET_PROPERTY:ot-config,INTERFACE_INCLUDE_DIRECTORIES>,;-I>"
57            "-I$<JOIN:${OT_PUBLIC_INCLUDES},;-I>"
58            "-I${CMAKE_CURRENT_SOURCE_DIR}/repo/include"
59            "${CMAKE_CURRENT_SOURCE_DIR}/mbedtls-config.h" |
60            ${SED_EXE} '/openthread-core-config\.h/d' >
61            openthread-mbedtls-config.h
62        MAIN_DEPENDENCY mbedtls-config.h
63        COMMAND_EXPAND_LISTS
64    )
65
66    add_custom_target(openthread-mbedtls-config
67        DEPENDS openthread-mbedtls-config.h)
68
69    add_dependencies(ot-config openthread-mbedtls-config)
70    add_dependencies(mbedtls openthread-mbedtls-config)
71    add_dependencies(mbedx509 openthread-mbedtls-config)
72    add_dependencies(mbedcrypto openthread-mbedtls-config)
73else()
74    configure_file(mbedtls-config.h openthread-mbedtls-config.h COPYONLY)
75endif()
76
77target_include_directories(ot-config SYSTEM
78    INTERFACE
79        ${CMAKE_CURRENT_BINARY_DIR}
80        ${CMAKE_CURRENT_SOURCE_DIR}/repo/include)
81
82target_compile_definitions(mbedtls
83    PUBLIC
84        "MBEDTLS_CONFIG_FILE=$<IF:$<BOOL:${OT_MBEDTLS_CONFIG_FILE}>,${OT_MBEDTLS_CONFIG_FILE},${OT_MBEDTLS_DEFAULT_CONFIG_FILE}>"
85    PRIVATE
86        $<TARGET_PROPERTY:ot-config,INTERFACE_COMPILE_DEFINITIONS>
87)
88target_include_directories(mbedtls
89    PUBLIC
90        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/repo/include>
91    PRIVATE
92        ${OT_PUBLIC_INCLUDES}
93        $<TARGET_PROPERTY:ot-config,INTERFACE_INCLUDE_DIRECTORIES>
94)
95
96target_compile_definitions(mbedx509
97    PUBLIC
98        "MBEDTLS_CONFIG_FILE=$<IF:$<BOOL:${OT_MBEDTLS_CONFIG_FILE}>,${OT_MBEDTLS_CONFIG_FILE},${OT_MBEDTLS_DEFAULT_CONFIG_FILE}>"
99    PRIVATE
100        $<TARGET_PROPERTY:ot-config,INTERFACE_COMPILE_DEFINITIONS>
101)
102target_include_directories(mbedx509
103    PUBLIC
104        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/repo/include>
105    PRIVATE
106        ${OT_PUBLIC_INCLUDES}
107        $<TARGET_PROPERTY:ot-config,INTERFACE_INCLUDE_DIRECTORIES>
108)
109
110target_compile_definitions(mbedcrypto
111    PUBLIC
112        "MBEDTLS_CONFIG_FILE=$<IF:$<BOOL:${OT_MBEDTLS_CONFIG_FILE}>,${OT_MBEDTLS_CONFIG_FILE},${OT_MBEDTLS_DEFAULT_CONFIG_FILE}>"
113    PRIVATE
114        $<TARGET_PROPERTY:ot-config,INTERFACE_COMPILE_DEFINITIONS>
115)
116target_include_directories(mbedcrypto
117    PUBLIC
118        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/repo/include>
119    PRIVATE
120        ${OT_PUBLIC_INCLUDES}
121        $<TARGET_PROPERTY:ot-config,INTERFACE_INCLUDE_DIRECTORIES>
122)
123