blob: 80940317231e5add2cfdc33992ae087d56a8a368 [file] [log] [blame]
Shubham Kulkarni052561d2021-07-20 11:42:44 +05301cmake_minimum_required(VERSION 3.13)
2
3if (NOT DEFINED MCUBOOT_TARGET)
4 message(FATAL_ERROR "MCUBOOT_TARGET not defined. Please pass -DMCUBOOT_TARGET flag.")
5endif()
6
7project(mcuboot_${MCUBOOT_TARGET})
8
9if (NOT DEFINED IDF_PATH)
10 if (DEFINED ENV{IDF_PATH})
11 set(IDF_PATH $ENV{IDF_PATH})
12 else()
13 message(FATAL_ERROR "IDF_PATH not found. Please set IDF_PATH environment variable or pass -DIDF_PATH flag.")
14 endif()
15endif()
16
17execute_process(
18 COMMAND git describe --tags
19 WORKING_DIRECTORY ${IDF_PATH}
20 OUTPUT_VARIABLE IDF_VER
21 OUTPUT_STRIP_TRAILING_WHITESPACE
22)
23if (NOT "${IDF_VER}" MATCHES "v4.3")
24 message(FATAL_ERROR "Unsupported ESP-IDF version found in IDF_PATH, please checkout to v4.3")
25endif()
26
27if (DEFINED MCUBOOT_CONFIG_FILE)
28 set(mcuboot_config_file ${MCUBOOT_CONFIG_FILE})
29else()
30 set(mcuboot_config_file "${CMAKE_CURRENT_LIST_DIR}/bootloader.conf")
31endif()
32
33if (NOT EXISTS "${mcuboot_config_file}")
34 message(FATAL_ERROR "MCUboot configuration file does not exist at ${mcuboot_config_file}")
35endif()
36
37configure_file(${mcuboot_config_file} dummy.conf)
38file(STRINGS ${mcuboot_config_file} BOOTLOADER_CONF)
39foreach(config ${BOOTLOADER_CONF})
40 if (NOT (${config} MATCHES "#"))
41 string(REGEX REPLACE "^[ ]+" "" config ${config})
42 string(REGEX MATCH "^[^=]+" CONFIG_NAME ${config})
43 string(REPLACE "${CONFIG_NAME}=" "" CONFIG_VALUE ${config})
44 add_definitions(-D${CONFIG_NAME}=${CONFIG_VALUE})
45 endif()
46endforeach()
47
48set(APP_NAME mcuboot_${MCUBOOT_TARGET})
49set(APP_EXECUTABLE ${APP_NAME}.elf)
50
51set(MCUBOOT_ROOT_DIR ${CMAKE_CURRENT_LIST_DIR}/../..)
52set(BOOTUTIL_DIR ${MCUBOOT_ROOT_DIR}/boot/bootutil)
53set(MBEDTLS_DIR ${MCUBOOT_ROOT_DIR}/ext/mbedtls)
54
55set(bootutil_srcs
56 ${BOOTUTIL_DIR}/src/boot_record.c
57 ${BOOTUTIL_DIR}/src/bootutil_misc.c
58 ${BOOTUTIL_DIR}/src/bootutil_public.c
59 ${BOOTUTIL_DIR}/src/caps.c
60 ${BOOTUTIL_DIR}/src/encrypted.c
61 ${BOOTUTIL_DIR}/src/fault_injection_hardening.c
62 ${BOOTUTIL_DIR}/src/fault_injection_hardening_delay_rng_mbedtls.c
63 ${BOOTUTIL_DIR}/src/image_ec.c
64 ${BOOTUTIL_DIR}/src/image_ec256.c
65 ${BOOTUTIL_DIR}/src/image_ed25519.c
66 ${BOOTUTIL_DIR}/src/image_rsa.c
67 ${BOOTUTIL_DIR}/src/image_validate.c
68 ${BOOTUTIL_DIR}/src/loader.c
69 ${BOOTUTIL_DIR}/src/swap_misc.c
70 ${BOOTUTIL_DIR}/src/swap_move.c
71 ${BOOTUTIL_DIR}/src/swap_scratch.c
72 ${BOOTUTIL_DIR}/src/tlv.c
73 )
74
75set(mbedtls_srcs
76 ${MBEDTLS_DIR}/library/sha256.c
77 ${MBEDTLS_DIR}/library/platform_util.c
78 )
79
80set(CFLAGS
81 "-mlongcalls"
82 "-Wno-frame-address"
83 "-Wall"
84 "-Wextra"
85 "-W"
86 "-Wdeclaration-after-statement"
87 "-Wwrite-strings"
88 "-Wlogical-op"
89 "-Wshadow"
90 "-ffunction-sections"
91 "-fdata-sections"
92 "-fstrict-volatile-bitfields"
93 "-Werror=all"
94 "-Wno-error=unused-function"
95 "-Wno-error=unused-but-set-variable"
96 "-Wno-error=unused-variable"
97 "-Wno-error=deprecated-declarations"
98 "-Wno-unused-parameter"
99 "-Wno-sign-compare"
100 "-ggdb"
101 "-Os"
102 "-D_GNU_SOURCE"
103 "-std=gnu99"
104 "-Wno-old-style-declaration"
105 "-Wno-implicit-int"
106 "-Wno-declaration-after-statement"
107 )
108
109set(LDFLAGS
110 "-nostdlib"
111 "-mlongcalls"
112 "-Wno-frame-address"
113 "-Wl,--cref"
114 "-Wl,--Map=${APP_NAME}.map"
115 "-fno-rtti"
116 "-fno-lto"
117 "-Wl,--gc-sections"
118 "-Wl,--undefined=uxTopUsedPriority"
119 "-lm"
120 "-lgcc"
121 "-lgcov"
122 "-lstdc++"
123 "-lc"
124 )
125
126add_executable(
127 ${APP_EXECUTABLE}
128 ${CMAKE_CURRENT_LIST_DIR}/main.c
129 )
130
131target_compile_options(
132 ${APP_EXECUTABLE}
133 PUBLIC
134 ${CFLAGS}
135 )
136
137target_sources(
138 ${APP_EXECUTABLE}
139 PUBLIC
140 ${bootutil_srcs}
141 ${mbedtls_srcs}
142 ${CMAKE_CURRENT_LIST_DIR}/port/esp_mcuboot.c
143 )
144
145target_include_directories(
146 ${APP_EXECUTABLE}
147 PUBLIC
148 ${BOOTUTIL_DIR}/include
149 ${MBEDTLS_DIR}/include
150 ${CMAKE_CURRENT_LIST_DIR}/include
151 )
152
153target_link_libraries(
154 ${APP_EXECUTABLE}
155 PUBLIC
156 -T${CMAKE_CURRENT_LIST_DIR}/port/${MCUBOOT_TARGET}/ld/bootloader.ld
157 ${LDFLAGS}
158 )