007/include/Makefile.targets

206 lines
8.4 KiB
XML

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 <bondtypes.h>" > 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})