Skip to content

Commit fff767e

Browse files
xuxin930xiaoxiang781216
authored andcommitted
app build:enhance apps to support independent out-of-tree builds
by defining the `PREFIX` variable and setting it to an external path, `make -C /some/app` can be called independently to build a separate application out_tree. modify Make.defs and Application.mk so that their dependent variables can be overwritten. Signed-off-by: xuxin19 <[email protected]>
1 parent 4a2809f commit fff767e

File tree

2 files changed

+55
-48
lines changed

2 files changed

+55
-48
lines changed

Application.mk

Lines changed: 48 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,13 @@ ifeq ($(BUILD_MODULE),y)
6161
LDLIBS += $(COMPILER_RT_LIB)
6262
endif
6363

64+
# Apps compilation can achieve out-of-tree intermediate products
65+
# by specifying "PREFIX" to a directory in its own Makefile.
66+
# Default value is NULL,
67+
# Make sure the out-of-tree directory exists and ends with $(DELIM) when setting it.
68+
69+
PREFIX ?=
70+
6471
SUFFIX ?= $(subst $(DELIM),.,$(CWD))
6572

6673
PROGNAME := $(subst ",,$(PROGNAME))
@@ -70,27 +77,27 @@ PROGNAME := $(subst ",,$(PROGNAME))
7077
RASRCS = $(filter %.s,$(ASRCS))
7178
CASRCS = $(filter %.S,$(ASRCS))
7279

73-
RAOBJS = $(RASRCS:=$(SUFFIX)$(OBJEXT))
74-
CAOBJS = $(CASRCS:=$(SUFFIX)$(OBJEXT))
75-
COBJS = $(CSRCS:=$(SUFFIX)$(OBJEXT))
76-
CXXOBJS = $(CXXSRCS:=$(SUFFIX)$(OBJEXT))
77-
RUSTOBJS = $(RUSTSRCS:=$(SUFFIX)$(OBJEXT))
78-
ZIGOBJS = $(ZIGSRCS:=$(SUFFIX)$(OBJEXT))
79-
DOBJS = $(DSRCS:=$(SUFFIX)$(OBJEXT))
80-
SWIFTOBJS = $(SWIFTSRCS:=$(SUFFIX)$(OBJEXT))
80+
RAOBJS = $(RASRCS:%=$(PREFIX)%$(SUFFIX)$(OBJEXT))
81+
CAOBJS = $(CASRCS:%=$(PREFIX)%$(SUFFIX)$(OBJEXT))
82+
COBJS = $(CSRCS:%=$(PREFIX)%$(SUFFIX)$(OBJEXT))
83+
CXXOBJS = $(CXXSRCS:%=$(PREFIX)%$(SUFFIX)$(OBJEXT))
84+
RUSTOBJS = $(RUSTSRCS:%=$(PREFIX)%$(SUFFIX)$(OBJEXT))
85+
ZIGOBJS = $(ZIGSRCS:%=$(PREFIX)%$(SUFFIX)$(OBJEXT))
86+
DOBJS = $(DSRCS:%=$(PREFIX)%$(SUFFIX)$(OBJEXT))
87+
SWIFTOBJS = $(SWIFTSRCS:%=$(PREFIX)%$(SUFFIX)$(OBJEXT))
8188

8289
MAINCXXSRCS = $(filter %$(CXXEXT),$(MAINSRC))
8390
MAINCSRCS = $(filter %.c,$(MAINSRC))
8491
MAINRUSTSRCS = $(filter %$(RUSTEXT),$(MAINSRC))
8592
MAINZIGSRCS = $(filter %$(ZIGEXT),$(MAINSRC))
8693
MAINDSRCS = $(filter %$(DEXT),$(MAINSRC))
8794
MAINSWIFTSRCS = $(filter %$(SWIFTEXT),$(MAINSRC))
88-
MAINCXXOBJ = $(MAINCXXSRCS:=$(SUFFIX)$(OBJEXT))
89-
MAINCOBJ = $(MAINCSRCS:=$(SUFFIX)$(OBJEXT))
90-
MAINRUSTOBJ = $(MAINRUSTSRCS:=$(SUFFIX)$(OBJEXT))
91-
MAINZIGOBJ = $(MAINZIGSRCS:=$(SUFFIX)$(OBJEXT))
92-
MAINDOBJ = $(MAINDSRCS:=$(SUFFIX)$(OBJEXT))
93-
MAINSWIFTOBJ = $(MAINSWIFTSRCS:=$(SUFFIX)$(OBJEXT))
95+
MAINCXXOBJ = $(MAINCXXSRCS:%=$(PREFIX)%$(SUFFIX)$(OBJEXT))
96+
MAINCOBJ = $(MAINCSRCS:%=$(PREFIX)%$(SUFFIX)$(OBJEXT))
97+
MAINRUSTOBJ = $(MAINRUSTSRCS:%=$(PREFIX)%$(SUFFIX)$(OBJEXT))
98+
MAINZIGOBJ = $(MAINZIGSRCS:%=$(PREFIX)%$(SUFFIX)$(OBJEXT))
99+
MAINDOBJ = $(MAINDSRCS:%=$(PREFIX)%$(SUFFIX)$(OBJEXT))
100+
MAINSWIFTOBJ = $(MAINSWIFTSRCS:%=$(PREFIX)%$(SUFFIX)$(OBJEXT))
94101

95102
SRCS = $(ASRCS) $(CSRCS) $(CXXSRCS) $(MAINSRC)
96103
OBJS = $(RAOBJS) $(CAOBJS) $(COBJS) $(CXXOBJS) $(RUSTOBJS) $(ZIGOBJS) $(DOBJS) $(SWIFTOBJS) $(EXTOBJS)
@@ -147,7 +154,7 @@ VPATH += :.
147154

148155
# Targets follow
149156

150-
all:: .built
157+
all:: $(PREFIX).built
151158
@:
152159
.PHONY: clean depend distclean
153160
.PRECIOUS: $(BIN)
@@ -208,35 +215,35 @@ define RENAMEMAIN
208215
$(ECHO_END)
209216
endef
210217

211-
$(RAOBJS): %.s$(SUFFIX)$(OBJEXT): %.s
218+
$(RAOBJS): $(PREFIX)%.s$(SUFFIX)$(OBJEXT): %.s
212219
$(if $(and $(CONFIG_MODULES),$(AELFFLAGS)), \
213220
$(call ELFASSEMBLE, $<, $@), $(call ASSEMBLE, $<, $@))
214221

215-
$(CAOBJS): %.S$(SUFFIX)$(OBJEXT): %.S
222+
$(CAOBJS): $(PREFIX)%.S$(SUFFIX)$(OBJEXT): %.S
216223
$(if $(and $(CONFIG_MODULES),$(AELFFLAGS)), \
217224
$(call ELFASSEMBLE, $<, $@), $(call ASSEMBLE, $<, $@))
218225

219-
$(COBJS): %.c$(SUFFIX)$(OBJEXT): %.c
226+
$(COBJS): $(PREFIX)%.c$(SUFFIX)$(OBJEXT): %.c
220227
$(if $(and $(CONFIG_MODULES),$(CELFFLAGS)), \
221228
$(call ELFCOMPILE, $<, $@), $(call COMPILE, $<, $@))
222229

223-
$(CXXOBJS): %$(CXXEXT)$(SUFFIX)$(OBJEXT): %$(CXXEXT)
230+
$(CXXOBJS): $(PREFIX)%$(CXXEXT)$(SUFFIX)$(OBJEXT): %$(CXXEXT)
224231
$(if $(and $(CONFIG_MODULES),$(CXXELFFLAGS)), \
225232
$(call ELFCOMPILEXX, $<, $@), $(call COMPILEXX, $<, $@))
226233

227-
$(RUSTOBJS): %$(RUSTEXT)$(SUFFIX)$(OBJEXT): %$(RUSTEXT)
234+
$(RUSTOBJS): $(PREFIX)%$(RUSTEXT)$(SUFFIX)$(OBJEXT): %$(RUSTEXT)
228235
$(if $(and $(CONFIG_MODULES),$(CELFFLAGS)), \
229236
$(call ELFCOMPILERUST, $<, $@), $(call COMPILERUST, $<, $@))
230237

231-
$(ZIGOBJS): %$(ZIGEXT)$(SUFFIX)$(OBJEXT): %$(ZIGEXT)
238+
$(ZIGOBJS): $(PREFIX)%$(ZIGEXT)$(SUFFIX)$(OBJEXT): %$(ZIGEXT)
232239
$(if $(and $(CONFIG_MODULES), $(CELFFLAGS)), \
233240
$(call ELFCOMPILEZIG, $<, $@), $(call COMPILEZIG, $<, $@))
234241

235-
$(DOBJS): %$(DEXT)$(SUFFIX)$(OBJEXT): %$(DEXT)
242+
$(DOBJS): $(PREFIX)%$(DEXT)$(SUFFIX)$(OBJEXT): %$(DEXT)
236243
$(if $(and $(CONFIG_MODULES), $(CELFFLAGS)), \
237244
$(call ELFCOMPILED, $<, $@), $(call COMPILED, $<, $@))
238245

239-
$(SWIFTOBJS): %$(SWIFTEXT)$(SUFFIX)$(OBJEXT): %$(SWIFTEXT)
246+
$(SWIFTOBJS): $(PREFIX)%$(SWIFTEXT)$(SUFFIX)$(OBJEXT): %$(SWIFTEXT)
240247
$(if $(and $(CONFIG_MODULES), $(CELFFLAGS)), \
241248
$(call ELFCOMPILESWIFT, $<, $@), $(call COMPILESWIFT, $<, $@))
242249

@@ -253,7 +260,7 @@ $(foreach BATCH, $(OBJS_SPILT_TOTAL), \
253260
)
254261
endif
255262

256-
.built: $(AROBJS)
263+
$(PREFIX).built: $(AROBJS)
257264
$(call SPLITVARIABLE,ALL_OBJS,$(AROBJS),100)
258265
$(foreach BATCH, $(ALL_OBJS_TOTAL), \
259266
$(shell $(call ARLOCK, $(call CONVERT_PATH,$(BIN)), $(ALL_OBJS_$(BATCH)))) \
@@ -262,23 +269,23 @@ endif
262269

263270
ifeq ($(BUILD_MODULE),y)
264271

265-
$(MAINCXXOBJ): %$(CXXEXT)$(SUFFIX)$(OBJEXT): %$(CXXEXT)
272+
$(MAINCXXOBJ): $(PREFIX)%$(CXXEXT)$(SUFFIX)$(OBJEXT): %$(CXXEXT)
266273
$(if $(and $(CONFIG_MODULES),$(CXXELFFLAGS)), \
267274
$(call ELFCOMPILEXX, $<, $@), $(call COMPILEXX, $<, $@))
268275

269-
$(MAINCOBJ): %.c$(SUFFIX)$(OBJEXT): %.c
276+
$(MAINCOBJ): $(PREFIX)%.c$(SUFFIX)$(OBJEXT): %.c
270277
$(if $(and $(CONFIG_MODULES),$(CELFFLAGS)), \
271278
$(call ELFCOMPILE, $<, $@), $(call COMPILE, $<, $@))
272279

273-
$(MAINZIGOBJ): %$(ZIGEXT)$(SUFFIX)$(OBJEXT): %$(ZIGEXT)
280+
$(MAINZIGOBJ): $(PREFIX)%$(ZIGEXT)$(SUFFIX)$(OBJEXT): %$(ZIGEXT)
274281
$(if $(and $(CONFIG_MODULES),$(CELFFLAGS)), \
275282
$(call ELFCOMPILEZIG, $<, $@), $(call COMPILEZIG, $<, $@))
276283

277-
$(MAINDOBJ): %$(DEXT)$(SUFFIX)$(OBJEXT): %$(DEXT)
284+
$(MAINDOBJ): $(PREFIX)%$(DEXT)$(SUFFIX)$(OBJEXT): %$(DEXT)
278285
$(if $(and $(CONFIG_MODULES),$(CELFFLAGS)), \
279286
$(call ELFCOMPILED, $<, $@), $(call COMPILED, $<, $@))
280287

281-
$(MAINSWIFTOBJ): %$(SWIFTEXT)$(SUFFIX)$(OBJEXT): %$(SWIFTEXT)
288+
$(MAINSWIFTOBJ): $(PREFIX)%$(SWIFTEXT)$(SUFFIX)$(OBJEXT): %$(SWIFTEXT)
282289
$(if $(and $(CONFIG_MODULES),$(CELFFLAGS)), \
283290
$(call ELFCOMPILESWIFT, $<, $@), $(call COMPILESWIFT, $<, $@))
284291

@@ -295,33 +302,33 @@ install:: $(PROGLIST)
295302

296303
else
297304

298-
$(MAINCXXOBJ): %$(CXXEXT)$(SUFFIX)$(OBJEXT): %$(CXXEXT)
305+
$(MAINCXXOBJ): $(PREFIX)%$(CXXEXT)$(SUFFIX)$(OBJEXT): %$(CXXEXT)
299306
$(eval $<_CXXFLAGS += ${shell $(DEFINE) "$(CXX)" main=$(addsuffix _main,$(PROGNAME_$@))})
300307
$(eval $<_CXXELFFLAGS += ${shell $(DEFINE) "$(CXX)" main=$(addsuffix _main,$(PROGNAME_$@))})
301308
$(if $(and $(CONFIG_MODULES),$(CXXELFFLAGS)), \
302309
$(call ELFCOMPILEXX, $<, $@), $(call COMPILEXX, $<, $@))
303310

304-
$(MAINCOBJ): %.c$(SUFFIX)$(OBJEXT): %.c
311+
$(MAINCOBJ): $(PREFIX)%.c$(SUFFIX)$(OBJEXT): %.c
305312
$(eval $<_CFLAGS += ${DEFINE_PREFIX}main=$(addsuffix _main,$(PROGNAME_$@)))
306313
$(eval $<_CELFFLAGS += ${DEFINE_PREFIX}main=$(addsuffix _main,$(PROGNAME_$@)))
307314
$(if $(and $(CONFIG_MODULES),$(CELFFLAGS)), \
308315
$(call ELFCOMPILE, $<, $@), $(call COMPILE, $<, $@))
309316

310-
$(MAINRUSTOBJ): %$(RUSTEXT)$(SUFFIX)$(OBJEXT): %$(RUSTEXT)
317+
$(MAINRUSTOBJ): $(PREFIX)%$(RUSTEXT)$(SUFFIX)$(OBJEXT): %$(RUSTEXT)
311318
$(if $(and $(CONFIG_MODULES),$(CELFFLAGS)), \
312319
$(call ELFCOMPILERUST, $<, $@), $(call COMPILERUST, $<, $@))
313320

314-
$(MAINZIGOBJ): %$(ZIGEXT)$(SUFFIX)$(OBJEXT): %$(ZIGEXT)
321+
$(MAINZIGOBJ): $(PREFIX)%$(ZIGEXT)$(SUFFIX)$(OBJEXT): %$(ZIGEXT)
315322
$(Q) $(call RENAMEMAIN, $<, $(basename $<)_tmp.zig)
316323
$(if $(and $(CONFIG_MODULES),$(CELFFLAGS)), \
317324
$(call ELFCOMPILEZIG, $(basename $<)_tmp.zig, $@), $(call COMPILEZIG, $(basename $<)_tmp.zig, $@))
318325
$(Q) rm -f $(basename $<)_tmp.zig
319326

320-
$(MAINDOBJ): %$(DEXT)$(SUFFIX)$(OBJEXT): %$(DEXT)
327+
$(MAINDOBJ): $(PREFIX)%$(DEXT)$(SUFFIX)$(OBJEXT): %$(DEXT)
321328
$(if $(and $(CONFIG_MODULES),$(CELFFLAGS)), \
322329
$(call ELFCOMPILED, $<, $@), $(call COMPILED, $<, $@))
323330

324-
$(MAINSWIFTOBJ): %$(SWIFTEXT)$(SUFFIX)$(OBJEXT): %$(SWIFTEXT)
331+
$(MAINSWIFTOBJ): $(PREFIX)%$(SWIFTEXT)$(SUFFIX)$(OBJEXT): %$(SWIFTEXT)
325332
$(if $(and $(CONFIG_MODULES),$(CELFFLAGS)), \
326333
$(call ELFCOMPILESWIFT, $<, $@), $(call COMPILESWIFT, $<, $@))
327334

@@ -350,17 +357,17 @@ register::
350357
@:
351358
endif
352359

353-
.depend: Makefile $(wildcard $(foreach SRC, $(SRCS), $(addsuffix /$(SRC), $(subst :, ,$(VPATH))))) $(DEPCONFIG)
360+
$(PREFIX).depend: Makefile $(wildcard $(foreach SRC, $(SRCS), $(addsuffix /$(SRC), $(subst :, ,$(VPATH))))) $(DEPCONFIG)
354361
$(shell echo "# Gen Make.dep automatically" >Make.dep)
355362
$(call SPLITVARIABLE,ALL_DEP_OBJS,$^,100)
356363
$(foreach BATCH, $(ALL_DEP_OBJS_TOTAL), \
357-
$(shell $(MKDEP) $(DEPPATH) --obj-suffix .c$(SUFFIX)$(OBJEXT) "$(CC)" -- $(CFLAGS) -- $(filter %.c,$(ALL_DEP_OBJS_$(BATCH))) >>Make.dep) \
358-
$(shell $(MKDEP) $(DEPPATH) --obj-suffix .S$(SUFFIX)$(OBJEXT) "$(CC)" -- $(CFLAGS) -- $(filter %.S,$(ALL_DEP_OBJS_$(BATCH))) >>Make.dep) \
359-
$(shell $(MKDEP) $(DEPPATH) --obj-suffix $(CXXEXT)$(SUFFIX)$(OBJEXT) "$(CXX)" -- $(CXXFLAGS) -- $(filter %$(CXXEXT),$(ALL_DEP_OBJS_$(BATCH))) >>Make.dep) \
364+
$(shell $(MKDEP) $(DEPPATH) --obj-suffix .c$(SUFFIX)$(OBJEXT) "$(CC)" -- $(CFLAGS) -- $(filter %.c,$(ALL_DEP_OBJS_$(BATCH))) >>$(PREFIX)Make.dep) \
365+
$(shell $(MKDEP) $(DEPPATH) --obj-suffix .S$(SUFFIX)$(OBJEXT) "$(CC)" -- $(CFLAGS) -- $(filter %.S,$(ALL_DEP_OBJS_$(BATCH))) >>$(PREFIX)Make.dep) \
366+
$(shell $(MKDEP) $(DEPPATH) --obj-suffix $(CXXEXT)$(SUFFIX)$(OBJEXT) "$(CXX)" -- $(CXXFLAGS) -- $(filter %$(CXXEXT),$(ALL_DEP_OBJS_$(BATCH))) >>$(PREFIX)Make.dep) \
360367
)
361368
$(Q) touch $@
362369

363-
depend:: .depend
370+
depend:: $(PREFIX).depend
364371
@:
365372

366373
clean::
@@ -371,7 +378,7 @@ distclean:: clean
371378
$(call DELFILE, Make.dep)
372379
$(call DELFILE, .depend)
373380

374-
-include Make.dep
381+
-include $(PREFIX)Make.dep
375382

376383
# Include Wasm specific definitions
377384
include $(APPDIR)/tools/Wasm.mk

Make.defs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
############################################################################
2020

2121
TOPDIR ?= $(APPDIR)/import
22-
include $(TOPDIR)/Make.defs
22+
-include $(TOPDIR)/Make.defs
2323

2424
# Application Directories
2525

@@ -80,8 +80,8 @@ endif
8080

8181
# Builtin Registration
8282

83-
BUILTIN_REGISTRY = $(APPDIR)$(DELIM)builtin$(DELIM)registry
84-
DEPCONFIG = $(TOPDIR)$(DELIM).config
83+
BUILTIN_REGISTRY ?= $(APPDIR)$(DELIM)builtin$(DELIM)registry
84+
DEPCONFIG ?= $(TOPDIR)$(DELIM).config
8585

8686
ifeq ($(CONFIG_WINDOWS_NATIVE),y)
8787
ifeq ($(CONFIG_SCHED_USER_IDENTITY),y)
@@ -145,13 +145,13 @@ NUTTXLIB ?= $(call CONVERT_PATH,$(TOPDIR)$(DELIM)staging)
145145
# $(VAR_3) = foo bar
146146

147147
define SPLITVARIABLE
148-
$(eval PREFIX = $(1))
148+
$(eval SPLITVARIABLE_PREFIX = $(1))
149149
$(eval BATCH_SIZE = $(3))
150150
$(eval TOTAL_BATCH = $(shell expr $(words $(2)) / $(BATCH_SIZE) + 1))
151-
$(eval $(PREFIX)_TOTAL = $(shell seq 1 $(TOTAL_BATCH)))
152-
$(foreach idx, $($(PREFIX)_TOTAL), \
151+
$(eval $(SPLITVARIABLE_PREFIX)_TOTAL = $(shell seq 1 $(TOTAL_BATCH)))
152+
$(foreach idx, $($(SPLITVARIABLE_PREFIX)_TOTAL), \
153153
$(eval FROMINDEX=$(shell expr 1 + $(idx) \* $(BATCH_SIZE) - $(BATCH_SIZE))) \
154-
$(eval $(PREFIX)_$(idx)=$(wordlist $(FROMINDEX), $(shell expr $(FROMINDEX) + $(BATCH_SIZE) - 1), $(2))) \
154+
$(eval $(SPLITVARIABLE_PREFIX)_$(idx)=$(wordlist $(FROMINDEX), $(shell expr $(FROMINDEX) + $(BATCH_SIZE) - 1), $(2))) \
155155
)
156156
endef
157157

0 commit comments

Comments
 (0)