@@ -61,6 +61,13 @@ ifeq ($(BUILD_MODULE),y)
61
61
LDLIBS += $(COMPILER_RT_LIB )
62
62
endif
63
63
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
+
64
71
SUFFIX ?= $(subst $(DELIM ) ,.,$(CWD ) )
65
72
66
73
PROGNAME := $(subst ",,$(PROGNAME ) )
@@ -70,27 +77,27 @@ PROGNAME := $(subst ",,$(PROGNAME))
70
77
RASRCS = $(filter % .s,$(ASRCS ) )
71
78
CASRCS = $(filter % .S,$(ASRCS ) )
72
79
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 ) )
81
88
82
89
MAINCXXSRCS = $(filter % $(CXXEXT ) ,$(MAINSRC ) )
83
90
MAINCSRCS = $(filter % .c,$(MAINSRC ) )
84
91
MAINRUSTSRCS = $(filter % $(RUSTEXT ) ,$(MAINSRC ) )
85
92
MAINZIGSRCS = $(filter % $(ZIGEXT ) ,$(MAINSRC ) )
86
93
MAINDSRCS = $(filter % $(DEXT ) ,$(MAINSRC ) )
87
94
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 ) )
94
101
95
102
SRCS = $(ASRCS ) $(CSRCS ) $(CXXSRCS ) $(MAINSRC )
96
103
OBJS = $(RAOBJS ) $(CAOBJS ) $(COBJS ) $(CXXOBJS ) $(RUSTOBJS ) $(ZIGOBJS ) $(DOBJS ) $(SWIFTOBJS ) $(EXTOBJS )
@@ -147,7 +154,7 @@ VPATH += :.
147
154
148
155
# Targets follow
149
156
150
- all :: .built
157
+ all :: $( PREFIX ) .built
151
158
@:
152
159
.PHONY : clean depend distclean
153
160
.PRECIOUS : $(BIN )
@@ -208,35 +215,35 @@ define RENAMEMAIN
208
215
$(ECHO_END )
209
216
endef
210
217
211
- $(RAOBJS ) : % .s$(SUFFIX )$(OBJEXT ) : % .s
218
+ $(RAOBJS ) : $( PREFIX ) % .s$(SUFFIX )$(OBJEXT ) : % .s
212
219
$(if $(and $(CONFIG_MODULES ) ,$(AELFFLAGS ) ) , \
213
220
$(call ELFASSEMBLE, $< , $@ ) , $(call ASSEMBLE, $< , $@ ) )
214
221
215
- $(CAOBJS ) : % .S$(SUFFIX )$(OBJEXT ) : % .S
222
+ $(CAOBJS ) : $( PREFIX ) % .S$(SUFFIX )$(OBJEXT ) : % .S
216
223
$(if $(and $(CONFIG_MODULES ) ,$(AELFFLAGS ) ) , \
217
224
$(call ELFASSEMBLE, $< , $@ ) , $(call ASSEMBLE, $< , $@ ) )
218
225
219
- $(COBJS ) : % .c$(SUFFIX )$(OBJEXT ) : % .c
226
+ $(COBJS ) : $( PREFIX ) % .c$(SUFFIX )$(OBJEXT ) : % .c
220
227
$(if $(and $(CONFIG_MODULES ) ,$(CELFFLAGS ) ) , \
221
228
$(call ELFCOMPILE, $< , $@ ) , $(call COMPILE, $< , $@ ) )
222
229
223
- $(CXXOBJS ) : % $(CXXEXT )$(SUFFIX )$(OBJEXT ) : % $(CXXEXT )
230
+ $(CXXOBJS ) : $( PREFIX ) % $(CXXEXT )$(SUFFIX )$(OBJEXT ) : % $(CXXEXT )
224
231
$(if $(and $(CONFIG_MODULES ) ,$(CXXELFFLAGS ) ) , \
225
232
$(call ELFCOMPILEXX, $< , $@ ) , $(call COMPILEXX, $< , $@ ) )
226
233
227
- $(RUSTOBJS ) : % $(RUSTEXT )$(SUFFIX )$(OBJEXT ) : % $(RUSTEXT )
234
+ $(RUSTOBJS ) : $( PREFIX ) % $(RUSTEXT )$(SUFFIX )$(OBJEXT ) : % $(RUSTEXT )
228
235
$(if $(and $(CONFIG_MODULES ) ,$(CELFFLAGS ) ) , \
229
236
$(call ELFCOMPILERUST, $< , $@ ) , $(call COMPILERUST, $< , $@ ) )
230
237
231
- $(ZIGOBJS ) : % $(ZIGEXT )$(SUFFIX )$(OBJEXT ) : % $(ZIGEXT )
238
+ $(ZIGOBJS ) : $( PREFIX ) % $(ZIGEXT )$(SUFFIX )$(OBJEXT ) : % $(ZIGEXT )
232
239
$(if $(and $(CONFIG_MODULES ) , $(CELFFLAGS ) ) , \
233
240
$(call ELFCOMPILEZIG, $< , $@ ) , $(call COMPILEZIG, $< , $@ ) )
234
241
235
- $(DOBJS ) : % $(DEXT )$(SUFFIX )$(OBJEXT ) : % $(DEXT )
242
+ $(DOBJS ) : $( PREFIX ) % $(DEXT )$(SUFFIX )$(OBJEXT ) : % $(DEXT )
236
243
$(if $(and $(CONFIG_MODULES ) , $(CELFFLAGS ) ) , \
237
244
$(call ELFCOMPILED, $< , $@ ) , $(call COMPILED, $< , $@ ) )
238
245
239
- $(SWIFTOBJS ) : % $(SWIFTEXT )$(SUFFIX )$(OBJEXT ) : % $(SWIFTEXT )
246
+ $(SWIFTOBJS ) : $( PREFIX ) % $(SWIFTEXT )$(SUFFIX )$(OBJEXT ) : % $(SWIFTEXT )
240
247
$(if $(and $(CONFIG_MODULES ) , $(CELFFLAGS ) ) , \
241
248
$(call ELFCOMPILESWIFT, $< , $@ ) , $(call COMPILESWIFT, $< , $@ ) )
242
249
@@ -253,7 +260,7 @@ $(foreach BATCH, $(OBJS_SPILT_TOTAL), \
253
260
)
254
261
endif
255
262
256
- .built : $(AROBJS )
263
+ $( PREFIX ) .built : $(AROBJS )
257
264
$(call SPLITVARIABLE,ALL_OBJS,$(AROBJS ) ,100)
258
265
$(foreach BATCH, $(ALL_OBJS_TOTAL ) , \
259
266
$(shell $(call ARLOCK, $(call CONVERT_PATH,$(BIN ) ) , $(ALL_OBJS_$(BATCH ) ) ) ) \
@@ -262,23 +269,23 @@ endif
262
269
263
270
ifeq ($(BUILD_MODULE ) ,y)
264
271
265
- $(MAINCXXOBJ ) : % $(CXXEXT )$(SUFFIX )$(OBJEXT ) : % $(CXXEXT )
272
+ $(MAINCXXOBJ ) : $( PREFIX ) % $(CXXEXT )$(SUFFIX )$(OBJEXT ) : % $(CXXEXT )
266
273
$(if $(and $(CONFIG_MODULES ) ,$(CXXELFFLAGS ) ) , \
267
274
$(call ELFCOMPILEXX, $< , $@ ) , $(call COMPILEXX, $< , $@ ) )
268
275
269
- $(MAINCOBJ ) : % .c$(SUFFIX )$(OBJEXT ) : % .c
276
+ $(MAINCOBJ ) : $( PREFIX ) % .c$(SUFFIX )$(OBJEXT ) : % .c
270
277
$(if $(and $(CONFIG_MODULES ) ,$(CELFFLAGS ) ) , \
271
278
$(call ELFCOMPILE, $< , $@ ) , $(call COMPILE, $< , $@ ) )
272
279
273
- $(MAINZIGOBJ ) : % $(ZIGEXT )$(SUFFIX )$(OBJEXT ) : % $(ZIGEXT )
280
+ $(MAINZIGOBJ ) : $( PREFIX ) % $(ZIGEXT )$(SUFFIX )$(OBJEXT ) : % $(ZIGEXT )
274
281
$(if $(and $(CONFIG_MODULES ) ,$(CELFFLAGS ) ) , \
275
282
$(call ELFCOMPILEZIG, $< , $@ ) , $(call COMPILEZIG, $< , $@ ) )
276
283
277
- $(MAINDOBJ ) : % $(DEXT )$(SUFFIX )$(OBJEXT ) : % $(DEXT )
284
+ $(MAINDOBJ ) : $( PREFIX ) % $(DEXT )$(SUFFIX )$(OBJEXT ) : % $(DEXT )
278
285
$(if $(and $(CONFIG_MODULES ) ,$(CELFFLAGS ) ) , \
279
286
$(call ELFCOMPILED, $< , $@ ) , $(call COMPILED, $< , $@ ) )
280
287
281
- $(MAINSWIFTOBJ ) : % $(SWIFTEXT )$(SUFFIX )$(OBJEXT ) : % $(SWIFTEXT )
288
+ $(MAINSWIFTOBJ ) : $( PREFIX ) % $(SWIFTEXT )$(SUFFIX )$(OBJEXT ) : % $(SWIFTEXT )
282
289
$(if $(and $(CONFIG_MODULES ) ,$(CELFFLAGS ) ) , \
283
290
$(call ELFCOMPILESWIFT, $< , $@ ) , $(call COMPILESWIFT, $< , $@ ) )
284
291
@@ -295,33 +302,33 @@ install:: $(PROGLIST)
295
302
296
303
else
297
304
298
- $(MAINCXXOBJ ) : % $(CXXEXT )$(SUFFIX )$(OBJEXT ) : % $(CXXEXT )
305
+ $(MAINCXXOBJ ) : $( PREFIX ) % $(CXXEXT )$(SUFFIX )$(OBJEXT ) : % $(CXXEXT )
299
306
$(eval $< _CXXFLAGS += ${shell $(DEFINE ) "$(CXX ) " main=$(addsuffix _main,$(PROGNAME_$@ ) ) })
300
307
$(eval $< _CXXELFFLAGS += ${shell $(DEFINE ) "$(CXX ) " main=$(addsuffix _main,$(PROGNAME_$@ ) ) })
301
308
$(if $(and $(CONFIG_MODULES ) ,$(CXXELFFLAGS ) ) , \
302
309
$(call ELFCOMPILEXX, $< , $@ ) , $(call COMPILEXX, $< , $@ ) )
303
310
304
- $(MAINCOBJ ) : % .c$(SUFFIX )$(OBJEXT ) : % .c
311
+ $(MAINCOBJ ) : $( PREFIX ) % .c$(SUFFIX )$(OBJEXT ) : % .c
305
312
$(eval $< _CFLAGS += ${DEFINE_PREFIX}main=$(addsuffix _main,$(PROGNAME_$@ ) ) )
306
313
$(eval $< _CELFFLAGS += ${DEFINE_PREFIX}main=$(addsuffix _main,$(PROGNAME_$@ ) ) )
307
314
$(if $(and $(CONFIG_MODULES ) ,$(CELFFLAGS ) ) , \
308
315
$(call ELFCOMPILE, $< , $@ ) , $(call COMPILE, $< , $@ ) )
309
316
310
- $(MAINRUSTOBJ ) : % $(RUSTEXT )$(SUFFIX )$(OBJEXT ) : % $(RUSTEXT )
317
+ $(MAINRUSTOBJ ) : $( PREFIX ) % $(RUSTEXT )$(SUFFIX )$(OBJEXT ) : % $(RUSTEXT )
311
318
$(if $(and $(CONFIG_MODULES ) ,$(CELFFLAGS ) ) , \
312
319
$(call ELFCOMPILERUST, $< , $@ ) , $(call COMPILERUST, $< , $@ ) )
313
320
314
- $(MAINZIGOBJ ) : % $(ZIGEXT )$(SUFFIX )$(OBJEXT ) : % $(ZIGEXT )
321
+ $(MAINZIGOBJ ) : $( PREFIX ) % $(ZIGEXT )$(SUFFIX )$(OBJEXT ) : % $(ZIGEXT )
315
322
$(Q ) $(call RENAMEMAIN, $< , $(basename $< ) _tmp.zig)
316
323
$(if $(and $(CONFIG_MODULES ) ,$(CELFFLAGS ) ) , \
317
324
$(call ELFCOMPILEZIG, $(basename $< ) _tmp.zig, $@ ) , $(call COMPILEZIG, $(basename $< ) _tmp.zig, $@ ) )
318
325
$(Q ) rm -f $(basename $< ) _tmp.zig
319
326
320
- $(MAINDOBJ ) : % $(DEXT )$(SUFFIX )$(OBJEXT ) : % $(DEXT )
327
+ $(MAINDOBJ ) : $( PREFIX ) % $(DEXT )$(SUFFIX )$(OBJEXT ) : % $(DEXT )
321
328
$(if $(and $(CONFIG_MODULES ) ,$(CELFFLAGS ) ) , \
322
329
$(call ELFCOMPILED, $< , $@ ) , $(call COMPILED, $< , $@ ) )
323
330
324
- $(MAINSWIFTOBJ ) : % $(SWIFTEXT )$(SUFFIX )$(OBJEXT ) : % $(SWIFTEXT )
331
+ $(MAINSWIFTOBJ ) : $( PREFIX ) % $(SWIFTEXT )$(SUFFIX )$(OBJEXT ) : % $(SWIFTEXT )
325
332
$(if $(and $(CONFIG_MODULES ) ,$(CELFFLAGS ) ) , \
326
333
$(call ELFCOMPILESWIFT, $< , $@ ) , $(call COMPILESWIFT, $< , $@ ) )
327
334
@@ -350,17 +357,17 @@ register::
350
357
@:
351
358
endif
352
359
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 )
354
361
$(shell echo "# Gen Make.dep automatically" >Make.dep)
355
362
$(call SPLITVARIABLE,ALL_DEP_OBJS,$^ ,100)
356
363
$(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) \
360
367
)
361
368
$(Q ) touch $@
362
369
363
- depend :: .depend
370
+ depend :: $( PREFIX ) .depend
364
371
@:
365
372
366
373
clean ::
@@ -371,7 +378,7 @@ distclean:: clean
371
378
$(call DELFILE, Make.dep)
372
379
$(call DELFILE, .depend)
373
380
374
- -include Make.dep
381
+ -include $( PREFIX ) Make.dep
375
382
376
383
# Include Wasm specific definitions
377
384
include $(APPDIR ) /tools/Wasm.mk
0 commit comments