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