This is an automated email from the ASF dual-hosted git repository.

xiaoxiang781216 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit ee0d00f4948ebbba60345ebfc83ad01744cd063e
Author: Eren Terzioglu <[email protected]>
AuthorDate: Wed Jul 22 18:50:30 2026 +0200

    arch/risc-v/espressif: Add build customization options for ULP build system
    
    Add customization options for ULP build system
    
    Signed-off-by: Eren Terzioglu <[email protected]>
---
 arch/risc-v/src/common/espressif/esp_ulp.cmake | 31 +++++++++++++++++++++-----
 arch/risc-v/src/common/espressif/esp_ulp.mk    | 27 +++++++++++++++++-----
 2 files changed, 48 insertions(+), 10 deletions(-)

diff --git a/arch/risc-v/src/common/espressif/esp_ulp.cmake 
b/arch/risc-v/src/common/espressif/esp_ulp.cmake
index 95a1de95933..cc9961b8acc 100644
--- a/arch/risc-v/src/common/espressif/esp_ulp.cmake
+++ b/arch/risc-v/src/common/espressif/esp_ulp.cmake
@@ -74,6 +74,9 @@ if(CONFIG_ESPRESSIF_USE_LP_CORE)
 
   set(ULP_LPCORE_SECTIONS_LD
       ${ULP_BOARD_SCRIPTS_DIR}/${CHIP_SERIES}_lpcore_sections.ld)
+  if(ULP_CUSTOM_SECTIONS_LD)
+    set(ULP_LPCORE_SECTIONS_LD ${ULP_CUSTOM_SECTIONS_LD})
+  endif()
   set(ULP_SECTIONS_LD ${ULP_FOLDER}/ulp_sections.ld)
   set(ULP_MAPGEN_TOOL ${HAL}/components/ulp/esp32ulp_mapgen.py)
 
@@ -116,6 +119,8 @@ if(CONFIG_ESPRESSIF_USE_LP_CORE)
       ${HAL}/components/esp_rom/${CHIP_SERIES}/include/${CHIP_SERIES}
       ${HAL}/components/hal/include
       ${HAL}/components/hal/platform_port/include
+      ${HAL}/components/esp_hal_wdt/include
+      ${HAL}/components/esp_hal_wdt/${CHIP_SERIES}/include
       ${HAL}/components/log
       ${HAL}/components/log/include
       ${HAL}/components/riscv/include
@@ -311,17 +316,29 @@ if(CONFIG_ESPRESSIF_USE_LP_CORE)
     set(ULP_NUTTX_CONFIG_COPY ${ULP_FOLDER}/nuttx/config.h)
 
     foreach(_ulp_csrc ${ULP_APP_C_SRCS})
-      list(APPEND ULP_APP_C_SOURCES ${ULP_APP_FOLDER}/${_ulp_csrc})
+      if(IS_ABSOLUTE "${_ulp_csrc}")
+        list(APPEND ULP_APP_C_SOURCES ${_ulp_csrc})
+      else()
+        list(APPEND ULP_APP_C_SOURCES ${ULP_APP_FOLDER}/${_ulp_csrc})
+      endif()
     endforeach()
 
     foreach(_ulp_asrc ${ULP_APP_ASM_SRCS})
-      list(APPEND ULP_APP_ASM_SOURCES ${ULP_APP_FOLDER}/${_ulp_asrc})
+      if(IS_ABSOLUTE "${_ulp_asrc}")
+        list(APPEND ULP_APP_ASM_SOURCES ${_ulp_asrc})
+      else()
+        list(APPEND ULP_APP_ASM_SOURCES ${ULP_APP_FOLDER}/${_ulp_asrc})
+      endif()
     endforeach()
 
     if(ULP_APP_INCLUDES)
       foreach(_ulp_incl ${ULP_APP_INCLUDES})
-        get_filename_component(_ulp_incl_dir ${_ulp_incl} DIRECTORY)
-        list(APPEND ULP_APP_INCLUDE_DIRS ${_ulp_incl_dir})
+        if(IS_DIRECTORY "${_ulp_incl}")
+          list(APPEND ULP_APP_INCLUDE_DIRS ${_ulp_incl})
+        else()
+          get_filename_component(_ulp_incl_dir ${_ulp_incl} DIRECTORY)
+          list(APPEND ULP_APP_INCLUDE_DIRS ${_ulp_incl_dir})
+        endif()
       endforeach()
       list(REMOVE_DUPLICATES ULP_APP_INCLUDE_DIRS)
       list(APPEND ULP_INCLUDE_DIRS ${ULP_APP_INCLUDE_DIRS})
