@@ -150,12 +150,20 @@ ifneq (,$(MAKECMDGOALS))
150
150
endif
151
151
endif
152
152
153
+ .SHELLSTATUS ?= 0
154
+
153
155
ifeq ($(SETUP_PREREQS ) ,1)
154
156
# If set on: Default target or a rule requiring a scan
155
157
# Forcibly execute `make tools` since we need them for what we are doing.
156
- $(call infoshell, $(MAKE) -f make_tools.mk)
158
+ $(foreach line, $(shell $(MAKE) -f make_tools.mk | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line))))
159
+ ifneq ($(.SHELLSTATUS),0)
160
+ $(error Errors occurred while building tools. See error messages above for more details)
161
+ endif
157
162
# Oh and also generate mapjson sources before we use `SCANINC`.
158
- $(call infoshell, $(MAKE) generated)
163
+ $(foreach line, $(shell $(MAKE) generated | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line))))
164
+ ifneq ($(.SHELLSTATUS),0)
165
+ $(error Errors occurred while generating map-related sources. See error messages above for more details)
166
+ endif
159
167
endif
160
168
161
169
# Collect sources
@@ -237,7 +245,10 @@ include spritesheet_rules.mk
237
245
include json_data_rules.mk
238
246
include audio_rules.mk
239
247
248
+ # NOTE: Tools must have been built prior (FIXME)
249
+ # so you can't really call this rule directly
240
250
generated : $(AUTO_GEN_TARGETS )
251
+ @: # Silence the "Nothing to be done for `generated'" message, which some people were confusing for an error.
241
252
242
253
% .s : ;
243
254
% .png : ;
@@ -252,8 +263,6 @@ generated: $(AUTO_GEN_TARGETS)
252
263
% .lz : % ; $(GFX ) $< $@
253
264
% .rl : % ; $(GFX ) $< $@
254
265
255
- # NOTE: Tools must have been built prior (FIXME)
256
- generated : tools $(AUTO_GEN_TARGETS )
257
266
clean-generated :
258
267
@rm -f $(AUTO_GEN_TARGETS )
259
268
@echo " rm -f <AUTO_GEN_TARGETS>"
@@ -288,71 +297,52 @@ endif
288
297
# As a side effect, they're evaluated immediately instead of when the rule is invoked.
289
298
# It doesn't look like $(shell) can be deferred so there might not be a better way (Icedude_907: there is soon).
290
299
291
- # For C dependencies.
292
- # Args: $1 = Output file without extension (build/assets/src/data), $2 = Input file (src/data.c)
293
- define C_DEP
294
- $(call C_DEP_IMPL,$1,$2,$1)
295
- endef
296
- # Internal implementation details.
297
- # $1: Output file without extension, $2 input file, $3 temp path (if keeping)
298
- define C_DEP_IMPL
299
- $1.o: $2
300
+ $(C_BUILDDIR ) /% .o : $(C_SUBDIR ) /% .c
300
301
ifneq ($(KEEP_TEMPS ) ,1)
301
- @echo "$$ (CC1) <flags> -o $$@ $ $<"
302
- @$$ (CPP) $$ (CPPFLAGS) $$ < | $$ (PREPROC) -i $$ < charmap.txt | $$ (CC1) $$ (CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $$ (AS) $$ (ASFLAGS) -o $ $@ -
302
+ @echo "$(CC1) <flags> -o $@ $<"
303
+ @$(CPP) $(CPPFLAGS) $< | $(PREPROC) -i $< charmap.txt | $(CC1) $(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $(AS) $(ASFLAGS) -o $@ -
303
304
else
304
- @$$ (CPP) $$ (CPPFLAGS) $$ < -o $3 .i
305
- @$$ (PREPROC) $3 .i charmap.txt | $$ (CC1) $$ (CFLAGS) -o $3 .s
306
- @echo -e ".text\n\t.align\t2, 0 @ Don't pad with nop \n" >> $3 .s
307
- $$ (AS) $$ (ASFLAGS) -o $$ @ $3 .s
305
+ @$(CPP) $(CPPFLAGS) $< -o $* .i
306
+ @$(PREPROC) $* .i charmap.txt | $(CC1) $(CFLAGS) -o $* .s
307
+ @echo -e ".text\n\t.align\t2, 0\n" >> $* .s
308
+ $(AS) $(ASFLAGS) -o $@ $* .s
308
309
endif
309
- $1.d: $2
310
- $(SCANINC ) -M $1.d $(INCLUDE_SCANINC_ARGS ) -I tools/agbcc/include $2
310
+
311
+ $(C_BUILDDIR ) /% .d : $(C_SUBDIR ) /% .c
312
+ $(SCANINC ) -M $@ $(INCLUDE_SCANINC_ARGS ) -I tools/agbcc/include $<
313
+
311
314
ifneq ($(NODEP ) ,1)
312
- $1.o : $1.d
313
- -include $1.d
315
+ -include $(addprefix $(OBJ_DIR ) /,$(C_SRCS :.c=.d))
314
316
endif
315
- endef
316
317
317
- # Create generic rules if no dependency scanning, else create the real rules
318
- ifeq ($(NODEP ) ,1)
319
- $(eval $(call C_DEP,$(C_BUILDDIR)/%,$(C_SUBDIR)/%.c))
320
- else
321
- $(foreach src,$(C_SRCS),$(eval $(call C_DEP,$(OBJ_DIR)/$(basename $(src)),$(src))))
318
+ $(ASM_BUILDDIR ) /% .o : $(ASM_SUBDIR ) /% .s
319
+ $(AS ) $(ASFLAGS ) -o $@ $<
320
+
321
+ $(ASM_BUILDDIR ) /% .d : $(ASM_SUBDIR ) /% .s
322
+ $(SCANINC ) -M $@ $(INCLUDE_SCANINC_ARGS ) -I " " $<
323
+
324
+ ifneq ($(NODEP ) ,1)
325
+ -include $(addprefix $(OBJ_DIR ) /,$(ASM_SRCS :.s=.d))
322
326
endif
323
327
324
- # Similar methodology for Assembly files
325
- # $1: Output path without extension, $2: Input file (`*.s`)
326
- define ASM_DEP
327
- $1.o: $2
328
- $$(AS ) $$(ASFLAGS ) -o $$@ $$<
329
- $(call ASM_SCANINC,$1,$2)
330
- endef
331
- # As above but first doing a preprocessor pass
332
- define ASM_DEP_PREPROC
333
- $1.o: $2
334
- $$(PREPROC ) $$< charmap.txt | $$(CPP ) $(INCLUDE_SCANINC_ARGS ) - | $$(PREPROC ) -ie $$< charmap.txt | $$(AS ) $$(ASFLAGS ) -o $$@
335
- $(call ASM_SCANINC,$1,$2)
336
- endef
337
-
338
- define ASM_SCANINC
328
+ $(C_BUILDDIR ) /% .o : $(C_SUBDIR ) /% .s
329
+ $(PREPROC ) $< charmap.txt | $(CPP ) $(INCLUDE_SCANINC_ARGS ) - | $(PREPROC ) -ie $< charmap.txt | $(AS ) $(ASFLAGS ) -o $@
330
+
331
+ $(C_BUILDDIR ) /% .d : $(C_SUBDIR ) /% .s
332
+ $(SCANINC ) -M $@ $(INCLUDE_SCANINC_ARGS ) -I " " $<
333
+
339
334
ifneq ($(NODEP ) ,1)
340
- $1.o : $1.d
341
- $1.d : $2
342
- $(SCANINC ) -M $1 .d $(INCLUDE_SCANINC_ARGS ) -I " " $2
343
- -include $1.d
335
+ -include $(addprefix $(OBJ_DIR ) /,$(C_ASM_SRCS :.s=.d))
344
336
endif
345
- endef
346
337
347
- # Dummy rules or real rules
348
- ifeq ($(NODEP ) ,1)
349
- $(eval $(call ASM_DEP,$(ASM_BUILDDIR)/%,$(ASM_SUBDIR)/%.s))
350
- $(eval $(call ASM_DEP_PREPROC,$(C_BUILDDIR)/%,$(C_SUBDIR)/%.s))
351
- $(eval $(call ASM_DEP_PREPROC,$(DATA_ASM_BUILDDIR)/%,$(DATA_ASM_SUBDIR)/%.s))
352
- else
353
- $(foreach src, $(ASM_SRCS ) , $(eval $(call ASM_DEP,$(src :% .s=$(OBJ_DIR ) /% ),$(src ) )))
354
- $(foreach src, $(C_ASM_SRCS ) , $(eval $(call ASM_DEP_PREPROC,$(src :% .s=$(OBJ_DIR ) /% ),$(src ) )))
355
- $(foreach src, $(REGULAR_DATA_ASM_SRCS ) , $(eval $(call ASM_DEP_PREPROC,$(src :% .s=$(OBJ_DIR ) /% ),$(src ) )))
338
+ $(DATA_ASM_BUILDDIR ) /% .o : $(DATA_ASM_SUBDIR ) /% .s
339
+ $(PREPROC ) $< charmap.txt | $(CPP ) $(INCLUDE_SCANINC_ARGS ) - | $(PREPROC ) -ie $< charmap.txt | $(AS ) $(ASFLAGS ) -o $@
340
+
341
+ $(DATA_ASM_BUILDDIR ) /% .d : $(DATA_ASM_SUBDIR ) /% .s
342
+ $(SCANINC ) -M $@ $(INCLUDE_SCANINC_ARGS ) -I " " $<
343
+
344
+ ifneq ($(NODEP ) ,1)
345
+ -include $(addprefix $(OBJ_DIR ) /,$(REGULAR_DATA_ASM_SRCS :.s=.d))
356
346
endif
357
347
358
348
$(OBJ_DIR ) /sym_bss.ld : sym_bss.txt
@@ -376,8 +366,10 @@ endif
376
366
# Final rules
377
367
378
368
# Elf from object files
369
+ LDFLAGS = -Map ../../$(MAP )
379
370
$(ELF ) : $(LD_SCRIPT ) $(LD_SCRIPT_DEPS ) $(OBJS )
380
371
@cd $(OBJ_DIR ) && $(LD ) $(LDFLAGS ) -T ../../$< --print-memory-usage -o ../../$@ $(OBJS_REL ) $(LIB ) | cat
372
+ @echo " cd $( OBJ_DIR) && $( LD) $( LDFLAGS) -T ../../$< --print-memory-usage -o ../../$@ <objs> <libs> | cat"
381
373
$(FIX ) $@ -t" $( TITLE) " -c$(GAME_CODE ) -m$(MAKER_CODE ) -r$(GAME_REVISION ) --silent
382
374
383
375
# Builds the rom from the elf file
0 commit comments