-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
215 lines (187 loc) · 6.85 KB
/
CMakeLists.txt
File metadata and controls
215 lines (187 loc) · 6.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
if(NOT FLTK_FOUND)
return()
endif()
INCLUDE(BuildPlugin)
find_package(Threads REQUIRED)
find_package(ZLIB REQUIRED)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
# definitions for ZynAddSubFX
IF(LMMS_BUILD_LINUX OR LMMS_BUILD_APPLE OR LMMS_BUILD_OPENBSD OR LMMS_BUILD_FREEBSD)
FIND_PACKAGE(X11)
include_directories(SYSTEM ${X11_INCLUDE_DIR})
ADD_DEFINITIONS(-DOS_LINUX)
ELSE()
ADD_DEFINITIONS(-DOS_WINDOWS)
ENDIF()
# use asm optimizations when on x86 or x86_64
if(NOT MSVC AND (LMMS_HOST_X86 OR LMMS_HOST_X86_64))
ADD_DEFINITIONS(-DASM_F2I_YES)
endif()
# build ZynAddSubFX with full optimizations
if(NOT MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -Wno-write-strings -Wno-deprecated-declarations -fpermissive")
endif()
IF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND NOT "${CMAKE_CXX_COMPILER_VERSION}" VERSION_LESS "6.0.0")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-misleading-indentation -Wno-format-truncation")
ENDIF()
IF(MINGW_PREFIX)
SET(FLTK_FLUID_EXECUTABLE "${MINGW_PREFIX}/bin/fluid")
ENDIF()
IF(NOT EXISTS ${FLTK_FLUID_EXECUTABLE})
# Try to detect full path anyway
EXECUTE_PROCESS(COMMAND which fluid OUTPUT_VARIABLE FLTK_FLUID_EXECUTABLE OUTPUT_STRIP_TRAILING_WHITESPACE)
IF(NOT EXISTS ${FLTK_FLUID_EXECUTABLE})
MESSAGE(FATAL_ERROR "Please install the fluid binary which is part of FLTK.")
ENDIF()
ENDIF()
include_directories(SYSTEM
"${FLTK_INCLUDE_DIR}"
${FFTW3F_INCLUDE_DIRS}
)
include_directories(
"${CMAKE_CURRENT_SOURCE_DIR}"
"${CMAKE_CURRENT_BINARY_DIR}"
"${CMAKE_BINARY_DIR}"
)
ADD_DEFINITIONS(-DPLUGINVERSION) # removes exit confirmation dialogs etc. in MasterUI.fl
add_subdirectory(zynaddsubfx/src/Nio)
add_subdirectory(zynaddsubfx/src/UI)
add_library(zynaddsubfx_synth OBJECT
zynaddsubfx/src/DSP/AnalogFilter.cpp
zynaddsubfx/src/DSP/FFTwrapper.cpp
zynaddsubfx/src/DSP/Filter.cpp
zynaddsubfx/src/DSP/FormantFilter.cpp
zynaddsubfx/src/DSP/SVFilter.cpp
zynaddsubfx/src/DSP/Unison.cpp
zynaddsubfx/src/Effects/Alienwah.cpp
zynaddsubfx/src/Effects/Chorus.cpp
zynaddsubfx/src/Effects/Distorsion.cpp
zynaddsubfx/src/Effects/DynamicFilter.cpp
zynaddsubfx/src/Effects/Echo.cpp
zynaddsubfx/src/Effects/Effect.cpp
zynaddsubfx/src/Effects/EffectLFO.cpp
zynaddsubfx/src/Effects/EffectMgr.cpp
zynaddsubfx/src/Effects/EQ.cpp
zynaddsubfx/src/Effects/Phaser.cpp
zynaddsubfx/src/Effects/Reverb.cpp
zynaddsubfx/src/Misc/Bank.cpp
zynaddsubfx/src/Misc/Config.cpp
zynaddsubfx/src/Misc/Dump.cpp
zynaddsubfx/src/Misc/Master.cpp
zynaddsubfx/src/Misc/Microtonal.cpp
zynaddsubfx/src/Misc/Part.cpp
zynaddsubfx/src/Misc/Util.cpp
zynaddsubfx/src/Misc/QtXmlWrapper.cpp
zynaddsubfx/src/Misc/Recorder.cpp
zynaddsubfx/src/Misc/WavFile.cpp
zynaddsubfx/src/Misc/WaveShapeSmps.cpp
zynaddsubfx/src/Params/ADnoteParameters.cpp
zynaddsubfx/src/Params/Controller.cpp
zynaddsubfx/src/Params/EnvelopeParams.cpp
zynaddsubfx/src/Params/FilterParams.cpp
zynaddsubfx/src/Params/LFOParams.cpp
zynaddsubfx/src/Params/PADnoteParameters.cpp
zynaddsubfx/src/Params/Presets.cpp
zynaddsubfx/src/Params/PresetsArray.cpp
zynaddsubfx/src/Params/PresetsStore.cpp
zynaddsubfx/src/Params/SUBnoteParameters.cpp
zynaddsubfx/src/Synth/SynthNote.cpp
zynaddsubfx/src/Synth/ADnote.cpp
zynaddsubfx/src/Synth/Envelope.cpp
zynaddsubfx/src/Synth/LFO.cpp
zynaddsubfx/src/Synth/OscilGen.cpp
zynaddsubfx/src/Synth/PADnote.cpp
zynaddsubfx/src/Synth/Resonance.cpp
zynaddsubfx/src/Synth/SUBnote.cpp
)
set_target_properties(zynaddsubfx_nio PROPERTIES SYSTEM TRUE)
set_target_properties(zynaddsubfx_gui PROPERTIES SYSTEM TRUE)
set_target_properties(zynaddsubfx_synth PROPERTIES SYSTEM TRUE)
# Relative include paths don't work automatically for the GUI, because the
# generated C++ files aren't in the source directory. Thus, add the expected
# source directory as an additional include directory.
target_include_directories(zynaddsubfx_gui PUBLIC zynaddsubfx/src/UI)
add_library(ZynAddSubFxCore STATIC
LocalZynAddSubFx.cpp
)
target_include_directories(ZynAddSubFxCore SYSTEM PUBLIC
zynaddsubfx/src
"${CMAKE_CURRENT_BINARY_DIR}/zynaddsubfx/src"
)
target_static_libraries(ZynAddSubFxCore PUBLIC
zynaddsubfx_nio
zynaddsubfx_synth
)
target_link_libraries(ZynAddSubFxCore INTERFACE
${FFTW3F_LIBRARIES}
${QT_LIBRARIES}
Qt5::Widgets
Qt5::Xml
Threads::Threads
ZLIB::ZLIB
)
LINK_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}/..")
IF(LMMS_BUILD_LINUX)
LINK_LIBRARIES(-Wl,--enable-new-dtags)
SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
SET(CMAKE_INSTALL_RPATH "$ORIGIN")
ELSE()
SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${PLUGIN_DIR}")
ENDIF()
BUILD_PLUGIN(zynaddsubfx ZynAddSubFx.cpp ZynAddSubFx.h MOCFILES ZynAddSubFx.h EMBEDDED_RESOURCES artwork.png logo.png)
target_static_libraries(zynaddsubfx ZynAddSubFxCore)
if(MSVC)
set(WINRC "${CMAKE_CURRENT_BINARY_DIR}/zynaddsubfx.rc")
elseif(WIN32)
SET(WINRC "${CMAKE_CURRENT_BINARY_DIR}/zynaddsubfxrc.obj")
ADD_CUSTOM_COMMAND(OUTPUT "${WINRC}"
COMMAND "${CMAKE_RC_COMPILER}"
"-I\"${CMAKE_CURRENT_SOURCE_DIR}\""
"-o\"${CMAKE_CURRENT_BINARY_DIR}/zynaddsubfxrc.obj\""
"-i\"${CMAKE_CURRENT_BINARY_DIR}/zynaddsubfx.rc\""
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/zynaddsubfx.rc")
endif()
# Use libraries in non-standard directories (e.g., another version of Qt)
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
ADD_SUBDIRECTORY("${LMMS_SOURCE_DIR}/src/common" common)
add_executable(RemoteZynAddSubFx
RemoteZynAddSubFx.cpp
${LMMS_COMMON_SRCS}
"${WINRC}"
)
target_static_libraries(RemoteZynAddSubFx ZynAddSubFxCore zynaddsubfx_gui)
INSTALL(TARGETS RemoteZynAddSubFx RUNTIME DESTINATION "${PLUGIN_DIR}")
# Needed to deploy dependencies of RemoteZynAddSubFx
SET_PROPERTY(GLOBAL APPEND PROPERTY PLUGINS_BUILT "RemoteZynAddSubFx")
TARGET_COMPILE_DEFINITIONS(RemoteZynAddSubFx PRIVATE BUILD_REMOTE_PLUGIN_CLIENT)
IF(LMMS_BUILD_WIN32)
target_link_options(RemoteZynAddSubFx PRIVATE "-mwindows")
ENDIF()
# Remove useless dependencies from FLTK. Use fltk-config to avoid static library
# in older environments
SET(FLTK_FILTERED_LDFLAGS ${FLTK_LIBRARIES})
FIND_PROGRAM(FLTK_CONFIG fltk-config)
IF(FLTK_CONFIG AND NOT (LMMS_BUILD_APPLE OR LMMS_BUILD_WIN32))
EXECUTE_PROCESS(COMMAND ${FLTK_CONFIG} --ldflags OUTPUT_VARIABLE FLTK_FILTERED_LDFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE)
STRING(REPLACE " " ";" FLTK_FILTERED_LDFLAGS ${FLTK_FILTERED_LDFLAGS})
LIST(REMOVE_ITEM FLTK_FILTERED_LDFLAGS -lX11)
ENDIF()
target_link_libraries(RemoteZynAddSubFx ${FLTK_FILTERED_LDFLAGS})
if(LMMS_HAVE_LIBRT)
target_link_libraries(RemoteZynAddSubFx rt)
endif()
# Support qt_version_tag in Qt 5.6
TARGET_LINK_LIBRARIES(RemoteZynAddSubFx Qt5::Core)
# link Qt libraries when on win32
IF(LMMS_BUILD_WIN32)
TARGET_LINK_LIBRARIES(RemoteZynAddSubFx ${QT_LIBRARIES})
ENDIF(LMMS_BUILD_WIN32)
IF(LMMS_BUILD_WIN32)
add_custom_command(
TARGET RemoteZynAddSubFx
POST_BUILD
COMMAND "${STRIP_COMMAND}" "$<TARGET_FILE:RemoteZynAddSubFx>"
VERBATIM
COMMAND_EXPAND_LISTS
)
ENDIF(LMMS_BUILD_WIN32)