Advertisement
Kermalis

My makefile

Sep 15th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Make 6.50 KB | None | 0 0
  1. include $(DEVKITARM)/base_tools
  2. include config.mk
  3.  
  4. ifeq ($(OS),Windows_NT)
  5. EXE := .exe
  6. else
  7. EXE :=
  8. endif
  9.  
  10.  
  11. #### Tools ####
  12.  
  13. SHELL     := /bin/bash -o pipefail
  14. AS        := $(PREFIX)as
  15. CC1       := tools/agbcc/bin/agbcc$(EXE)
  16. CPP       := $(PREFIX)cpp
  17. LD        := $(PREFIX)ld
  18. OBJCOPY   := $(PREFIX)objcopy
  19. SHA1SUM   := sha1sum -c
  20. GBAGFX    := tools/gbagfx/gbagfx$(EXE)
  21. RSFONT    := tools/rsfont/rsfont$(EXE)
  22. AIF2PCM   := tools/aif2pcm/aif2pcm$(EXE)
  23. MID2AGB   := tools/mid2agb/mid2agb$(EXE)
  24. PREPROC   := tools/preproc/preproc$(EXE)
  25. SCANINC   := tools/scaninc/scaninc$(EXE)
  26. RAMSCRGEN := tools/ramscrgen/ramscrgen$(EXE)
  27.  
  28. ASFLAGS  := -mcpu=arm7tdmi -I include --defsym $(GAME_VERSION)=1 --defsym REVISION=$(GAME_REVISION) --defsym $(GAME_LANGUAGE)=1 --defsym DEBUG=$(DEBUG)
  29. CC1FLAGS := -mthumb-interwork -Wimplicit -Wparentheses -Wunused -Werror -O2 -fhex-asm
  30. 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)
  31.  
  32. #### Files ####
  33.  
  34. ROM := poke$(BUILD_NAME).gba
  35. MAP := $(ROM:%.gba=%.map)
  36.  
  37. BUILD_DIR := build/$(BUILD_NAME)
  38.  
  39. C_SOURCES    := $(wildcard src/*.c src/*/*.c src/*/*/*.c)
  40. ASM_SOURCES  := $(wildcard src/*.s src/*/*.s asm/*.s data/*.s sound/songs/*.s)
  41.  
  42. C_OBJECTS    := $(addprefix $(BUILD_DIR)/, $(C_SOURCES:%.c=%.o))
  43. ASM_OBJECTS  := $(addprefix $(BUILD_DIR)/, $(ASM_SOURCES:%.s=%.o))
  44. ALL_OBJECTS  := $(C_OBJECTS) $(ASM_OBJECTS)
  45.  
  46. SUBDIRS      := $(sort $(dir $(ALL_OBJECTS)))
  47.  
  48. LIBC   := tools/agbcc/lib/libc.a
  49. LIBGCC := tools/agbcc/lib/libgcc.a
  50.  
  51. LD_SCRIPT := $(BUILD_DIR)/ld_script.ld
  52.  
  53. # Special configurations required for lib files
  54. %src/libs/siirtc.o:       CC1FLAGS := -mthumb-interwork
  55. %src/libs/agb_flash.o:    CC1FLAGS := -O1 -mthumb-interwork
  56. %src/libs/agb_flash_1m.o: CC1FLAGS := -O1 -mthumb-interwork
  57. %src/libs/agb_flash_mx.o: CC1FLAGS := -O1 -mthumb-interwork
  58. %src/libs/m4a_2.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE)
  59. %src/libs/m4a_4.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE)
  60. %src/libs/libisagbprn.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE)
  61. %src/libs/libisagbprn.o: CC1FLAGS := -mthumb-interwork
  62.  
  63.  
  64. #### Main Rules ####
  65.  
  66. ALL_BUILDS := ruby ruby_rev1 ruby_rev2 sapphire sapphire_rev1 sapphire_rev2 ruby_de sapphire_de ruby_de_debug
  67.  
  68. # Available targets
  69. .PHONY: all clean tidy tools $(ALL_BUILDS)
  70.  
  71. infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line))))
  72.  
  73. # Build tools when building the rom
  74. # Disable dependency scanning for clean/tidy/tools
  75. ifeq (,$(filter-out all,$(MAKECMDGOALS)))
  76. $(call infoshell, $(MAKE) tools)
  77. else
  78. NODEP := 1
  79. endif
  80.  
  81. # Disable dependency scanning when NODEP is used for quick building
  82. ifeq ($(NODEP),)
  83.   $(BUILD_DIR)/src/%.o:  C_FILE = $(*D)/$(*F).c
  84.   $(BUILD_DIR)/src/%.o:  C_DEP = $(shell $(SCANINC) -I include $(C_FILE:$(BUILD_DIR)/=))
  85.   $(BUILD_DIR)/asm/%.o:  ASM_DEP = $(shell $(SCANINC) asm/$(*F).s)
  86.   $(BUILD_DIR)/data/%.o: ASM_DEP = $(shell $(SCANINC) data/$(*F).s)
  87. endif
  88.  
  89. MAKEFLAGS += --no-print-directory
  90. # Secondary expansion is required for dependency variables in object rules.
  91. .SECONDEXPANSION:
  92. # Clear the default suffixes
  93. .SUFFIXES:
  94. # Don't delete intermediate files
  95. .SECONDARY:
  96. # Delete files that weren't built properly
  97. .DELETE_ON_ERROR:
  98.  
  99. # Create build subdirectories
  100. $(shell mkdir -p $(SUBDIRS))
  101.  
  102. all: $(ROM)
  103. ifeq ($(COMPARE),1)
  104.     @$(SHA1SUM) $(BUILD_NAME).sha1
  105. endif
  106.  
  107. clean: tidy
  108.     find sound/direct_sound_samples \( -iname '*.bin' \) -exec rm {} +
  109.     $(RM) $(ALL_OBJECTS)
  110.     find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' -o -iname '*.rl' \) -exec rm {} +
  111.     $(MAKE) clean -C tools/gbagfx
  112.     $(MAKE) clean -C tools/scaninc
  113.     $(MAKE) clean -C tools/preproc
  114.     $(MAKE) clean -C tools/bin2c
  115.     $(MAKE) clean -C tools/rsfont
  116.     $(MAKE) clean -C tools/aif2pcm
  117.     $(MAKE) clean -C tools/ramscrgen
  118.     $(MAKE) clean -C tools/mid2agb
  119.  
  120. tools:
  121.     @$(MAKE) -C tools/gbagfx
  122.     @$(MAKE) -C tools/scaninc
  123.     @$(MAKE) -C tools/preproc
  124.     @$(MAKE) -C tools/bin2c
  125.     @$(MAKE) -C tools/rsfont
  126.     @$(MAKE) -C tools/aif2pcm
  127.     @$(MAKE) -C tools/ramscrgen
  128.     @$(MAKE) -C tools/mid2agb
  129.  
  130. tidy:
  131.     $(RM) $(ALL_BUILDS:%=poke%{.gba,.elf,.map})
  132.     $(RM) -r build
  133.  
  134. $(ROM): %.gba: %.elf
  135.     $(OBJCOPY) -O binary --gap-fill 0xFF --pad-to 0x9000000 $< $@
  136.  
  137. %.elf: $(LD_SCRIPT) $(ALL_OBJECTS)
  138.     cd $(BUILD_DIR) && $(LD) -T ld_script.ld -Map ../../$(MAP) ../../$(LIBGCC) ../../$(LIBC) -o ../../$@
  139.  
  140. $(LD_SCRIPT): ld_script.txt $(BUILD_DIR)/sym_common.ld $(BUILD_DIR)/sym_ewram.ld $(BUILD_DIR)/sym_bss.ld
  141.     cd $(BUILD_DIR) && sed -e "s#tools/#../../tools/#g" ../../ld_script.txt >ld_script.ld
  142. $(BUILD_DIR)/sym_%.ld: sym_%.txt
  143.     $(CPP) -P $(CPPFLAGS) $< | sed -e "s#tools/#../../tools/#g" > $@
  144.  
  145. $(C_OBJECTS): $(BUILD_DIR)/%.o: %.c $$(C_DEP)
  146.     $(CPP) $(CPPFLAGS) $< -o $(BUILD_DIR)/$*.i
  147.     $(PREPROC) $(BUILD_DIR)/$*.i charmap.txt | $(CC1) $(CC1FLAGS) -o $(BUILD_DIR)/$*.s
  148.     @printf ".text\n\t.align\t2, 0\n" >> $(BUILD_DIR)/$*.s
  149.     @$(AS) $(ASFLAGS) -W -o $@ $(BUILD_DIR)/$*.s
  150.  
  151. # Only .s files in data need preproc
  152. $(BUILD_DIR)/data/%.o: data/%.s $$(ASM_DEP)
  153.     $(PREPROC) $< charmap.txt | $(CPP) -I include | $(AS) $(ASFLAGS) -o $@
  154.  
  155. $(BUILD_DIR)/%.o: %.s $$(ASM_DEP)
  156.     $(AS) $(ASFLAGS) $< -o $@
  157.  
  158. # "friendly" target names for convenience sake
  159. ruby:          ; @$(MAKE) GAME_VERSION=RUBY
  160. ruby_rev1:     ; @$(MAKE) GAME_VERSION=RUBY GAME_REVISION=1
  161. ruby_rev2:     ; @$(MAKE) GAME_VERSION=RUBY GAME_REVISION=2
  162. sapphire:      ; @$(MAKE) GAME_VERSION=SAPPHIRE
  163. sapphire_rev1: ; @$(MAKE) GAME_VERSION=SAPPHIRE GAME_REVISION=1
  164. sapphire_rev2: ; @$(MAKE) GAME_VERSION=SAPPHIRE GAME_REVISION=2
  165. ruby_de:       ; @$(MAKE) GAME_VERSION=RUBY GAME_LANGUAGE=GERMAN
  166. sapphire_de:   ; @$(MAKE) GAME_VERSION=SAPPHIRE GAME_LANGUAGE=GERMAN
  167. ruby_de_debug: ; @$(MAKE) GAME_VERSION=RUBY GAME_LANGUAGE=GERMAN DEBUG=1
  168.  
  169.  
  170. #### Graphics Rules ####
  171.  
  172. GFX_OPTS :=
  173.  
  174. include castform.mk
  175. include tilesets.mk
  176. include fonts.mk
  177. include misc.mk
  178. include spritesheet_rules.mk
  179. include override.mk
  180.  
  181. %.1bpp:   %.png ; $(GBAGFX) $< $@ $(GFX_OPTS)
  182. %.4bpp:   %.png ; $(GBAGFX) $< $@ $(GFX_OPTS)
  183. %.8bpp:   %.png ; $(GBAGFX) $< $@ $(GFX_OPTS)
  184. %.gbapal: %.pal ; $(GBAGFX) $< $@ $(GFX_OPTS)
  185. %.gbapal: %.png ; $(GBAGFX) $< $@ $(GFX_OPTS)
  186. %.lz:     %     ; $(GBAGFX) $< $@ $(GFX_OPTS)
  187. %.rl:     %     ; $(GBAGFX) $< $@ $(GFX_OPTS)
  188.  
  189. #### Sound Rules ####
  190.  
  191. include songs.mk
  192.  
  193. sound/direct_sound_samples/cries/cry_%.bin: sound/direct_sound_samples/cries/cry_%.aif
  194.     $(AIF2PCM) $< $@ --compress
  195.  
  196. sound/%.bin: sound/%.aif
  197.     $(AIF2PCM) $< $@
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement