2 # Makefile for Carla C++ code #
3 # --------------------------- #
7 # ---------------------------------------------------------------------------------------------------------------------
8 # Base environment vars
14 # ---------------------------------------------------------------------------------------------------------------------
15 # Auto-detect OS if not defined
17 TARGET_MACHINE
:= $(shell $(CC
) -dumpmachine
)
25 ifneq ($(WINDOWS
),true
)
27 ifneq (,$(findstring bsd
,$(TARGET_MACHINE
)))
29 else ifneq (,$(findstring haiku
,$(TARGET_MACHINE
)))
31 else ifneq (,$(findstring linux
,$(TARGET_MACHINE
)))
33 else ifneq (,$(findstring gnu
,$(TARGET_MACHINE
)))
35 else ifneq (,$(findstring apple
,$(TARGET_MACHINE
)))
37 else ifneq (,$(findstring mingw
,$(TARGET_MACHINE
)))
39 else ifneq (,$(findstring msys
,$(TARGET_MACHINE
)))
41 else ifneq (,$(findstring wasm
,$(TARGET_MACHINE
)))
43 else ifneq (,$(findstring windows
,$(TARGET_MACHINE
)))
55 # ---------------------------------------------------------------------------------------------------------------------
56 # Auto-detect the processor
58 TARGET_PROCESSOR
:= $(firstword $(subst -, ,$(TARGET_MACHINE
)))
60 ifneq (,$(filter i
%86,$(TARGET_PROCESSOR
)))
62 CPU_I386_OR_X86_64
= true
64 ifneq (,$(filter wasm32
,$(TARGET_PROCESSOR
)))
66 CPU_I386_OR_X86_64
= true
68 ifneq (,$(filter x86_64
,$(TARGET_PROCESSOR
)))
70 CPU_I386_OR_X86_64
= true
72 ifneq (,$(filter arm
%,$(TARGET_PROCESSOR
)))
74 CPU_ARM_OR_AARCH64
= true
76 ifneq (,$(filter arm64
%,$(TARGET_PROCESSOR
)))
78 CPU_ARM_OR_AARCH64
= true
80 ifneq (,$(filter aarch64
%,$(TARGET_PROCESSOR
)))
82 CPU_ARM_OR_AARCH64
= true
84 ifneq (,$(filter riscv64
%,$(TARGET_PROCESSOR
)))
88 # ---------------------------------------------------------------------------------------------------------------------
89 # Set PKG_CONFIG (can be overridden by environment variable)
92 # Skip on wasm by default
94 else ifeq ($(WINDOWS
),true
)
95 # Build statically on Windows by default
96 PKG_CONFIG ?
= pkg-config
--static
98 PKG_CONFIG ?
= pkg-config
101 # ---------------------------------------------------------------------------------------------------------------------
102 # Set cross compiling flag
105 CROSS_COMPILING
= true
108 # ---------------------------------------------------------------------------------------------------------------------
112 LINUX_OR_MACOS
= true
116 LINUX_OR_MACOS
= true
119 # ---------------------------------------------------------------------------------------------------------------------
120 # Set HAIKU_OR_MACOS_OR_WASM_OR_WINDOWS, HAIKU_OR_MACOS_OR_WINDOWS, MACOS_OR_WASM_OR_WINDOWS and MACOS_OR_WINDOWS
123 HAIKU_OR_MACOS_OR_WASM_OR_WINDOWS
= true
124 HAIKU_OR_MACOS_OR_WINDOWS
= true
128 HAIKU_OR_MACOS_OR_WASM_OR_WINDOWS
= true
129 HAIKU_OR_MACOS_OR_WINDOWS
= true
130 MACOS_OR_WASM_OR_WINDOWS
= true
131 MACOS_OR_WINDOWS
= true
135 HAIKU_OR_MACOS_OR_WASM_OR_WINDOWS
= true
136 MACOS_OR_WASM_OR_WINDOWS
= true
139 ifeq ($(WINDOWS
),true
)
140 HAIKU_OR_MACOS_OR_WASM_OR_WINDOWS
= true
141 HAIKU_OR_MACOS_OR_WINDOWS
= true
142 MACOS_OR_WASM_OR_WINDOWS
= true
143 MACOS_OR_WINDOWS
= true
146 # ---------------------------------------------------------------------------------------------------------------------
165 # ---------------------------------------------------------------------------------------------------------------------
166 # Check for optional libs (required by backend or bridges)
169 HAVE_ALSA
= $(shell $(PKG_CONFIG
) --exists alsa
&& echo true
)
171 else ifeq ($(MACOS
),true
)
173 else ifeq ($(WINDOWS
),true
)
177 ifeq ($(MACOS_OR_WASM_OR_WINDOWS
),true
)
181 HAVE_DBUS
= $(shell $(PKG_CONFIG
) --exists dbus-1
&& echo true
)
182 HAVE_DGL
= $(shell $(PKG_CONFIG
) --exists gl x11 xcursor xext xrandr
&& echo true
)
183 HAVE_YSFXGUI
= $(shell $(PKG_CONFIG
) --exists freetype2 fontconfig gl x11
&& echo true
)
184 HAVE_X11
= $(shell $(PKG_CONFIG
) --exists x11
&& echo true
)
185 HAVE_XCURSOR
= $(shell $(PKG_CONFIG
) --exists xcursor
&& echo true
)
186 HAVE_XEXT
= $(shell $(PKG_CONFIG
) --exists xext
&& echo true
)
187 HAVE_XRANDR
= $(shell $(PKG_CONFIG
) --exists xrandr
&& echo true
)
190 # FIXME update to DGL with wasm compat
195 # NOTE opt-out rather than opt-in
198 # NOTE not yet implemented, disabled for now
202 ifneq ($(MACOS
),true
)
203 HAVE_PULSEAUDIO
= $(shell $(PKG_CONFIG
) --exists libpulse-simple
&& echo true
)
207 # ffmpeg values taken from https://ffmpeg.org/download.html (v2.8.15 maximum)
208 HAVE_FFMPEG
= $(shell $(PKG_CONFIG
) --max-version
=56.60.100 libavcodec
&& \
209 $(PKG_CONFIG
) --max-version
=56.40.101 libavformat
&& \
210 $(PKG_CONFIG
) --max-version
=54.31.100 libavutil
&& echo true
)
211 HAVE_FLUIDSYNTH
= $(shell $(PKG_CONFIG
) --atleast-version
=1.1.7 fluidsynth
&& echo true
)
212 HAVE_LIBLO
= $(shell $(PKG_CONFIG
) --exists liblo
&& echo true
)
213 HAVE_QT4
= $(shell $(PKG_CONFIG
) --exists QtCore QtGui
&& echo true
)
214 HAVE_QT5
= $(shell $(PKG_CONFIG
) --exists Qt5Core Qt5Gui Qt5Widgets
&& \
215 $(PKG_CONFIG
) --variable
=qt_config Qt5Core | grep
-q
-v
"static" && echo true
)
216 HAVE_QT5PKG
= $(shell $(PKG_CONFIG
) --silence-errors
--variable
=prefix Qt5OpenGLExtensions
1>/dev
/null
&& echo true
)
217 HAVE_QT5BREW
= $(shell test -e
/usr
/local
/opt
/qt5
/bin
/uic
&& echo true
)
218 HAVE_SNDFILE
= $(shell $(PKG_CONFIG
) --exists sndfile
&& echo true
)
220 ifeq ($(HAVE_FLUIDSYNTH
),true
)
221 HAVE_FLUIDSYNTH_INSTPATCH
= $(shell $(PKG_CONFIG
) --atleast-version
=2.1.0 fluidsynth
&& \
222 $(PKG_CONFIG
) --atleast-version
=1.1.4 libinstpatch-1.0
&& echo true
)
225 ifeq ($(JACKBRIDGE_DIRECT
),true
)
226 HAVE_JACK
= $(shell $(PKG_CONFIG
) --exists jack
&& echo true
)
227 HAVE_JACKLIB
= $(HAVE_JACK
)
228 else ifeq ($(WASM
),true
)
240 HAVE_SDL1
= $(shell $(PKG_CONFIG
) --exists sdl
&& echo true
)
241 HAVE_SDL2
= $(shell $(PKG_CONFIG
) --exists sdl2
&& echo true
)
244 # ---------------------------------------------------------------------------------------------------------------------
245 # Check for optional libs (special non-pkgconfig tests)
248 ifneq ($(WINDOWS
),true
)
250 ifeq ($(shell $(PKG_CONFIG
) --exists libmagic
&& echo true
),true
)
252 HAVE_LIBMAGICPKG
= true
254 # old libmagic versions don't have a pkg-config file, so we need to call the compiler to test it
255 CFLAGS_WITHOUT_ARCH
= $(subst -arch arm64
,,$(CFLAGS
))
256 HAVE_LIBMAGIC
= $(shell echo
'\#include <magic.h>' |
$(CC
) $(CFLAGS_WITHOUT_ARCH
) -x c
-w
-c
- -o
/dev
/null
2>/dev
/null
&& echo true
)
262 # ---------------------------------------------------------------------------------------------------------------------
265 ifeq ($(HAVE_QT4
),true
)
266 MOC_QT4 ?
= $(shell $(PKG_CONFIG
) --variable
=moc_location QtCore
)
267 RCC_QT4 ?
= $(shell $(PKG_CONFIG
) --variable
=rcc_location QtCore
)
268 ifeq (,$(wildcard $(MOC_QT4
)))
271 ifeq (,$(wildcard $(RCC_QT4
)))
276 ifeq ($(HAVE_QT5
),true
)
277 QT5_HOSTBINS
= $(shell $(PKG_CONFIG
) --variable
=host_bins Qt5Core
)
278 else ifeq ($(HAVE_QT5PKG
),true
)
279 QT5_HOSTBINS
= $(shell $(PKG_CONFIG
) --variable
=prefix Qt5OpenGLExtensions
)/bin
280 else ifeq ($(HAVE_QT5BREW
),true
)
281 QT5_HOSTBINS
= /usr
/local
/opt
/qt5
/bin
284 MOC_QT5 ?
= $(QT5_HOSTBINS
)/moc
285 RCC_QT5 ?
= $(QT5_HOSTBINS
)/rcc
286 UIC_QT5 ?
= $(QT5_HOSTBINS
)/uic
288 ifeq (,$(wildcard $(MOC_QT5
)))
291 ifeq (,$(wildcard $(RCC_QT5
)))
294 ifeq (,$(wildcard $(UIC_QT5
)))
298 ifeq ($(HAVE_QT4
),true
)
300 else ifeq ($(HAVE_QT5
),true
)
303 else ifeq ($(WINDOWS
),true
)
307 ifneq (,$(findstring true
,$(HAVE_QT5
)$(HAVE_QT5PKG
)$(HAVE_QT5BREW
)))
311 # ---------------------------------------------------------------------------------------------------------------------
314 PYRCC5 ?
= $(shell which pyrcc5
2>/dev
/null
)
315 PYUIC5 ?
= $(shell which pyuic5
2>/dev
/null
)
320 ifneq (,$(findstring true
,$(HAVE_QT5
)$(HAVE_QT5PKG
)$(HAVE_QT5BREW
)))
326 # ---------------------------------------------------------------------------------------------------------------------
327 # Set PyQt tools, part2
332 # ---------------------------------------------------------------------------------------------------------------------
335 ifneq ($(HAIKU
),true
)
341 # ---------------------------------------------------------------------------------------------------------------------
342 # Disable features for static plugin target
344 ifeq ($(STATIC_PLUGIN_TARGET
),true
)
348 HAVE_FRONTEND
= false
351 HAVE_PULSEAUDIO
= false
360 USING_RTAUDIO
= false
363 # ---------------------------------------------------------------------------------------------------------------------
364 # Set libs stuff (part 1)
366 ifneq ($(HAIKU_OR_MACOS_OR_WINDOWS
),true
)
370 ifeq ($(HAVE_LIBLO
),true
)
371 LIBLO_FLAGS
= $(shell $(PKG_CONFIG
) --cflags liblo
)
372 LIBLO_LIBS
= $(shell $(PKG_CONFIG
) --libs liblo
)
375 ifeq ($(HAVE_FFMPEG
),true
)
376 FFMPEG_FLAGS
= $(shell $(PKG_CONFIG
) --cflags libavcodec libavformat libavutil
)
377 FFMPEG_LIBS
= $(shell $(PKG_CONFIG
) --libs libavcodec libavformat libavutil
)
380 ifeq ($(HAVE_FLUIDSYNTH
),true
)
381 FLUIDSYNTH_FLAGS
= $(shell $(PKG_CONFIG
) --cflags fluidsynth
)
382 FLUIDSYNTH_LIBS
= $(shell $(PKG_CONFIG
) --libs fluidsynth
)
385 ifeq ($(HAVE_JACKLIB
),true
)
386 JACK_FLAGS
= $(shell $(PKG_CONFIG
) --cflags jack
)
387 JACK_LIBS
= $(shell $(PKG_CONFIG
) --libs jack
)
388 JACK_LIBDIR
= $(shell $(PKG_CONFIG
) --variable
=libdir jack
)/jack
391 ifeq ($(HAVE_QT5
),true
)
392 QT5_FLAGS
= $(shell $(PKG_CONFIG
) --cflags Qt5Core Qt5Gui Qt5Widgets
)
393 QT5_LIBS
= $(shell $(PKG_CONFIG
) --libs Qt5Core Qt5Gui Qt5Widgets
)
398 SDL_FLAGS
= -sUSE_SDL
=2
399 SDL_LIBS
= -sUSE_SDL
=2
400 else ifeq ($(HAVE_SDL2
),true
)
402 SDL_FLAGS
= $(shell $(PKG_CONFIG
) $(PKG_CONFIG_FLAGS
) --cflags sdl2
)
403 SDL_LIBS
= $(shell $(PKG_CONFIG
) $(PKG_CONFIG_FLAGS
) --libs sdl2
)
404 else ifeq ($(HAVE_SDL1
),true
)
406 SDL_FLAGS
= $(shell $(PKG_CONFIG
) $(PKG_CONFIG_FLAGS
) --cflags sdl
)
407 SDL_LIBS
= $(shell $(PKG_CONFIG
) $(PKG_CONFIG_FLAGS
) --libs sdl
)
410 ifeq ($(HAVE_SNDFILE
),true
)
411 SNDFILE_FLAGS
= $(shell $(PKG_CONFIG
) --cflags sndfile
)
412 SNDFILE_LIBS
= $(shell $(PKG_CONFIG
) --libs sndfile
)
415 # ifeq ($(HAVE_YSFXGUI),true)
416 # ifeq ($(MACOS),true)
417 # YSFX_LIBS = -framework Cocoa -framework Carbon -framework Metal -framework Foundation
418 # else ifeq ($(WASM),true)
422 # YSFX_FLAGS = $(shell $(PKG_CONFIG) --cflags freetype2 fontconfig)
423 # YSFX_LIBS = $(shell $(PKG_CONFIG) --libs freetype2 fontconfig gl x11)
427 ifeq ($(HAVE_X11
),true
)
428 X11_FLAGS
= $(shell $(PKG_CONFIG
) --cflags x11
)
429 X11_LIBS
= $(shell $(PKG_CONFIG
) --libs x11
)
432 # ---------------------------------------------------------------------------------------------------------------------
433 # Set libs stuff (dgl)
435 ifeq ($(HAVE_DGL
),true
)
437 DGL_FLAGS
= -DHAVE_OPENGL
-DDGL_OPENGL
-DHAVE_DGL
440 DGL_FLAGS
+= $(shell $(PKG_CONFIG
) --cflags gl
)
441 DGL_LIBS
= $(shell $(PKG_CONFIG
) --libs gl
) -lbe
442 else ifeq ($(MACOS
),true
)
443 DGL_FLAGS
+= -DGL_SILENCE_DEPRECATION
=1 -Wno-deprecated-declarations
444 DGL_LIBS
= -framework OpenGL
-framework Cocoa
-framework CoreVideo
445 else ifeq ($(WASM
),true
)
446 ifneq ($(USE_GLES2
)$(USE_GLES3
),true
)
447 DGL_LIBS
= -sLEGACY_GL_EMULATION
-sGL_UNSAFE_OPTS
=0
449 else ifeq ($(WINDOWS
),true
)
450 DGL_LIBS
= -lcomdlg32
-ldwmapi
-lopengl32
-lgdi32
452 DGL_FLAGS
+= -DHAVE_X11
-DHAVE_XCURSOR
-DHAVE_XEXT
-DHAVE_XSYNC
-DHAVE_XRANDR
453 DGL_FLAGS
+= $(shell $(PKG_CONFIG
) --cflags gl x11 xcursor xext xrandr
)
454 DGL_LIBS
= $(shell $(PKG_CONFIG
) --libs gl x11 xcursor xext xrandr
)
455 ifeq ($(HAVE_DBUS
)$(STATIC_PLUGIN_TARGET
)$(USING_CUSTOM_DPF
),truetruetrue
)
456 DGL_FLAGS
+= -DHAVE_DBUS
457 DGL_FLAGS
+= $(shell $(PKG_CONFIG
) --cflags dbus-1
)
458 DGL_LIBS
+= $(shell $(PKG_CONFIG
) --libs dbus-1
)
464 # ---------------------------------------------------------------------------------------------------------------------
465 # Set libs stuff (libmagic)
467 ifeq ($(HAVE_LIBMAGICPKG
),true
)
469 MAGIC_FLAGS
= $(shell $(PKG_CONFIG
) --cflags libmagic
)
470 # this is missing in upstream pkg-config
471 MAGIC_FLAGS
+= -I
$(shell $(PKG_CONFIG
) --variable
=includedir libmagic
)
472 MAGIC_LIBS
= $(shell $(PKG_CONFIG
) --libs libmagic
)
474 else ifeq ($(HAVE_LIBMAGIC
),true
)
476 MAGIC_LIBS
+= -lmagic
477 ifeq ($(LINUX_OR_MACOS
),true
)
483 # ---------------------------------------------------------------------------------------------------------------------
484 # Set libs stuff (rtaudio)
486 ifeq ($(USING_RTAUDIO
),true
)
488 RTAUDIO_FLAGS
= -DHAVE_GETTIMEOFDAY
492 RTAUDIO_FLAGS
+= -D__RTAUDIO_DEBUG__
493 RTMIDI_FLAGS
+= -D__RTMIDI_DEBUG__
496 ifeq ($(HAVE_ALSA
),true
)
497 RTAUDIO_FLAGS
+= $(shell $(PKG_CONFIG
) --cflags alsa
) -D__LINUX_ALSA__
498 RTAUDIO_LIBS
+= $(shell $(PKG_CONFIG
) --libs alsa
) -pthread
499 RTMIDI_FLAGS
+= $(shell $(PKG_CONFIG
) --cflags alsa
) -D__LINUX_ALSA__
500 RTMIDI_LIBS
+= $(shell $(PKG_CONFIG
) --libs alsa
)
503 ifeq ($(HAVE_JACK
),true
)
505 RTAUDIO_FLAGS
+= -D__UNIX_JACK__
509 ifeq ($(HAVE_PULSEAUDIO
),true
)
510 RTAUDIO_FLAGS
+= $(shell $(PKG_CONFIG
) --cflags libpulse-simple
) -D__UNIX_PULSE__
511 RTAUDIO_LIBS
+= $(shell $(PKG_CONFIG
) --libs libpulse-simple
)
515 RTAUDIO_FLAGS
+= -D__MACOSX_CORE__
516 RTAUDIO_LIBS
+= -framework CoreAudio
517 RTMIDI_FLAGS
+= -D__MACOSX_CORE__
518 RTMIDI_LIBS
+= -framework CoreMIDI
519 else ifeq ($(WINDOWS
),true
)
520 RTAUDIO_FLAGS
+= -D__WINDOWS_ASIO__
-D__WINDOWS_DS__
-D__WINDOWS_WASAPI__
521 RTAUDIO_LIBS
+= -ldsound
-luuid
-lksuser
522 RTMIDI_FLAGS
+= -D__WINDOWS_MM__
523 RTMIDI_LIBS
+= -lwinmm
528 # ---------------------------------------------------------------------------------------------------------------------
529 # Set libs stuff (extra)
535 JACKBRIDGE_LIBS
= -pthread
-lrt
537 RTMEMPOOL_LIBS
= -pthread
538 WATER_LIBS
= -pthread
-lrt
540 else ifeq ($(HAIKU
),true
)
544 JACKBRIDGE_LIBS
= -lpthread
546 RTMEMPOOL_LIBS
= -lpthread
547 WATER_LIBS
= -lpthread
549 else ifeq ($(HURD
),true
)
553 JACKBRIDGE_LIBS
= -ldl
-pthread
-lrt
554 LILV_LIBS
= -ldl
-lm
-lrt
555 RTMEMPOOL_LIBS
= -pthread
-lrt
556 WATER_LIBS
= -ldl
-pthread
-lrt
558 else ifeq ($(LINUX
),true
)
560 HYLIA_FLAGS
= -DLINK_PLATFORM_LINUX
=1
562 JACKBRIDGE_LIBS
= -ldl
-pthread
-lrt
563 LILV_LIBS
= -ldl
-lm
-lrt
564 RTMEMPOOL_LIBS
= -pthread
-lrt
565 WATER_LIBS
= -ldl
-pthread
-lrt
567 else ifeq ($(MACOS
),true
)
569 HYLIA_FLAGS
= -DLINK_PLATFORM_MACOSX
=1
571 JACKBRIDGE_LIBS
= -pthread
573 RTMEMPOOL_LIBS
= -pthread
574 WATER_LIBS
= -pthread
-framework AppKit
576 else ifeq ($(WASM
),true
)
585 else ifeq ($(WINDOWS
),true
)
587 HYLIA_FLAGS
= -DLINK_PLATFORM_WINDOWS
=1
588 HYLIA_LIBS
= -liphlpapi
589 JACKBRIDGE_LIBS
= -pthread
591 RTMEMPOOL_LIBS
= -pthread
592 WATER_LIBS
= -pthread
-luuid
-lwsock32
-lwininet
-lversion
-lole32
-lws2_32
-loleaut32
-limm32
-lcomdlg32
-lshlwapi
-lrpcrt4
-lwinmm
596 # ---------------------------------------------------------------------------------------------------------------------
598 AUDIO_DECODER_LIBS
= $(FFMPEG_LIBS
)
599 AUDIO_DECODER_LIBS
+= $(SNDFILE_LIBS
)
601 NATIVE_PLUGINS_LIBS
+= $(DGL_LIBS
)
602 NATIVE_PLUGINS_LIBS
+= $(FFMPEG_LIBS
)
603 NATIVE_PLUGINS_LIBS
+= $(SNDFILE_LIBS
)
605 STATIC_CARLA_PLUGIN_LIBS
= $(AUDIO_DECODER_LIBS
)
606 STATIC_CARLA_PLUGIN_LIBS
+= $(NATIVE_PLUGINS_LIBS
)
607 STATIC_CARLA_PLUGIN_LIBS
+= $(FLUIDSYNTH_LIBS
)
608 STATIC_CARLA_PLUGIN_LIBS
+= $(HYLIA_LIBS
)
609 STATIC_CARLA_PLUGIN_LIBS
+= $(LIBLO_LIBS
)
610 STATIC_CARLA_PLUGIN_LIBS
+= $(LILV_LIBS
)
611 STATIC_CARLA_PLUGIN_LIBS
+= $(MAGIC_LIBS
)
612 STATIC_CARLA_PLUGIN_LIBS
+= $(RTMEMPOOL_LIBS
)
613 STATIC_CARLA_PLUGIN_LIBS
+= $(WATER_LIBS
)
614 STATIC_CARLA_PLUGIN_LIBS
+= $(YSFX_LIBS
)
616 ifeq ($(EXTERNAL_PLUGINS
),true
)
617 ifneq ($(DEBUG
),true
)
618 ifneq ($(TESTBUILD
),true
)
619 ifeq ($(shell $(PKG_CONFIG
) --exists liblo fftw3 mxml zlib
&& echo true
),true
)
620 STATIC_CARLA_PLUGIN_LIBS
+= $(filter-out -lpthread
,$(shell $(PKG_CONFIG
) --libs liblo fftw3 mxml zlib
))
622 STATIC_CARLA_PLUGIN_LIBS
+= -pthread
629 # ---------------------------------------------------------------------------------------------------------------------