summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rwxr-xr-xMakefile174
1 files changed, 104 insertions, 70 deletions
diff --git a/Makefile b/Makefile
index 6d5d120..10c7dee 100755
--- a/Makefile
+++ b/Makefile
@@ -1,99 +1,133 @@
-AS := $(DEVKITARM)/bin/arm-none-eabi-as
-ASFLAGS := -mcpu=arm7tdmi
+include $(DEVKITARM)/base_tools
+
+ifeq ($(OS),Windows_NT)
+EXE := .exe
+else
+EXE :=
+endif
+
+TITLE := POKE DUNGEON
+GAME_CODE := B24E
+MAKER_CODE := 01
+REVISION := 0
+
+#### Tools ####
+
+SHELL := /bin/bash -o pipefail
+AS := $(PREFIX)as
+CC1 := tools/agbcc/bin/agbcc
+CPP := $(PREFIX)cpp
+LD := $(PREFIX)ld
+OBJCOPY := $(PREFIX)objcopy
+SHA1SUM := sha1sum -c
+GBAGFX := tools/gbagfx/gbagfx
+GBAFIX := tools/gbafix/gbafix
+AIF2PCM := tools/aif2pcm/aif2pcm
+MID2AGB := tools/mid2agb/mid2agb
+PREPROC := tools/preproc/preproc
+SCANINC := tools/scaninc/scaninc
+RAMSCRGEN := tools/ramscrgen/ramscrgen
-CC1 := tools/agbcc/bin/agbcc
-override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Wunused -Werror -O2 -fhex-asm
+ASFLAGS := -mcpu=arm7tdmi
+override CC1FLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Wunused -Werror -O2 -fhex-asm
+CPPFLAGS := -I tools/agbcc/include -iquote include -nostdinc -undef
-CPP := $(DEVKITARM)/bin/arm-none-eabi-cpp
-CPPFLAGS := -I tools/agbcc/include -iquote include -nostdinc -undef
+#### Files ####
-LD := $(DEVKITARM)/bin/arm-none-eabi-ld
+BUILD_NAME = red
-OBJCOPY := $(DEVKITARM)/bin/arm-none-eabi-objcopy
+ROM := pmd_$(BUILD_NAME).gba
+MAP := $(ROM:%.gba=%.map)
-LIBGCC := tools/agbcc/lib/libgcc.a
-LIBC := tools/agbcc/lib/libc.a
+BUILD_DIR := build/pmd_$(BUILD_NAME)
-MD5 := md5sum -c
+C_SOURCES := $(wildcard src/*.c)
+ASM_SOURCES := $(wildcard asm/*.s data/*.s)
-GFX := tools/gbagfx/gbagfx
-AIF := tools/aif2pcm/aif2pcm
-MID := tools/mid2agb/mid2agb
-SCANINC := tools/scaninc/scaninc
-PREPROC := tools/preproc/preproc
-RAMSCRGEN := tools/ramscrgen/ramscrgen
+C_OBJECTS := $(addprefix $(BUILD_DIR)/, $(C_SOURCES:%.c=%.o))
+ASM_OBJECTS := $(addprefix $(BUILD_DIR)/, $(ASM_SOURCES:%.s=%.o))
+ALL_OBJECTS := $(C_OBJECTS) $(ASM_OBJECTS)
-# Clear the default suffixes.
-.SUFFIXES:
-
-# Secondary expansion is required for dependency variables in object rules.
-.SECONDEXPANSION:
+SUBDIRS := $(sort $(dir $(ALL_OBJECTS)))
-.PRECIOUS: %.1bpp %.4bpp %.8bpp %.gbapal %.lz %.rl %.pcm %.bin
+ifeq ($(OS),Windows_NT)
+LIB := ../../tools/agbcc/lib/libc.a ../../tools/agbcc/lib/libgcc.a
+else
+LIB := -L ../../tools/agbcc/lib -lc -lgcc
+endif
-.PHONY: all clean tidy
+LD_SCRIPT := $(BUILD_DIR)/ld_script.ld
-C_SRCS := $(wildcard src/*.c)
-C_OBJS := $(C_SRCS:%.c=%.o)
+# Special configurations required for lib files
+$(BUILD_DIR)/src/agb_flash.o : CC1FLAGS := -O -mthumb-interwork
+$(BUILD_DIR)/src/agb_flash_1m.o: CC1FLAGS := -O -mthumb-interwork
+$(BUILD_DIR)/src/agb_flash_mx.o: CC1FLAGS := -O -mthumb-interwork
-ASM_SRCS := $(wildcard asm/*.s)
-ASM_OBJS := $(ASM_SRCS:%.s=%.o)
+$(BUILD_DIR)/src/m4a_2.o: CC1 := tools/agbcc/bin/old_agbcc
+$(BUILD_DIR)/src/m4a_4.o: CC1 := tools/agbcc/bin/old_agbcc
-DATA_ASM_SRCS := $(wildcard data/*.s)
-DATA_ASM_OBJS := $(DATA_ASM_SRCS:%.s=%.o)
+#### Main Rules ####
-OBJS := $(C_OBJS) $(ASM_OBJS) $(DATA_ASM_OBJS)
+# Disable dependency scanning when NODEP is used for quick building
+ifeq ($(NODEP),)
+$(BUILD_DIR)/src/%.o: C_DEP = $(shell $(SCANINC) -I include src/$(*F).c)
+$(BUILD_DIR)/asm/%.o: ASM_DEP = $(shell $(SCANINC) asm/$(*F).s)
+$(BUILD_DIR)/data/%.o: ASM_DEP = $(shell $(SCANINC) data/$(*F).s)
+endif
-all: pmd_red.gba
+ALL_BUILDS := red
-# For contributors to make sure a change didn't affect the contents of the ROM.
+# Available targets
+.PHONY: all clean tidy
-compare: all
- @$(MD5) rom.md5
+MAKEFLAGS += --no-print-directory
+# Secondary expansion is required for dependency variables in object rules.
+.SECONDEXPANSION:
+# Clear the default suffixes
+.SUFFIXES:
+# Don't delete intermediate files
+.SECONDARY:
+# Delete files that weren't built properly
+.DELETE_ON_ERROR:
-clean: tidy
+.PRECIOUS: %.1bpp %.4bpp %.8bpp %.gbapal %.lz %.rl %.pcm %.bin
-tidy:
- rm -f pmd_red.gba pmd_red.elf pmd_red.map
- rm -f $(ASM_OBJS)
- rm -f $(DATA_ASM_OBJS)
- rm -f $(C_OBJS)
- rm -f $(ASM_OBJS)
- rm -f $(DATA_ASM_OBJS)
- rm -f $(C_SRCS:%.c=%.i)
- rm -f $(C_SRCS:%.c=%.s)
- rm -f *.ld
-src/agb_flash.o: CFLAGS := -O -mthumb-interwork
-src/agb_flash_1m.o: CFLAGS := -O -mthumb-interwork
-src/agb_flash_mx.o: CFLAGS := -O -mthumb-interwork
+# Create build subdirectories
-$(C_OBJS): %.o : %.c
- @$(CPP) $(CPPFLAGS) $< -o $*.i
- @$(CC1) $(CFLAGS) $*.i -o $*.s
- @printf ".text\n\t.align\t2, 0\n" >> $*.s
- $(AS) $(ASFLAGS) -o $@ $*.s
+$(shell mkdir -p $(SUBDIRS))
-$(ASM_OBJS): %.o: %.s
- $(AS) $(ASFLAGS) -o $@ $<
+all: $(ROM)
+ifeq ($(COMPARE),1)
+ @$(SHA1SUM) $(BUILD_NAME).sha1
+endif
-$(DATA_ASM_OBJS): %.o: %.s
- $(AS) $(ASFLAGS) -o $@ $<
+clean: tidy
+ $(RM) $(ALL_OBJECTS)
+tidy:
+ $(RM) $(ALL_BUILDS:%=pmd_%{.gba,.elf,.map})
+ $(RM) -r build
-sym_ewram.ld: sym_ewram.txt
- $(RAMSCRGEN) ewram_data sym_ewram.txt ENGLISH >$@
+$(ROM): %.gba: %.elf
+ $(OBJCOPY) -O binary --gap-fill 0xFF --pad-to 0xA000000 $< $@
+ $(GBAFIX) $@ -p -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) --silent
-sym_ewram2.ld: sym_ewram2.txt
- $(RAMSCRGEN) ewram_data sym_ewram2.txt ENGLISH >$@
+%.elf: $(LD_SCRIPT) $(ALL_OBJECTS) $(LIBC)
+ cd $(BUILD_DIR) && $(LD) -T ld_script.ld -Map ../../$(MAP) -o ../../$@ $(LIB)
-sym_iwram.ld: sym_iwram.txt
- $(RAMSCRGEN) iwram_data sym_iwram.txt ENGLISH >$@
+$(LD_SCRIPT): ld_script.txt $(BUILD_DIR)/sym_ewram.ld $(BUILD_DIR)/sym_ewram2.ld $(BUILD_DIR)/sym_iwram.ld
+ cd $(BUILD_DIR) && sed -e "s#tools/#../../tools/#g" ../../ld_script.txt >ld_script.ld
+$(BUILD_DIR)/sym_%.ld: sym_%.txt
+ $(CPP) -P $(CPPFLAGS) $< | sed -e "s#tools/#../../tools/#g" > $@
-ld_script.ld: ld_script.txt sym_ewram.ld sym_ewram2.ld sym_iwram.ld
- sed -f ld_script.sed ld_script.txt >ld_script.ld
+$(C_OBJECTS): $(BUILD_DIR)/%.o: %.c $$(C_DEP)
+ @$(CPP) $(CPPFLAGS) $< -o $(BUILD_DIR)/$*.i
+ @$(CC1) $(CC1FLAGS) $(BUILD_DIR)/$*.i -o $(BUILD_DIR)/$*.s
+ @printf ".text\n\t.align\t2, 0\n" >> $(BUILD_DIR)/$*.s
+ $(AS) $(ASFLAGS) -o $@ $(BUILD_DIR)/$*.s
-pmd_red.elf: ld_script.ld $(OBJS) $(LIBC)
- $(LD) -T ld_script.ld -Map pmd_red.map -o $@ $(OBJS) $(LIBC) $(LIBGCC)
+$(BUILD_DIR)/data/%.o: data/%.s $$(ASM_DEP)
+ $(AS) $(ASFLAGS) $< -o $@
-pmd_red.gba: pmd_red.elf
- $(OBJCOPY) -O binary --gap-fill 0xFF --pad-to 0xA000000 $< $@
+$(BUILD_DIR)/%.o: %.s $$(ASM_DEP)
+ $(AS) $(ASFLAGS) $< -o $@ \ No newline at end of file