diff options
Diffstat (limited to 'Makefile')
-rw-r--r-- | Makefile | 76 |
1 files changed, 64 insertions, 12 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) @@ -10,8 +18,11 @@ 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 @@ -27,9 +38,19 @@ GBAFIX := tools/gbafix/gbafix$(EXE) MAPJSON := tools/mapjson/mapjson$(EXE) JSONPROC := tools/jsonproc/jsonproc$(EXE) -ASFLAGS := -mcpu=arm7tdmi -I include --defsym $(GAME_VERSION)=1 --defsym REVISION=$(GAME_REVISION) --defsym DEBUG_TRANSLATE=$(DEBUG_TRANSLATE) --defsym $(GAME_LANGUAGE)=1 --defsym DEBUG=$(DEBUG) +ASFLAGS := -mcpu=arm7tdmi -I include --defsym $(GAME_VERSION)=1 --defsym REVISION=$(GAME_REVISION) --defsym DEBUG_TRANSLATE=$(DEBUG_TRANSLATE) --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) -DDEBUG_TRANSLATE=$(DEBUG_TRANSLATE) -D DEBUG=$(DEBUG) -D MODERN=$(MODERN) +ifeq ($(MODERN),0) +CPPFLAGS += -I tools/agbcc/include -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) -DDEBUG_TRANSLATE=$(DEBUG_TRANSLATE) -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 + ifneq (,$(NONMATCHING)) CPPFLAGS += -DNONMATCHING ASFLAGS += --defsym NONMATCHING=1 @@ -48,17 +69,30 @@ ASM_SOURCES := $(wildcard src/*.s src/*/*.s asm/*.s data/*.s sound/*.s sound/*/ C_OBJECTS := $(addprefix $(BUILD_DIR)/, $(C_SOURCES:%.c=%.o)) ASM_OBJECTS := $(addprefix $(BUILD_DIR)/, $(ASM_SOURCES:%.s=%.o)) ALL_OBJECTS := $(C_OBJECTS) $(ASM_OBJECTS) +OBJS_REL := $(ALL_OBJECTS:$(BUILD_DIR)/%=%) SUBDIRS := $(sort $(dir $(ALL_OBJECTS))) DATA_SRC_SUBDIR = src/data -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 +ifeq ($(MODERN),0) LD_SCRIPT := $(BUILD_DIR)/ld_script.ld +else +LD_SCRIPT := $(BUILD_DIR)/ld_script_modern.ld +endif # 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 @@ -66,14 +100,17 @@ 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 ALL_BUILDS := ruby ruby_rev1 ruby_rev2 sapphire sapphire_rev1 sapphire_rev2 ruby_de sapphire_de ruby_de_debug ruby_en_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)))) @@ -115,7 +152,7 @@ endif compare: ; @$(MAKE) COMPARE=1 -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 {} + @@ -123,6 +160,8 @@ clean: tidy 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 {} + rm -f $(AUTO_GEN_TARGETS) + +clean: mostlyclean $(MAKE) clean -C tools/gbagfx $(MAKE) clean -C tools/scaninc $(MAKE) clean -C tools/preproc @@ -149,17 +188,18 @@ 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) + cd $(BUILD_DIR) && $(LD) -T $(LD_SCRIPT:$(BUILD_DIR)/%=%) -Map ../../$(MAP) -o ../../$@ $(OBJS_REL) $(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 +$(LD_SCRIPT): $(LD_SCRIPT:$(BUILD_DIR)/%.ld=%.txt) $(BUILD_DIR)/sym_common.ld $(BUILD_DIR)/sym_ewram.ld $(BUILD_DIR)/sym_bss.ld + sed -e "s#tools/#../../tools/#g" $< >$@ $(BUILD_DIR)/sym_%.ld: sym_%.txt $(CPP) -P $(CPPFLAGS) $< | sed -e "s#tools/#../../tools/#g" > $@ @@ -186,6 +226,18 @@ sapphire_rev2: ; @$(MAKE) GAME_VERSION=SAPPHIRE GAME_REVISION=2 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 +ruby_modern: ; @$(MAKE) GAME_VERSION=RUBY MODERN=1 +ruby_rev1_modern: ; @$(MAKE) GAME_VERSION=RUBY GAME_REVISION=1 MODERN=1 +ruby_rev2_modern: ; @$(MAKE) GAME_VERSION=RUBY GAME_REVISION=2 MODERN=1 +sapphire_modern: ; @$(MAKE) GAME_VERSION=SAPPHIRE MODERN=1 +sapphire_rev1_modern: ; @$(MAKE) GAME_VERSION=SAPPHIRE GAME_REVISION=1 MODERN=1 +sapphire_rev2_modern: ; @$(MAKE) GAME_VERSION=SAPPHIRE GAME_REVISION=2 MODERN=1 +ruby_de_modern: ; @$(MAKE) GAME_VERSION=RUBY GAME_LANGUAGE=GERMAN MODERN=1 +sapphire_de_modern: ; @$(MAKE) GAME_VERSION=SAPPHIRE GAME_LANGUAGE=GERMAN MODERN=1 +ruby_de_debug_modern: ; @$(MAKE) GAME_VERSION=RUBY GAME_LANGUAGE=GERMAN DEBUG=1 MODERN=1 + ruby_en_debug: ; @$(MAKE) GAME_VERSION=RUBY DEBUG=1 DEBUG_TRANSLATE=1 compare_ruby: ; @$(MAKE) GAME_VERSION=RUBY COMPARE=1 |