|
| 1 | +cmake_minimum_required(VERSION 3.28) |
| 2 | + |
| 3 | +project(flasher-stub CXX) |
| 4 | + |
| 5 | +option(TARGET_CHIP "Target ESP chip" "OFF") |
| 6 | + |
| 7 | +if("${TARGET_CHIP}" STREQUAL "OFF") |
| 8 | + message(FATAL_ERROR "Please set target chip via -DTARGET_CHIP.") |
| 9 | +endif() |
| 10 | + |
| 11 | +# CXX standard set based on the GCC version of the toolchain for ESP8266 (oldest one) |
| 12 | +set(CUSTOM_FLAGS --std=gnu++17 -Wall -Wextra -Werror -Wshadow -Wundef -Wconversion -Os -fno-common -nostdlib -fno-builtin -Wl,-static -g -ffunction-sections -Wl,--gc-sections) |
| 13 | +set(EXTRA_RISCV_FLAGS -march=rv32imc -mabi=ilp32 -msmall-data-limit=0) |
| 14 | +set(EXTRA_XTENSA_FLAGS -mtext-section-literals -mlongcalls) |
| 15 | + |
| 16 | +set(ESP8266_FLAGS "-DESP8266" ${EXTRA_XTENSA_FLAGS}) |
| 17 | +set(XTENSA_FLAGS "-DXTENSA" ${EXTRA_XTENSA_FLAGS}) |
| 18 | +set(RISCV_FLAGS "-DRISCV" ${EXTRA_RISCV_FLAGS}) |
| 19 | + |
| 20 | +message(STATUS "Building for ${TARGET_CHIP}") |
| 21 | +add_executable(${TARGET_CHIP}) |
| 22 | + |
| 23 | +set(ESP32_XTENSA_CHIPS esp32 esp32-s2 esp32-s3) |
| 24 | + |
| 25 | +if(TARGET_CHIP IN_LIST ESP32_XTENSA_CHIPS) |
| 26 | + set(TOOLCHAIN_EXECUTABLE_PREFIX "xtensa-${TARGET_CHIP}-elf-") |
| 27 | + set(CHIP_FLAGS "${XTENSA_FLAGS}") |
| 28 | +elseif(TARGET_CHIP STREQUAL "esp8266") |
| 29 | + set(TOOLCHAIN_EXECUTABLE_PREFIX "xtensa-lx106-elf-") |
| 30 | + set(CHIP_FLAGS "${ESP8266_FLAGS}") |
| 31 | + # The lx106 toolchain is of version 8.4 which doesn't support the --dependency-file linker option. |
| 32 | + set(CMAKE_LINK_DEPENDS_USE_LINKER FALSE) # requires CMake 3.27 or higher |
| 33 | +else() |
| 34 | + set(TOOLCHAIN_EXECUTABLE_PREFIX "riscv32-esp-elf-") |
| 35 | + set(CHIP_FLAGS "${RISCV_FLAGS}") |
| 36 | +endif() |
| 37 | + |
| 38 | +set(LINKER_SCRIPTS_DIR "${CMAKE_SOURCE_DIR}/src/ld") |
| 39 | +set(CHIP_LINKER_SCRIPT "${LINKER_SCRIPTS_DIR}/${TARGET_CHIP}.ld") |
| 40 | + |
| 41 | +target_compile_options(${TARGET_CHIP} PRIVATE |
| 42 | + ${CUSTOM_FLAGS} |
| 43 | + ${CHIP_FLAGS} |
| 44 | + "-T${CHIP_LINKER_SCRIPT}" |
| 45 | +) |
| 46 | + |
| 47 | +# TODO The -L directory should point to the shared ROM ld directory in the esp-stub-lib |
| 48 | +target_link_options(${TARGET_CHIP} PRIVATE |
| 49 | + ${CUSTOM_FLAGS} |
| 50 | + ${CHIP_FLAGS} |
| 51 | + -Wl,-Map=${CMAKE_BINARY_DIR}/${TARGET_CHIP}.map |
| 52 | + "-L${LINKER_SCRIPTS_DIR}" |
| 53 | + -Wl,--entry=esp_main |
| 54 | +) |
| 55 | + |
| 56 | +set(CMAKE_CXX_COMPILER ${TOOLCHAIN_EXECUTABLE_PREFIX}g++) |
| 57 | +set(CMAKE_LINKER ${TOOLCHAIN_EXECUTABLE_PREFIX}g++) |
| 58 | +set(CMAKE_EXECUTABLE_SUFFIX_CXX ".elf") |
| 59 | + |
| 60 | +add_subdirectory(${CMAKE_SOURCE_DIR}/src) |
0 commit comments