|  | 
|  | 1 | +# ESP Target Definitions and Utilities | 
|  | 2 | +# Shared across the entire esp-flasher-stub project | 
|  | 3 | + | 
|  | 4 | +# Define supported ESP targets | 
|  | 5 | +set(ESP8266_TARGET esp8266) | 
|  | 6 | +set(XTENSA_TARGETS esp32 esp32s2 esp32s3) | 
|  | 7 | +set(RISCV_TARGETS esp32c2 esp32c3 esp32c5 esp32c6 esp32c61 esp32h2 esp32h21 esp32h4 esp32p4) | 
|  | 8 | +set(ALL_ESP_TARGETS ${ESP8266_TARGET} ${XTENSA_TARGETS} ${RISCV_TARGETS}) | 
|  | 9 | + | 
|  | 10 | +# Function to validate ESP target | 
|  | 11 | +function(validate_esp_target TARGET_CHIP) | 
|  | 12 | +    if(NOT TARGET_CHIP IN_LIST ALL_ESP_TARGETS) | 
|  | 13 | +        message(FATAL_ERROR "Invalid TARGET_CHIP '${TARGET_CHIP}'. Must be one of: ${ALL_ESP_TARGETS}") | 
|  | 14 | +    endif() | 
|  | 15 | +endfunction() | 
|  | 16 | + | 
|  | 17 | +# Function to get appropriate toolchain file for target | 
|  | 18 | +function(get_esp_toolchain_file ESP_TARGET OUTPUT_VAR) | 
|  | 19 | +    validate_esp_target(${ESP_TARGET}) | 
|  | 20 | + | 
|  | 21 | +    # Find the cmake directory from the CMAKE_MODULE_PATH | 
|  | 22 | +    foreach(module_path ${CMAKE_MODULE_PATH}) | 
|  | 23 | +        if(EXISTS "${module_path}/esp-targets.cmake") | 
|  | 24 | +            set(TOOLCHAIN_DIR ${module_path}/toolchains) | 
|  | 25 | +            break() | 
|  | 26 | +        endif() | 
|  | 27 | +    endforeach() | 
|  | 28 | + | 
|  | 29 | +    if(ESP_TARGET IN_LIST XTENSA_TARGETS) | 
|  | 30 | +        set(${OUTPUT_VAR} ${TOOLCHAIN_DIR}/xtensa.cmake PARENT_SCOPE) | 
|  | 31 | +    elseif(ESP_TARGET STREQUAL "esp8266") | 
|  | 32 | +        set(${OUTPUT_VAR} ${TOOLCHAIN_DIR}/esp8266.cmake PARENT_SCOPE) | 
|  | 33 | +    else() | 
|  | 34 | +        set(${OUTPUT_VAR} ${TOOLCHAIN_DIR}/riscv.cmake PARENT_SCOPE) | 
|  | 35 | +    endif() | 
|  | 36 | +endfunction() | 
|  | 37 | + | 
|  | 38 | +# Function to get toolchain prefix for target | 
|  | 39 | +function(get_esp_toolchain_prefix TARGET_CHIP OUTPUT_VAR) | 
|  | 40 | +    validate_esp_target(${TARGET_CHIP}) | 
|  | 41 | + | 
|  | 42 | +    if(TARGET_CHIP IN_LIST XTENSA_TARGETS) | 
|  | 43 | +        set(${OUTPUT_VAR} "xtensa-${TARGET_CHIP}-elf-" PARENT_SCOPE) | 
|  | 44 | +    elseif(TARGET_CHIP STREQUAL "esp8266") | 
|  | 45 | +        set(${OUTPUT_VAR} "xtensa-lx106-elf-" PARENT_SCOPE) | 
|  | 46 | +    else() | 
|  | 47 | +        set(${OUTPUT_VAR} "riscv32-esp-elf-" PARENT_SCOPE) | 
|  | 48 | +    endif() | 
|  | 49 | +endfunction() | 
|  | 50 | + | 
|  | 51 | +# Function to get target-specific compile flags | 
|  | 52 | +function(get_esp_target_flags TARGET_CHIP OUTPUT_VAR) | 
|  | 53 | +    validate_esp_target(${TARGET_CHIP}) | 
|  | 54 | + | 
|  | 55 | +    # Architecture-specific flags | 
|  | 56 | +    set(EXTRA_RISCV_FLAGS -march=rv32imc -mabi=ilp32 -msmall-data-limit=0) | 
|  | 57 | +    set(EXTRA_XTENSA_FLAGS -mtext-section-literals -mlongcalls) | 
|  | 58 | + | 
|  | 59 | +    if(TARGET_CHIP IN_LIST XTENSA_TARGETS) | 
|  | 60 | +        set(${OUTPUT_VAR} "-DXTENSA" ${EXTRA_XTENSA_FLAGS} PARENT_SCOPE) | 
|  | 61 | +    elseif(TARGET_CHIP STREQUAL "esp8266") | 
|  | 62 | +        set(${OUTPUT_VAR} "-DESP8266" ${EXTRA_XTENSA_FLAGS} PARENT_SCOPE) | 
|  | 63 | +    else() | 
|  | 64 | +        set(${OUTPUT_VAR} "-DRISCV" ${EXTRA_RISCV_FLAGS} PARENT_SCOPE) | 
|  | 65 | +    endif() | 
|  | 66 | +endfunction() | 
|  | 67 | + | 
|  | 68 | +message(STATUS "ESP targets loaded: ${ALL_ESP_TARGETS}") | 
0 commit comments