1#!/usr/bin/make -f 2 3# these can be overridden using make variables. e.g. 4# make CFLAGS=-O2 5# make install DESTDIR=$(CURDIR)/debian/mclk.lv2 PREFIX=/usr 6# 7OPTIMIZATIONS ?= -msse -msse2 -mfpmath=sse -ffast-math -fomit-frame-pointer -O3 -fno-finite-math-only 8PREFIX ?= /usr/local 9CFLAGS ?= $(OPTIMIZATIONS) -Wall 10LIBDIR ?= lib 11 12STRIP?=strip 13STRIPFLAGS?=-s 14 15mclk_VERSION?=$(shell git describe --tags HEAD 2>/dev/null | sed 's/-g.*$$//;s/^v//' || echo "LV2") 16############################################################################### 17LIB_EXT=.so 18 19LV2DIR ?= $(PREFIX)/$(LIBDIR)/lv2 20LOADLIBES=-lm 21LV2NAME=mclk 22BUNDLE=mclk.lv2 23BUILDDIR=build/ 24targets= 25 26UNAME=$(shell uname) 27ifeq ($(UNAME),Darwin) 28 LV2LDFLAGS=-dynamiclib 29 LIB_EXT=.dylib 30 EXTENDED_RE=-E 31 STRIPFLAGS=-u -r -arch all -s lv2syms 32 targets+=lv2syms 33else 34 LV2LDFLAGS=-Wl,-Bstatic -Wl,-Bdynamic 35 LIB_EXT=.so 36 EXTENDED_RE=-r 37endif 38 39ifneq ($(XWIN),) 40 CC=$(XWIN)-gcc 41 STRIP=$(XWIN)-strip 42 LV2LDFLAGS=-Wl,-Bstatic -Wl,-Bdynamic -Wl,--as-needed 43 LIB_EXT=.dll 44 override LDFLAGS += -static-libgcc -static-libstdc++ 45endif 46 47targets+=$(BUILDDIR)$(LV2NAME)$(LIB_EXT) 48 49ifneq ($(MOD),) 50 targets+=$(BUILDDIR)modgui 51 MODLABEL=mod:label \"MIDI Clock\"; 52 MODBRAND=mod:brand \"x42\"; 53else 54 MODLABEL= 55 MODBRAND= 56endif 57 58############################################################################### 59# extract versions 60LV2VERSION=$(mclk_VERSION) 61include git2lv2.mk 62 63# check for build-dependencies 64ifeq ($(shell pkg-config --exists lv2 || echo no), no) 65 $(error "LV2 SDK was not found") 66endif 67 68# check for lv2_atom_forge_object new in 1.8.1 deprecates lv2_atom_forge_blank 69ifeq ($(shell pkg-config --atleast-version=1.8.1 lv2 && echo yes), yes) 70 override CFLAGS += -DHAVE_LV2_1_8 71endif 72 73override CFLAGS += -fPIC -std=c99 74override CFLAGS += `pkg-config --cflags lv2` 75 76# build target definitions 77default: all 78 79all: $(BUILDDIR)manifest.ttl $(BUILDDIR)$(LV2NAME).ttl $(targets) 80 81lv2syms: 82 echo "_lv2_descriptor" > lv2syms 83 84$(BUILDDIR)manifest.ttl: lv2ttl/manifest.ttl.in 85 @mkdir -p $(BUILDDIR) 86 sed "s/@LV2NAME@/$(LV2NAME)/;s/@LIB_EXT@/$(LIB_EXT)/" \ 87 lv2ttl/manifest.ttl.in > $(BUILDDIR)manifest.ttl 88ifneq ($(MOD),) 89 sed "s/@LV2NAME@/$(LV2NAME)/" \ 90 lv2ttl/manifest.modgui.in >> $(BUILDDIR)manifest.ttl 91endif 92 93$(BUILDDIR)$(LV2NAME).ttl: lv2ttl/$(LV2NAME).ttl.in 94 @mkdir -p $(BUILDDIR) 95 sed "s/@LV2NAME@/$(LV2NAME)/;s/@SIGNATURE@/$(SIGNATURE)/;s/@VERSION@/lv2:microVersion $(LV2MIC) ;lv2:minorVersion $(LV2MIN) ;/g;s/@MODBRAND@/$(MODBRAND)/;s/@MODLABEL@/$(MODLABEL)/" \ 96 lv2ttl/$(LV2NAME).ttl.in > $(BUILDDIR)$(LV2NAME).ttl 97 98$(BUILDDIR)$(LV2NAME)$(LIB_EXT): src/$(LV2NAME).c 99 @mkdir -p $(BUILDDIR) 100 $(CC) $(CPPFLAGS) $(CFLAGS) \ 101 -o $(BUILDDIR)$(LV2NAME)$(LIB_EXT) src/$(LV2NAME).c \ 102 -shared $(LV2LDFLAGS) $(LDFLAGS) $(LOADLIBES) 103 $(STRIP) $(STRIPFLAGS) $(BUILDDIR)$(LV2NAME)$(LIB_EXT) 104 105$(BUILDDIR)modgui: modgui/ 106 @mkdir -p $(BUILDDIR)/modgui 107 cp -r modgui/* $(BUILDDIR)modgui/ 108 109# install/uninstall/clean target definitions 110 111install: all 112 install -d $(DESTDIR)$(LV2DIR)/$(BUNDLE) 113 install -m755 $(BUILDDIR)$(LV2NAME)$(LIB_EXT) $(DESTDIR)$(LV2DIR)/$(BUNDLE) 114 install -m644 $(BUILDDIR)manifest.ttl $(BUILDDIR)$(LV2NAME).ttl $(DESTDIR)$(LV2DIR)/$(BUNDLE) 115ifneq ($(MOD),) 116 install -d $(DESTDIR)$(LV2DIR)/$(BUNDLE)/modgui 117 install -t $(DESTDIR)$(LV2DIR)/$(BUNDLE)/modgui $(BUILDDIR)modgui/* 118endif 119 120uninstall: 121 rm -f $(DESTDIR)$(LV2DIR)/$(BUNDLE)/manifest.ttl 122 rm -f $(DESTDIR)$(LV2DIR)/$(BUNDLE)/$(LV2NAME).ttl 123 rm -f $(DESTDIR)$(LV2DIR)/$(BUNDLE)/$(LV2NAME)$(LIB_EXT) 124 rm -rf $(DESTDIR)$(LV2DIR)/$(BUNDLE)/modgui 125 -rmdir $(DESTDIR)$(LV2DIR)/$(BUNDLE) 126 127clean: 128 rm -f $(BUILDDIR)manifest.ttl $(BUILDDIR)$(LV2NAME).ttl $(BUILDDIR)$(LV2NAME)$(LIB_EXT) lv2syms 129 rm -rf $(BUILDDIR)modgui 130 -test -d $(BUILDDIR) && rmdir $(BUILDDIR) || true 131 132distclean: clean 133 rm -f cscope.out cscope.files tags 134 135.PHONY: clean all install uninstall distclean 136