#! /usr/bin/make -f # Default Makefile for fxSDK add-ins. This file was probably copied there by # the [fxsdk] program. #--- # # Configuration # include project.cfg # Compiler flags CFLAGSFX = $(CFLAGS) $(CFLAGS_FX) $(INCLUDE_FX) CFLAGSCG = $(CFLAGS) $(CFLAGS_CG) $(INCLUDE_CG) # Linker flags LDFLAGSFX := $(LDFLAGS) $(LDFLAGS_FX) LDFLAGSCG := $(LDFLAGS) $(LDFLAGS_CG) # Dependency list generation flags depflags = -MMD -MT $@ -MF $(@:.o=.d) -MP # ELF to binary flags BINFLAGS := -R .bss -R .gint_bss # G1A and G3A generation flags NAME_G1A ?= $(NAME) NAME_G3A ?= $(NAME) G1AF := -i "$(ICON_FX)" -n "$(NAME_G1A)" --internal="$(INTERNAL)" G3AF := -n basic:"$(NAME_G3A)" -i uns:"$(ICON_CG_UNS)" -i sel:"$(ICON_CG_SEL)" ifeq "$(TOOLCHAIN_FX)" "" TOOLCHAIN_FX := sh3eb-elf endif ifeq "$(TOOLCHAIN_CG)" "" TOOLCHAIN_CG := sh4eb-elf endif # fxconv flags FXCONVFX := --fx --toolchain=$(TOOLCHAIN_FX) FXCONVCG := --cg --toolchain=$(TOOLCHAIN_CG) # Determine the compiler install and include path g++_BASE_FX := $(shell $(TOOLCHAIN_FX)-g++ --print-search-dirs | grep install | sed 's/install: //') g++_BASE_CG := $(shell $(TOOLCHAIN_CG)-g++ --print-search-dirs | grep install | sed 's/install: //') g++_INCLUDE_FX := $(g++_BASE_FX)/include g++_INCLUDE_CG := $(g++_BASE_CG)/include # # File listings # NULL := TARGET := $(subst $(NULL) $(NULL),-,$(NAME)) ifeq "$(TARGET_FX)" "" TARGET_FX := $(TARGET).g1a endif ifeq "$(TARGET_CG)" "" TARGET_CG := $(TARGET).g3a endif ELF_FX := build-fx/$(shell basename "$(TARGET_FX)" .g1a).elf BIN_FX := $(ELF_FX:.elf=.bin) ELF_CG := build-cg/$(shell basename "$(TARGET_CG)" .g3a).elf BIN_CG := $(ELF_CG:.elf=.bin) # Source files src := $(wildcard src/*.[csS] \ src/*/*.[csS] \ src/*/*/*.[csS] \ src/*/*/*/*.[csS]) assets-fx := $(wildcard assets-fx/*/*) assets-cg := $(wildcard assets-cg/*/*) # Object files obj-fx := $(src:%=build-fx/%.o) \ $(assets-fx:assets-fx/%=build-fx/assets/%.o) obj-cg := $(src:%=build-cg/%.o) \ $(assets-cg:assets-cg/%=build-cg/assets/%.o) # Additional dependencies deps-fx := $(ICON_FX) deps-cg := $(ICON_CG_UNS) $(ICON_CG_SEL) # All targets all := ifneq "$(wildcard build-fx)" "" all += all-fx endif ifneq "$(wildcard build-cg)" "" all += all-cg endif # # Build rules # all: $(all) all-fx: $(TARGET_FX) all-cg: $(TARGET_CG) $(TARGET_FX): $(obj-fx) $(deps-fx) @ mkdir -p $(dir $@) $(TOOLCHAIN_FX)-g++ -o $(ELF_FX) $(obj-fx) $(CFLAGSFX) $(LDFLAGSFX) $(TOOLCHAIN_FX)-objcopy -O binary $(BINFLAGS) $(ELF_FX) $(BIN_FX) fxg1a $(BIN_FX) -o $@ $(G1AF) $(TARGET_CG): $(obj-cg) $(deps-cg) @ mkdir -p $(dir $@) $(TOOLCHAIN_CG)-g++ -o $(ELF_CG) $(obj-cg) $(CFLAGSCG) $(LDFLAGSCG) $(TOOLCHAIN_CG)-objcopy -O binary $(BINFLAGS) $(ELF_CG) $(BIN_CG) mkg3a $(G3AF) $(BIN_CG) $@ # C sources build-fx/%.c.o: %.c @ mkdir -p $(dir $@) $(TOOLCHAIN_FX)-g++ -c $< -o $@ $(CFLAGSFX) $(depflags) build-cg/%.c.o: %.c @ mkdir -p $(dir $@) $(TOOLCHAIN_CG)-g++ -c $< -o $@ $(CFLAGSCG) $(depflags) # Assembler sources build-fx/%.s.o: %.s @ mkdir -p $(dir $@) $(TOOLCHAIN_FX)-g++ -c $< -o $@ build-cg/%.s.o: %.s @ mkdir -p $(dir $@) $(TOOLCHAIN_CG)-g++ -c $< -o $@ # Preprocessed assembler sources build-fx/%.S.o: %.S @ mkdir -p $(dir $@) $(TOOLCHAIN_FX)-g++ -c $< -o $@ $(INCLUDE_FX) build-cg/%.S.o: %.S @ mkdir -p $(dir $@) $(TOOLCHAIN_CG)-g++ -c $< -o $@ $(INCLUDE_CG) # Images build-fx/assets/img/%.o: assets-fx/img/% @ mkdir -p $(dir $@) fxconv --bopti-image $< -o $@ $(FXCONVFX) name:img_$(basename $*) $(IMG.$*) build-cg/assets/img/%.o: assets-cg/img/% @ mkdir -p $(dir $@) fxconv --bopti-image $< -o $@ $(FXCONVCG) name:img_$(basename $*) $(IMG.$*) # Fonts build-fx/assets/fonts/%.o: assets-fx/fonts/% @ mkdir -p $(dir $@) fxconv -f $< -o $@ $(FXCONVFX) name:font_$(basename $*) $(FONT.$*) build-cg/assets/fonts/%.o: assets-cg/fonts/% @ mkdir -p $(dir $@) fxconv -f $< -o $@ $(FXCONVCG) name:font_$(basename $*) $(FONT.$*) # Binaries build-fx/assets/bin/%.o: assets-fx/bin/% @ mkdir -p $(dir $@) fxconv -b $< -o $@ $(FXCONVFX) name:bin_$(basename $*) $(BIN.$*) build-cg/assets/bin/%.o: assets-cg/bin/% @ mkdir -p $(dir $@) fxconv -b $< -o $@ $(FXCONVCG) name:bin_$(basename $*) $(BIN.$*) # Custom conversions build-fx/assets/%.o: assets-fx/% @ mkdir -p $(dir $@) fxconv --custom $< -o $@ $(FXCONVFX) type:$(subst /,,$(dir $*)) name:$(subst /,_,$(basename $*)) build-cg/assets/%.o: assets-cg/% @ mkdir -p $(dir $@) fxconv --custom $< -o $@ $(FXCONVCG) type:$(subst /,,$(dir $*)) name:$(subst /,_,$(basename $*)) # # Cleaning and utilities # # Dependency information -include $(shell find build* -name *.d 2> /dev/null) build-fx/%.d: ; build-cg/%.d: ; .PRECIOUS: build-fx build-cg build-fx/%.d build-cg/%.d %/ clean-fx: @ rm -rf build-fx/ clean-cg: @ rm -rf build-cg/ distclean-fx: clean-fx @ rm -f $(TARGET_FX) distclean-cg: clean-cg @ rm -f $(TARGET_CG) clean: clean-fx clean-cg distclean: distclean-fx distclean-cg install-fx: $(TARGET_FX) p7 send -f $< install-cg: $(TARGET_CG) @ while [[ ! -h /dev/Prizm1 ]]; do sleep 0.25; done @ while ! mount /dev/Prizm1; do sleep 0.25; done @ rm -f /mnt/prizm/$< @ cp $< /mnt/prizm @ umount /dev/Prizm1 @- eject /dev/Prizm1 .PHONY: all all-fx all-cg clean distclean install-fx install-cg