crap/Makefile

155 lines
4 KiB
Makefile

DISTNAME = crap
VERSION = git
FULLNAME = $(DISTNAME)-$(VERSION)
BIN ?= ./bin
VST_SDK_DIR ?= .
BOTH = eq eq_const noise tube
LADSPA = $(BOTH)
VST = $(BOTH) delay_test
UTILS = design bench
INCLUDES = util util_def param os6iir os2piir
BENCH_AGAINST = eq_const
###
PROGRAM = ${UTILS:%=$(BIN)/%}
HEADERS = ${INCLUDES:%=include/%.h}
LADSPA_SHOBJ = ${LADSPA:%=$(BIN)/$(DISTNAME)_%-ladspa.so}
VST_SHOBJ = ${VST:%=$(BIN)/$(DISTNAME)_%-vst.so}
SHOBJ = $(LADSPA_SHOBJ) $(VST_SHOBJ)
OBJ = ${SHOBJ:.so=.o}
AGAINST = $(BIN)/$(DISTNAME)_$(BENCH_AGAINST)-ladspa.so
#EXE = ${PROGRAM:=.exe}
EXE = $(BIN)/design.exe
DLL = ${SHOBJ:.so=.dll}
VST_CPP = audioeffect.cpp audioeffectx.cpp vstplugmain.cpp
VST_CPP_DIR = $(VST_SDK_DIR)/public.sdk/source/vst2.x
VST_SRC = ${VST_CPP:%=$(VST_CPP_DIR)/%}
VST_OBJ = ${VST_CPP:%.cpp=$(BIN)/%.o}
VST_DEF = $(VST_SDK_DIR)/public.sdk/samples/vst2.x/win/vstplug.def
GENERAL_FLAGS = -Wall -Wno-unused-function -I include
ALL_CFLAGS = $(GENERAL_FLAGS) -std=gnu11 $(CFLAGS)
ALL_CXXFLAGS = $(GENERAL_FLAGS) $(CXXFLAGS)
ALL_LDFLAGS = -lm $(LDFLAGS)
LADSPA_FLAGS =
VST_FLAGS = -Wno-write-strings -Wno-narrowing
VST_FLAGS += -I $(VST_SDK_DIR) -DBUILDING_DLL=1
# specifying core2 as the target architecture
# seems significantly faster, even on newer processors. ymmv.
OPT_FLAGS = -Ofast -march=core2 -mfpmath=sse
# any possibly produced files besides intermediates
ALL = $(SHOBJ) $(PROGRAM) $(BIN)/vstsdk.o $(EXE) $(DLL)
.SUFFIXES:
# TODO: force options before clean before everything else
.PHONY: all options clean dist pretest ladspa vst $(UTILS)
.PHONY: benchmark windows linux
all: pretest ladspa vst
exe: $(EXE)
dll: $(DLL)
windows: ALL_CFLAGS += $(OPT_FLAGS)
windows: ALL_CXXFLAGS += $(OPT_FLAGS)
windows: dll
linux: ALL_CFLAGS += $(OPT_FLAGS) -fpic
linux: ALL_CXXFLAGS += $(OPT_FLAGS) -fpic
linux: VST_FLAGS += -D__cdecl=
linux: all
linux-arm: ALL_CFLAGS += -Ofast -mfpu=neon -fpic
linux-arm: ALL_CXXFLAGS += -Ofast -mfpu=neon -fpic
linux-arm: VST_FLAGS += -D__cdecl=
linux-arm: all
options:
@echo "CPPFLAGS = $(CPPFLAGS)"
@echo "ALL_CFLAGS = $(ALL_CFLAGS)"
@echo "ALL_CXXFLAGS = $(ALL_CXXFLAGS)"
@echo "ALL_LDFLAGS = $(ALL_LDFLAGS)"
@echo "CC = $(CC)"
@echo "CXX = $(CXX)"
@echo "LD = $(LD)"
@echo
ladspa: $(LADSPA_SHOBJ)
vst: $(VST_SHOBJ)
pretest: util/denorm_test.h
@$(CC) -E $(ALL_CFLAGS) $^ -o /dev/null
benchmark: $(BIN)/bench $(AGAINST)
util/benchtime $(BIN)/bench $(AGAINST)
$(UTILS): %: $(BIN)/%
$(BIN)/%.exe: $(BIN)/%
@echo ' OBJCOPY '$@
@$(OBJCOPY) -S $< $@
$(BIN)/%.dll: $(BIN)/%.so
@echo ' OBJCOPY '$@
@$(OBJCOPY) -S $< $@
$(BIN)/%-ladspa.so: $(BIN)/%-ladspa.o
@echo ' CCLD '$@
@$(CC) $(ALL_CFLAGS) $(LADSPA_FLAGS) -shared $^ -o $@ $(ALL_LDFLAGS)
$(BIN)/%-vst.so: $(BIN)/%-vst.o $(BIN)/vstsdk.o
@echo ' CXXLD '$@
@$(CXX) $(ALL_CXXFLAGS) $(VST_FLAGS) -shared $^ -o $@ $(ALL_LDFLAGS)
$(BIN)/$(DISTNAME)_%-ladspa.o: crap/%-ladspa.c $(HEADERS) include/ladspa.h
@echo ' CC '$@
@$(CC) -c $(ALL_CFLAGS) $(LADSPA_FLAG) $(CPPFLAGS) $< -o $@
$(BIN)/$(DISTNAME)_%-vst.o: crap/%-vst.cpp $(HEADERS)
@echo ' CXX '$@
@$(CXX) -c $(ALL_CXXFLAGS) $(VST_FLAGS) $(CPPFLAGS) $< -o $@
crap/%-ladspa.c: crap/%.h template/ladspa.c util/generate
@echo ' GEN '$@
@util/generate $(notdir $<) $@ template/ladspa.c
crap/%-vst.cpp: crap/%.h template/vst.cpp util/generate
@echo ' GEN '$@
@util/generate $(notdir $<) $@ template/vst.cpp
$(BIN)/vstsdk.o: $(VST_OBJ)
@echo ' LD '$@
@$(LD) -r $^ -o $@
.INTERMEDIATE: $(VST_OBJ)
$(VST_OBJ): $(BIN)/%.o: $(VST_CPP_DIR)/%.cpp
@echo ' CXX '$@
@$(CXX) -c $(ALL_CXXFLAGS) $(VST_FLAGS) $(CPPFLAGS) $< -o $@
$(BIN)/bench: util/bench.c
@echo ' CCLD '$@
@$(CC) $(ALL_CFLAGS) $(LADSPA_FLAGS) $< -o $@ $(ALL_LDFLAGS) -rdynamic -ldl
$(BIN)/design: util/design.c
@echo ' CCLD '$@
@$(CC) $(ALL_CFLAGS) $< -o $@ $(ALL_LDFLAGS)
clean:
rm -f $(ALL)
dist:
@echo "# dist target is unimplemented, trying git instead"
git archive --prefix=$(FULLNAME)/ HEAD -o $(FULLNAME).tar.gz