From 4765cc3411d7e64fc8965e66cc55cca535b3e794 Mon Sep 17 00:00:00 2001 From: xuxin19 <xuxin19@xiaomi.com> Date: Tue, 25 Jul 2023 16:53:44 +0800 Subject: [PATCH] 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 <xuxin19@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)) \ ) \ )