summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rwxr-xr-xMakefile78
1 files changed, 47 insertions, 31 deletions
diff --git a/Makefile b/Makefile
index 24207a5..536fd79 100755
--- a/Makefile
+++ b/Makefile
@@ -69,11 +69,27 @@ CPPFLAGS := -I tools/agbcc/include -iquote include -nostdinc -undef
#### Files ####
BUILD_NAME = red
+BUILD_DIR := build/pmd_$(BUILD_NAME)
ROM := pmd_$(BUILD_NAME).gba
+ELF := $(ROM:%.gba=%.elf)
MAP := $(ROM:%.gba=%.map)
-BUILD_DIR := build/pmd_$(BUILD_NAME)
+C_SUBDIR = src
+GFLIB_SUBDIR = gflib
+ASM_SUBDIR = asm
+DATA_SRC_SUBDIR = src/data
+DATA_ASM_SUBDIR = data
+SONG_SUBDIR = sound/songs
+MID_SUBDIR = sound/songs/midi
+SAMPLE_SUBDIR = sound/direct_sound_samples
+
+C_BUILDDIR = $(BUILD_DIR)/$(C_SUBDIR)
+GFLIB_BUILDDIR = $(BUILD_DIR)/$(GFLIB_SUBDIR)
+ASM_BUILDDIR = $(BUILD_DIR)/$(ASM_SUBDIR)
+DATA_ASM_BUILDDIR = $(BUILD_DIR)/$(DATA_ASM_SUBDIR)
+SONG_BUILDDIR = $(BUILD_DIR)/$(SONG_SUBDIR)
+MID_BUILDDIR = $(BUILD_DIR)/$(MID_SUBDIR)
C_SOURCES := $(wildcard src/*.c)
ASM_SOURCES := $(wildcard asm/*.s data/*.s)
@@ -88,21 +104,20 @@ SUBDIRS := $(sort $(dir $(ALL_OBJECTS)))
LD_SCRIPT := $(BUILD_DIR)/ld_script.ld
# 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
+$(C_BUILDDIR)/agb_flash.o : CC1FLAGS := -O -mthumb-interwork
+$(C_BUILDDIR)/agb_flash_1m.o: CC1FLAGS := -O -mthumb-interwork
+$(C_BUILDDIR)/agb_flash_mx.o: CC1FLAGS := -O -mthumb-interwork
-$(BUILD_DIR)/src/m4a.o: CC1 := tools/agbcc/bin/old_agbcc
+$(C_BUILDDIR)/m4a.o: CC1 := tools/agbcc/bin/old_agbcc
#### Main Rules ####
# Disable dependency scanning when NODEP is used for quick building
-# TODO enable when NODEP is fixed
-#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
+ifeq ($(NODEP),1)
+$(C_BUILDDIR)/%.o: C_DEP :=
+else
+$(C_BUILDDIR)/%.o: C_DEP = $(shell [[ -f $(C_SUBDIR)/$*.c ]] && $(SCANINC) -I include -I tools/agbcc/include -I gflib $(C_SUBDIR)/$*.c)
+endif
ALL_BUILDS := red
@@ -110,6 +125,7 @@ ALL_BUILDS := red
.PHONY: all clean tidy libagbsyscall tools clean-tools $(TOOLDIRS)
MAKEFLAGS += --no-print-directory
+
# Secondary expansion is required for dependency variables in object rules.
.SECONDEXPANSION:
# Clear the default suffixes
@@ -133,7 +149,6 @@ tools: $(TOOLDIRS)
$(TOOLDIRS):
@$(MAKE) -C $@ CC=$(HOSTCC) CXX=$(HOSTCXX)
-
compare: all
@$(SHA1SUM) $(BUILD_NAME).sha1
@@ -144,33 +159,34 @@ clean-tools:
@$(foreach tooldir,$(TOOLDIRS),$(MAKE) clean -C $(tooldir);)
tidy:
- $(RM) $(ALL_BUILDS:%=pmd_%{.gba,.elf,.map})
- $(RM) -r build
+ $(RM) -f $(ROM) $(ELF) $(MAP)
+ $(RM) -r $(BUILD_DIR)
@$(MAKE) clean -C libagbsyscall
-$(ROM): %.gba: %.elf tools
- $(OBJCOPY) -O binary --gap-fill 0xFF --pad-to 0xA000000 $< $@
- $(GBAFIX) $@ -p -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) --silent
+$(C_BUILDDIR)/%.o: $(C_SUBDIR)/%.c $$(C_DEP)
+ @$(CPP) $(CPPFLAGS) $< -o $(C_BUILDDIR)/$*.i
+ @$(PREPROC) $(C_BUILDDIR)/$*.i charmap.txt | $(CC1) $(CC1FLAGS) -o $(C_BUILDDIR)/$*.s
+ @echo -e ".text\n\t.align\t2, 0\n" >> $(C_BUILDDIR)/$*.s
+ $(AS) $(ASFLAGS) -o $@ $(C_BUILDDIR)/$*.s
-%.elf: $(LD_SCRIPT) $(ALL_OBJECTS) $(LIBC) libagbsyscall
- cd $(BUILD_DIR) && $(LD) -T ld_script.ld -Map ../../$(MAP) -o ../../$@ $(LIB)
+$(DATA_ASM_BUILDDIR)/%.o: $(DATA_ASM_SUBDIR)/%.s $$(ASM_DEP)
+ $(PREPROC) $< charmap.txt | $(CPP) -I include | $(AS) $(ASFLAGS) -o $@
+
+$(ASM_BUILDDIR)/%.o: $(ASM_SUBDIR)/%.s $$(ASM_DEP)
+ $(AS) $(ASFLAGS) $< -o $@
+
+libagbsyscall:
+ @$(MAKE) -C libagbsyscall TOOLCHAIN=$(TOOLCHAIN)
$(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" > $@
-$(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
-
-$(BUILD_DIR)/data/%.o: data/%.s $$(ASM_DEP)
- $(PREPROC) $< charmap.txt | $(CPP) -I include | $(AS) $(ASFLAGS) -o $@
+$(ELF): $(LD_SCRIPT) $(ALL_OBJECTS) $(LIBC) libagbsyscall
+ cd $(BUILD_DIR) && $(LD) -T ld_script.ld -Map ../../$(MAP) -o ../../$@ $(LIB)
-$(BUILD_DIR)/%.o: %.s $$(ASM_DEP)
- $(AS) $(ASFLAGS) $< -o $@
+$(ROM): %.gba: $(ELF) tools
+ $(OBJCOPY) -O binary --gap-fill 0xFF --pad-to 0xA000000 $< $@
+ $(GBAFIX) $@ -p -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) --silent
-libagbsyscall:
- @$(MAKE) -C libagbsyscall TOOLCHAIN=$(TOOLCHAIN)