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
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372
  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_FFMPEG = $(shell pkg-config --exists libavcodec libavformat libavutil && echo true)
  138. HAVE_GTK2 = $(shell pkg-config --exists gtk+-2.0 && echo true)
  139. HAVE_GTK3 = $(shell pkg-config --exists gtk+-3.0 && echo true)
  140. ifeq ($(LINUX),true)
  141. HAVE_ALSA = $(shell pkg-config --exists alsa && echo true)
  142. HAVE_PULSEAUDIO = $(shell pkg-config --exists libpulse-simple && echo true)
  143. HAVE_X11 = $(shell pkg-config --exists x11 && echo true)
  144. endif
  145. endif
  146. HAVE_QT4 = $(shell pkg-config --exists QtCore QtGui && echo true)
  147. HAVE_QT5 = $(shell pkg-config --exists Qt5Core Qt5Gui Qt5Widgets && echo true)
  148. HAVE_FLUIDSYNTH = $(shell pkg-config --exists fluidsynth && echo true)
  149. HAVE_LINUXSAMPLER = $(shell pkg-config --exists linuxsampler && echo true)
  150. # --------------------------------------------------------------
  151. # Set Qt tools
  152. ifeq ($(HAVE_QT4),true)
  153. MOC_QT4 ?= $(shell pkg-config --variable=moc_location QtCore)
  154. RCC_QT4 ?= $(shell pkg-config --variable=rcc_location QtCore)
  155. UIC_QT4 ?= $(shell pkg-config --variable=uic_location QtCore)
  156. ifeq (,$(wildcard $(MOC_QT4)))
  157. HAVE_QT4=false
  158. endif
  159. endif
  160. ifeq ($(HAVE_QT5),true)
  161. QT5_LIBDIR = $(shell pkg-config --variable=libdir Qt5Core)
  162. ifeq ($(MACOS),true)
  163. MOC_QT5 ?= $(QT5_LIBDIR)/../bin/moc
  164. RCC_QT5 ?= $(QT5_LIBDIR)/../bin/rcc
  165. UIC_QT5 ?= $(QT5_LIBDIR)/../bin/uic
  166. else # MACOS
  167. ifneq (,$(wildcard $(QT5_LIBDIR)/qt5/bin/moc))
  168. MOC_QT5 ?= $(QT5_LIBDIR)/qt5/bin/moc
  169. RCC_QT5 ?= $(QT5_LIBDIR)/qt5/bin/rcc
  170. UIC_QT5 ?= $(QT5_LIBDIR)/qt5/bin/uic
  171. else
  172. MOC_QT5 ?= $(QT5_LIBDIR)/qt/bin/moc
  173. RCC_QT5 ?= $(QT5_LIBDIR)/qt/bin/rcc
  174. UIC_QT5 ?= $(QT5_LIBDIR)/qt/bin/uic
  175. endif
  176. endif # MACOS
  177. ifeq (,$(wildcard $(MOC_QT5)))
  178. HAVE_QT5=false
  179. endif
  180. endif
  181. # --------------------------------------------------------------
  182. # Set default Qt used in frontend
  183. ifeq ($(HAVE_QT4),true)
  184. DEFAULT_QT ?= 4
  185. else
  186. DEFAULT_QT ?= 5
  187. endif
  188. # --------------------------------------------------------------
  189. # Check for optional libs (required by internal plugins)
  190. HAVE_ZYN_DEPS = $(shell pkg-config --exists fftw3 mxml zlib && echo true)
  191. HAVE_ZYN_UI_DEPS = $(shell pkg-config --exists ntk_images ntk && echo true)
  192. # --------------------------------------------------------------
  193. # Set base defines
  194. ifeq ($(HAVE_FLUIDSYNTH),true)
  195. BASE_FLAGS += -DHAVE_FLUIDSYNTH
  196. endif
  197. ifeq ($(HAVE_LINUXSAMPLER),true)
  198. BASE_FLAGS += -DHAVE_LINUXSAMPLER
  199. endif
  200. ifeq ($(HAVE_X11),true)
  201. BASE_FLAGS += -DHAVE_X11
  202. endif
  203. ifeq ($(CARLA_VESTIGE_HEADER),true)
  204. BASE_FLAGS += -DVESTIGE_HEADER
  205. endif
  206. # --------------------------------------------------------------
  207. # Set libs stuff (part 1)
  208. LIBLO_FLAGS = $(shell pkg-config --cflags liblo)
  209. LIBLO_LIBS = $(shell pkg-config --libs liblo)
  210. ifeq ($(HAVE_FLUIDSYNTH),true)
  211. FLUIDSYNTH_FLAGS = $(shell pkg-config --cflags fluidsynth)
  212. FLUIDSYNTH_LIBS = $(shell pkg-config --libs fluidsynth)
  213. endif
  214. ifeq ($(HAVE_LINUXSAMPLER),true)
  215. LINUXSAMPLER_FLAGS = $(shell pkg-config --cflags linuxsampler) -Wno-unused-parameter
  216. LINUXSAMPLER_LIBS = $(shell pkg-config --libs linuxsampler)
  217. endif
  218. ifeq ($(HAVE_X11),true)
  219. X11_FLAGS = $(shell pkg-config --cflags x11)
  220. X11_LIBS = $(shell pkg-config --libs x11)
  221. endif
  222. # --------------------------------------------------------------
  223. # Set libs stuff (part 2)
  224. RTAUDIO_FLAGS = -DHAVE_GETTIMEOFDAY -D__UNIX_JACK__
  225. ifeq ($(DEBUG),true)
  226. RTAUDIO_FLAGS += -D__RTAUDIO_DEBUG__
  227. RTMIDI_FLAGS += -D__RTMIDI_DEBUG__
  228. endif
  229. ifneq ($(HAIKU),true)
  230. RTMEMPOOL_LIBS = -lpthread
  231. endif
  232. ifeq ($(LINUX),true)
  233. JACKBRIDGE_LIBS = -ldl -lpthread -lrt
  234. JUCE_CORE_LIBS = -ldl -lpthread -lrt
  235. LILV_LIBS = -ldl -lm -lrt
  236. ifeq ($(HAVE_ALSA),true)
  237. RTAUDIO_FLAGS += $(shell pkg-config --cflags alsa) -D__LINUX_ALSA__
  238. RTAUDIO_LIBS += $(shell pkg-config --libs alsa) -lpthread
  239. RTMIDI_FLAGS += $(shell pkg-config --cflags alsa) -D__LINUX_ALSA__
  240. RTMIDI_LIBS += $(shell pkg-config --libs alsa)
  241. endif
  242. ifeq ($(HAVE_PULSEAUDIO),true)
  243. RTAUDIO_FLAGS += $(shell pkg-config --cflags libpulse-simple) -D__LINUX_PULSE__
  244. RTAUDIO_LIBS += $(shell pkg-config --libs libpulse-simple)
  245. endif
  246. endif
  247. ifeq ($(MACOS),true)
  248. JACKBRIDGE_LIBS = -ldl -lpthread
  249. JUCE_AUDIO_BASICS_LIBS = -framework Accelerate
  250. JUCE_AUDIO_DEVICES_LIBS = -framework AppKit -framework AudioToolbox -framework CoreAudio -framework CoreMIDI
  251. JUCE_AUDIO_FORMATS_LIBS = -framework AudioToolbox -framework CoreFoundation
  252. JUCE_AUDIO_PROCESSORS_LIBS = -framework AudioToolbox -framework AudioUnit -framework CoreAudio -framework CoreAudioKit -framework Cocoa -framework Carbon
  253. JUCE_CORE_LIBS = -framework AppKit
  254. JUCE_EVENTS_LIBS = -framework AppKit
  255. JUCE_GRAPHICS_LIBS = -framework Cocoa -framework QuartzCore
  256. JUCE_GUI_BASICS_LIBS = -framework Cocoa
  257. JUCE_GUI_EXTRA_LIBS = -framework Cocoa -framework IOKit
  258. LILV_LIBS = -ldl -lm
  259. endif
  260. ifeq ($(WIN32),true)
  261. JACKBRIDGE_LIBS = -lpthread
  262. JUCE_AUDIO_DEVICES_LIBS = -lwinmm -lole32
  263. JUCE_CORE_LIBS = -luuid -lwsock32 -lwininet -lversion -lole32 -lws2_32 -loleaut32 -limm32 -lcomdlg32 -lshlwapi -lrpcrt4 -lwinmm
  264. # JUCE_EVENTS_LIBS = -lole32
  265. JUCE_GRAPHICS_LIBS = -lgdi32
  266. JUCE_GUI_BASICS_LIBS = -lgdi32 -limm32 -lcomdlg32 -lole32
  267. LILV_LIBS = -lm
  268. endif
  269. # --------------------------------------------------------------
  270. # Set libs stuff (part 3)
  271. ifeq ($(HAVE_ZYN_DEPS),true)
  272. NATIVE_PLUGINS_FLAGS += -DWANT_ZYNADDSUBFX
  273. NATIVE_PLUGINS_LIBS += $(shell pkg-config --libs fftw3 mxml zlib)
  274. ifeq ($(HAVE_ZYN_UI_DEPS),true)
  275. NATIVE_PLUGINS_FLAGS += -DWANT_ZYNADDSUBFX_UI
  276. NATIVE_PLUGINS_LIBS += $(shell pkg-config --libs ntk_images ntk)
  277. endif
  278. endif
  279. # --------------------------------------------------------------
  280. # Set app extension
  281. ifeq ($(WIN32),true)
  282. APP_EXT = .exe
  283. endif
  284. # --------------------------------------------------------------
  285. # Set shared lib extension
  286. LIB_EXT = .so
  287. ifeq ($(MACOS),true)
  288. LIB_EXT = .dylib
  289. endif
  290. ifeq ($(WIN32),true)
  291. LIB_EXT = .dll
  292. endif
  293. # --------------------------------------------------------------
  294. # Set static libs start & end
  295. ifneq ($(MACOS),true)
  296. LIBS_START = -Wl,--start-group
  297. LIBS_END = -Wl,--end-group
  298. endif
  299. # --------------------------------------------------------------
  300. # Set shared library CLI arg
  301. ifeq ($(MACOS),true)
  302. SHARED = -dynamiclib
  303. else
  304. SHARED = -shared
  305. endif
  306. # --------------------------------------------------------------