diff --git a/plugins/vst/CMakeLists.txt b/plugins/vst/CMakeLists.txt index f6bd7724..c8226d82 100644 --- a/plugins/vst/CMakeLists.txt +++ b/plugins/vst/CMakeLists.txt @@ -13,61 +13,89 @@ configure_file(VstPluginDefs.h.in "${CMAKE_CURRENT_BINARY_DIR}/VstPluginDefs.h") # Build VST3 SDK include("cmake/Vst3.cmake") -# Build the plugin -set(VSTPLUGIN_SOURCES - SfizzVstProcessor.cpp - SfizzVstController.cpp - SfizzVstEditor.cpp - SfizzVstState.cpp - SfizzVstUpdates.cpp - SfizzFileScan.cpp - SfizzForeignPaths.cpp - SfizzSettings.cpp - VstPluginFactory.cpp - X11RunLoop.cpp - NativeHelpers.cpp - FileTrie.cpp) +# Add the ring buffer +set(RINGBUFFER_HEADERS + "external/ring_buffer/ring_buffer/ring_buffer.h" + "external/ring_buffer/ring_buffer/ring_buffer.tcc") +add_library(sfizz-ring-buffer STATIC + "external/ring_buffer/ring_buffer/ring_buffer.cpp" + ${RINGBUFFER_HEADERS}) +source_group("Header Files" FILES ${RINGBUFFER_HEADERS}) +target_include_directories(sfizz-ring-buffer INTERFACE "external/ring_buffer") +add_library(sfizz::ring-buffer ALIAS sfizz-ring-buffer) -set(VSTPLUGIN_HEADERS +# Build the VST shared code +add_library(sfizz-vst3-core STATIC + SfizzVstProcessor.cpp SfizzVstProcessor.h + SfizzVstController.cpp SfizzVstController.h + SfizzVstEditor.cpp SfizzVstEditor.h + SfizzVstState.cpp SfizzVstState.h SfizzVstParameters.h SfizzVstUpdates.h + SfizzVstUpdates.cpp SfizzFileScan.h + SfizzFileScan.cpp SfizzForeignPaths.h + SfizzForeignPaths.cpp SfizzSettings.h - X11RunLoop.h - IdleUpdateHandler.h + SfizzSettings.cpp + FileTrie.h + FileTrie.cpp NativeHelpers.h - FileTrie.h) - + NativeHelpers.cpp + VstPluginFactory.cpp + IdleUpdateHandler.h + X11RunLoop.h + X11RunLoop.cpp) if(APPLE) - set(VSTPLUGIN_MAC_SOURCES + target_sources(sfizz-vst3-core PRIVATE SfizzForeignPaths.mm SfizzSettings.mm NativeHelpers.mm) - list(APPEND VSTPLUGIN_SOURCES ${VSTPLUGIN_MAC_SOURCES}) - set_property(SOURCE ${VSTPLUGIN_MAC_SOURCES} APPEND_STRING - PROPERTY COMPILE_FLAGS " -fobjc-arc") + set_property( + SOURCE SfizzForeignPaths.mm + SfizzSettings.mm + NativeHelpers.mm + APPEND_STRING + PROPERTY COMPILE_FLAGS " -fobjc-arc") endif() - -add_library(${VSTPLUGIN_PRJ_NAME} MODULE - ${VSTPLUGIN_HEADERS} - ${VSTPLUGIN_SOURCES}) - -if(WIN32) - target_sources(${VSTPLUGIN_PRJ_NAME} PRIVATE vst3.def) -endif() -target_link_libraries(${VSTPLUGIN_PRJ_NAME} +target_include_directories(sfizz-vst3-core + PRIVATE "${CMAKE_CURRENT_BINARY_DIR}") +target_link_libraries(sfizz-vst3-core PRIVATE PRIVATE sfizz::sfizz PRIVATE sfizz::import PRIVATE sfizz::editor PRIVATE sfizz::plugins-common - PRIVATE sfizz::pugixml sfizz::filesystem) -target_include_directories(${VSTPLUGIN_PRJ_NAME} - PRIVATE "${CMAKE_CURRENT_BINARY_DIR}") + PRIVATE sfizz::pugixml sfizz::filesystem + PRIVATE sfizz::ring-buffer + vst3sdk + vst3sdk_vstgui) +gw_target_warn(sfizz-vst3-core PRIVATE + "-Wno-ignored-qualifiers" + "-Wno-unused-parameter") +add_library(sfizz::vst3-core ALIAS sfizz-vst3-core) + +# Link system dependencies +if(WIN32) +elseif(APPLE) +else() + find_package(PkgConfig REQUIRED) + pkg_check_modules(GLIB REQUIRED glib-2.0) + target_include_directories(sfizz-vst3-core PRIVATE ${GLIB_INCLUDE_DIRS}) + target_link_libraries(sfizz-vst3-core PRIVATE ${GLIB_LIBRARIES}) +endif() + +# Build the plugin +add_library(${VSTPLUGIN_PRJ_NAME} MODULE) +if(WIN32) + target_sources(${VSTPLUGIN_PRJ_NAME} PRIVATE vst3.def) +endif() +target_link_libraries(${VSTPLUGIN_PRJ_NAME} + PRIVATE sfizz-vst3-core) set_target_properties(${VSTPLUGIN_PRJ_NAME} PROPERTIES OUTPUT_NAME "${PROJECT_NAME}" PREFIX "") @@ -75,18 +103,6 @@ set_target_properties(${VSTPLUGIN_PRJ_NAME} PROPERTIES plugin_add_vst3sdk(${VSTPLUGIN_PRJ_NAME}) plugin_add_vstgui(${VSTPLUGIN_PRJ_NAME}) -# Add the ring buffer -set(RINGBUFFER_HEADERS - "external/ring_buffer/ring_buffer/ring_buffer.h" - "external/ring_buffer/ring_buffer/ring_buffer.tcc") -add_library(sfizz_ring_buffer STATIC - "external/ring_buffer/ring_buffer/ring_buffer.cpp" - ${RINGBUFFER_HEADERS}) -source_group("Header Files" FILES ${RINGBUFFER_HEADERS}) -target_include_directories(sfizz_ring_buffer INTERFACE "external/ring_buffer") - -target_link_libraries(${VSTPLUGIN_PRJ_NAME} PRIVATE sfizz_ring_buffer) - if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") target_link_libraries(${VSTPLUGIN_PRJ_NAME} PRIVATE "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/vst3.version") @@ -96,17 +112,6 @@ if(MINGW) set_target_properties(${VSTPLUGIN_PRJ_NAME} PROPERTIES LINK_FLAGS "-static") endif() -# Link system dependencies -if(WIN32) -elseif(APPLE) - target_link_libraries(${VSTPLUGIN_PRJ_NAME} PRIVATE ${APPLE_FOUNDATION_LIBRARY}) -else() - find_package(PkgConfig REQUIRED) - pkg_check_modules(GLIB REQUIRED glib-2.0) - target_include_directories(${VSTPLUGIN_PRJ_NAME} PRIVATE ${GLIB_INCLUDE_DIRS}) - target_link_libraries(${VSTPLUGIN_PRJ_NAME} PRIVATE ${GLIB_LIBRARIES}) -endif() - # Create the bundle(see "VST 3 Locations / Format") execute_process( COMMAND "${CMAKE_COMMAND}" -E make_directory "${PROJECT_BINARY_DIR}/${VSTPLUGIN_BUNDLE_NAME}/Contents/Resources") @@ -145,19 +150,6 @@ else() DESTINATION "${PROJECT_BINARY_DIR}/${VSTPLUGIN_BUNDLE_NAME}") endif() -if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") - gw_target_warn(${VSTPLUGIN_PRJ_NAME} PRIVATE - "-Wno-extra" - "-Wno-multichar" - "-Wno-reorder" - "-Wno-class-memaccess" - "-Wno-ignored-qualifiers" - "-Wno-unknown-pragmas" - "-Wno-unused-function" - "-Wno-unused-parameter" - "-Wno-unused-variable") -endif() - # To help debugging the link only if(FALSE) target_link_options(${VSTPLUGIN_PRJ_NAME} PRIVATE "-Wl,-no-undefined") @@ -186,9 +178,7 @@ elseif(SFIZZ_AU) "${AUWRAPPER_BASEDIR}/aucocoaview.mm" "${AUWRAPPER_BASEDIR}/ausdk.mm" "${AUWRAPPER_BASEDIR}/auwrapper.mm" - "${AUWRAPPER_BASEDIR}/NSDataIBStream.mm" - ${VSTPLUGIN_HEADERS} - ${VSTPLUGIN_SOURCES}) + "${AUWRAPPER_BASEDIR}/NSDataIBStream.mm") target_include_directories(${AUPLUGIN_PRJ_NAME} PRIVATE "${VST3SDK_BASEDIR}") target_link_libraries(${AUPLUGIN_PRJ_NAME} PRIVATE @@ -201,13 +191,7 @@ elseif(SFIZZ_AU) "${APPLE_COREMIDI_LIBRARY}") target_link_libraries(${AUPLUGIN_PRJ_NAME} - PRIVATE sfizz::sfizz - PRIVATE sfizz::import - PRIVATE sfizz::editor - PRIVATE sfizz::plugins-common - PRIVATE sfizz::pugixml sfizz::filesystem) - target_include_directories(${AUPLUGIN_PRJ_NAME} - PRIVATE "${CMAKE_CURRENT_BINARY_DIR}") + PRIVATE sfizz-vst3-core) set_target_properties(${AUPLUGIN_PRJ_NAME} PROPERTIES OUTPUT_NAME "${PROJECT_NAME}" PREFIX "") @@ -251,15 +235,7 @@ elseif(SFIZZ_AU) "${CA_UTILITY_BASEDIR}/CoreAudio/PublicUtility") # Add VST hosting classes - target_sources(${AUPLUGIN_PRJ_NAME} PRIVATE - "${VST3SDK_BASEDIR}/public.sdk/source/vst/hosting/eventlist.cpp" - "${VST3SDK_BASEDIR}/public.sdk/source/vst/hosting/hostclasses.cpp" - "${VST3SDK_BASEDIR}/public.sdk/source/vst/hosting/parameterchanges.cpp" - "${VST3SDK_BASEDIR}/public.sdk/source/vst/hosting/pluginterfacesupport.cpp" - "${VST3SDK_BASEDIR}/public.sdk/source/vst/hosting/processdata.cpp") - - # Add the ring buffer - target_link_libraries(${AUPLUGIN_PRJ_NAME} PRIVATE sfizz_ring_buffer) + target_link_libraries(${AUPLUGIN_PRJ_NAME} PRIVATE vst3sdk_hosting) # Add generated source file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/include") @@ -323,19 +299,6 @@ elseif(SFIZZ_AU) "${AUWRAPPER_BASEDIR}/auresource.r") endif() - if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") - gw_target_warn(${AUPLUGIN_PRJ_NAME} PRIVATE - "-Wno-extra" - "-Wno-multichar" - "-Wno-reorder" - "-Wno-class-memaccess" - "-Wno-ignored-qualifiers" - "-Wno-unknown-pragmas" - "-Wno-unused-function" - "-Wno-unused-parameter" - "-Wno-unused-variable") - endif() - # Installation if(AUPLUGIN_INSTALL_DIR) install(DIRECTORY "${PROJECT_BINARY_DIR}/${AUPLUGIN_BUNDLE_NAME}" diff --git a/plugins/vst/cmake/Vst3.cmake b/plugins/vst/cmake/Vst3.cmake index 960678de..d1c6a7c3 100644 --- a/plugins/vst/cmake/Vst3.cmake +++ b/plugins/vst/cmake/Vst3.cmake @@ -1,68 +1,120 @@ find_package(Threads REQUIRED) # --- VST3SDK --- +add_library(vst3sdk STATIC EXCLUDE_FROM_ALL + "${VST3SDK_BASEDIR}/base/source/baseiids.cpp" + "${VST3SDK_BASEDIR}/base/source/fbuffer.cpp" + "${VST3SDK_BASEDIR}/base/source/fdebug.cpp" + "${VST3SDK_BASEDIR}/base/source/fdynlib.cpp" + "${VST3SDK_BASEDIR}/base/source/fobject.cpp" + "${VST3SDK_BASEDIR}/base/source/fstreamer.cpp" + "${VST3SDK_BASEDIR}/base/source/fstring.cpp" + "${VST3SDK_BASEDIR}/base/source/timer.cpp" + "${VST3SDK_BASEDIR}/base/source/updatehandler.cpp" + "${VST3SDK_BASEDIR}/base/thread/source/fcondition.cpp" + "${VST3SDK_BASEDIR}/base/thread/source/flock.cpp" + "${VST3SDK_BASEDIR}/pluginterfaces/base/conststringtable.cpp" + "${VST3SDK_BASEDIR}/pluginterfaces/base/coreiids.cpp" + "${VST3SDK_BASEDIR}/pluginterfaces/base/funknown.cpp" + "${VST3SDK_BASEDIR}/pluginterfaces/base/ustring.cpp" + "${VST3SDK_BASEDIR}/public.sdk/source/common/commoniids.cpp" + "${VST3SDK_BASEDIR}/public.sdk/source/common/pluginview.cpp" + "${VST3SDK_BASEDIR}/public.sdk/source/main/pluginfactory.cpp" + "${VST3SDK_BASEDIR}/public.sdk/source/vst/vstaudioeffect.cpp" + "${VST3SDK_BASEDIR}/public.sdk/source/vst/vstbus.cpp" + "${VST3SDK_BASEDIR}/public.sdk/source/vst/vstcomponent.cpp" + "${VST3SDK_BASEDIR}/public.sdk/source/vst/vstcomponentbase.cpp" + "${VST3SDK_BASEDIR}/public.sdk/source/vst/vsteditcontroller.cpp" + "${VST3SDK_BASEDIR}/public.sdk/source/vst/vstinitiids.cpp" + "${VST3SDK_BASEDIR}/public.sdk/source/vst/vstnoteexpressiontypes.cpp" + "${VST3SDK_BASEDIR}/public.sdk/source/vst/vstparameters.cpp" + "${VST3SDK_BASEDIR}/public.sdk/source/vst/vstpresetfile.cpp" + "${VST3SDK_BASEDIR}/public.sdk/source/vst/vstrepresentation.cpp") +if(WIN32) + target_sources(vst3sdk PRIVATE + "${VST3SDK_BASEDIR}/public.sdk/source/common/threadchecker_win32.cpp") +elseif(APPLE) +else() + target_sources(vst3sdk PRIVATE + "${VST3SDK_BASEDIR}/public.sdk/source/common/threadchecker_linux.cpp") +endif() +target_include_directories(vst3sdk PUBLIC "${VST3SDK_BASEDIR}") +target_link_libraries(vst3sdk PUBLIC Threads::Threads) +if(APPLE) + target_link_libraries(vst3sdk PUBLIC ${APPLE_FOUNDATION_LIBRARY}) +endif() +if(MINGW) + target_compile_definitions(vst3sdk PUBLIC + "_NATIVE_WCHAR_T_DEFINED=1" "__wchar_t=wchar_t") +endif() +set(_vst_release_build_types MinSizeRel Release RelWithDebInfo) +if(CMAKE_BUILD_TYPE IN_LIST _vst_release_build_types) + target_compile_definitions(vst3sdk PUBLIC "RELEASE") +else() + target_compile_definitions(vst3sdk PUBLIC "DEVELOPMENT") +endif() + function(plugin_add_vst3sdk NAME) - target_sources("${NAME}" PRIVATE - "${VST3SDK_BASEDIR}/base/source/baseiids.cpp" - "${VST3SDK_BASEDIR}/base/source/fbuffer.cpp" - "${VST3SDK_BASEDIR}/base/source/fdebug.cpp" - "${VST3SDK_BASEDIR}/base/source/fdynlib.cpp" - "${VST3SDK_BASEDIR}/base/source/fobject.cpp" - "${VST3SDK_BASEDIR}/base/source/fstreamer.cpp" - "${VST3SDK_BASEDIR}/base/source/fstring.cpp" - "${VST3SDK_BASEDIR}/base/source/timer.cpp" - "${VST3SDK_BASEDIR}/base/source/updatehandler.cpp" - "${VST3SDK_BASEDIR}/base/thread/source/fcondition.cpp" - "${VST3SDK_BASEDIR}/base/thread/source/flock.cpp" - "${VST3SDK_BASEDIR}/pluginterfaces/base/conststringtable.cpp" - "${VST3SDK_BASEDIR}/pluginterfaces/base/coreiids.cpp" - "${VST3SDK_BASEDIR}/pluginterfaces/base/funknown.cpp" - "${VST3SDK_BASEDIR}/pluginterfaces/base/ustring.cpp" - "${VST3SDK_BASEDIR}/public.sdk/source/common/commoniids.cpp" - "${VST3SDK_BASEDIR}/public.sdk/source/common/pluginview.cpp" - "${VST3SDK_BASEDIR}/public.sdk/source/main/pluginfactory.cpp" - "${VST3SDK_BASEDIR}/public.sdk/source/vst/vstaudioeffect.cpp" - "${VST3SDK_BASEDIR}/public.sdk/source/vst/vstbus.cpp" - "${VST3SDK_BASEDIR}/public.sdk/source/vst/vstcomponent.cpp" - "${VST3SDK_BASEDIR}/public.sdk/source/vst/vstcomponentbase.cpp" - "${VST3SDK_BASEDIR}/public.sdk/source/vst/vsteditcontroller.cpp" - "${VST3SDK_BASEDIR}/public.sdk/source/vst/vstinitiids.cpp" - "${VST3SDK_BASEDIR}/public.sdk/source/vst/vstnoteexpressiontypes.cpp" - "${VST3SDK_BASEDIR}/public.sdk/source/vst/vstparameters.cpp" - "${VST3SDK_BASEDIR}/public.sdk/source/vst/vstpresetfile.cpp" - "${VST3SDK_BASEDIR}/public.sdk/source/vst/vstrepresentation.cpp") + target_link_libraries("${NAME}" PRIVATE vst3sdk) if(WIN32) target_sources("${NAME}" PRIVATE - "${VST3SDK_BASEDIR}/public.sdk/source/common/threadchecker_win32.cpp" - "${VST3SDK_BASEDIR}/public.sdk/source/vst/vstgui_win32_bundle_support.cpp" "${VST3SDK_BASEDIR}/public.sdk/source/main/dllmain.cpp") elseif(APPLE) target_sources("${NAME}" PRIVATE "${VST3SDK_BASEDIR}/public.sdk/source/main/macmain.cpp") else() target_sources("${NAME}" PRIVATE - "${VST3SDK_BASEDIR}/public.sdk/source/common/threadchecker_linux.cpp" "${VST3SDK_BASEDIR}/public.sdk/source/main/linuxmain.cpp") endif() - target_include_directories("${NAME}" PRIVATE "${VST3SDK_BASEDIR}") - target_link_libraries("${NAME}" PRIVATE Threads::Threads) - if(MINGW) - target_compile_definitions("${NAME}" PRIVATE - "_NATIVE_WCHAR_T_DEFINED=1" "__wchar_t=wchar_t") - endif() - - set(_vst_release_build_types MinSizeRel Release RelWithDebInfo) - - if(CMAKE_BUILD_TYPE IN_LIST _vst_release_build_types) - target_compile_definitions("${NAME}" PRIVATE "RELEASE") - else() - target_compile_definitions("${NAME}" PRIVATE "DEVELOPMENT") - endif() endfunction() +# --- VST3SDK hosting --- +add_library(vst3sdk_hosting STATIC EXCLUDE_FROM_ALL + "${VST3SDK_BASEDIR}/public.sdk/source/vst/hosting/connectionproxy.cpp" + "${VST3SDK_BASEDIR}/public.sdk/source/vst/hosting/eventlist.cpp" + "${VST3SDK_BASEDIR}/public.sdk/source/vst/hosting/hostclasses.cpp" + "${VST3SDK_BASEDIR}/public.sdk/source/vst/hosting/parameterchanges.cpp" + "${VST3SDK_BASEDIR}/public.sdk/source/vst/hosting/pluginterfacesupport.cpp" + "${VST3SDK_BASEDIR}/public.sdk/source/vst/hosting/plugprovider.cpp" + "${VST3SDK_BASEDIR}/public.sdk/source/vst/hosting/processdata.cpp") +if(FALSE) + if(WIN32) + target_sources(vst3sdk_hosting PRIVATE + "${VST3SDK_BASEDIR}/public.sdk/source/vst/hosting/module_win32.cpp") + elseif(APPLE) + target_sources(vst3sdk_hosting PRIVATE + "${VST3SDK_BASEDIR}/public.sdk/source/vst/hosting/module_mac.mm") + else() + target_sources(vst3sdk_hosting PRIVATE + "${VST3SDK_BASEDIR}/public.sdk/source/vst/hosting/module_linux.cpp") + endif() +endif() +target_link_libraries(vst3sdk_hosting PUBLIC vst3sdk) + # --- VSTGUI --- +add_library(vst3sdk_vstgui STATIC EXCLUDE_FROM_ALL + "${VST3SDK_BASEDIR}/public.sdk/source/vst/vstguieditor.cpp") +if(WIN32) + target_sources(vst3sdk_vstgui PRIVATE + "${VST3SDK_BASEDIR}/public.sdk/source/vst/vstgui_win32_bundle_support.cpp") +endif() +target_link_libraries(vst3sdk_vstgui PUBLIC vst3sdk sfizz::vstgui) +target_compile_definitions(vst3sdk_vstgui PRIVATE "SMTG_MODULE_IS_BUNDLE=1") + function(plugin_add_vstgui NAME) - target_link_libraries("${NAME}" PRIVATE sfizz::vstgui) - target_sources("${NAME}" PRIVATE "${VST3SDK_BASEDIR}/public.sdk/source/vst/vstguieditor.cpp") - target_compile_definitions("${NAME}" PRIVATE "SMTG_MODULE_IS_BUNDLE=1") + target_link_libraries("${NAME}" PRIVATE vst3sdk_vstgui) endfunction() + +# --- Warning suppressions --- +foreach(_target vst3sdk_vstgui vst3sdk) + gw_target_warn("${_target}" PRIVATE + "-Wno-extra" + "-Wno-multichar" + "-Wno-reorder" + "-Wno-class-memaccess" + "-Wno-ignored-qualifiers" + "-Wno-unknown-pragmas" + "-Wno-unused-function" + "-Wno-unused-parameter" + "-Wno-unused-variable") +endforeach()