diff --git a/Makefile b/Makefile index 0bb9ba311e..8e9c2e466d 100644 --- a/Makefile +++ b/Makefile @@ -20,6 +20,11 @@ ifeq ($(NON_MATCHING),1) override COMPARE=0 endif +# PERMUTER=1 implies WATCH_INCLUDES=0 +ifeq ($(PERMUTER),1) +override WATCH_INCLUDES=0 +endif + ### Output ### @@ -38,14 +43,7 @@ N64CKSUM := tools/n64crc SPLAT_YAML := tools/splat.yaml SPLAT = $(PYTHON) tools/n64splat/split.py $(BASEROM) $(SPLAT_YAML) . YAY0COMPRESS = tools/Yay0compress - -ifndef EMULATOR -ifneq ($(shell which mupen64plus-gui),) -EMULATOR = mupen64plus-gui -else EMULATOR = mupen64plus -endif -endif ### Compiler Options ### @@ -58,12 +56,17 @@ CPP := cpp LD := $(CROSS)ld OBJCOPY := $(CROSS)objcopy -CPPFLAGS := -Iinclude -Isrc -D _LANGUAGE_C -ffreestanding -DF3DEX_GBI_2 -D_MIPS_SZLONG=32 -Wundef -Wcomment -MP -MD +CPPFLAGS := -Iinclude -Isrc -D _LANGUAGE_C -ffreestanding -DF3DEX_GBI_2 -D_MIPS_SZLONG=32 -Wundef -Wcomment ASFLAGS := -EB -Iinclude -march=vr4300 -mtune=vr4300 OLDASFLAGS := -EB -Iinclude -G 0 CFLAGS := -O2 -quiet -G 0 -mcpu=vr4300 -mfix4300 -mips3 -mgp32 -mfp32 -Wimplicit -Wuninitialized -Wshadow LDFLAGS := -T undefined_syms.txt -T undefined_funcs.txt -T $(BUILD_DIR)/$(LD_SCRIPT) -Map $(LD_MAP) --no-check-sections +ifeq ($(WATCH_INCLUDES),1) +CPPMFLAGS = -MP -MD -MF $@.mk -MT $(BUILD_DIR)/$*.d +MDEPS = $(BUILD_DIR)/%.d +endif + ifeq ($(NON_MATCHING),1) CPPFLAGS += -DNON_MATCHING endif @@ -106,11 +109,7 @@ split-all: $(SPLAT) --modes all test: $(ROM) -ifdef EMULATOR $(EMULATOR) $< -else - @echo "N64 emulator not detected." && false -endif # Compressed files %.Yay0: % @@ -131,14 +130,14 @@ $(BUILD_DIR)/%.Yay0.o: $(BUILD_DIR)/%.bin.Yay0 $(LD) -r -b binary -o $@ $< # Compile C files -$(BUILD_DIR)/%.c.o: %.c $(BUILD_DIR)/%.d +$(BUILD_DIR)/%.c.o: %.c $(MDEPS) @mkdir -p $(shell dirname $@) - $(CPP) $(CPPFLAGS) -o - $< -MF $@.mk -MT $(BUILD_DIR)/$*.d | $(CC) $(CFLAGS) -o - - | $(OLD_AS) $(OLDASFLAGS) -o $@ - + $(CPP) $(CPPFLAGS) -o - $< $(CPPMFLAGS) | $(CC) $(CFLAGS) -o - - | $(OLD_AS) $(OLDASFLAGS) -o $@ - # Compile C files (with DSL macros) -$(foreach cfile, $(DSL_C_FILES), $(BUILD_DIR)/$(cfile).o): $(BUILD_DIR)/%.c.o: %.c $(BUILD_DIR)/%.d +$(foreach cfile, $(DSL_C_FILES), $(BUILD_DIR)/$(cfile).o): $(BUILD_DIR)/%.c.o: %.c $(MDEPS) @mkdir -p $(shell dirname $@) - $(CPP) $(CPPFLAGS) -o - $< -MF $@.mk -MT $(BUILD_DIR)/$*.d | tools/compile_dsl_macros.py | $(CC) $(CFLAGS) -o - - | $(OLD_AS) $(OLDASFLAGS) -o $@ - + $(CPP) $(CPPFLAGS) -o - $< $(CPPMFLAGS) | tools/compile_dsl_macros.py | $(CC) $(CFLAGS) -o - - | $(OLD_AS) $(OLDASFLAGS) -o $@ - # Assemble handwritten ASM $(BUILD_DIR)/%.s.o: %.s @@ -173,12 +172,12 @@ ifeq ($(COMPARE),1) @sha1sum -c checksum.sha1 || (echo 'The build succeeded, but did not match the base ROM. This is expected if you are making changes to the game. To skip this check, use "make COMPARE=0".' && false) endif -$(BUILD_DIR)/$(TARGET).bin: $(BUILD_DIR)/$(TARGET).elf - $(OBJCOPY) $< $@ -O binary - $(BUILD_DIR)/$(TARGET).elf: $(BUILD_DIR)/$(LD_SCRIPT) $(OBJECTS) $(LD) $(LDFLAGS) -o $@ +$(BUILD_DIR)/$(TARGET).bin: $(BUILD_DIR)/$(TARGET).elf + $(OBJCOPY) $< $@ -O binary + ### Make Settings ### @@ -190,3 +189,6 @@ $(BUILD_DIR)/$(TARGET).elf: $(BUILD_DIR)/$(LD_SCRIPT) $(OBJECTS) # Remove built-in implicit rules to improve performance MAKEFLAGS += --no-builtin-rules + +# Fail targets if any command in the pipe exits with error +SHELL = /bin/bash -e -o pipefail