1#!/usr/bin/make -f 2 3OPTIMIZATIONS ?= $(PORT_SIMD_FLAGS) -ffast-math -fomit-frame-pointer -fno-finite-math-only 4PREFIX ?= /usr/local 5CFLAGS ?= $(OPTIMIZATIONS) -Wall 6 7PKG_CONFIG?=pkg-config 8STRIP?=strip 9STRIPFLAGS?=-s 10 11controlfilter_VERSION?=$(shell git describe --tags HEAD 2>/dev/null | sed 's/-g.*$$//;s/^v//' || echo "LV2") 12############################################################################### 13 14LV2DIR ?= $(PREFIX)/lib/lv2 15LOADLIBES=-lm 16LV2NAME=controlfilter 17BUNDLE=controlfilter.lv2 18BUILDDIR=build/ 19targets= 20 21UNAME=$(shell uname) 22ifeq ($(UNAME),Darwin) 23 LV2LDFLAGS=-dynamiclib 24 LIB_EXT=.dylib 25 STRIPFLAGS=-u -r -arch all -s lv2syms 26 targets+=lv2syms 27 EXTENDED_RE=-E 28else 29 LV2LDFLAGS=-Wl,-Bstatic -Wl,-Bdynamic 30 LIB_EXT=.so 31 EXTENDED_RE=-r 32endif 33 34ifneq ($(XWIN),) 35 CC=$(XWIN)-gcc 36 STRIP=$(XWIN)-strip 37 LV2LDFLAGS=-Wl,-Bstatic -Wl,-Bdynamic -Wl,--as-needed 38 LIB_EXT=.dll 39 override LDFLAGS += -static-libgcc -static-libstdc++ 40endif 41 42targets+=$(BUILDDIR)$(LV2NAME)$(LIB_EXT) 43 44############################################################################### 45# extract versions 46LV2VERSION=$(controlfilter_VERSION) 47include git2lv2.mk 48 49############################################################################### 50# check for build-dependencies 51ifeq ($(shell $(PKG_CONFIG) --exists lv2 || echo no), no) 52 $(error "LV2 SDK was not found") 53endif 54 55ifeq ($(XWIN),) 56override CFLAGS += -fPIC -fvisibility=hidden 57endif 58override CFLAGS += -std=c99 `$(PKG_CONFIG) --cflags lv2` -DVERSION="\"$(controlfilter_VERSION)\"" 59 60############################################################################### 61# build target definitions 62default: all 63 64all: $(BUILDDIR)manifest.ttl $(BUILDDIR)presets.ttl $(BUILDDIR)$(LV2NAME).ttl $(targets) 65 66FILTERS := $(wildcard filters/*.c) 67 68lv2syms: 69 echo "_lv2_descriptor" > lv2syms 70 71filters.c: $(FILTERS) 72 echo "#include \"src/ttl.h\"" > filters.c 73 i=0; for file in $(FILTERS); do \ 74 echo "/* --- */" >> filters.c; \ 75 echo "#define CSC_FILTER(FNX) CSC_FLT($$i, FNX)" >> filters.c; \ 76 echo "#define INIT_FN(NAME) XINIT_FN(NAME)" >> filters.c; \ 77 echo "#define PROC_FN(NAME) XPROC_FN(NAME)" >> filters.c; \ 78 echo "#include \"$${file}\"" >> filters.c; \ 79 echo "CSC_FILTER(CSC_NAME)" >> filters.c; \ 80 echo "#undef CSC_FILTER" >> filters.c; \ 81 echo "#undef INIT_FN" >> filters.c; \ 82 echo "#undef PROC_FN" >> filters.c; \ 83 echo "#undef CSC_NAME" >> filters.c; \ 84 i=`expr $$i + 1`; \ 85 done; 86 echo "/* --- */" >> filters.c; \ 87 echo "#define LOOP_DESC(FN) \\" >> filters.c; 88 i=0; for file in $(FILTERS); do \ 89 echo "FN($$i) \\" >> filters.c; \ 90 i=`expr $$i + 1`; \ 91 done; 92 echo >> filters.c; 93 94$(BUILDDIR)manifest.ttl: lv2ttl/manifest.ttl.in src/ttl.h filters.c 95 @mkdir -p $(BUILDDIR) 96 cat lv2ttl/manifest.ttl.in > $(BUILDDIR)manifest.ttl 97 $(CC) -E -I. -DCSC_MANIFEST filters.c \ 98 | grep -v '^\#' \ 99 | sed "s/HTTPP/http:\//g;s/HASH/#/g;s/@LV2NAME@/$(LV2NAME)/g;s/@LIB_EXT@/$(LIB_EXT)/g" \ 100 | uniq \ 101 >> $(BUILDDIR)manifest.ttl 102 for file in presets/*.ttl; do head -n 3 $$file >> $(BUILDDIR)manifest.ttl; echo "rdfs:seeAlso <presets.ttl> ." >> $(BUILDDIR)manifest.ttl; done 103 104$(BUILDDIR)presets.ttl: lv2ttl/presets.ttl.in presets/*.ttl 105 @mkdir -p $(BUILDDIR) 106 cat lv2ttl/presets.ttl.in > $(BUILDDIR)presets.ttl 107 cat presets/*.ttl >> $(BUILDDIR)presets.ttl 108 109$(BUILDDIR)$(LV2NAME).ttl: lv2ttl/$(LV2NAME).ttl.in src/ttl.h filters.c 110 @mkdir -p $(BUILDDIR) 111 cat lv2ttl/$(LV2NAME).ttl.in > $(BUILDDIR)$(LV2NAME).ttl 112 $(CC) -E -I. -DCSC_TTF filters.c \ 113 | grep -v '^\#' \ 114 | sed 's/HTTPP/http:\//g;s/@VERSION@/lv2:microVersion $(LV2MIC) ;lv2:minorVersion $(LV2MIN) ;/g' \ 115 | uniq \ 116 >> $(BUILDDIR)$(LV2NAME).ttl 117 118$(BUILDDIR)$(LV2NAME)$(LIB_EXT): src/$(LV2NAME).c filters.c 119 @mkdir -p $(BUILDDIR) 120 $(CC) -I. $(CPPFLAGS) $(CFLAGS) \ 121 -o $(BUILDDIR)$(LV2NAME)$(LIB_EXT) src/$(LV2NAME).c \ 122 -shared $(LV2LDFLAGS) $(LDFLAGS) $(LOADLIBES) 123 $(STRIP) $(STRIPFLAGS) $(BUILDDIR)$(LV2NAME)$(LIB_EXT) 124 125############################################################################### 126# install/uninstall/clean target definitions 127 128install: all 129 install -d $(DESTDIR)$(LV2DIR)/$(BUNDLE) 130 install -m755 $(BUILDDIR)$(LV2NAME)$(LIB_EXT) $(DESTDIR)$(LV2DIR)/$(BUNDLE) 131 install -m644 $(BUILDDIR)manifest.ttl $(BUILDDIR)$(LV2NAME).ttl $(BUILDDIR)presets.ttl $(DESTDIR)$(LV2DIR)/$(BUNDLE) 132 133uninstall: 134 rm -f $(DESTDIR)$(LV2DIR)/$(BUNDLE)/manifest.ttl 135 rm -f $(DESTDIR)$(LV2DIR)/$(BUNDLE)/presets.ttl 136 rm -f $(DESTDIR)$(LV2DIR)/$(BUNDLE)/$(LV2NAME).ttl 137 rm -f $(DESTDIR)$(LV2DIR)/$(BUNDLE)/$(LV2NAME)$(LIB_EXT) 138 -rmdir $(DESTDIR)$(LV2DIR)/$(BUNDLE) 139 140clean: 141 rm -f $(BUILDDIR)manifest.ttl $(BUILDDIR)presets.ttl $(BUILDDIR)$(LV2NAME).ttl $(BUILDDIR)$(LV2NAME)$(LIB_EXT) lv2syms filters.c 142 -test -d $(BUILDDIR) && rmdir $(BUILDDIR) || true 143 144.PHONY: clean all install uninstall 145