1#!/usr/bin/make -f 2 3# these can be overridden using make variables. e.g. 4# make CXXFLAGS=-O2 5# make install DESTDIR=$(CURDIR)/debian/fat1.lv2 PREFIX=/usr 6# 7PREFIX ?= /usr/local 8BINDIR ?= $(PREFIX)/bin 9MANDIR ?= $(PREFIX)/share/man/man1 10# see http://lv2plug.in/pages/filesystem-hierarchy-standard.html, don't use libdir 11LV2DIR ?= $(PREFIX)/lib/lv2 12 13OPTIMIZATIONS ?= $(PORT_SIMD_FLAGS) -ffast-math -fomit-frame-pointer -fno-finite-math-only -DNDEBUG 14CXXFLAGS ?= -Wall -g -Wno-unused-function 15 16PKG_CONFIG?=pkg-config 17STRIP ?= strip 18 19BUILDOPENGL?=yes 20BUILDJACKAPP?=yes 21 22fat1_VERSION?=$(shell git describe --tags HEAD 2>/dev/null | sed 's/-g.*$$//;s/^v//' || echo "LV2") 23RW ?= robtk/ 24 25############################################################################### 26 27BUILDDIR = build/ 28APPBLD = x42/ 29 30############################################################################### 31 32LV2NAME=fat1 33LV2GUI=fat1UI_gl 34BUNDLE=fat1.lv2 35targets= 36 37LOADLIBES=-lm 38LV2UIREQ= 39GLUICFLAGS=-I. 40 41ifneq ($(MOD),) 42 BUILDOPENGL=no 43 BUILDJACKAPP=no 44 MODLABEL=mod:label \"AT1\"; 45 MODBRAND=mod:brand \"x42\"; 46else 47 MODLABEL= 48 MODBRAND= 49endif 50 51UNAME=$(shell uname) 52ifeq ($(UNAME),Darwin) 53 LV2LDFLAGS=-dynamiclib 54 LIB_EXT=.dylib 55 EXE_EXT= 56 UI_TYPE=ui:CocoaUI 57 PUGL_SRC=$(RW)pugl/pugl_osx.m 58 PKG_GL_LIBS= 59 GLUILIBS=-framework Cocoa -framework OpenGL -framework CoreFoundation 60 STRIPFLAGS=-u -r -arch all -s $(RW)lv2syms 61 EXTENDED_RE=-E 62else 63 LV2LDFLAGS=-Wl,-Bstatic -Wl,-Bdynamic -Wl,--as-needed -pthread 64 LIB_EXT=.so 65 EXE_EXT= 66 UI_TYPE=ui:X11UI 67 PUGL_SRC=$(RW)pugl/pugl_x11.c 68 PKG_GL_LIBS=glu gl 69 GLUILIBS=-lX11 70 GLUICFLAGS+=`$(PKG_CONFIG) --cflags glu` 71 STRIPFLAGS= -s 72 EXTENDED_RE=-r 73endif 74 75ifneq ($(XWIN),) 76 CC=$(XWIN)-gcc 77 CXX=$(XWIN)-g++ 78 STRIP=$(XWIN)-strip 79 LV2LDFLAGS=-Wl,-Bstatic -Wl,-Bdynamic -Wl,--as-needed -pthread 80 LIB_EXT=.dll 81 EXE_EXT=.exe 82 PUGL_SRC=$(RW)pugl/pugl_win.cpp 83 PKG_GL_LIBS= 84 UI_TYPE=ui:WindowsUI 85 GLUILIBS=-lws2_32 -lwinmm -lopengl32 -lglu32 -lgdi32 -lcomdlg32 -lpthread 86 GLUICFLAGS=-I. 87 override LDFLAGS += -static-libgcc -static-libstdc++ 88endif 89 90ifeq ($(EXTERNALUI), yes) 91 UI_TYPE= 92endif 93 94ifeq ($(UI_TYPE),) 95 UI_TYPE=kx:Widget 96 LV2UIREQ+=lv2:requiredFeature kx:Widget; 97 override CXXFLAGS += -DXTERNAL_UI 98endif 99 100targets+=$(BUILDDIR)$(LV2NAME)$(LIB_EXT) 101 102UITTL= 103ifneq ($(BUILDOPENGL), no) 104 targets+=$(BUILDDIR)$(LV2GUI)$(LIB_EXT) 105 UITTL=ui:ui $(LV2NAME):ui_gl ; 106endif 107ifneq ($(MOD),) 108 targets+=$(BUILDDIR)modgui 109 override CXXFLAGS += -DMOD 110endif 111 112############################################################################### 113# extract versions 114LV2VERSION=$(fat1_VERSION) 115include git2lv2.mk 116 117############################################################################### 118# check for build-dependencies 119ifeq ($(shell $(PKG_CONFIG) --exists lv2 || echo no), no) 120 $(error "LV2 SDK was not found") 121endif 122 123ifeq ($(shell $(PKG_CONFIG) --exists fftw3f || echo no), no) 124 $(error "fftw3f library was not found") 125endif 126 127ifeq ($(shell $(PKG_CONFIG) --atleast-version=1.6.0 lv2 || echo no), no) 128 $(error "LV2 SDK needs to be version 1.6.0 or later") 129endif 130 131ifneq ($(BUILDOPENGL)$(BUILDJACKAPP), nono) 132 ifeq ($(shell $(PKG_CONFIG) --exists pango cairo $(PKG_GL_LIBS) || echo no), no) 133 $(error "This plugin requires cairo pango $(PKG_GL_LIBS)") 134 endif 135endif 136 137ifneq ($(BUILDJACKAPP), no) 138 ifeq ($(shell $(PKG_CONFIG) --exists jack || echo no), no) 139 $(warning *** libjack from http://jackaudio.org is required) 140 $(error Please install libjack-dev or libjack-jackd2-dev) 141 endif 142 JACKAPP=$(APPBLD)x42-fat1$(EXE_EXT) 143endif 144 145# check for lv2_atom_forge_object new in 1.8.1 deprecates lv2_atom_forge_blank 146ifeq ($(shell $(PKG_CONFIG) --atleast-version=1.8.1 lv2 && echo yes), yes) 147 override CXXFLAGS += -DHAVE_LV2_1_8 148endif 149 150ifneq ($(BUILDOPENGL)$(BUILDJACKAPP), nono) 151 ifneq ($(MAKECMDGOALS), submodules) 152 ifeq ($(wildcard $(RW)robtk.mk),) 153 $(warning "**********************************************************") 154 $(warning This plugin needs https://github.com/x42/robtk) 155 $(warning "**********************************************************") 156 $(info ) 157 $(info set the RW environment variale to the location of the robtk headers) 158 ifeq ($(wildcard .git),.git) 159 $(info or run 'make submodules' to initialize robtk as git submodule) 160 endif 161 $(info ) 162 $(warning "**********************************************************") 163 $(error robtk not found) 164 endif 165 endif 166endif 167 168# LV2 idle >= lv2-1.6.0 169GLUICFLAGS+=-DHAVE_IDLE_IFACE 170LV2UIREQ+=lv2:requiredFeature ui:idleInterface; lv2:extensionData ui:idleInterface; 171 172# add library dependent flags and libs 173override CXXFLAGS += $(OPTIMIZATIONS) -DVERSION="\"$(fat1_VERSION)\"" 174override CXXFLAGS += `$(PKG_CONFIG) --cflags lv2 fftw3f` 175ifeq ($(XWIN),) 176override CXXFLAGS += -fPIC -fvisibility=hidden 177else 178override CXXFLAGS += -DPTW32_STATIC_LIB 179endif 180override LOADLIBES += `$(PKG_CONFIG) --libs lv2 fftw3f` 181 182 183GLUICFLAGS+=`$(PKG_CONFIG) --cflags cairo pango` $(CXXFLAGS) 184GLUILIBS+=`$(PKG_CONFIG) $(PKG_UI_FLAGS) --libs cairo pango pangocairo $(PKG_GL_LIBS)` 185 186ifneq ($(XWIN),) 187GLUILIBS+=-lpthread -lusp10 188endif 189 190GLUICFLAGS+=$(LIC_CFLAGS) 191GLUILIBS+=$(LIC_LOADLIBES) 192 193 194ifneq ($(LIC_CFLAGS),) 195 LV2SIGN=lv2:extensionData <http:\\/\\/harrisonconsoles.com\\/lv2\\/license\#interface>\\; 196 override CXXFLAGS += -I$(RW) 197endif 198 199ROBGL+= Makefile 200 201JACKCFLAGS=-I. $(CXXFLAGS) $(LIC_CFLAGS) 202JACKCFLAGS+=`$(PKG_CONFIG) --cflags jack lv2 pango pangocairo $(PKG_GL_LIBS)` 203JACKLIBS=-lm $(GLUILIBS) $(LOADLIBES) 204 205 206############################################################################### 207# build target definitions 208default: all 209 210submodule_pull: 211 -test -d .git -a .gitmodules -a -f Makefile.git && $(MAKE) -f Makefile.git submodule_pull 212 213submodule_update: 214 -test -d .git -a .gitmodules -a -f Makefile.git && $(MAKE) -f Makefile.git submodule_update 215 216submodule_check: 217 -test -d .git -a .gitmodules -a -f Makefile.git && $(MAKE) -f Makefile.git submodule_check 218 219submodules: 220 -test -d .git -a .gitmodules -a -f Makefile.git && $(MAKE) -f Makefile.git submodules 221 222all: submodule_check $(BUILDDIR)manifest.ttl $(BUILDDIR)$(LV2NAME).ttl $(targets) $(JACKAPP) 223 224$(BUILDDIR)manifest.ttl: lv2ttl/manifest.ttl.in lv2ttl/manifest.gui.in lv2ttl/manifest.modgui.in Makefile 225 @mkdir -p $(BUILDDIR) 226 sed "s/@LV2NAME@/$(LV2NAME)/g;s/@LIB_EXT@/$(LIB_EXT)/" \ 227 lv2ttl/manifest.ttl.in > $(BUILDDIR)manifest.ttl 228ifneq ($(BUILDOPENGL), no) 229 sed "s/@LV2NAME@/$(LV2NAME)/g;s/@LIB_EXT@/$(LIB_EXT)/;s/@UI_TYPE@/$(UI_TYPE)/;s/@LV2GUI@/$(LV2GUI)/g" \ 230 lv2ttl/manifest.gui.in >> $(BUILDDIR)manifest.ttl 231endif 232ifneq ($(MOD),) 233 sed "s/@LV2NAME@/$(LV2NAME)/g" \ 234 lv2ttl/manifest.modgui.in >> $(BUILDDIR)manifest.ttl 235endif 236 237$(BUILDDIR)$(LV2NAME).ttl: Makefile lv2ttl/$(LV2NAME).ttl.in lv2ttl/$(LV2NAME).base.ttl.in lv2ttl/$(LV2NAME).chroma.ttl.in lv2ttl/$(LV2NAME).micro.ttl.in lv2ttl/$(LV2NAME).scales.ttl.in lv2ttl/$(LV2NAME).gui.in 238 @mkdir -p $(BUILDDIR) 239 sed "s/@LV2NAME@/$(LV2NAME)/g" \ 240 lv2ttl/$(LV2NAME).ttl.in > $(BUILDDIR)$(LV2NAME).ttl 241 sed "s/@LV2NAME@/$(LV2NAME)/g;s/@SIGNATURE@/$(LV2SIGN)/;s/@VERSION@/lv2:microVersion $(LV2MIC) ;lv2:minorVersion $(LV2MIN) ;/g;s/@UITTL@/$(UITTL)/;s/@MODBRAND@/$(MODBRAND)/;s/@MODLABEL@/$(MODLABEL)/;s/@URISUFFIX@//;s/@NAMESUFFIX@//" \ 242 lv2ttl/$(LV2NAME).base.ttl.in >> $(BUILDDIR)$(LV2NAME).ttl 243 cat lv2ttl/$(LV2NAME).chroma.ttl.in >> $(BUILDDIR)$(LV2NAME).ttl 244 sed "s/@LV2NAME@/$(LV2NAME)/g;s/@SIGNATURE@/$(LV2SIGN)/;s/@VERSION@/lv2:microVersion $(LV2MIC) ;lv2:minorVersion $(LV2MIN) ;/g;s/@UITTL@/$(UITTL)/;s/@MODBRAND@/$(MODBRAND)/;s/@MODLABEL@/$(MODLABEL)/;s/@URISUFFIX@/#microtonal/;s/@NAMESUFFIX@/ (microtonal)/" \ 245 lv2ttl/$(LV2NAME).base.ttl.in >> $(BUILDDIR)$(LV2NAME).ttl 246 cat lv2ttl/$(LV2NAME).micro.ttl.in >> $(BUILDDIR)$(LV2NAME).ttl 247 sed "s/@LV2NAME@/$(LV2NAME)/g;s/@SIGNATURE@/$(LV2SIGN)/;s/@VERSION@/lv2:microVersion $(LV2MIC) ;lv2:minorVersion $(LV2MIN) ;/g;s/@UITTL@/$(UITTL)/;s/@MODBRAND@/$(MODBRAND)/;s/@MODLABEL@/$(MODLABEL)/;s/@URISUFFIX@/#scales/;s/@NAMESUFFIX@/ (scales)/" \ 248 lv2ttl/$(LV2NAME).scales.ttl.in >> $(BUILDDIR)$(LV2NAME).ttl 249ifneq ($(BUILDOPENGL), no) 250 sed "s/@LV2NAME@/$(LV2NAME)/g;s/@UI_TYPE@/$(UI_TYPE)/;s/@UI_REQ@/$(LV2UIREQ)/" \ 251 lv2ttl/$(LV2NAME).gui.in >> $(BUILDDIR)$(LV2NAME).ttl 252endif 253 254 255DSP_SRC = src/$(LV2NAME).cc src/retuner.cc src/resampler.cc src/resampler-table.cc 256DSP_DEPS = $(DSP_SRC) src/$(LV2NAME).h src/retuner.h src/resampler.h src/resampler-table.h 257GUI_DEPS = gui/$(LV2NAME).c src/$(LV2NAME).h 258 259$(BUILDDIR)$(LV2NAME)$(LIB_EXT): $(DSP_DEPS) Makefile 260 @mkdir -p $(BUILDDIR) 261 $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LIC_CFLAGS)\ 262 -o $(BUILDDIR)$(LV2NAME)$(LIB_EXT) $(DSP_SRC) \ 263 -shared $(LV2LDFLAGS) $(LDFLAGS) $(LOADLIBES) $(LIC_LOADLIBES) 264 $(STRIP) $(STRIPFLAGS) $(BUILDDIR)$(LV2NAME)$(LIB_EXT) 265 266jackapps: $(JACKAPP) 267 268$(eval x42_fat1_JACKSRC = -DX42_MULTIPLUGIN src/fat1.cc src/retuner.cc src/resampler.cc src/resampler-table.cc) 269x42_fat1_JACKGUI = gui/fat1.c 270x42_fat1_LV2HTTL = lv2ttl/plugins.h 271x42_fat1_JACKDESC = lv2ui_descriptor 272$(APPBLD)x42-fat1$(EXE_EXT): $(DSP_DEPS) $(GUI_DEPS) \ 273 $(x42_fat1_LV2HTTL) lv2ttl/fat1_chroma.h lv2ttl/fat1_micro.h 274 275ifneq ($(BUILDOPENGL)$(BUILDJACKAPP), nono) 276 -include $(RW)robtk.mk 277endif 278 279$(BUILDDIR)$(LV2GUI)$(LIB_EXT): gui/$(LV2NAME).c 280 281$(BUILDDIR)modgui: modgui/ 282 @mkdir -p $(BUILDDIR)/modgui 283 cp -r modgui/* $(BUILDDIR)modgui/ 284 285############################################################################### 286# install/uninstall/clean target definitions 287 288install: install-bin install-man 289 290uninstall: uninstall-bin uninstall-man 291 292install-bin: all 293 install -d $(DESTDIR)$(LV2DIR)/$(BUNDLE) 294 install -m644 $(BUILDDIR)manifest.ttl $(BUILDDIR)$(LV2NAME).ttl $(DESTDIR)$(LV2DIR)/$(BUNDLE) 295 install -m755 $(BUILDDIR)$(LV2NAME)$(LIB_EXT) $(DESTDIR)$(LV2DIR)/$(BUNDLE) 296ifneq ($(BUILDOPENGL), no) 297 install -m755 $(BUILDDIR)$(LV2GUI)$(LIB_EXT) $(DESTDIR)$(LV2DIR)/$(BUNDLE) 298endif 299ifneq ($(BUILDJACKAPP), no) 300 install -d $(DESTDIR)$(BINDIR) 301 install -m755 $(APPBLD)x42-fat1$(EXE_EXT) $(DESTDIR)$(BINDIR) 302endif 303ifneq ($(MOD),) 304 install -d $(DESTDIR)$(LV2DIR)/$(BUNDLE)/modgui 305 install -t $(DESTDIR)$(LV2DIR)/$(BUNDLE)/modgui $(BUILDDIR)modgui/* 306endif 307 308uninstall-bin: 309 rm -f $(DESTDIR)$(LV2DIR)/$(BUNDLE)/manifest.ttl 310 rm -f $(DESTDIR)$(LV2DIR)/$(BUNDLE)/$(LV2NAME).ttl 311 rm -f $(DESTDIR)$(LV2DIR)/$(BUNDLE)/$(LV2NAME)$(LIB_EXT) 312 rm -f $(DESTDIR)$(LV2DIR)/$(BUNDLE)/$(LV2GUI)$(LIB_EXT) 313 rm -rf $(DESTDIR)$(LV2DIR)/$(BUNDLE)/modgui 314 rm -f $(DESTDIR)$(BINDIR)/x42-fat1$(EXE_EXT) 315 -rmdir $(DESTDIR)$(LV2DIR)/$(BUNDLE) 316 -rmdir $(DESTDIR)$(BINDIR) 317 318install-man: 319ifneq ($(BUILDJACKAPP), no) 320 install -d $(DESTDIR)$(MANDIR) 321 install -m644 x42-fat1.1 $(DESTDIR)$(MANDIR) 322endif 323 324uninstall-man: 325 rm -f $(DESTDIR)$(MANDIR)/x42-fat1.1 326 -rmdir $(DESTDIR)$(MANDIR) 327 328man: $(APPBLD)x42-fat1 329 help2man -N -o x42-fat1.1 -n "x42 JACK Auto Tune" $(APPBLD)x42-fat1 330 331clean: 332 rm -f $(BUILDDIR)manifest.ttl $(BUILDDIR)$(LV2NAME).ttl \ 333 $(BUILDDIR)$(LV2NAME)$(LIB_EXT) \ 334 $(BUILDDIR)$(LV2GUI)$(LIB_EXT) 335 rm -rf $(BUILDDIR)*.dSYM 336 rm -rf $(APPBLD)x42-* 337 rm -rf $(BUILDDIR)modgui 338 -test -d $(APPBLD) && rmdir $(APPBLD) || true 339 -test -d $(BUILDDIR) && rmdir $(BUILDDIR) || true 340 341distclean: clean 342 rm -f cscope.out cscope.files tags 343 344.PHONY: clean all install uninstall distclean jackapps man \ 345 install-bin uninstall-bin install-man uninstall-man \ 346 submodule_check submodules submodule_update submodule_pull 347