You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2023/08/24 15:36:36 UTC

[nuttx-apps] branch master updated: Application.mk:define main entry MAINNAME relatively

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

xiaoxiang 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 4765cc341 Application.mk:define main entry MAINNAME relatively
4765cc341 is described below

commit 4765cc3411d7e64fc8965e66cc55cca535b3e794
Author: xuxin19 <xu...@xiaomi.com>
AuthorDate: Tue Jul 25 16:53:44 2023 +0800

    Application.mk:define main entry MAINNAME relatively
    
    when a program has multiple MAINSRC for incremental compilation,
    the PROGNAME of the compiled file may generate errors
    -------------------- compile definition error ---------------------
    cc -c -g CFLAGS INCLUDEDIR -Dmain=funA_main funB.c -o funB.c.path.o
                                 ^^^^  ^^^^^^    ^^^^
    -------------------------------------------------------------------
    use the MAINOBJ:PROGNAME mapping variable to define the main entry name
    
    Signed-off-by: xuxin19 <xu...@xiaomi.com>
---
 Application.mk | 65 +++++++++++++++++++++++++++++++---------------------------
 Make.defs      | 16 ---------------
 tools/Wasm.mk  |  6 +++---
 3 files changed, 38 insertions(+), 49 deletions(-)

diff --git a/Application.mk b/Application.mk
index 0c27c8fac..70491a459 100644
--- a/Application.mk
+++ b/Application.mk
@@ -93,6 +93,31 @@ ifneq ($(BUILD_MODULE),y)
   OBJS += $(MAINCOBJ) $(MAINCXXOBJ) $(MAINRUSTOBJ) $(MAINZIGOBJ)
 endif
 
+ifneq ($(PROGNAME),)
+  PROGOBJ := $(MAINCOBJ) $(MAINCXXOBJ) $(MAINRUSTOBJ)
+  ifneq ($(words $(PROGOBJ)), $(words $(PROGNAME)))
+    $(warning "program names $(PROGNAME) does not match mainsrcs $(PROGOBJ)")
+  endif
+  PROGLIST := $(addprefix $(BINDIR)$(DELIM),$(PROGNAME))
+  REGLIST := $(addprefix $(BUILTIN_REGISTRY)$(DELIM),$(addsuffix .bdat,$(PROGNAME)))
+
+  NLIST := $(shell seq 1 $(words $(PROGNAME)))
+  $(foreach i, $(NLIST), \
+    $(eval PROGNAME_$(word $i,$(PROGOBJ)) := $(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)))) \
+    $(eval STACKSIZE_$(word $i,$(REGLIST)) := \
+        $(if $(word $i,$(STACKSIZE)),$(word $i,$(STACKSIZE)),$(lastword $(STACKSIZE)))) \
+    $(eval UID_$(word $i,$(REGLIST)) := \
+        $(if $(word $i,$(UID)),$(word $i,$(UID)),$(lastword $(UID)))) \
+    $(eval GID_$(word $i,$(REGLIST)) := \
+        $(if $(word $i,$(GID)),$(word $i,$(GID)),$(lastword $(GID)))) \
+    $(eval MODE_$(word $i,$(REGLIST)) := \
+        $(if $(word $i,$(MODE)),$(word $i,$(MODE)),$(lastword $(MODE)))) \
+  )
+endif
+
 # Condition flags
 
 DO_REGISTRATION ?= y
@@ -196,38 +221,28 @@ $(MAINCOBJ): %.c$(SUFFIX)$(OBJEXT): %.c
 	$(if $(and $(CONFIG_BUILD_LOADABLE),$(CELFFLAGS)), \
 		$(call ELFCOMPILE, $<, $@), $(call COMPILE, $<, $@))
 
-PROGLIST := $(wordlist 1,$(words $(MAINCOBJ) $(MAINCXXOBJ) $(MAINRUSTOBJ)),$(PROGNAME))
-PROGLIST := $(addprefix $(BINDIR)$(DELIM),$(PROGLIST))
-PROGOBJ := $(MAINCOBJ) $(MAINCXXOBJ) $(MAINRUSTOBJ)
-
 $(PROGLIST): $(MAINCOBJ) $(MAINCXXOBJ) $(MAINRUSTOBJ)
 	$(Q) mkdir -p $(BINDIR)
