all: $(APPROM) @if [ -f ge007.$(OUTCODE).sha1 ]; then \ $(SHA1SUM) -c ge007.$(OUTCODE).sha1 && echo "\n MATCH!\n\n" || (echo "\n ERROR!\n\n\n NOT MATCH!\n\n" && exit 1); \ fi @echo "\nRom File Generated in Build Directory. \n\n" .SECONDARY: $(APPELF) $(APPROM) $(APPBIN) $(ULTRAOBJECTS) $(BUILD_DIR)/ge007.$(OUTCODE).map \ $(HEADEROBJECTS) $(BOOTOBJECTS) $(CODEOBJECTS) $(GAMEOBJECTS) $(RZOBJECTS) \ $(OBSEG_OBJECTS) $(OBSEG_RZ) $(ROMOBJECTS) $(RAMROM_OBJECTS) $(FONTOBJECTS) $(MUSIC_OBJECTS) $(IMAGE_OBJS) $(MUSIC_RZ_FILES) ifeq ($(filter clean nuke dataclean help codeclean context cmdbuilder test stanclean setupclean,$(MAKECMDGOALS)),) # Dont print version on "default" since it will be spat out twice ifneq ($(filter $(VERSION),$(ALLOWED_VERSIONS)),) #$(info VERSION=$(VERSION)) else $(error VERSION "$(VERSION)" not supported") endif # Make tools if out of date $(info Building tools...) DUMMY != make -s -C tools >&2 || echo FAIL ifeq ($(DUMMY),FAIL) $(error Failed to build tools) endif $(info Building $(VERSION) ROM...) endif # Build RSP $(BUILD_DIR)/rsp/%.bin: rsp/*.s $(ARMIPS) -sym $@.sym -strequ CODE_FILE $(BUILD_DIR)/rsp/$*.bin -strequ DATA_FILE $(BUILD_DIR)/rsp/$*_data.bin $< $(BUILD_DIR)/src/rspboot.o: $(BUILD_DIR)/rsp/rspboot.bin #Build asm files in root $(BUILD_DIR)/%.o: src/%.s $(AS) $(ASFLAGS) -o $@ $< #Build asm files in src/ $(BUILD_DIR)/src/%.o: src/%.s $(AS) $(ASFLAGS) -o $@ $< #Build Images $(BUILD_DIR)/assets/images/split/%.o: assets/images/split/%.bin $(LD) -r -b binary $< -o $@ #Compress Obseg $(BUILD_DIR)/$(OBSEGMENT): $(OBSEG_RZ) $(IMAGE_OBJS) #Build C files in src/ $(BUILD_DIR)/src/%.o: src/%.c @if grep -q 'GLOBAL_ASM(' $<; then \ $(ASM_PREPROC) $(OPTIMIZATION) $< | $(CC) -c $(CFLAGS) tools/asm-processor/include-stdin.c -o $@ $(OPTIMIZATION); \ $(ASM_PREPROC) $(OPTIMIZATION) $< --post-process $@ --assembler "$(AS) $(ASFLAGS)" --asm-prelude tools/asm-processor/prelude.s; \ else \ $(CC) -c $(CFLAGS) -o $@ $(OPTIMIZATION) $<; \ fi #Build RamRom $(BUILD_DIR)/assets/ramrom/%.o: assets/ramrom/%.s $(AS) $(ASFLAGS) -o $@ $< #Build fonts $(BUILD_DIR)/assets/font/%.o: assets/font/%.c $(CC) -c $(CFLAGS) -o $@ $(OPTIMIZATION) $< #Build asm files in assets/ $(BUILD_DIR)/assets/%.o: assets/%.s $(AS) $(ASFLAGS) -o $@ $< #Build Obseg $(BUILD_DIR)/assets/obseg/%.o: assets/obseg/%.s $(OBSEG_RZ) $(AS) $(ASFLAGS) -o $@ $< #Build C files in assets/ $(BUILD_DIR)/assets/%.o: assets/%.c $(CC) -c $(CFLAGS) -o $@ $(OPTIMIZATION) $< #$(BUILD_DIR)/src/random.o: OPTIMIZATION := -O3 #$(BUILD_DIR)/src/random.o: INCLUDE := -I . -I include -I include/PR #$(BUILD_DIR)/src/random.o: MIPSISET := -mips3 -o32 #$(BUILD_DIR)/src/random.o: src/random.c # $(CC) -c -Wab,-r4300_mul -non_shared -G 0 -Xcpluscomm $(CFLAGWARNING) -woff 819,820,852,821,838,649 -signed $(INCLUDE) $(MIPSISET) $(LCDEFS) -DTARGET_N64 $(OPTIMIZATION) -o $@ $< #Link Files $(APPELF): $(RSPOBJECTS) $(ULTRAOBJECTS) $(HEADEROBJECTS) $(OBSEG_RZ) $(BUILD_DIR)/$(OBSEGMENT) $(MUSIC_RZ_FILES) $(BOOTOBJECTS) $(CODEOBJECTS) $(GAMEOBJECTS) $(RZOBJECTS) $(ROMOBJECTS) $(ASSET_DATAOBJECTS) $(ROMOBJECTS2) $(RAMROM_OBJECTS) $(FONTOBJECTS) $(MUSIC_OBJECTS) $(OBSEG_OBJECTS) ge007.ld cpp $(LDFILEOPTS) -P ge007.ld -o build/ge007.$(OUTCODE).ld @echo "Linking Files into ELF" $(LD) $(LDFLAGS) -o $@ $(APPBIN): $(APPELF) @echo "Building ROM" $(OBJCOPY) $< $@ -O binary --gap-fill=0xff $(APPROM): $(APPBIN) @echo "Compressing ROM" $(DATASEG_COMP) $< $(OUTCODE) @echo "Finalizing ROM" $(N64CKSUM) $< $@ .PRECIOUS: %.bin %.o ## Phony Recipies - Get Make to do something ## .PHONY: all default codeclean dataclean clean cmdbuilder test help setupclean: rm -f $(APPELF) $(APPROM) $(APPBIN) $(BUILD_DIR)/ge007.$(OUTCODE).map \ $(SETUP_BUILD_FILES) stanclean: rm -f $(APPELF) $(APPROM) $(APPBIN) $(BUILD_DIR)/ge007.$(OUTCODE).map \ $(STAN_BUILD_FILES) libultraclean: rm -f $(APPELF) $(APPROM) $(APPBIN) $(BUILD_DIR)/ge007.$(OUTCODE).map \ $(ULTRAOBJECTS) codeclean: rm -f $(APPELF) $(APPROM) $(APPBIN) $(ULTRAOBJECTS) $(BUILD_DIR)/ge007.$(OUTCODE).map \ $(HEADEROBJECTS) $(BOOTOBJECTS) $(CODEOBJECTS) $(GAMEOBJECTS) $(RZOBJECTS) $(RSPOBJECTS) dataclean: rm -f $(APPELF) $(APPROM) $(APPBIN) $(ULTRAOBJECTS) $(BUILD_DIR)/ge007.$(OUTCODE).map \ $(OBSEG_OBJECTS) $(OBSEG_RZ) $(ROMOBJECTS) $(RAMROM_OBJECTS) $(FONTOBJECTS) $(MUSIC_OBJECTS) $(IMAGE_OBJS) $(MUSIC_RZ_FILES) \ $(STAN_BUILD_FILES) $(SETUP_BUILD_FILES) clean:: # if this command is modified, make sure to update this in the `nuke` recipe. rm -f $(APPELF) $(APPROM) $(APPBIN) $(ULTRAOBJECTS) $(BUILD_DIR)/ge007.$(OUTCODE).map \ $(HEADEROBJECTS) $(BOOTOBJECTS) $(CODEOBJECTS) $(GAMEOBJECTS) $(RZOBJECTS) \ $(OBSEG_OBJECTS) $(OBSEG_RZ) $(ROMOBJECTS) $(RAMROM_OBJECTS) $(FONTOBJECTS) $(MUSIC_OBJECTS) $(IMAGE_OBJS) $(MUSIC_RZ_FILES) $(RSPOBJECTS) \ $(STAN_BUILD_FILES) $(SETUP_BUILD_FILES) nuke: @echo deleting files specified from make clean ... @# if this command is modified, update the `clean` recipe above. rm -f $(APPELF) $(APPROM) $(APPBIN) $(ULTRAOBJECTS) $(BUILD_DIR)/ge007.$(OUTCODE).map \ $(HEADEROBJECTS) $(BOOTOBJECTS) $(CODEOBJECTS) $(GAMEOBJECTS) $(RZOBJECTS) \ $(OBSEG_OBJECTS) $(OBSEG_RZ) $(ROMOBJECTS) $(RAMROM_OBJECTS) $(FONTOBJECTS) $(MUSIC_OBJECTS) $(IMAGE_OBJS) $(MUSIC_RZ_FILES) $(RSPOBJECTS) \ $(STAN_BUILD_FILES) $(SETUP_BUILD_FILES) @echo @echo make: deleting build folders and files $(foreach x,$(ALLOWED_COUNTRYCODE),rm -r -f -d "$(BUILD_DIR_BASE)/$(x)/"${\n}) @echo @echo make: deleting bin / rsp / asp rm -r -f -d "bin/" @echo @echo make: deleting assets rm -r -f -d "assets/images/split/" rm -r -f "assets/music/*.bin" "assets/obseg/bg/*.bin" "assets/obseg/brief/*.bin" "assets/obseg/chr/*.bin" "assets/obseg/gun/*.bin" "assets/obseg/prop/*.bin" "assets/obseg/setup/*.bin" "assets/obseg/setup/e/*.bin" "assets/obseg/setup/u/*.bin" "assets/obseg/setup/j/*.bin" "assets/obseg/stan/*.bin" "assets/obseg/text/*.bin" "assets/obseg/text/e/*.bin" "assets/obseg/text/u/*.bin" "assets/obseg/text/j/*.bin" "assets/ramrom/*.bin" "assets/ramrom/e/*.bin" "assets/ramrom/u/*.bin" "assets/ramrom/j/*.bin" help: @echo "mmakefile help" @echo "" @echo " supported targets:" @echo "" @echo " all Build all (default)" @echo " clean Delete all known build artifacts" @echo " nuke Delete all files explicitly listed in Makefile (same as make clean)," @echo " all build output for all versions, any .bin file in assets folders," @echo " and asp/rsp bin." @echo " dataclean Delete only asset build artifacts" @echo " codeclean Delete only code (asm, .c) build artifacts" @echo " libultraclean Delete only code (asm, .c) build artifacts " @echo " from Rare's libultra files" @echo " stanclean Delete only stan build artifacts" @echo " setupclean Delete only setup build artifacts" @echo " cmdbuilder BuildAI Commands" @echo " context [file] BuildContext File from [file]" @echo " eg make context src/game/chrai.c" @echo " test Re-Run Data Verification " @echo "" @echo "" @echo " options:" @echo "" @echo " VERSION=v Region version. (US is default)" @echo " Supported values: ${ALLOWED_VERSIONS}\n" test: @$(SHA1SUM) --quiet -c checksums.txt ifneq ($(filter-out context,$(MAKECMDGOALS)),) CONTEXTFILE := $(filter-out context ,$(MAKECMDGOALS)) else CONTEXTFILE := build/ctx.c endif context: @clear @echo Building Context File [ctx.h] from $(CONTEXTFILE) @echo "#define TRUE 1" > build/ctx.h @echo "#define FALSE 0" >> build/ctx.h ifeq ($(CONTEXTFILE),build/ctx.c) @echo "#include " > build/ctx.c endif @sed -n -E ':x /\\$$/ { N; s/\\\n//g ; bx };''/(^\s*#define)|(\\$$)/p; /(\\$$)/p;' src/bondconstants.h src/bondtypes.h $(CONTEXTFILE) >> build/ctx.h @$(CC) -c $(CFLAGS) $(CONTEXTFILE) -E > build/ctx2.h 2> /dev/null || (rm build/ctx2.h && exit 1) @sed -E '/^\s*$$/d' build/ctx2.h >> build/ctx.h @rm build/ctx.c build/ctx2.h || exit 0 @echo You can find it in Build [build/ctx.h]. textures: $(foreach x,$(IMAGE_BINS),tools/mktex/build/tex2png $(x) assets/images/out ${\n})