Merge pull request #796 from jpcima/vst3sdk-target

Update cmake system for VST
This commit is contained in:
JP Cimalando 2021-04-08 03:29:47 +02:00 committed by GitHub
commit fda4e305d6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 167 additions and 152 deletions

View file

@ -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}"

View file

@ -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()