|
| 1 | +cmake_minimum_required(VERSION 3.28) |
| 2 | + |
| 3 | +set(ESP32_XTENSA_CHIPS esp32 esp32-s2 esp32-s3) |
| 4 | + |
| 5 | +project(flasher-stub CXX) |
| 6 | + |
| 7 | +option(TARGET_CHIP "Target ESP chip" "OFF") |
| 8 | + |
| 9 | +if("${TARGET_CHIP}" STREQUAL "OFF") |
| 10 | + message(FATAL_ERROR "Please set target chip by TARGET_CHIP.") |
| 11 | +endif() |
| 12 | + |
| 13 | +# TODO move these to esp-stub-lib |
| 14 | +set(LINKER_SCRIPTS_DIR "${CMAKE_SOURCE_DIR}/src/ld") |
| 15 | + |
| 16 | +# CXX standard set based on the GCC version of the toolchain for ESP8266 (oldest one) |
| 17 | +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) |
| 18 | +set(EXTRA_RISCV_FLAGS -march=rv32imc -mabi=ilp32 -msmall-data-limit=0) |
| 19 | +set(EXTRA_XTENSA_FLAGS -mtext-section-literals -mlongcalls) |
| 20 | + |
| 21 | +set(ESP8266_FLAGS "-DESP8266" ${EXTRA_XTENSA_FLAGS}) |
| 22 | +set(XTENSA_FLAGS "-DXTENSA" ${EXTRA_XTENSA_FLAGS}) |
| 23 | +set(RISCV_FLAGS "-DRISCV" ${EXTRA_RISCV_FLAGS}) |
| 24 | + |
| 25 | +message(STATUS "Building for ${TARGET_CHIP}") |
| 26 | +add_executable(${TARGET_CHIP}) |
| 27 | + |
| 28 | +if(TARGET_CHIP IN_LIST ESP32_XTENSA_CHIPS) |
| 29 | + set(TOOLCHAIN_NAME "xtensa_toolchain") |
| 30 | + set(TOOLCHAIN_EXECUTABLE_PREFIX "xtensa-${TARGET_CHIP}-elf-") |
| 31 | + set(CHIP_FLAGS "${XTENSA_FLAGS}") |
| 32 | +elseif(TARGET_CHIP STREQUAL "esp8266") |
| 33 | + set(TOOLCHAIN_NAME "esp8266_toolchain") |
| 34 | + set(TOOLCHAIN_EXECUTABLE_PREFIX "xtensa-lx106-elf-") |
| 35 | + set(CHIP_FLAGS "${ESP8266_FLAGS}") |
| 36 | +else() |
| 37 | + set(TOOLCHAIN_NAME "riscv_toolchain") |
| 38 | + set(TOOLCHAIN_EXECUTABLE_PREFIX "riscv32-esp-elf-") |
| 39 | + set(CHIP_FLAGS "${RISCV_FLAGS}") |
| 40 | +endif() |
| 41 | + |
| 42 | +set(CHIP_LINKER_SCRIPT "${LINKER_SCRIPTS_DIR}/${TARGET_CHIP}.ld") |
| 43 | + |
| 44 | +target_compile_options(${TARGET_CHIP} PRIVATE |
| 45 | + ${CUSTOM_FLAGS} |
| 46 | + ${CHIP_FLAGS} |
| 47 | + "-T${CHIP_LINKER_SCRIPT}" |
| 48 | +) |
| 49 | + |
| 50 | +target_link_options(${TARGET_CHIP} PRIVATE |
| 51 | + ${CUSTOM_FLAGS} |
| 52 | + -Wl,-Map=${CMAKE_BINARY_DIR}/${TARGET_CHIP}.map -L${LINKER_SCRIPTS_DIR} |
| 53 | +) |
| 54 | + |
| 55 | +set(CMAKE_CXX_COMPILER ${TOOLCHAIN_EXECUTABLE_PREFIX}g++) |
| 56 | + |
| 57 | +add_subdirectory(${CMAKE_SOURCE_DIR}/src) |
0 commit comments