@@ -375,6 +392,10 @@ if(CONFIG_ESPRESSIF_USE_LP_CORE)
     target_include_directories(${ULP_FIRMWARE_TARGET}
                                PRIVATE ${ULP_INCLUDE_DIRS})
     target_compile_definitions(${ULP_FIRMWARE_TARGET} PRIVATE IS_ULP_COCPU)
+    if(ULP_EXTRA_DEFINES)
+      target_compile_definitions(${ULP_FIRMWARE_TARGET}
+                                 PRIVATE ${ULP_EXTRA_DEFINES})
+    endif()
     target_compile_options(
       ${ULP_FIRMWARE_TARGET}
       PRIVATE ${ULP_COMPILE_OPTS}
@@ -408,7 +429,7 @@ if(CONFIG_ESPRESSIF_USE_LP_CORE)
                    _ulp_postprocess_aliases "${_ulp_postprocess_aliases}")
 
     set(_ulp_postprocess_var_map
-        [=[if ! grep -q "struct ulp_var_map_s ulp_var_map" 
"@ULP_VAR_MAP_HEADER@"; then printf '%s\n' '#include "nuttx/symtab.h"' 
'#include "ulp/ulp_vars.h"' '' 'struct ulp_var_map_s' '{' '  struct symtab_s 
sym;' '  size_t size;' '};' '' 'struct ulp_var_map_s ulp_var_map[] =' '{ };' > 
"@ULP_VAR_MAP_HEADER@"; fi; sed -i "/@ULP_PREFIX@/d" "@ULP_VAR_MAP_HEADER@"; 
flock -x "@ULP_LOCKFILE@" -c 'grep "@ULP_PREFIX@" "@ULP_MAIN_HEADER@" | while 
IFS= read -r line; do var=$(echo "$line" | grep -oP [...]
+        [=[if ! grep -q "struct ulp_var_map_s ulp_var_map" 
"@ULP_VAR_MAP_HEADER@"; then printf '%s\n' '#include "nuttx/symtab.h"' 
'#include "ulp/ulp_vars.h"' '' 'struct ulp_var_map_s' '{' '  struct symtab_s 
sym;' '  size_t size;' '};' '' 'struct ulp_var_map_s ulp_var_map[] =' '{ };' > 
"@ULP_VAR_MAP_HEADER@"; fi; sed -i "/@ULP_PREFIX@/d" "@ULP_VAR_MAP_HEADER@"; 
flock -x "@ULP_LOCKFILE@" -c 'grep "@ULP_PREFIX@" "@ULP_MAIN_HEADER@" | while 
IFS= read -r line; do var=$(echo "$line" | grep -oP [...]
     )
     string(REPLACE "@ULP_VAR_MAP_HEADER@" "${ULP_VAR_MAP_HEADER}"
                    _ulp_postprocess_var_map "${_ulp_postprocess_var_map}")
diff --git a/arch/risc-v/src/common/espressif/esp_ulp.mk 
b/arch/risc-v/src/common/espressif/esp_ulp.mk
index 26db0f2d42b..4095b0c13fa 100644
--- a/arch/risc-v/src/common/espressif/esp_ulp.mk
+++ b/arch/risc-v/src/common/espressif/esp_ulp.mk
@@ -63,6 +63,8 @@ ULP_INCLUDES += 
$(INCDIR_PREFIX)$(CHIP)$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)c
 ULP_INCLUDES += 
$(INCDIR_PREFIX)$(CHIP)$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)hal$(DELIM)include
 ULP_INCLUDES += 
$(INCDIR_PREFIX)$(CHIP)$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)hal$(DELIM)include
 ULP_INCLUDES += 
$(INCDIR_PREFIX)$(CHIP)$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)hal$(DELIM)platform_port$(DELIM)include
+ULP_INCLUDES += 
$(INCDIR_PREFIX)$(CHIP)$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)esp_hal_wdt$(DELIM)include
+ULP_INCLUDES += 
$(INCDIR_PREFIX)$(CHIP)$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)esp_hal_wdt$(DELIM)$(CHIP_SERIES)$(DELIM)include
 ULP_INCLUDES += 
$(INCDIR_PREFIX)$(CHIP)$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)log
 ULP_INCLUDES += 
$(INCDIR_PREFIX)$(CHIP)$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)log$(DELIM)include
 ULP_INCLUDES += 
$(INCDIR_PREFIX)$(CHIP)$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)riscv$(DELIM)include
@@ -159,8 +161,8 @@ else
        ULP_BIN_FILE = $(ULP_FOLDER)$(DELIM)ulp.bin
        ULP_BIN_FILE_PATH = $(ULP_BIN_FILE)
 
