Files
lmms/plugins/ZynAddSubFx/CMakeLists.txt
2023-01-02 23:42:46 +00:00

203 lines
6.4 KiB
CMake

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(${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")
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(
"${FLTK_INCLUDE_DIR}"
"${CMAKE_CURRENT_SOURCE_DIR}"
${FFTW3F_INCLUDE_DIRS}
"${CMAKE_CURRENT_BINARY_DIR}"
"${CMAKE_BINARY_DIR}"
"${CMAKE_SOURCE_DIR}/src/3rdparty/mingw-std-threads"
"${CMAKE_CURRENT_SOURCE_DIR}/zynaddsubfx/src/UI"
)
ADD_DEFINITIONS(-DPLUGINVERSION) # removes exit confirmation dialogs etc. in MasterUI.fl
add_subdirectory(zynaddsubfx/src/Nio)
add_subdirectory(zynaddsubfx/src/UI)
SET(zynaddsubfx_core_SRCS
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
)
add_library(ZynAddSubFxCoreObjs OBJECT LocalZynAddSubFx.cpp ${zynaddsubfx_core_SRCS})
add_library(ZynAddSubFxCore INTERFACE)
target_sources(ZynAddSubFxCore INTERFACE
$<TARGET_OBJECTS:ZynAddSubFxCoreObjs>
$<TARGET_OBJECTS:zynaddsubfx_nio>
)
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_link_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_OBJECTS: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)
SET_TARGET_PROPERTIES(RemoteZynAddSubFx PROPERTIES LINK_FLAGS "${LINK_FLAGS} -mwindows")
ENDIF(LMMS_BUILD_WIN32)
# 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 ZynAddSubFxCore ${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)