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