Audio plugin host https://kx.studio/carla
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Makefile.mk 11KB

11 years ago
11 years ago
11 years ago
10 years ago
11 years ago
10 years ago
10 years ago
10 years ago
11 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
11 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
11 years ago
10 years ago
10 years ago
11 years ago
11 years ago
10 years ago
10 years ago
10 years ago
11 years ago
10 years ago
11 years ago
11 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
11 years ago
10 years ago
10 years ago
10 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371
  1. #!/usr/bin/make -f
  2. # Makefile for Carla C++ code #
  3. # --------------------------- #
  4. # Created by falkTX
  5. #
  6. # --------------------------------------------------------------
  7. # Modify to enable/disable specific features
  8. # Use the free vestige header instead of the official VST SDK
  9. CARLA_VESTIGE_HEADER = true
  10. # --------------------------------------------------------------
  11. # DO NOT MODIFY PAST THIS POINT!
  12. AR ?= ar
  13. RM ?= rm -f
  14. CC ?= gcc
  15. CXX ?= g++
  16. # --------------------------------------------------------------
  17. # Fallback to Linux if no other OS defined
  18. ifneq ($(HAIKU),true)
  19. ifneq ($(MACOS),true)
  20. ifneq ($(WIN32),true)
  21. LINUX=true
  22. endif
  23. endif
  24. endif
  25. # --------------------------------------------------------------
  26. # Set MACOS_OR_WIN32
  27. ifeq ($(MACOS),true)
  28. MACOS_OR_WIN32=true
  29. endif
  30. ifeq ($(WIN32),true)
  31. MACOS_OR_WIN32=true
  32. endif
  33. # --------------------------------------------------------------
  34. # Force some features on MacOS and Windows
  35. ifeq ($(MACOS_OR_WIN32),true)
  36. CARLA_VESTIGE_HEADER = false
  37. endif
  38. # --------------------------------------------------------------
  39. # Common build and link flags
  40. BASE_FLAGS = -Wall -Wextra -pipe -DREAL_BUILD
  41. BASE_OPTS = -O2 -ffast-math -mtune=generic -msse -msse2 -fdata-sections -ffunction-sections
  42. LINK_OPTS = -fdata-sections -ffunction-sections -Wl,-O1 -Wl,--as-needed -Wl,--gc-sections
  43. # LINK_OPTS += -Wl,--strip-all
  44. ifneq ($(MACOS),true)
  45. # MacOS doesn't support this
  46. BASE_OPTS += -mfpmath=sse
  47. else
  48. # MacOS linker flags
  49. LINK_OPTS = -fdata-sections -ffunction-sections -Wl,-dead_strip -Wl,-dead_strip_dylibs
  50. endif
  51. ifeq ($(RASPPI),true)
  52. # Raspberry-Pi optimization flags
  53. BASE_OPTS = -O2 -ffast-math -march=armv6 -mfpu=vfp -mfloat-abi=hard
  54. LINK_OPTS = -Wl,-O1 -Wl,--as-needed -Wl,--strip-all
  55. endif
  56. ifeq ($(PANDORA),true)
  57. # OpenPandora flags
  58. BASE_OPTS = -O2 -ffast-math -march=armv7-a -mcpu=cortex-a8 -mtune=cortex-a8 -mfpu=neon -mfloat-abi=softfp
  59. LINK_OPTS = -Wl,-O1 -Wl,--as-needed -Wl,--strip-all
  60. endif
  61. ifneq ($(WIN32),true)
  62. # not needed for Windows
  63. BASE_FLAGS += -fPIC -DPIC
  64. endif
  65. ifeq ($(DEBUG),true)
  66. BASE_FLAGS += -DDEBUG -O0 -g
  67. ifeq ($(WIN32),true)
  68. BASE_FLAGS += -msse -msse2
  69. endif
  70. LINK_OPTS =
  71. else
  72. BASE_FLAGS += -DNDEBUG $(BASE_OPTS) -fvisibility=hidden
  73. CXXFLAGS += -fvisibility-inlines-hidden
  74. endif
  75. 32BIT_FLAGS = -m32
  76. 64BIT_FLAGS = -m64
  77. BUILD_C_FLAGS = $(BASE_FLAGS) -std=c99 -std=gnu99 $(CFLAGS)
  78. BUILD_CXX_FLAGS = $(BASE_FLAGS) -std=c++0x -std=gnu++0x $(CXXFLAGS)
  79. LINK_FLAGS = $(LINK_OPTS) -Wl,--no-undefined $(LDFLAGS)
  80. ifeq ($(MACOS),true)
  81. # No C++11 support
  82. BUILD_CXX_FLAGS = $(BASE_FLAGS) $(CXXFLAGS)
  83. LINK_FLAGS = $(LINK_OPTS) $(LDFLAGS)
  84. endif
  85. # --------------------------------------------------------------
  86. # Strict test build
  87. ifeq ($(TESTBUILD),true)
  88. BASE_FLAGS += -Werror -Wcast-qual -Wconversion -Wformat -Wformat-security -Wredundant-decls -Wshadow -Wstrict-overflow -fstrict-overflow -Wundef -Wwrite-strings
  89. BASE_FLAGS += -Wfloat-equal -Wpointer-arith -Wabi -Winit-self -Wuninitialized #-Wstrict-overflow=5
  90. ifeq ($(CC),clang)
  91. # BASE_FLAGS += -Wdocumentation -Wdocumentation-unknown-command
  92. # BASE_FLAGS += -Weverything
  93. else
  94. BASE_FLAGS += -Wcast-align -Wunsafe-loop-optimizations
  95. endif
  96. ifneq ($(MACOS),true)
  97. BASE_FLAGS += -Wmissing-declarations -Wsign-conversion
  98. ifneq ($(CC),clang)
  99. BASE_FLAGS += -Wlogical-op
  100. endif
  101. endif
  102. CFLAGS += -Wold-style-definition -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes
  103. CXXFLAGS += -Weffc++ -Wnon-virtual-dtor -Woverloaded-virtual
  104. ifeq ($(LINUX),true)
  105. CFLAGS += -isystem /opt/kxstudio/include
  106. CXXFLAGS += -isystem /opt/kxstudio/include
  107. CXXFLAGS += -isystem /opt/kxstudio/include/ntk
  108. CXXFLAGS += -isystem /usr/include/qt4
  109. endif
  110. ifeq ($(MACOS),true)
  111. CFLAGS += -isystem /opt/kxstudio/include
  112. CXXFLAGS += -isystem /opt/kxstudio/include
  113. endif
  114. ifeq ($(WIN64),true)
  115. CFLAGS += -isystem /opt/mingw64/include
  116. CXXFLAGS += -isystem /opt/mingw64/include
  117. else
  118. ifeq ($(WIN32),true)
  119. CFLAGS += -isystem /opt/mingw32/include
  120. CXXFLAGS += -isystem /opt/mingw32/include
  121. endif
  122. endif
  123. endif
  124. # --------------------------------------------------------------
  125. # Check for required libs
  126. ifneq ($(shell pkg-config --exists liblo && echo true),true)
  127. $(error liblo missing, cannot continue)
  128. endif
  129. ifeq ($(LINUX),true)
  130. ifeq (,$(wildcard /usr/include/magic.h))
  131. $(error libmagic missing, cannot continue)
  132. endif
  133. endif
  134. # --------------------------------------------------------------
  135. # Check for optional libs (required by backend or bridges)
  136. ifneq ($(MACOS_OR_WIN32),true)
  137. HAVE_GTK2 = $(shell pkg-config --exists gtk+-2.0 && echo true)
  138. HAVE_GTK3 = $(shell pkg-config --exists gtk+-3.0 && echo true)
  139. ifeq ($(LINUX),true)
  140. HAVE_ALSA = $(shell pkg-config --exists alsa && echo true)
  141. HAVE_PULSEAUDIO = $(shell pkg-config --exists libpulse-simple && echo true)
  142. HAVE_X11 = $(shell pkg-config --exists x11 && echo true)
  143. endif
  144. endif
  145. HAVE_QT4 = $(shell pkg-config --exists QtCore QtGui && echo true)
  146. HAVE_QT5 = $(shell pkg-config --exists Qt5Core Qt5Gui Qt5Widgets && echo true)
  147. HAVE_FLUIDSYNTH = $(shell pkg-config --exists fluidsynth && echo true)
  148. HAVE_LINUXSAMPLER = $(shell pkg-config --atleast-version=1.0.0.svn41 linuxsampler && echo true)
  149. # --------------------------------------------------------------
  150. # Set Qt tools
  151. ifeq ($(HAVE_QT4),true)
  152. MOC_QT4 ?= $(shell pkg-config --variable=moc_location QtCore)
  153. RCC_QT4 ?= $(shell pkg-config --variable=rcc_location QtCore)
  154. UIC_QT4 ?= $(shell pkg-config --variable=uic_location QtCore)
  155. ifeq (,$(wildcard $(MOC_QT4)))
  156. HAVE_QT4=false
  157. endif
  158. endif
  159. ifeq ($(HAVE_QT5),true)
  160. QT5_LIBDIR = $(shell pkg-config --variable=libdir Qt5Core)
  161. ifeq ($(MACOS),true)
  162. MOC_QT5 ?= $(QT5_LIBDIR)/../bin/moc
  163. RCC_QT5 ?= $(QT5_LIBDIR)/../bin/rcc
  164. UIC_QT5 ?= $(QT5_LIBDIR)/../bin/uic
  165. else # MACOS
  166. ifneq (,$(wildcard $(QT5_LIBDIR)/qt5/bin/moc))
  167. MOC_QT5 ?= $(QT5_LIBDIR)/qt5/bin/moc
  168. RCC_QT5 ?= $(QT5_LIBDIR)/qt5/bin/rcc
  169. UIC_QT5 ?= $(QT5_LIBDIR)/qt5/bin/uic
  170. else
  171. MOC_QT5 ?= $(QT5_LIBDIR)/qt/bin/moc
  172. RCC_QT5 ?= $(QT5_LIBDIR)/qt/bin/rcc
  173. UIC_QT5 ?= $(QT5_LIBDIR)/qt/bin/uic
  174. endif
  175. endif # MACOS
  176. ifeq (,$(wildcard $(MOC_QT5)))
  177. HAVE_QT5=false
  178. endif
  179. endif
  180. # --------------------------------------------------------------
  181. # Set default Qt used in frontend
  182. ifeq ($(HAVE_QT4),true)
  183. DEFAULT_QT ?= 4
  184. else
  185. DEFAULT_QT ?= 5
  186. endif
  187. # --------------------------------------------------------------
  188. # Check for optional libs (required by internal plugins)
  189. HAVE_ZYN_DEPS = $(shell pkg-config --exists fftw3 mxml zlib && echo true)
  190. HAVE_ZYN_UI_DEPS = $(shell pkg-config --exists ntk_images ntk && echo true)
  191. # --------------------------------------------------------------
  192. # Set base defines
  193. ifeq ($(HAVE_FLUIDSYNTH),true)
  194. BASE_FLAGS += -DHAVE_FLUIDSYNTH
  195. endif
  196. ifeq ($(HAVE_LINUXSAMPLER),true)
  197. BASE_FLAGS += -DHAVE_LINUXSAMPLER
  198. endif
  199. ifeq ($(HAVE_X11),true)
  200. BASE_FLAGS += -DHAVE_X11
  201. endif
  202. ifeq ($(CARLA_VESTIGE_HEADER),true)
  203. BASE_FLAGS += -DVESTIGE_HEADER
  204. endif
  205. # --------------------------------------------------------------
  206. # Set libs stuff (part 1)
  207. LIBLO_FLAGS = $(shell pkg-config --cflags liblo)
  208. LIBLO_LIBS = $(shell pkg-config --libs liblo)
  209. ifeq ($(HAVE_FLUIDSYNTH),true)
  210. FLUIDSYNTH_FLAGS = $(shell pkg-config --cflags fluidsynth)
  211. FLUIDSYNTH_LIBS = $(shell pkg-config --libs fluidsynth)
  212. endif
  213. ifeq ($(HAVE_LINUXSAMPLER),true)
  214. LINUXSAMPLER_FLAGS = $(shell pkg-config --cflags linuxsampler) -Wno-unused-parameter
  215. LINUXSAMPLER_LIBS = $(shell pkg-config --libs linuxsampler)
  216. endif
  217. ifeq ($(HAVE_X11),true)
  218. X11_FLAGS = $(shell pkg-config --cflags x11)
  219. X11_LIBS = $(shell pkg-config --libs x11)
  220. endif
  221. # --------------------------------------------------------------
  222. # Set libs stuff (part 2)
  223. RTAUDIO_FLAGS = -DHAVE_GETTIMEOFDAY -D__UNIX_JACK__
  224. ifeq ($(DEBUG),true)
  225. RTAUDIO_FLAGS += -D__RTAUDIO_DEBUG__
  226. RTMIDI_FLAGS += -D__RTMIDI_DEBUG__
  227. endif
  228. ifneq ($(HAIKU),true)
  229. RTMEMPOOL_LIBS = -lpthread
  230. endif
  231. ifeq ($(LINUX),true)
  232. JACKBRIDGE_LIBS = -ldl -lpthread -lrt
  233. JUCE_CORE_LIBS = -ldl -lpthread -lrt
  234. LILV_LIBS = -ldl -lm -lrt
  235. ifeq ($(HAVE_ALSA),true)
  236. RTAUDIO_FLAGS += $(shell pkg-config --cflags alsa) -D__LINUX_ALSA__
  237. RTAUDIO_LIBS += $(shell pkg-config --libs alsa) -lpthread
  238. RTMIDI_FLAGS += $(shell pkg-config --cflags alsa) -D__LINUX_ALSA__
  239. RTMIDI_LIBS += $(shell pkg-config --libs alsa)
  240. endif
  241. ifeq ($(HAVE_PULSEAUDIO),true)
  242. RTAUDIO_FLAGS += $(shell pkg-config --cflags libpulse-simple) -D__LINUX_PULSE__
  243. RTAUDIO_LIBS += $(shell pkg-config --libs libpulse-simple)
  244. endif
  245. endif
  246. ifeq ($(MACOS),true)
  247. JACKBRIDGE_LIBS = -ldl -lpthread
  248. JUCE_AUDIO_BASICS_LIBS = -framework Accelerate
  249. JUCE_AUDIO_DEVICES_LIBS = -framework AppKit -framework AudioToolbox -framework CoreAudio -framework CoreMIDI
  250. JUCE_AUDIO_FORMATS_LIBS = -framework AudioToolbox -framework CoreFoundation
  251. JUCE_AUDIO_PROCESSORS_LIBS = -framework AudioToolbox -framework AudioUnit -framework CoreAudio -framework CoreAudioKit -framework Cocoa -framework Carbon
  252. JUCE_CORE_LIBS = -framework AppKit
  253. JUCE_EVENTS_LIBS = -framework AppKit
  254. JUCE_GRAPHICS_LIBS = -framework Cocoa -framework QuartzCore
  255. JUCE_GUI_BASICS_LIBS = -framework Cocoa
  256. JUCE_GUI_EXTRA_LIBS = -framework Cocoa -framework IOKit
  257. LILV_LIBS = -ldl -lm
  258. endif
  259. ifeq ($(WIN32),true)
  260. JACKBRIDGE_LIBS = -lpthread
  261. JUCE_AUDIO_DEVICES_LIBS = -lwinmm -lole32
  262. JUCE_CORE_LIBS = -luuid -lwsock32 -lwininet -lversion -lole32 -lws2_32 -loleaut32 -limm32 -lcomdlg32 -lshlwapi -lrpcrt4 -lwinmm
  263. # JUCE_EVENTS_LIBS = -lole32
  264. JUCE_GRAPHICS_LIBS = -lgdi32
  265. JUCE_GUI_BASICS_LIBS = -lgdi32 -limm32 -lcomdlg32 -lole32
  266. LILV_LIBS = -lm
  267. endif
  268. # --------------------------------------------------------------
  269. # Set libs stuff (part 3)
  270. ifeq ($(HAVE_ZYN_DEPS),true)
  271. NATIVE_PLUGINS_FLAGS += -DWANT_ZYNADDSUBFX
  272. NATIVE_PLUGINS_LIBS += $(shell pkg-config --libs fftw3 mxml zlib)
  273. ifeq ($(HAVE_ZYN_UI_DEPS),true)
  274. NATIVE_PLUGINS_FLAGS += -DWANT_ZYNADDSUBFX_UI
  275. NATIVE_PLUGINS_LIBS += $(shell pkg-config --libs ntk_images ntk)
  276. endif
  277. endif
  278. # --------------------------------------------------------------
  279. # Set app extension
  280. ifeq ($(WIN32),true)
  281. APP_EXT = .exe
  282. endif
  283. # --------------------------------------------------------------
  284. # Set shared lib extension
  285. LIB_EXT = .so
  286. ifeq ($(MACOS),true)
  287. LIB_EXT = .dylib
  288. endif
  289. ifeq ($(WIN32),true)
  290. LIB_EXT = .dll
  291. endif
  292. # --------------------------------------------------------------
  293. # Set static libs start & end
  294. ifneq ($(MACOS),true)
  295. LIBS_START = -Wl,--start-group
  296. LIBS_END = -Wl,--end-group
  297. endif
  298. # --------------------------------------------------------------
  299. # Set shared library CLI arg
  300. ifeq ($(MACOS),true)
  301. SHARED = -dynamiclib
  302. else
  303. SHARED = -shared
  304. endif
  305. # --------------------------------------------------------------