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 14KB

11 years ago
7 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
10 years ago
9 years ago
9 years ago
9 years ago
10 years ago
9 years ago
11 years ago
8 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
10 years ago
10 years ago
10 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
10 years ago
10 years ago
10 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543
  1. #!/usr/bin/make -f
  2. # Makefile for Carla C++ code #
  3. # --------------------------- #
  4. # Created by falkTX
  5. #
  6. # ---------------------------------------------------------------------------------------------------------------------
  7. # Base environment vars
  8. AR ?= ar
  9. CC ?= gcc
  10. CXX ?= g++
  11. # ---------------------------------------------------------------------------------------------------------------------
  12. # Auto-detect OS if not defined
  13. ifneq ($(BSD),true)
  14. ifneq ($(HAIKU),true)
  15. ifneq ($(HURD),true)
  16. ifneq ($(LINUX),true)
  17. ifneq ($(MACOS),true)
  18. ifneq ($(WIN32),true)
  19. TARGET_MACHINE := $(shell $(CC) -dumpmachine)
  20. ifneq (,$(findstring bsd,$(TARGET_MACHINE)))
  21. BSD=true
  22. endif
  23. ifneq (,$(findstring haiku,$(TARGET_MACHINE)))
  24. HAIKU=true
  25. endif
  26. ifneq (,$(findstring gnu,$(TARGET_MACHINE)))
  27. HURD=true
  28. endif
  29. ifneq (,$(findstring linux,$(TARGET_MACHINE)))
  30. LINUX=true
  31. endif
  32. ifneq (,$(findstring apple,$(TARGET_MACHINE)))
  33. MACOS=true
  34. endif
  35. ifneq (,$(findstring mingw,$(TARGET_MACHINE)))
  36. WIN32=true
  37. endif
  38. endif
  39. endif
  40. endif
  41. endif
  42. endif
  43. endif
  44. # ---------------------------------------------------------------------------------------------------------------------
  45. # Set LINUX_OR_MACOS
  46. ifeq ($(LINUX),true)
  47. LINUX_OR_MACOS=true
  48. endif
  49. ifeq ($(MACOS),true)
  50. LINUX_OR_MACOS=true
  51. endif
  52. # ---------------------------------------------------------------------------------------------------------------------
  53. # Set MACOS_OR_WIN32
  54. ifeq ($(MACOS),true)
  55. MACOS_OR_WIN32=true
  56. endif
  57. ifeq ($(WIN32),true)
  58. MACOS_OR_WIN32=true
  59. endif
  60. # ---------------------------------------------------------------------------------------------------------------------
  61. # Set UNIX
  62. ifeq ($(BSD),true)
  63. UNIX=true
  64. endif
  65. ifeq ($(HURD),true)
  66. UNIX=true
  67. endif
  68. ifeq ($(LINUX),true)
  69. UNIX=true
  70. endif
  71. ifeq ($(MACOS),true)
  72. UNIX=true
  73. endif
  74. # ---------------------------------------------------------------------------------------------------------------------
  75. # Set build and link flags
  76. BASE_FLAGS = -Wall -Wextra -pipe -DBUILDING_CARLA -DREAL_BUILD -MD -MP
  77. BASE_OPTS = -O3 -ffast-math -mtune=generic -msse -msse2 -mfpmath=sse -fdata-sections -ffunction-sections
  78. ifeq ($(MACOS),true)
  79. # MacOS linker flags
  80. LINK_OPTS = -fdata-sections -ffunction-sections -Wl,-dead_strip -Wl,-dead_strip_dylibs
  81. else
  82. # Common linker flags
  83. LINK_OPTS = -fdata-sections -ffunction-sections -Wl,--gc-sections -Wl,-O1 -Wl,--as-needed
  84. ifneq ($(SKIP_STRIPPING),true)
  85. LINK_OPTS += -Wl,--strip-all
  86. endif
  87. endif
  88. ifeq ($(NOOPT),true)
  89. # No CPU-specific optimization flags
  90. BASE_OPTS = -O2 -ffast-math -fdata-sections -ffunction-sections
  91. endif
  92. ifneq ($(WIN32),true)
  93. # Not needed for Windows
  94. BASE_FLAGS += -fPIC -DPIC
  95. else
  96. ifeq ($(BUILDING_FOR_WINDOWS),true)
  97. BASE_FLAGS += -DBUILDING_CARLA_FOR_WINDOWS
  98. endif
  99. endif
  100. ifeq ($(CLANG),true)
  101. BASE_FLAGS += -Wabsolute-value
  102. endif
  103. ifeq ($(DEBUG),true)
  104. BASE_FLAGS += -DDEBUG -O0 -g
  105. LINK_OPTS =
  106. else
  107. BASE_FLAGS += -DNDEBUG $(BASE_OPTS) -fvisibility=hidden
  108. CXXFLAGS += -fvisibility-inlines-hidden
  109. endif
  110. 32BIT_FLAGS = -m32
  111. 64BIT_FLAGS = -m64
  112. BUILD_C_FLAGS = $(BASE_FLAGS) -std=gnu99 $(CFLAGS)
  113. BUILD_CXX_FLAGS = $(BASE_FLAGS) -std=gnu++0x $(CXXFLAGS)
  114. LINK_FLAGS = $(LINK_OPTS) $(LDFLAGS)
  115. ifneq ($(MACOS),true)
  116. # Not available on MacOS
  117. LINK_FLAGS += -Wl,--no-undefined
  118. endif
  119. ifeq ($(MACOS_OLD),true)
  120. BUILD_CXX_FLAGS = $(BASE_FLAGS) $(CXXFLAGS) -DHAVE_CPP11_SUPPORT=0
  121. endif
  122. ifeq ($(WIN32),true)
  123. # Always build statically on windows
  124. LINK_FLAGS += -static
  125. endif
  126. # ---------------------------------------------------------------------------------------------------------------------
  127. # Strict test build
  128. ifeq ($(TESTBUILD),true)
  129. BASE_FLAGS += -Werror -Wabi -Wcast-qual -Wclobbered -Wconversion -Wdisabled-optimization -Wfloat-equal -Wformat=2 -Winit-self -Wmissing-declarations
  130. BASE_FLAGS += -Woverlength-strings -Wpointer-arith -Wredundant-decls -Wshadow -Wsign-conversion -Wundef -Wuninitialized -Wunused
  131. BASE_FLAGS += -Wstrict-aliasing -fstrict-aliasing
  132. BASE_FLAGS += -Wstrict-overflow -fstrict-overflow
  133. CFLAGS += -Wnested-externs -Wmissing-prototypes -Wstrict-prototypes -Wwrite-strings
  134. CXXFLAGS += -Wc++0x-compat -Wc++11-compat -Weffc++ -Wnon-virtual-dtor -Woverloaded-virtual -Wzero-as-null-pointer-constant
  135. ifeq ($(LINUX),true)
  136. BASE_FLAGS += -isystem /opt/kxstudio/include
  137. CXXFLAGS += -isystem /usr/include/glib-2.0
  138. CXXFLAGS += -isystem /usr/include/glib-2.0/glib
  139. CXXFLAGS += -isystem /usr/include/gtk-2.0
  140. CXXFLAGS += -isystem /usr/include/gtk-2.0/gio
  141. ifeq ($(DEFAULT_QT),4)
  142. CXXFLAGS += -isystem /usr/include/qt4
  143. else
  144. CXXFLAGS += -isystem /usr/include/qt5
  145. endif
  146. endif
  147. ifeq ($(MACOS),true)
  148. BASE_FLAGS += -isystem /opt/kxstudio/include
  149. CXXFLAGS += -isystem /System/Library/Frameworks
  150. endif
  151. ifeq ($(WIN64),true)
  152. BASE_FLAGS += -isystem /opt/mingw64/include
  153. else
  154. ifeq ($(WIN32),true)
  155. BASE_FLAGS += -isystem /opt/mingw32/include
  156. endif
  157. endif
  158. endif
  159. # ---------------------------------------------------------------------------------------------------------------------
  160. # Check for optional libs (required by backend or bridges)
  161. ifeq ($(LINUX),true)
  162. HAVE_ALSA = $(shell pkg-config --exists alsa && echo true)
  163. HAVE_HYLIA = true
  164. endif
  165. ifeq ($(MACOS),true)
  166. ifneq ($(MACOS_OLD),true)
  167. HAVE_HYLIA = true
  168. endif
  169. endif
  170. ifeq ($(MACOS_OR_WIN32),true)
  171. HAVE_DGL = true
  172. else
  173. HAVE_DGL = $(shell pkg-config --exists gl x11 && echo true)
  174. HAVE_GTK2 = $(shell pkg-config --exists gtk+-2.0 && echo true)
  175. HAVE_GTK3 = $(shell pkg-config --exists gtk+-3.0 && echo true)
  176. HAVE_X11 = $(shell pkg-config --exists x11 && echo true)
  177. endif
  178. ifeq ($(UNIX),true)
  179. ifneq ($(MACOS),true)
  180. HAVE_PULSEAUDIO = $(shell pkg-config --exists libpulse-simple && echo true)
  181. endif
  182. endif
  183. HAVE_FFMPEG = $(shell pkg-config --exists libavcodec libavformat libavutil && echo true)
  184. HAVE_FLUIDSYNTH = $(shell pkg-config --exists fluidsynth && echo true)
  185. HAVE_LIBLO = $(shell pkg-config --exists liblo && echo true)
  186. HAVE_QT4 = $(shell pkg-config --exists QtCore QtGui && echo true)
  187. HAVE_QT5 = $(shell pkg-config --exists Qt5Core Qt5Gui Qt5Widgets && echo true)
  188. HAVE_SNDFILE = $(shell pkg-config --exists sndfile && echo true)
  189. # ---------------------------------------------------------------------------------------------------------------------
  190. # Check for optional libs (special non-pkgconfig tests)
  191. ifneq ($(WIN32),true)
  192. # libmagic doesn't have a pkg-config file, so we need to call the compiler to test it
  193. HAVE_LIBMAGIC = $(shell echo '\#include <magic.h>' | $(CC) $(CFLAGS) -x c -w -c - -o .libmagic-tmp 2>/dev/null && echo true)
  194. endif
  195. # ---------------------------------------------------------------------------------------------------------------------
  196. # Set Qt tools
  197. ifeq ($(HAVE_QT4),true)
  198. MOC_QT4 ?= $(shell pkg-config --variable=moc_location QtCore)
  199. RCC_QT4 ?= $(shell pkg-config --variable=rcc_location QtCore)
  200. UIC_QT4 ?= $(shell pkg-config --variable=uic_location QtCore)
  201. ifeq (,$(wildcard $(MOC_QT4)))
  202. HAVE_QT4=false
  203. endif
  204. ifeq (,$(wildcard $(RCC_QT4)))
  205. HAVE_QT4=false
  206. endif
  207. endif
  208. ifeq ($(HAVE_QT5),true)
  209. QT5_HOSTBINS = $(shell pkg-config --variable=host_bins Qt5Core)
  210. MOC_QT5 ?= $(QT5_HOSTBINS)/moc
  211. RCC_QT5 ?= $(QT5_HOSTBINS)/rcc
  212. UIC_QT5 ?= $(QT5_HOSTBINS)/uic
  213. ifeq (,$(wildcard $(MOC_QT5)))
  214. HAVE_QT5=false
  215. endif
  216. ifeq (,$(wildcard $(RCC_QT5)))
  217. HAVE_QT5=false
  218. endif
  219. endif
  220. ifeq ($(HAVE_QT4),true)
  221. HAVE_QT=true
  222. endif
  223. ifeq ($(HAVE_QT5),true)
  224. HAVE_QT=true
  225. endif
  226. ifeq ($(WIN32),true)
  227. HAVE_QT=true
  228. endif
  229. # ---------------------------------------------------------------------------------------------------------------------
  230. # Set PyQt tools
  231. PYRCC4 ?= $(shell which pyrcc4 2>/dev/null)
  232. PYUIC4 ?= $(shell which pyuic4 2>/dev/null)
  233. PYRCC5 ?= $(shell which pyrcc5 2>/dev/null)
  234. PYUIC5 ?= $(shell which pyuic5 2>/dev/null)
  235. HAVE_PYQT4=false
  236. HAVE_PYQT5=false
  237. ifneq ($(PYUIC4),)
  238. ifneq ($(PYRCC4),)
  239. HAVE_PYQT=true
  240. HAVE_PYQT4=true
  241. endif
  242. endif
  243. ifneq ($(PYUIC5),)
  244. ifneq ($(PYRCC5),)
  245. HAVE_PYQT=true
  246. HAVE_PYQT5=true
  247. endif
  248. endif
  249. # ---------------------------------------------------------------------------------------------------------------------
  250. # Set default Qt used in frontend
  251. ifeq ($(HAVE_PYQT5),true)
  252. DEFAULT_QT ?= 5
  253. else
  254. DEFAULT_QT ?= 4
  255. endif
  256. # ---------------------------------------------------------------------------------------------------------------------
  257. # Set base defines
  258. ifeq ($(HAVE_DGL),true)
  259. BASE_FLAGS += -DHAVE_DGL
  260. BASE_FLAGS += -DDGL_NAMESPACE=CarlaDGL -DDGL_FILE_BROWSER_DISABLED -DDGL_NO_SHARED_RESOURCES
  261. endif
  262. ifeq ($(HAVE_FLUIDSYNTH),true)
  263. BASE_FLAGS += -DHAVE_FLUIDSYNTH
  264. endif
  265. ifeq ($(HAVE_FFMPEG),true)
  266. BASE_FLAGS += -DHAVE_FFMPEG
  267. endif
  268. ifeq ($(HAVE_HYLIA),true)
  269. BASE_FLAGS += -DHAVE_HYLIA
  270. endif
  271. ifeq ($(HAVE_LIBLO),true)
  272. BASE_FLAGS += -DHAVE_LIBLO
  273. endif
  274. ifeq ($(HAVE_LIBMAGIC),true)
  275. BASE_FLAGS += -DHAVE_LIBMAGIC
  276. endif
  277. ifeq ($(HAVE_PYQT),true)
  278. BASE_FLAGS += -DHAVE_PYQT
  279. endif
  280. ifeq ($(HAVE_SNDFILE),true)
  281. BASE_FLAGS += -DHAVE_SNDFILE
  282. endif
  283. ifeq ($(HAVE_X11),true)
  284. BASE_FLAGS += -DHAVE_X11
  285. endif
  286. # ---------------------------------------------------------------------------------------------------------------------
  287. # Set libs stuff (part 1)
  288. ifeq ($(LINUX_OR_MACOS),true)
  289. LIBDL_LIBS = -ldl
  290. endif
  291. ifeq ($(HAVE_DGL),true)
  292. ifeq ($(MACOS),true)
  293. DGL_LIBS = -framework OpenGL -framework Cocoa
  294. endif
  295. ifeq ($(WIN32),true)
  296. DGL_LIBS = -lopengl32 -lgdi32
  297. endif
  298. ifneq ($(MACOS_OR_WIN32),true)
  299. DGL_FLAGS = $(shell pkg-config --cflags gl x11)
  300. DGL_LIBS = $(shell pkg-config --libs gl x11)
  301. endif
  302. endif
  303. ifeq ($(HAVE_LIBLO),true)
  304. LIBLO_FLAGS = $(shell pkg-config --cflags liblo)
  305. LIBLO_LIBS = $(shell pkg-config --libs liblo)
  306. endif
  307. ifeq ($(HAVE_LIBMAGIC),true)
  308. MAGIC_LIBS += -lmagic
  309. ifeq ($(LINUX_OR_MACOS),true)
  310. MAGIC_LIBS += -lz
  311. endif
  312. endif
  313. ifeq ($(HAVE_FFMPEG),true)
  314. FFMPEG_FLAGS = $(shell pkg-config --cflags libavcodec libavformat libavutil)
  315. FFMPEG_LIBS = $(shell pkg-config --libs libavcodec libavformat libavutil)
  316. endif
  317. ifeq ($(HAVE_FLUIDSYNTH),true)
  318. FLUIDSYNTH_FLAGS = $(shell pkg-config --cflags fluidsynth)
  319. FLUIDSYNTH_LIBS = $(shell pkg-config --libs fluidsynth)
  320. endif
  321. ifeq ($(HAVE_SNDFILE),true)
  322. SNDFILE_FLAGS = $(shell pkg-config --cflags sndfile)
  323. SNDFILE_LIBS = $(shell pkg-config --libs sndfile)
  324. endif
  325. ifeq ($(HAVE_X11),true)
  326. X11_FLAGS = $(shell pkg-config --cflags x11)
  327. X11_LIBS = $(shell pkg-config --libs x11)
  328. endif
  329. # ---------------------------------------------------------------------------------------------------------------------
  330. # Set libs stuff (part 2)
  331. RTAUDIO_FLAGS = -DHAVE_GETTIMEOFDAY
  332. RTMIDI_FLAGS =
  333. ifeq ($(DEBUG),true)
  334. RTAUDIO_FLAGS += -D__RTAUDIO_DEBUG__
  335. RTMIDI_FLAGS += -D__RTMIDI_DEBUG__
  336. endif
  337. ifeq ($(UNIX),true)
  338. RTAUDIO_FLAGS += -D__UNIX_JACK__
  339. ifeq ($(HAVE_PULSEAUDIO),true)
  340. RTAUDIO_FLAGS += $(shell pkg-config --cflags libpulse-simple) -D__UNIX_PULSE__
  341. RTAUDIO_LIBS += $(shell pkg-config --libs libpulse-simple)
  342. endif
  343. endif
  344. ifeq ($(BSD),true)
  345. JACKBRIDGE_LIBS = -lpthread -lrt
  346. LILV_LIBS = -lm -lrt
  347. RTMEMPOOL_LIBS = -lpthread
  348. WATER_LIBS = -lpthread -lrt
  349. endif
  350. ifneq ($(HAIKU),true)
  351. JACKBRIDGE_LIBS = -lpthread
  352. LILV_LIBS = -lm
  353. RTMEMPOOL_LIBS = -lpthread
  354. WATER_LIBS = -lpthread
  355. RTAUDIO_FLAGS += -D__RTAUDIO_DUMMY__
  356. RTMIDI_FLAGS += -D__RTMIDI_DUMMY__
  357. endif
  358. ifeq ($(HURD),true)
  359. JACKBRIDGE_LIBS = -ldl -lpthread -lrt
  360. LILV_LIBS = -ldl -lm -lrt
  361. RTMEMPOOL_LIBS = -lpthread -lrt
  362. WATER_LIBS = -ldl -lpthread -lrt
  363. endif
  364. ifeq ($(LINUX),true)
  365. HYLIA_FLAGS = -DLINK_PLATFORM_LINUX=1
  366. JACKBRIDGE_LIBS = -ldl -lpthread -lrt
  367. LILV_LIBS = -ldl -lm -lrt
  368. RTMEMPOOL_LIBS = -lpthread -lrt
  369. WATER_LIBS = -ldl -lpthread -lrt
  370. ifeq ($(HAVE_ALSA),true)
  371. RTAUDIO_FLAGS += $(shell pkg-config --cflags alsa) -D__LINUX_ALSA__
  372. RTAUDIO_LIBS += $(shell pkg-config --libs alsa) -lpthread
  373. RTMIDI_FLAGS += $(shell pkg-config --cflags alsa) -D__LINUX_ALSA__
  374. RTMIDI_LIBS += $(shell pkg-config --libs alsa)
  375. endif
  376. endif
  377. ifeq ($(MACOS),true)
  378. HYLIA_FLAGS = -DLINK_PLATFORM_MACOSX=1
  379. JACKBRIDGE_LIBS = -ldl -lpthread
  380. LILV_LIBS = -ldl -lm
  381. RTMEMPOOL_LIBS = -lpthread
  382. WATER_LIBS = -framework AppKit
  383. RTAUDIO_FLAGS += -D__MACOSX_CORE__
  384. RTAUDIO_LIBS += -framework CoreAudio
  385. RTMIDI_FLAGS += -D__MACOSX_CORE__
  386. RTMIDI_LIBS += -framework CoreMIDI
  387. endif
  388. ifeq ($(WIN32),true)
  389. HYLIA_FLAGS = -DLINK_PLATFORM_WINDOWS=1
  390. JACKBRIDGE_LIBS = -lpthread
  391. LILV_LIBS = -lm
  392. RTMEMPOOL_LIBS = -lpthread
  393. WATER_LIBS = -luuid -lwsock32 -lwininet -lversion -lole32 -lws2_32 -loleaut32 -limm32 -lcomdlg32 -lshlwapi -lrpcrt4 -lwinmm
  394. RTAUDIO_FLAGS += -D__WINDOWS_ASIO__ -D__WINDOWS_DS__ -D__WINDOWS_WASAPI__
  395. RTAUDIO_LIBS += -ldsound -luuid -lksuser -lwinmm
  396. RTMIDI_FLAGS += -D__WINDOWS_MM__
  397. endif
  398. # ---------------------------------------------------------------------------------------------------------------------
  399. NATIVE_PLUGINS_LIBS += $(DGL_LIBS)
  400. NATIVE_PLUGINS_LIBS += $(FFMPEG_LIBS)
  401. NATIVE_PLUGINS_LIBS += $(SNDFILE_LIBS)
  402. # ---------------------------------------------------------------------------------------------------------------------
  403. # Set app extension
  404. ifeq ($(WIN32),true)
  405. APP_EXT = .exe
  406. endif
  407. # ---------------------------------------------------------------------------------------------------------------------
  408. # Set shared lib extension
  409. LIB_EXT = .so
  410. ifeq ($(MACOS),true)
  411. LIB_EXT = .dylib
  412. endif
  413. ifeq ($(WIN32),true)
  414. LIB_EXT = .dll
  415. endif
  416. BASE_FLAGS += -DCARLA_LIB_EXT=\"$(LIB_EXT)\"
  417. # ---------------------------------------------------------------------------------------------------------------------
  418. # Set static libs start & end
  419. ifneq ($(MACOS),true)
  420. LIBS_START = -Wl,--start-group
  421. LIBS_END = -Wl,--end-group
  422. endif
  423. # ---------------------------------------------------------------------------------------------------------------------
  424. # Set shared library CLI arg
  425. ifeq ($(MACOS),true)
  426. SHARED = -dynamiclib
  427. else
  428. SHARED = -shared
  429. endif
  430. # ---------------------------------------------------------------------------------------------------------------------
  431. # Set arguments used for inline 'sed'
  432. ifeq ($(BSD),true)
  433. SED_ARGS=-i '' -e
  434. else
  435. SED_ARGS=-i -e
  436. endif
  437. # ---------------------------------------------------------------------------------------------------------------------
  438. ifneq (,$(wildcard $(CWD)/native-plugins/external/Makefile.mk))
  439. EXTERNAL_PLUGINS = true
  440. BASE_FLAGS += -DHAVE_EXTERNAL_PLUGINS
  441. include $(CWD)/native-plugins/external/Makefile.mk
  442. endif
  443. # ---------------------------------------------------------------------------------------------------------------------