gintctl/Makefile

108 lines
2.6 KiB
Makefile
Executable File

#! /usr/bin/make -f
# Makefile for the gint control add-in
#---
#
# Configuration
#
# Compiler flags
cf := -mb -ffreestanding -nostdlib -Wall -Wextra -std=c11 -Os \
-fstrict-volatile-bitfields -I include
cf-fx := $(cf) -m3 -DFX9860G
cf-cg := $(cf) -m4-nofpu -DFXCG50
# Linker flags
lf-fx := -Tfx9860g.ld -lprof -lgint-fx -lgcc -Wl,-Map=build.fx/map
lf-cg := -Tfxcg50.ld -lprof -lgint-cg -lgcc -Wl,-Map=build.cg/map -L. -lfxcg
dflags = -MMD -MT $@ -MF $(@:.o=.d) -MP
cpflags := -R .bss -R .gint_bss
g1af := -i icon-fx.png -n gintctl --internal=@GINTCTL
g3af := -n basic:" " -i uns:icon-cg-uns.png -i sel:icon-cg-sel.png
#
# File listings
#
elf = $(dir $<)gintctl.elf
bin = $(dir $<)gintctl.bin
target-fx := gintctl.g1a
target-cg := gintctl.g3a
# Source and object files
src := $(shell find src -name '*.c')
res := $(wildcard resources/*.png)
obj-fx := $(src:%.c=build.fx/%.o) $(res:resources/%=build.fx/%.o)
obj-cg := $(src:%.c=build.cg/%.o) $(res:resources/%=build.cg/%.o)
# Additional dependencies
deps-fx := icon-fx.png
deps-cg := icon-cg-uns.png icon-cg-sel.png
#
# Build rules
#
all: all-fx all-cg
all-fx: $(target-fx)
all-cg: $(target-cg)
$(target-fx): $(obj-fx) $(deps-fx)
sh3eb-elf-gcc -o $(elf) $(obj-fx) $(cf-fx) $(lf-fx)
sh3eb-elf-objcopy -O binary $(cpflags) $(elf) $(bin)
fxg1a $(bin) -o $@ $(g1af)
$(target-cg): $(obj-cg) $(deps-cg)
sh4eb-elf-gcc -o $(elf) $(obj-cg) $(cf-cg) $(lf-cg)
sh4eb-elf-objcopy -O binary $(cpflags) $(elf) $(bin)
mkg3a $(g3af) $(bin) $@
# C sources
build.fx/%.o: %.c
@ mkdir -p $(dir $@)
sh3eb-elf-gcc -c $< -o $@ $(cf-fx) $(dflags)
build.cg/%.o: %.c
@ mkdir -p $(dir $@)
sh4eb-elf-gcc -c $< -o $@ $(cf-cg) $(dflags)
# Images
build.fx/%.png.o: resources/%.png
@ mkdir -p $(dir $@)
fxconv -i $< -o $@ name:$*
build.cg/%.png.o: resources/%.png
@ echo -e "\e[31;1mWARNING: conversion for fxcg50 not supported yet\e[0m"
@ mkdir -p $(dir $@)
fxconv -i $< -o $@ name:$*
#
# 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:
@ rm -rf build*
distclean: clean
@ rm -f $(target-fx) $(target-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