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

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


The following commit(s) were added to refs/heads/master by this push:
     new 98f683dea apps: Sanitize PROGNAME for _main symbol generation
98f683dea is described below

commit 98f683dea826cd825c5cca6142dd0928f287d60f
Author: Ansh Rai <[email protected]>
AuthorDate: Thu Jul 16 20:17:06 2026 +0000

    apps: Sanitize PROGNAME for _main symbol generation
    
    Program names containing '-' (e.g. renaming hello to hello-world via
    PROGNAME) previously generated an invalid identifier <PROGNAME>_main
    when constructing internal entry-point symbols. This caused build
    failures for C/C++ applications due to invalid identifiers in compiler
    definitions and generated builtin_proto.h.
    
    Introduce PROGSYM, a sanitized copy of PROGNAME with '-' replaced by
    '_', and use it wherever an internal C/Zig identifier is constructed
    (the -Dmain= defines, the Zig RENAMEMAIN rule, and the REGISTER
    call's entry-point argument). Preserve the original PROGNAME for the
    registered NSH command name and builtin registry entry, where hyphens
    are valid and expected.
    
    The Zig RENAMEMAIN path is also updated to use PROGSYM for consistency.
    The current hello_zig and leds_zig examples do not exercise this path,
    since neither uses a literal 'fn main' entry point, but the change
    keeps symbol generation consistent for future Zig applications.
    
    Testing (WSL2 Ubuntu, x86_64, sim:nsh):
    - CONFIG_EXAMPLES_HELLO_PROGNAME="hello-world": clean build,
      'hello-world' runs and prints 'Hello, World!!'
    - Reverted to default PROGNAME="hello": clean build, no regression
    - Confirmed by inspection that RENAMEMAIN's sed substitution does not
      fire on either current .zig source (generated _tmp.zig is
      byte-identical to the source)
    
    Fixes #19447
    
    Signed-off-by: Ansh Rai <[email protected]>
---
 Application.mk | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/Application.mk b/Application.mk
index 1b6eab63e..5cba93f3d 100644
--- a/Application.mk
+++ b/Application.mk
@@ -122,6 +122,7 @@ ifneq ($(strip $(PROGNAME)),)
   NLIST := $(shell seq 1 $(words $(PROGNAME)))
   $(foreach i, $(NLIST), \
     $(eval PROGNAME_$(word $i,$(PROGOBJ)) := $(word $i,$(PROGNAME))) \
+    $(eval PROGSYM_$(word $i,$(PROGOBJ)) := $(subst -,_,$(word 
$i,$(PROGNAME)))) \
     $(eval PROGOBJ_$(word $i,$(PROGLIST)) := $(word $i,$(PROGOBJ))) \
     $(eval PRIORITY_$(word $i,$(REGLIST)) := \
         $(if $(word $i,$(PRIORITY)),$(word $i,$(PRIORITY)),$(lastword 
$(PRIORITY)))) \
@@ -223,7 +224,7 @@ endef
 # rename "main()" in $1 to "xxx_main()" and save to $2
 define RENAMEMAIN
        $(ECHO_BEGIN)"Rename main() in $1 and save to $2"
-       $(Q) ${shell cat $1 | sed -e "s/fn[ ]\+main/fn $(addsuffix 
_main,$(PROGNAME_$@))/" > $2}
+       $(Q) ${shell cat $1 | sed -e "s/fn[ ]\+main/fn $(addsuffix 
_main,$(PROGSYM_$@))/" > $2}
        $(ECHO_END)
 endef
 
@@ -319,14 +320,14 @@ install:: $(PROGLIST)
 else
 
 $(MAINCXXOBJ): $(PREFIX)%$(CXXEXT)$(SUFFIX)$(OBJEXT): %$(CXXEXT)
-       $(eval $<_CXXFLAGS += ${shell $(DEFINE) "$(CXX)" main=$(addsuffix 
_main,$(PROGNAME_$@))})
-       $(eval $<_CXXELFFLAGS += ${shell $(DEFINE) "$(CXX)" main=$(addsuffix 
_main,$(PROGNAME_$@))})
+       $(eval $<_CXXFLAGS += ${shell $(DEFINE) "$(CXX)" main=$(addsuffix 
_main,$(PROGSYM_$@))})
+       $(eval $<_CXXELFFLAGS += ${shell $(DEFINE) "$(CXX)" main=$(addsuffix 
_main,$(PROGSYM_$@))})
        $(if $(and $(CONFIG_MODULES),$(MODCXXFLAGS)), \
                $(call ELFCOMPILEXX, $<, $@), $(call COMPILEXX, $<, $@))
 
 $(MAINCOBJ): $(PREFIX)%.c$(SUFFIX)$(OBJEXT): %.c
-       $(eval $<_CFLAGS += ${DEFINE_PREFIX}main=$(addsuffix 
_main,$(PROGNAME_$@)))
-       $(eval $<_CELFFLAGS += ${DEFINE_PREFIX}main=$(addsuffix 
_main,$(PROGNAME_$@)))
+       $(eval $<_CFLAGS += ${DEFINE_PREFIX}main=$(addsuffix 
_main,$(PROGSYM_$@)))
+       $(eval $<_CELFFLAGS += ${DEFINE_PREFIX}main=$(addsuffix 
_main,$(PROGSYM_$@)))
        $(if $(and $(CONFIG_MODULES),$(MODCFLAGS)), \
                $(call ELFCOMPILE, $<, $@), $(call COMPILE, $<, $@))
 
@@ -362,10 +363,11 @@ ifeq ($(DO_REGISTRATION),y)
 
 $(REGLIST): $(DEPCONFIG) Makefile
        $(eval PROGNAME_$@ := $(basename $(notdir $@)))
+       $(eval PROGSYM_$@ := $(subst -,_,$(PROGNAME_$@)))
 ifeq ($(CONFIG_SCHED_USER_IDENTITY),y)
-       $(call REGISTER,$(PROGNAME_$@),$(PRIORITY_$@),$(STACKSIZE_$@),$(if 
$(BUILD_MODULE),,$(PROGNAME_$@)_main),$(UID_$@),$(GID_$@),$(MODE_$@))
+       $(call REGISTER,$(PROGNAME_$@),$(PRIORITY_$@),$(STACKSIZE_$@),$(if 
$(BUILD_MODULE),,$(PROGSYM_$@)_main),$(UID_$@),$(GID_$@),$(MODE_$@))
 else
-       $(call REGISTER,$(PROGNAME_$@),$(PRIORITY_$@),$(STACKSIZE_$@),$(if 
$(BUILD_MODULE),,$(PROGNAME_$@)_main))
+       $(call REGISTER,$(PROGNAME_$@),$(PRIORITY_$@),$(STACKSIZE_$@),$(if 
$(BUILD_MODULE),,$(PROGSYM_$@)_main))
 endif
 
 register:: $(REGLIST)

Reply via email to