-       ULP_C_SRCS = $(addprefix $(ULP_APP_FOLDER)/,$(sort $(ULP_APP_C_SRCS)))
-       ULP_ASM_SRCS = $(addprefix $(ULP_APP_FOLDER)/,$(sort 
$(ULP_APP_ASM_SRCS)))
+       ULP_C_SRCS = $(foreach s,$(sort $(ULP_APP_C_SRCS)),$(if $(filter 
/%,$(s)),$(s),$(ULP_APP_FOLDER)/$(s)))
+       ULP_ASM_SRCS = $(foreach s,$(sort $(ULP_APP_ASM_SRCS)),$(if $(filter 
/%,$(s)),$(s),$(ULP_APP_FOLDER)/$(s)))
 
        ULP_APP_OBJS = $(ULP_ASM_SRCS:.S=_ulp.o)
        ULP_APP_OBJS += $(ULP_C_SRCS:.c=_ulp.o)
@@ -250,6 +252,17 @@ ULP_LDFLAGS :=                                             
                                \
        -Xlinker -Map=$(ULP_MAP_FILE)           \
        $(ULP_LDINCLUDES)
 
+# Optional compile defines (e.g. -DNUTTX_ESP_BIST_MODULE) — after := above
+ULP_CFLAGS += $(ULP_EXTRA_DEFINES)
+ULP_ASFLAGS += $(ULP_EXTRA_DEFINES)
+
+# Default LP sections linker template; apps may override with 
ULP_CUSTOM_SECTIONS_LD
+ifeq ($(ULP_CUSTOM_SECTIONS_LD),)
+       ULP_SECTIONS_TEMPLATE = 
$(BOARD)$(DELIM)scripts$(DELIM)${CHIP_SERIES}_lpcore_sections.ld
+else
+       ULP_SECTIONS_TEMPLATE = $(ULP_CUSTOM_SECTIONS_LD)
+endif
+
 # Build rules
 
 .PHONY: context depend
@@ -261,15 +274,18 @@ checkpython3:
                exit 1; \
        fi
 
-%_ulp.o: %.c $(ULP_NUTTX_CONFIG)
+%_ulp.o: %.c $(ULP_NUTTX_CONFIG) $(ULP_FOLDER)$(DELIM)ulp_sections.ld
        $(Q) echo "Compiling $< for ULP"
        $(Q) $(CC) $(ULP_CFLAGS) -c $< -o $@
-       $(Q) $(CC) $(ULP_INCLUDES) -E -P -xc -o 
$(ULP_FOLDER)$(DELIM)ulp_sections.ld 
$(BOARD)$(DELIM)scripts$(DELIM)${CHIP_SERIES}_lpcore_sections.ld
 
 %_ulp.o: %.S $(ULP_NUTTX_CONFIG)
        $(Q) echo "Compiling $< for ULP"
        $(Q) $(CC) $(ULP_ASFLAGS) -c $< -o $@
 
+$(ULP_FOLDER)$(DELIM)ulp_sections.ld: $(ULP_NUTTX_CONFIG) 
$(ULP_SECTIONS_TEMPLATE)
+       $(Q) echo "Preprocessing ULP linker sections from 
$(ULP_SECTIONS_TEMPLATE)"
+       $(Q) $(CC) $(ULP_INCLUDES) -E -P -xc -o $@ $(ULP_SECTIONS_TEMPLATE)
+
 $(ULP_NUTTX_CONFIG): $(ULP_FOLDER)
        $(Q) echo "Copying nuttx$(DELIM)config.h into 
$(ULP_FOLDER)$(DELIM)nuttx"
        $(Q) cp $(TOPDIR)$(DELIM)include$(DELIM)nuttx$(DELIM)config.h 
$(ULP_FOLDER)$(DELIM)nuttx
@@ -277,6 +293,7 @@ $(ULP_NUTTX_CONFIG): $(ULP_FOLDER)
 $(ULP_ELF_FILE): $(ULP_OBJS)
        $(Q) echo "Linking for ULP"
        $(Q) $(CC) $(ULP_LDFLAGS) $(ULP_OBJS) -o $@
+       $(ULP_POST_LINK)
 
 $(ULP_BIN_FILE): $(ULP_ELF_FILE) checkpython3
        $(Q) \
@@ -317,7 +334,7 @@ ifneq ($(suffix $(ULP_APP_BIN)),.bin)
                                                                size=4; \
                                fi; \
                                        sed -i "s/ };//" $(ULP_VAR_MAP_HEADER); 
\
-                                       echo -ne "  { .sym.sym_name = 
\"$${var}\", .sym.sym_value = &$${var}, .size = $${size}},\n };" >> 
$(ULP_VAR_MAP_HEADER); \
+                                       printf "  { .sym.sym_name = \"%s\", 
.sym.sym_value = &%s, .size = %s},\n };" "$${var}" "$${var}" "$${size}" >> 
$(ULP_VAR_MAP_HEADER); \
                        fi; \
                done'
 endif

Reply via email to