diff options
Diffstat (limited to 'Makefile')
-rw-r--r-- | Makefile | 62 |
1 files changed, 52 insertions, 10 deletions
@@ -1,4 +1,12 @@ +TOOLCHAIN ?= $(DEVKITARM) +ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) include $(DEVKITARM)/base_tools +else +PREFIX := $(TOOLCHAIN)/bin/arm-none-eabi- +OBJCOPY := $(PREFIX)objcopy +CC := $(PREFIX)gcc +AS := $(PREFIX)as +endif include config.mk ifeq ($(OS),Windows_NT) @@ -11,11 +19,13 @@ endif #### Tools #### SHELL := /bin/bash -o pipefail -AS := $(PREFIX)as +ifeq ($(MODERN),0) CC1 := tools/agbcc/bin/agbcc$(EXE) +else +CC1 = $(shell $(CC) --print-prog-name=cc1) -quiet +endif CPP := $(PREFIX)cpp LD := $(PREFIX)ld -OBJCOPY := $(PREFIX)objcopy SHA1SUM := sha1sum -c GBAGFX := tools/gbagfx/gbagfx$(EXE) RSFONT := tools/rsfont/rsfont$(EXE) @@ -27,10 +37,18 @@ RAMSCRGEN := tools/ramscrgen/ramscrgen$(EXE) GBAFIX := tools/gbafix/gbafix$(EXE) MAPJSON := tools/mapjson/mapjson$(EXE) -ASFLAGS := -mcpu=arm7tdmi -I include --defsym $(GAME_VERSION)=1 --defsym REVISION=$(GAME_REVISION) --defsym $(GAME_LANGUAGE)=1 --defsym DEBUG=$(DEBUG) +ASFLAGS := -mcpu=arm7tdmi -I include --defsym $(GAME_VERSION)=1 --defsym REVISION=$(GAME_REVISION) --defsym $(GAME_LANGUAGE)=1 --defsym DEBUG=$(DEBUG) --defsym MODERN=$(MODERN) +CPPFLAGS := -iquote include -Werror -Wno-trigraphs -D $(GAME_VERSION) -D REVISION=$(GAME_REVISION) -D $(GAME_LANGUAGE) -D DEBUG=$(DEBUG) -D MODERN=$(MODERN) +ifeq ($(MODERN),0) +CPPFLAGS += -I tools/agbcc/include -I tools/agbcc -nostdinc -undef CC1FLAGS := -mthumb-interwork -Wimplicit -Wparentheses -Wunused -Werror -O2 -fhex-asm -CPPFLAGS := -I tools/agbcc/include -iquote include -nostdinc -undef -Werror -Wno-trigraphs -D $(GAME_VERSION) -D REVISION=$(GAME_REVISION) -D $(GAME_LANGUAGE) -D DEBUG=$(DEBUG) +else +CC1FLAGS := -mthumb -mthumb-interwork -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -O2 -fno-toplevel-reorder -fno-aggressive-loop-optimizations -Wno-pointer-to-int-cast +endif +ifneq (,$(DINFO)) +CC1FLAGS += -g +endif #### Files #### @@ -48,13 +66,21 @@ ALL_OBJECTS := $(C_OBJECTS) $(ASM_OBJECTS) SUBDIRS := $(sort $(dir $(ALL_OBJECTS))) -LIBC := tools/agbcc/lib/libc.a -LIBGCC := tools/agbcc/lib/libgcc.a -LDFLAGS := -L ../../tools/agbcc/lib -lgcc -lc +GCC_VER = $(shell $(CC) -dumpversion) + +ifeq ($(MODERN),0) +LIBDIRS := ../../tools/agbcc/lib +else +LIBDIRS := \ + $(TOOLCHAIN)/lib/gcc/arm-none-eabi/$(GCC_VER)/thumb \ + $(TOOLCHAIN)/arm-none-eabi/lib/thumb +endif +LDFLAGS := $(LIBDIRS:%=-L %) -lgcc -lc LD_SCRIPT := $(BUILD_DIR)/ld_script.ld # Special configurations required for lib files +ifeq ($(MODERN),0) %src/libs/siirtc.o: CC1FLAGS := -mthumb-interwork %src/libs/agb_flash.o: CC1FLAGS := -O1 -mthumb-interwork %src/libs/agb_flash_1m.o: CC1FLAGS := -O1 -mthumb-interwork @@ -62,14 +88,16 @@ LD_SCRIPT := $(BUILD_DIR)/ld_script.ld %src/libs/m4a.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE) %src/libs/libisagbprn.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE) %src/libs/libisagbprn.o: CC1FLAGS := -mthumb-interwork +endif #### Main Rules #### ALL_BUILDS := ruby ruby_rev1 ruby_rev2 sapphire sapphire_rev1 sapphire_rev2 ruby_de sapphire_de ruby_de_debug +MODERN_BUILDS := $(ALL_BUILDS:%=%_modern) # Available targets -.PHONY: all clean tidy tools $(ALL_BUILDS) +.PHONY: all clean mostlyclean tidy tools $(ALL_BUILDS) infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line)))) @@ -107,13 +135,15 @@ ifeq ($(COMPARE),1) @$(SHA1SUM) $(BUILD_NAME).sha1 endif -clean: tidy +mostlyclean: tidy find sound/direct_sound_samples \( -iname '*.bin' \) -exec rm {} + $(RM) $(ALL_OBJECTS) find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' -o -iname '*.rl' \) -exec rm {} + rm -f data/layouts/layouts.inc data/layouts/layouts_table.inc rm -f data/maps/connections.inc data/maps/events.inc data/maps/groups.inc data/maps/headers.inc find data/maps \( -iname 'connections.inc' -o -iname 'events.inc' -o -iname 'header.inc' \) -exec rm {} + + +clean: mostlyclean $(MAKE) clean -C tools/gbagfx $(MAKE) clean -C tools/scaninc $(MAKE) clean -C tools/preproc @@ -138,14 +168,15 @@ tools: tidy: $(RM) $(ALL_BUILDS:%=poke%{.gba,.elf,.map}) + $(RM) $(MODERN_BUILDS:%=poke%{.gba,.elf,.map}) $(RM) -r build $(ROM): %.gba: %.elf $(OBJCOPY) -O binary --gap-fill 0xFF --pad-to 0x9000000 $< $@ - $(GBAFIX) $@ -p -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(GAME_REVISION) --silent %.elf: $(LD_SCRIPT) $(ALL_OBJECTS) cd $(BUILD_DIR) && $(LD) -T ld_script.ld -Map ../../$(MAP) -o ../../$@ $(LDFLAGS) + $(GBAFIX) $@ -p -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(GAME_REVISION) --silent $(LD_SCRIPT): ld_script.txt $(BUILD_DIR)/sym_common.ld $(BUILD_DIR)/sym_ewram.ld $(BUILD_DIR)/sym_bss.ld cd $(BUILD_DIR) && sed -e "s#tools/#../../tools/#g" ../../ld_script.txt >ld_script.ld @@ -176,6 +207,17 @@ ruby_de: ; @$(MAKE) GAME_VERSION=RUBY GAME_LANGUAGE=GERMAN sapphire_de: ; @$(MAKE) GAME_VERSION=SAPPHIRE GAME_LANGUAGE=GERMAN ruby_de_debug: ; @$(MAKE) GAME_VERSION=RUBY GAME_LANGUAGE=GERMAN DEBUG=1 +modern: ; @$(MAKE) GAME_VERSION=RUBY MODERN=1 COMPARE=0 +ruby_modern: ; @$(MAKE) GAME_VERSION=RUBY MODERN=1 COMPARE=0 +ruby_rev1_modern: ; @$(MAKE) GAME_VERSION=RUBY GAME_REVISION=1 MODERN=1 COMPARE=0 +ruby_rev2_modern: ; @$(MAKE) GAME_VERSION=RUBY GAME_REVISION=2 MODERN=1 COMPARE=0 +sapphire_modern: ; @$(MAKE) GAME_VERSION=SAPPHIRE MODERN=1 COMPARE=0 +sapphire_rev1_modern: ; @$(MAKE) GAME_VERSION=SAPPHIRE GAME_REVISION=1 MODERN=1 COMPARE=0 +sapphire_rev2_modern: ; @$(MAKE) GAME_VERSION=SAPPHIRE GAME_REVISION=2 MODERN=1 COMPARE=0 +ruby_de_modern: ; @$(MAKE) GAME_VERSION=RUBY GAME_LANGUAGE=GERMAN MODERN=1 COMPARE=0 +sapphire_de_modern: ; @$(MAKE) GAME_VERSION=SAPPHIRE GAME_LANGUAGE=GERMAN MODERN=1 COMPARE=0 +ruby_de_debug_modern: ; @$(MAKE) GAME_VERSION=RUBY GAME_LANGUAGE=GERMAN DEBUG=1 MODERN=1 COMPARE=0 + #### Graphics Rules #### |