-	$(call ELFLD,$(firstword $(PROGOBJ)),$(call CONVERT_PATH,$(firstword $(PROGLIST))))
-	$(Q) chmod +x $(firstword $(PROGLIST))
+	$(call ELFLD,$(PROGOBJ_$@),$(call CONVERT_PATH,$@))
+	$(Q) chmod +x $@
 ifneq ($(CONFIG_DEBUG_SYMBOLS),y)
-	$(Q) $(STRIP) $(firstword $(PROGLIST))
+	$(Q) $(STRIP) $@
 endif
-	$(eval PROGLIST=$(filter-out $(firstword $(PROGLIST)),$(PROGLIST)))
-	$(eval PROGOBJ=$(filter-out $(firstword $(PROGOBJ)),$(PROGOBJ)))
 
 install:: $(PROGLIST)
 	@:
 
 else
 
-MAINNAME := $(addsuffix _main,$(PROGNAME))
-
 $(MAINCXXOBJ): %$(CXXEXT)$(SUFFIX)$(OBJEXT): %$(CXXEXT)
-	$(eval MAIN=$(word $(call GETINDEX,$<,$(MAINCXXSRCS)),$(MAINNAME)))
-	$(eval $<_CXXFLAGS += ${DEFINE_PREFIX}main=$(MAIN))
-	$(eval $<_CXXELFFLAGS += ${DEFINE_PREFIX}main=$(MAIN))
+	$(eval $<_CXXFLAGS += ${shell $(DEFINE) "$(CXX)" main=$(addsuffix _main,$(PROGNAME_$@))})
+	$(eval $<_CXXELFFLAGS += ${shell $(DEFINE) "$(CXX)" main=$(addsuffix _main,$(PROGNAME_$@))})
 	$(if $(and $(CONFIG_BUILD_LOADABLE),$(CXXELFFLAGS)), \
 		$(call ELFCOMPILEXX, $<, $@), $(call COMPILEXX, $<, $@))
 
 $(MAINCOBJ): %.c$(SUFFIX)$(OBJEXT): %.c
-	$(eval MAIN=$(word $(call GETINDEX,$<,$(MAINCSRCS)),$(MAINNAME)))
-	$(eval $<_CFLAGS += ${DEFINE_PREFIX}main=$(MAIN))
-	$(eval $<_CELFFLAGS += ${DEFINE_PREFIX}main=$(MAIN))
+	$(eval $<_CFLAGS += ${DEFINE_PREFIX}main=$(addsuffix _main,$(PROGNAME_$@)))
+	$(eval $<_CELFFLAGS += ${DEFINE_PREFIX}main=$(addsuffix _main,$(PROGNAME_$@)))
 	$(if $(and $(CONFIG_BUILD_LOADABLE),$(CELFFLAGS)), \
 		$(call ELFCOMPILE, $<, $@), $(call COMPILE, $<, $@))
 
@@ -249,22 +264,12 @@ context::
 
 ifeq ($(DO_REGISTRATION),y)
 
-REGLIST := $(addprefix $(BUILTIN_REGISTRY)$(DELIM),$(addsuffix .bdat,$(PROGNAME)))
-APPLIST := $(PROGNAME)
-
 $(REGLIST): $(DEPCONFIG) Makefile
+	$(eval PROGNAME_$@ := $(basename $(notdir $@)))
 ifeq ($(CONFIG_SCHED_USER_IDENTITY),y)
-	$(call REGISTER,$(firstword $(APPLIST)),$(firstword $(PRIORITY)),$(firstword $(STACKSIZE)),$(if $(BUILD_MODULE),,$(firstword $(APPLIST))_main),$(firstword $(UID)),$(firstword $(GID)),$(firstword $(MODE)))
+	$(call REGISTER,$(PROGNAME_$@),$(PRIORITY_$@),$(STACKSIZE_$@),$(if $(BUILD_MODULE),,$(PROGNAME_$@)_main),$(UID_$@),$(GID_$@),$(MODE_$@))
 else
