mirror of
https://github.com/apache/nuttx-apps.git
synced 2026-08-01 20:29:00 +00:00
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 <anshrai331@gmail.com>
This commit is contained in:
parent
7469e88bfa
commit
98f683dea8
1 changed files with 9 additions and 7 deletions
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue