include Makefile.cfg target=fx9860g CONFIG.TARGET = fx CONFIG.TARGET.LONG = fx9860g PREFIX = /usr/lib/gcc/sh3eb-elf/9.1.0/ toolchain = sh3eb-elf CONFIG.MACROS = -DFX9860G machine := -m3 -mb # Compiler flags, assembler flags, dependency generation, archiving cflags := $(machine) -ffreestanding -nostdlib -Wall -Wextra -std=c11 -Os \ -fstrict-volatile-bitfields -I include $(CONFIG.MACROS) \ $(CONFIG.CFLAGS) $(FLAGS) sflags := $(CONFIG.MACROS) dflags = -MMD -MT $@ -MF $(@:.o=.d) -MP arflags := # Target file target := libfxengine.a # Automatic names for object and dependency files src2obj = $(1:src/%=build/%).o src2dep = $(1:src/%=build/%).d # Source files src := $(shell find src \ -name '*.[csS]' -print) src_obj := $(foreach s,$(src),$(call src2obj,$s)) # All object files obj := $(src_obj) $(spe_obj) # # Toolchain # gcc = $(toolchain)-gcc as = $(toolchain)-as ld = $(toolchain)-ld ar = $(toolchain)-ar objcopy = $(toolchain)-objcopy # # Version management # # Version symbol is obtained by using the last commit hash on 7 nibbles version_hash = 0x0$(shell git rev-parse --short HEAD) # # Build rules # all: $(target) $(target): $(obj) $(call cmd_l,ar,$@) $(ar) rcs $(arflags) $@ $^ # Assembler sources build/%.s.o: src/%.s build/%.s.d @ mkdir -p $(dir $@) $(call cmd_b,as,$*.s) $(gcc) -c $< -o $@ $(sflags) build/%.S.o: src/%.S build/%.S.d @ mkdir -p $(dir $@) $(call cmd_b,as,$*.S) $(gcc) -c $< -o $@ $(sflags) # C sources build/%.c.o: src/%.c build/%.c.d @ mkdir -p $(dir $@) $(call cmd_b,gcc,$*.c) $(gcc) -c $< -o $@ $(dflags) $(cflags) # Version symbol. ld generates a .stack section for unknown reasons; I remove # it in the linker script. version.o: ../.git/HEAD @ mkdir -p $(dir $@) @ echo "_FXENGINE_VERSION = $(version_hash);" > $@.txt $(call cmd_b,ld,$@) $(ld) -r -R $@.txt -o $@ # # Installing # m644 := -m 644 # Disable -m on Mac OS ifeq "$(shell uname)" "Darwin" m644 := endif uninstall: rm -f $(PREFIX)/$(target) rm -rf $(PREFIX)/include/fxengine install: @make uninstall install -d $(PREFIX) install $(target) $(m644) $(PREFIX) cp -r include/fxengine $(PREFIX)/include # # Utilities # # Directories: make conveniently leaves a '/' at the end of $(dir ...) %/: @ mkdir -p $@ # Don't try to unlink directories once they're built (that wouldn't work =p) .PRECIOUS: %/ # Dependency information -include $(shell [ -d src ] && find src -name *.d) build/%.d: ; .PRECIOUS: build/%.d .PHONY: all clean distclean # Do not output full commands by default VERBOSE ?=