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)