diff options
Diffstat (limited to 'Makefile')
-rw-r--r-- | Makefile | 84 |
1 files changed, 69 insertions, 15 deletions
@@ -1,4 +1,12 @@ -include $(DEVKITARM)/base_tools +TOOLCHAIN := $(DEVKITARM) +ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) +include $(TOOLCHAIN)/base_tools +else +PREFIX := $(TOOLCHAIN)/bin/arm-none-eabi- +OBJCOPY := $(PREFIX)objcopy +CC := $(PREFIX)gcc +AS := $(PREFIX)as +endif export CPP := $(PREFIX)cpp export LD := $(PREFIX)ld @@ -12,12 +20,10 @@ TITLE := POKEMON EMER GAME_CODE := BPEE MAKER_CODE := 01 REVISION := 0 +MODERN ?= 0 SHELL := /bin/bash -o pipefail -ROM := pokeemerald.gba -OBJ_DIR := build/emerald - ELF = $(ROM:.gba=.elf) MAP = $(ROM:.gba=.map) @@ -34,16 +40,32 @@ DATA_ASM_BUILDDIR = $(OBJ_DIR)/$(DATA_ASM_SUBDIR) SONG_BUILDDIR = $(OBJ_DIR)/$(SONG_SUBDIR) MID_BUILDDIR = $(OBJ_DIR)/$(MID_SUBDIR) -ASFLAGS := -mcpu=arm7tdmi +ASFLAGS := -mcpu=arm7tdmi --defsym MODERN=$(MODERN) + +GCC_VER := $(shell $(CC) -dumpversion) +ifeq ($(MODERN),0) CC1 := tools/agbcc/bin/agbcc$(EXE) override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O2 -fhex-asm +ROM := pokeemerald.gba +OBJ_DIR := build/emerald +LIBPATH := -L ../../tools/agbcc/lib +else +CC1 := $(shell $(PREFIX)gcc --print-prog-name=cc1) -quiet +override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -fno-aggressive-loop-optimizations -Wno-pointer-to-int-cast +ROM := pokeemerald_modern.gba +OBJ_DIR := build/modern +LIBPATH := -L $(TOOLCHAIN)/lib/gcc/arm-none-eabi/$(GCC_VER)/thumb -L $(TOOLCHAIN)/arm-none-eabi/lib/thumb +endif -CPPFLAGS := -I tools/agbcc/include -I tools/agbcc -iquote include -Wno-trigraphs +CPPFLAGS := -iquote include -Wno-trigraphs -DMODERN=$(MODERN) +ifeq ($(MODERN),0) +CPPFLAGS += -I tools/agbcc/include -I tools/agbcc +endif LDFLAGS = -Map ../../$(MAP) -LIB := -L ../../tools/agbcc/lib -lgcc -lc +LIB := $(LIBPATH) -lgcc -lc SHA1 := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c GFX := tools/gbagfx/gbagfx$(EXE) @@ -66,7 +88,7 @@ JSONPROC := tools/jsonproc/jsonproc$(EXE) # Secondary expansion is required for dependency variables in object rules. .SECONDEXPANSION: -.PHONY: rom clean compare tidy +.PHONY: rom clean compare tidy tools mostlyclean clean-tools C_SRCS := $(wildcard $(C_SUBDIR)/*.c $(C_SUBDIR)/*/*.c $(C_SUBDIR)/*/*/*.c) C_OBJS := $(patsubst $(C_SUBDIR)/%.c,$(C_BUILDDIR)/%.o,$(C_SRCS)) @@ -90,17 +112,33 @@ SUBDIRS := $(sort $(dir $(OBJS))) AUTO_GEN_TARGETS := +TOOLDIRS := $(filter-out tools/agbcc tools/binutils,$(wildcard tools/*)) +TOOLBASE = $(TOOLDIRS:tools/%=%) +TOOLS = $(foreach tool,$(TOOLBASE),tools/%(tool)/$(tool)$(EXE)) + $(shell mkdir -p $(SUBDIRS)) +all: tools rom + +tools: $(TOOLS) + +$(TOOLS): + @$(foreach tooldir,$(TOOLDIRS),$(MAKE) -C $(tooldir);) + rom: $(ROM) # For contributors to make sure a change didn't affect the contents of the ROM. -compare: $(ROM) +compare: all @$(SHA1) rom.sha1 -clean: tidy +clean: mostlyclean clean-tools + +clean-tools: + @$(foreach tooldir,$(TOOLDIRS),$(MAKE) clean -C $(tooldir);) + +mostlyclean: tidy rm -f sound/direct_sound_samples/*.bin - rm -f $(SONG_OBJS) $(MID_OBJS) $(MID_SUBDIR)/*.s + rm -f $(MID_SUBDIR)/*.s find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' -o -iname '*.latfont' -o -iname '*.hwjpnfont' -o -iname '*.fwjpnfont' \) -exec rm {} + rm -f $(DATA_ASM_SUBDIR)/layouts/layouts.inc $(DATA_ASM_SUBDIR)/layouts/layouts_table.inc rm -f $(DATA_ASM_SUBDIR)/maps/connections.inc $(DATA_ASM_SUBDIR)/maps/events.inc $(DATA_ASM_SUBDIR)/maps/groups.inc $(DATA_ASM_SUBDIR)/maps/headers.inc @@ -109,7 +147,10 @@ clean: tidy tidy: rm -f $(ROM) $(ELF) $(MAP) - rm -r build/* + rm -r $(OBJ_DIR) +ifeq ($(MODERN),0) + @$(MAKE) tidy MODERN=1 +endif include graphics_file_rules.mk include map_data_rules.mk @@ -133,6 +174,7 @@ sound/direct_sound_samples/cry_%.bin: sound/direct_sound_samples/cry_%.aif ; $(A sound/%.bin: sound/%.aif ; $(AIF) $< $@ +ifeq ($(MODERN),0) $(C_BUILDDIR)/libc.o: CC1 := tools/agbcc/bin/old_agbcc $(C_BUILDDIR)/libc.o: CFLAGS := -O2 @@ -145,6 +187,7 @@ $(C_BUILDDIR)/agb_flash_mx.o: CFLAGS := -O -mthumb-interwork $(C_BUILDDIR)/m4a.o: CC1 := tools/agbcc/bin/old_agbcc $(C_BUILDDIR)/record_mixing.o: CFLAGS += -ffreestanding +endif ifeq ($(NODEP),1) $(C_BUILDDIR)/%.o: c_dep := @@ -192,12 +235,23 @@ $(OBJ_DIR)/sym_common.ld: sym_common.txt $(C_OBJS) $(wildcard common_syms/*.txt) $(OBJ_DIR)/sym_ewram.ld: sym_ewram.txt $(RAMSCRGEN) ewram_data $< ENGLISH > $@ -$(OBJ_DIR)/ld_script.ld: ld_script.txt $(OBJ_DIR)/sym_bss.ld $(OBJ_DIR)/sym_common.ld $(OBJ_DIR)/sym_ewram.ld - cd $(OBJ_DIR) && sed "s#tools/#../../tools/#g" ../../ld_script.txt > ld_script.ld +ifeq ($(MODERN),0) +LD_SCRIPT := ld_script.txt +LD_SCRIPT_DEPS := $(OBJ_DIR)/sym_bss.ld $(OBJ_DIR)/sym_common.ld $(OBJ_DIR)/sym_ewram.ld +else +LD_SCRIPT := ld_script_modern.txt +LD_SCRIPT_DEPS := +endif + +$(OBJ_DIR)/ld_script.ld: $(LD_SCRIPT) $(LD_SCRIPT_DEPS) + cd $(OBJ_DIR) && sed "s#tools/#../../tools/#g" ../../$(LD_SCRIPT) > ld_script.ld $(ELF): $(OBJ_DIR)/ld_script.ld $(OBJS) cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ $(OBJS_REL) $(LIB) + $(FIX) $@ -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) --silent $(ROM): $(ELF) $(OBJCOPY) -O binary $< $@ - $(FIX) $@ -p -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) --silent + $(FIX) $@ -p --silent + +modern: ; @$(MAKE) MODERN=1 |