-	$(call REGISTER,$(firstword $(APPLIST)),$(firstword $(PRIORITY)),$(firstword $(STACKSIZE)),$(if $(BUILD_MODULE),,$(firstword $(APPLIST))_main))
-endif
-	$(eval APPLIST=$(filter-out $(firstword $(APPLIST)),$(APPLIST)))
-	$(if $(filter-out $(firstword $(PRIORITY)),$(PRIORITY)),$(eval PRIORITY=$(filter-out $(firstword $(PRIORITY)),$(PRIORITY))))
-	$(if $(filter-out $(firstword $(STACKSIZE)),$(STACKSIZE)),$(eval STACKSIZE=$(filter-out $(firstword $(STACKSIZE)),$(STACKSIZE))))
-ifeq ($(CONFIG_SCHED_USER_IDENTITY),y)
-	$(if $(filter-out $(firstword $(UID)),$(UID)),$(eval UID=$(filter-out $(firstword $(UID)),$(UID))))
-	$(if $(filter-out $(firstword $(GID)),$(GID)),$(eval GID=$(filter-out $(firstword $(GID)),$(GID))))
-	$(if $(filter-out $(firstword $(MODE)),$(MODE)),$(eval MODE=$(filter-out $(firstword $(MODE)),$(MODE))))
+	$(call REGISTER,$(PROGNAME_$@),$(PRIORITY_$@),$(STACKSIZE_$@),$(if $(BUILD_MODULE),,$(PROGNAME_$@)_main))
 endif
 
 register:: $(REGLIST)
diff --git a/Make.defs b/Make.defs
index 11bab7ca5..abb70016a 100644
--- a/Make.defs
+++ b/Make.defs
@@ -127,22 +127,6 @@ CXXFLAGS += ${INCDIR_PREFIX}"$(APPDIR)$(DELIM)include"
 
 NUTTXLIB ?= $(call CONVERT_PATH,$(TOPDIR)$(DELIM)staging)
 
-# Function to get entry index
-
-define GETINDEX
-	$(eval i=1)
-	$(eval entry=)
-	$(foreach e,$(2), \
-	  $(if $(filter $(notdir $(1)),$(notdir $(e))), \
-	    $(eval entry=$(1)), \
-	    $(if $(entry), \
-	      ,$(eval i=$(shell expr $(i) + 1)) \
-	    ) \
-	  ) \
-	)
-	$(i)
-endef
-
 # SPLITVARIABLE - Split long variables into specified batches
 # Usage: $(call SPLITVARIABLE, variable-def, variable-ref, batch-size)
 #
diff --git a/tools/Wasm.mk b/tools/Wasm.mk
index a26ee334a..92d308124 100644
--- a/tools/Wasm.mk
+++ b/tools/Wasm.mk
@@ -145,10 +145,10 @@ $(WBIN): $(WOBJS)
 	$(shell mkdir -p $(APPDIR)/wasm)
 	$(Q) $(WAR) $@ $(filter-out $(MAINSRC:=$(SUFFIX).wo),$^)
 	$(foreach main,$(MAINSRC), \
-	  $(eval mainindex=$(strip $(call GETINDEX,$(main),$(MAINSRC)))) \
-	$(eval dstname=$(shell echo $(main:=$(SUFFIX).wo) | sed -e 's/\//_/g')) \
+	  $(eval progname=$(strip $(PROGNAME_$(main:=$(SUFFIX)$(OBJEXT))))) \
+	  $(eval dstname=$(shell echo $(main:=$(SUFFIX).wo) | sed -e 's/\//_/g')) \
 	  $(shell cp -rf $(strip $(main:=$(SUFFIX).wo)) \
-	    $(strip $(APPDIR)/wasm/$(word $(mainindex),$(PROGNAME))#$(WASM_INITIAL_MEMORY)#$(STACKSIZE)#$(PRIORITY)#$(WAMR_MODE)#$(dstname)) \
+	    $(strip $(APPDIR)/wasm/$(progname)#$(WASM_INITIAL_MEMORY)#$(STACKSIZE)#$(PRIORITY)#$(WAMR_MODE)#$(dstname)) \
 	   ) \
 	 )