BUILDROOT ?= .
ifndef CONFIG
ifdef TEST
CONFIG=Debug
else
CONFIG=Release
endif
endif
ifndef PLATFORM
PLATFORM=OWL2
endif
DEPS = .FORCE
TARGET ?= patch
ifdef FAUST
PATCHNAME ?= $(FAUST)
PATCHCLASS ?= FaustPatch
PATCHFILE ?= FaustPatch.hpp
DEPS += faust
else ifdef HEAVY
PATCHNAME ?= $(HEAVY)
PATCHCLASS ?= HeavyPatch
PATCHFILE ?= HeavyPatch.hpp
DEPS += heavy
else ifdef GEN
PATCHNAME ?= $(GEN)
PATCHCLASS ?= GenPatch
PATCHFILE ?= GenPatch.hpp
DEPS += gen
else ifdef MAXIMILIAN
PATCHNAME ?= $(MAXIMILIAN)
PATCHCLASS ?= MaximilianPatch
PATCHFILE ?= MaximilianPatch.hpp
DEPS += maximilian
else ifdef SOUL
PATCHNAME ?= $(SOUL)
PATCHCLASS ?= SoulPatch
PATCHFILE ?= SoulPatch.hpp
SOULCLASS ?= $(SOUL)
ifneq ("$(wildcard $(PATCHSOURCE)/$(SOUL).soulpatch)","")
SOULFILE ?= $(SOUL).soulpatch
else
SOULFILE ?= $(SOUL).soul
endif
SOULHPP ?= $(SOUL).hpp
DEPS += soul
else ifdef TEST
PATCHNAME = $(TEST)
PATCHCLASS = $(PATCHNAME)Patch
PATCHFILE = $(PATCHNAME)Patch.hpp
else
PATCHNAME ?= "Template"
PATCHCLASS ?= $(PATCHNAME)Patch
PATCHFILE ?= $(PATCHNAME)Patch.hpp
endif
PATCHIN ?= 2
PATCHOUT ?= 2
SLOT ?= 0
OWLDEVICE ?= OWL-*
BUILD ?= $(BUILDROOT)/Build
PATCHSOURCE ?= $(BUILDROOT)/PatchSource
FIRMWARESENDER ?= Tools/FirmwareSender
TEST_FILES = $(notdir $(wildcard $(BUILDROOT)/TestPatches/*TestPatch.hpp))
TESTS = $(filter-out ShortFastFourierTest, $(TEST_FILES:%Patch.hpp=%))
export BUILD BUILDROOT TARGET
export PATCHNAME PATCHCLASS PATCHSOURCE
export PATCHFILE PATCHIN PATCHOUT
export HEAVYTOKEN HEAVYSERVICETOKEN HEAVY
export SOUL SOULCLASS SOULFILE SOULHPP
export CONFIG PLATFORM
DEPS += $(BUILD)/registerpatch.cpp $(BUILD)/registerpatch.h $(BUILD)/Source/startup.s
all: libs patch web
.PHONY: .FORCE patch libs faust gen heavy soul maximilian web minify map as native test run check tables resource size clean realclean sysex load store docs help
.FORCE:
@mkdir -p $(BUILD)/Source
@mkdir -p $(BUILD)/web
@mkdir -p $(BUILD)/Test
$(BUILD)/registerpatch.cpp: .FORCE
@echo "REGISTER_PATCH($(PATCHCLASS), \"$(PATCHNAME)\", $(PATCHIN), $(PATCHOUT));" > $@
$(BUILD)/registerpatch.h: .FORCE
@echo Building patch $(PATCHNAME)
@echo "#include \"$(PATCHFILE)\"" > $@
$(BUILD)/Source/startup.s: .FORCE
@echo '.string "'$(PATCHNAME)'"' > $(BUILD)/Source/progname.s
$(BUILD)/%.syx: $(BUILD)/%.bin
@$(FIRMWARESENDER) -q -in $< -save $@
patch: $(DEPS)
@$(MAKE) -s -f compile.mk compile
libs: .FORCE
@$(MAKE) -s -f compile.mk libs
@$(MAKE) -s -f web.mk libs
web: $(DEPS)
@$(MAKE) -s -f web.mk web
@echo Built javascript $(PATCHNAME) in $(BUILD)/web/$(TARGET).js
minify: $(DEPS)
@$(MAKE) -s -f web.mk minify
faust: .FORCE
@$(MAKE) -s -f faust.mk faust
heavy: .FORCE
@$(MAKE) -s -f heavy.mk heavy
gen: .FORCE
@$(MAKE) -s -f gen.mk gen
maximilian: .FORCE
@$(MAKE) -s -f maximilian.mk maximilian
soul: .FORCE
@$(MAKE) -s -f soul.mk soul
sysex: patch $(BUILD)/$(TARGET).syx
@echo Built sysex $(PATCHNAME) in $(BUILD)/$(TARGET).syx
load: patch
@echo Sending patch $(PATCHNAME) to $(OWLDEVICE) to load
@$(FIRMWARESENDER) -q -in $(BUILD)/$(TARGET).bin -out "$(OWLDEVICE)" -run
store: patch
@echo Sending patch $(PATCHNAME) to $(OWLDEVICE) to store in slot $(SLOT)
@$(FIRMWARESENDER) -q -in $(BUILD)/$(TARGET).bin -out "$(OWLDEVICE)" -store $(SLOT)
resource: $(RESOURCE)
@echo Sending resource $(RESOURCE) to $(OWLDEVICE) to store in slot $(SLOT)
@$(FIRMWARESENDER) -q -in $(RESOURCE) -out "$(OWLDEVICE)" -store $(SLOT)
docs:
@doxygen Doxyfile
tables:
@$(MAKE) -s -f tables.mk tables
clean:
@rm -rf $(BUILD)/*
realclean: clean
@find Libraries/ -name '*.[a|o]' -delete
size: patch
@$(MAKE) -s -f compile.mk size
map: patch
@$(MAKE) -s -f compile.mk map
@echo Built $(PATCHNAME) map in $(BUILD)/$(TARGET).map
as: patch
@$(MAKE) -s -f compile.mk as
@echo Built $(PATCHNAME) assembly in $(BUILD)/$(TARGET).s
native: $(DEPS)
@$(MAKE) -s -f native.mk native
test: $(DEPS)
@$(MAKE) -s -f native.mk test
run: $(DEPS)
@$(MAKE) -s -f native.mk run
grind: $(DEPS)
@$(MAKE) -s -f native.mk grind
tests:
@for nm in $(TESTS) ; do \
$(MAKE) -s TEST=$$nm test || exit;\
done
check: tests
@unset PATCHNAME PATCHCLASS PATCHFILE && $(MAKE) PATCHSOURCE=TestPatches/CppTest PATCHNAME=CppTest clean patch web run
@unset PATCHNAME PATCHCLASS PATCHFILE && $(MAKE) PATCHSOURCE=TestPatches/DaisySPTest PATCHNAME=DaisySPTest clean patch web run
@unset PATCHNAME PATCHCLASS PATCHFILE && $(MAKE) PATCHSOURCE=TestPatches/GenTest GEN=MIDItestMinMax clean patch web run
@cp FaustSource/*.h TestPatches/FaustTest && unset PATCHNAME PATCHCLASS PATCHFILE && $(MAKE) PATCHSOURCE=TestPatches/FaustTest PATCHNAME=Faust clean patch web run
@unset PATCHNAME PATCHCLASS PATCHFILE && $(MAKE) PATCHSOURCE=TestPatches/SoulTest PATCHNAME=Soul clean patch web run
@pip install -r Tools/hvcc/requirements.txt && unset PATCHNAME PATCHCLASS PATCHFILE && $(MAKE) PATCHSOURCE=TestPatches/HeavyTest HEAVY=HeavyTest clean patch web run
help:
@echo 'Usage: make [target] ...'
@echo 'Targets:'
@fgrep -h "##" $(MAKEFILE_LIST) | fgrep -v fgrep | sed -e 's/^\(.*\): .*##\(.*\)/\1:#\2/' | column -t -c 2 -s '#'