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/gmsynth.lv2 PREFIX=/usr
6#
7PREFIX ?= /usr/local
8MANDIR ?= $(PREFIX)/share/man/man1
9# see http://lv2plug.in/pages/filesystem-hierarchy-standard.html, don't use libdir
10LV2DIR ?= $(PREFIX)/lib/lv2
11
12OPTIMIZATIONS ?= $(PORT_SIMD_FLAGS) -ffast-math -fomit-frame-pointer -fno-finite-math-only -DNDEBUG
13CFLAGS ?= -Wall -g -Wno-unused-function
14STRIP  ?= strip
15
16gmsynth_VERSION?=$(shell git describe --tags HEAD 2>/dev/null | sed 's/-g.*$$//;s/^v//' || echo "LV2")
17
18###############################################################################
19
20BUILDDIR = build/
21
22###############################################################################
23
24LV2NAME=gmsynth
25BUNDLE=gmsynth.lv2
26targets=
27
28LOADLIBES=-lm
29
30UNAME=$(shell uname)
31ifeq ($(UNAME),Darwin)
32  LV2LDFLAGS=-dynamiclib
33  LIB_EXT=.dylib
34  EXTENDED_RE=-E
35  STRIPFLAGS=-u -r -arch all -s lv2syms
36  targets+=lv2syms
37else
38  LV2LDFLAGS=-Wl,-Bstatic -Wl,-Bdynamic -Wl,--as-needed -pthread
39  LIB_EXT=.so
40  STRIPFLAGS= -s
41  EXTENDED_RE=-r
42endif
43
44ifneq ($(XWIN),)
45  CC=$(XWIN)-gcc
46  STRIP=$(XWIN)-strip
47  LV2LDFLAGS=-Wl,-Bstatic -Wl,-Bdynamic -Wl,--as-needed -pthread
48  LIB_EXT=.dll
49  override LDFLAGS += -static-libgcc
50endif
51
52targets+=$(BUILDDIR)$(LV2NAME)$(LIB_EXT)
53
54targets+=$(BUILDDIR)GeneralUser_LV2.sf2
55
56###############################################################################
57# extract versions
58LV2VERSION=$(gmsynth_VERSION)
59include git2lv2.mk
60
61###############################################################################
62# check for build-dependencies
63ifeq ($(shell pkg-config --exists lv2 || echo no), no)
64  $(error "LV2 SDK was not found")
65endif
66
67ifeq ($(shell pkg-config --atleast-version=1.6.0 lv2 || echo no), no)
68  $(error "LV2 SDK needs to be version 1.6.0 or later")
69endif
70
71ifeq ($(shell pkg-config --exists glib-2.0 || echo no), no)
72  $(error "glib-2.0 was not found.")
73endif
74
75# check for lv2_atom_forge_object  new in 1.8.1 deprecates lv2_atom_forge_blank
76ifeq ($(shell pkg-config --atleast-version=1.8.1 lv2 && echo yes), yes)
77  override CFLAGS += -DHAVE_LV2_1_8
78endif
79
80# add library dependent flags and libs
81override CFLAGS += $(OPTIMIZATIONS) -DVERSION="\"$(gmsynth_VERSION)\""
82override CFLAGS += `pkg-config --cflags lv2 glib-2.0`
83ifeq ($(XWIN),)
84override CFLAGS += -fPIC -fvisibility=hidden
85else
86override CFLAGS += -DPTW32_STATIC_LIB
87endif
88override LOADLIBES += `pkg-config $(PKG_UI_FLAGS) --libs glib-2.0`
89
90
91###############################################################################
92# build target definitions
93default: all
94
95all: $(BUILDDIR)manifest.ttl $(BUILDDIR)$(LV2NAME).ttl $(targets)
96
97lv2syms:
98	echo "_lv2_descriptor" > lv2syms
99
100$(BUILDDIR)manifest.ttl: lv2ttl/manifest.ttl.in Makefile
101	@mkdir -p $(BUILDDIR)
102	sed "s/@LV2NAME@/$(LV2NAME)/g;s/@LIB_EXT@/$(LIB_EXT)/" \
103		lv2ttl/manifest.ttl.in > $(BUILDDIR)manifest.ttl
104
105$(BUILDDIR)$(LV2NAME).ttl: Makefile lv2ttl/$(LV2NAME).*.in
106	@mkdir -p $(BUILDDIR)
107	sed "s/@LV2NAME@/$(LV2NAME)/;s/@VERSION@/lv2:microVersion $(LV2MIC) ;lv2:minorVersion $(LV2MIN) ;/g" \
108		lv2ttl/$(LV2NAME).ttl.in > $(BUILDDIR)$(LV2NAME).ttl
109
110$(BUILDDIR)%.sf2:
111	cp -v sf2/$(*F).sf2 $@
112
113FLUID_SRC = \
114            fluidsynth/src/fluid_adsr_env.c \
115            fluidsynth/src/fluid_chan.c \
116            fluidsynth/src/fluid_chorus.c \
117            fluidsynth/src/fluid_conv.c \
118            fluidsynth/src/fluid_defsfont.c \
119            fluidsynth/src/fluid_event.c \
120            fluidsynth/src/fluid_gen.c \
121            fluidsynth/src/fluid_hash.c \
122            fluidsynth/src/fluid_iir_filter.c \
123            fluidsynth/src/fluid_lfo.c \
124            fluidsynth/src/fluid_list.c \
125            fluidsynth/src/fluid_midi.c \
126            fluidsynth/src/fluid_mod.c \
127            fluidsynth/src/fluid_rev.c \
128            fluidsynth/src/fluid_ringbuffer.c \
129            fluidsynth/src/fluid_rvoice.c \
130            fluidsynth/src/fluid_rvoice_dsp.c \
131            fluidsynth/src/fluid_rvoice_event.c \
132            fluidsynth/src/fluid_rvoice_mixer.c \
133            fluidsynth/src/fluid_samplecache.c \
134            fluidsynth/src/fluid_settings.c \
135            fluidsynth/src/fluid_sffile.c \
136            fluidsynth/src/fluid_sfont.c \
137            fluidsynth/src/fluid_synth.c \
138            fluidsynth/src/fluid_synth_monopoly.c \
139            fluidsynth/src/fluid_sys.c \
140            fluidsynth/src/fluid_tuning.c \
141            fluidsynth/src/fluid_voice.c
142
143CPPFLAGS += -Ifluidsynth -I fluidsynth/fluidsynth -DHAVE_CONFIG_H -D DEFAULT_SOUNDFONT=\"\"
144DSP_SRC  = src/$(LV2NAME).c $(FLUID_SRC)
145DSP_DEPS = $(DSP_SRC)
146
147$(BUILDDIR)$(LV2NAME)$(LIB_EXT): $(DSP_DEPS) Makefile
148	@mkdir -p $(BUILDDIR)
149	$(CC) $(CPPFLAGS) $(CFLAGS) -std=gnu99 \
150	  -o $(BUILDDIR)$(LV2NAME)$(LIB_EXT) $(DSP_SRC) \
151	  -shared $(LV2LDFLAGS) $(LDFLAGS) $(LOADLIBES)
152	$(STRIP) $(STRIPFLAGS) $(BUILDDIR)$(LV2NAME)$(LIB_EXT)
153
154ifneq ($(BUILDOPENGL), no)
155 -include $(RW)robtk.mk
156endif
157
158$(BUILDDIR)$(LV2GUI)$(LIB_EXT): gui/$(LV2NAME).c
159
160###############################################################################
161# install/uninstall/clean target definitions
162
163install: all
164	install -d $(DESTDIR)$(LV2DIR)/$(BUNDLE)
165	install -m644 $(BUILDDIR)manifest.ttl $(BUILDDIR)$(LV2NAME).ttl $(BUILDDIR)*.sf2 $(DESTDIR)$(LV2DIR)/$(BUNDLE)
166	install -m755 $(BUILDDIR)$(LV2NAME)$(LIB_EXT) $(DESTDIR)$(LV2DIR)/$(BUNDLE)
167
168uninstall:
169	rm -f $(DESTDIR)$(LV2DIR)/$(BUNDLE)/manifest.ttl
170	rm -f $(DESTDIR)$(LV2DIR)/$(BUNDLE)/$(LV2NAME).ttl
171	rm -f $(DESTDIR)$(LV2DIR)/$(BUNDLE)/*.sf2
172	rm -f $(DESTDIR)$(LV2DIR)/$(BUNDLE)/$(LV2NAME)$(LIB_EXT)
173	-rmdir $(DESTDIR)$(LV2DIR)/$(BUNDLE)
174
175install-man:
176
177uninstall-man:
178
179clean:
180	rm -f $(BUILDDIR)manifest.ttl $(BUILDDIR)$(LV2NAME).ttl \
181	  $(BUILDDIR)$(LV2NAME)$(LIB_EXT) \
182	  $(BUILDDIR)*.sf2
183	rm -rf $(BUILDDIR)*.dSYM
184	-test -d $(BUILDDIR) && rmdir $(BUILDDIR) || true
185
186distclean: clean
187	rm -f cscope.out cscope.files tags
188
189.PHONY: clean all install uninstall distclean \
190