Make vst3 core a build-once target

This commit is contained in:
Jean Pierre Cimalando 2021-04-08 02:43:03 +02:00
parent 5b189848cd
commit 5aa26b58bf
2 changed files with 68 additions and 79 deletions

View file

@ -13,61 +13,89 @@ configure_file(VstPluginDefs.h.in "${CMAKE_CURRENT_BINARY_DIR}/VstPluginDefs.h")
# Build VST3 SDK # Build VST3 SDK
include("cmake/Vst3.cmake") include("cmake/Vst3.cmake")
# Build the plugin # Add the ring buffer
set(VSTPLUGIN_SOURCES set(RINGBUFFER_HEADERS
SfizzVstProcessor.cpp "external/ring_buffer/ring_buffer/ring_buffer.h"
SfizzVstController.cpp "external/ring_buffer/ring_buffer/ring_buffer.tcc")
SfizzVstEditor.cpp add_library(sfizz-ring-buffer STATIC
SfizzVstState.cpp "external/ring_buffer/ring_buffer/ring_buffer.cpp"
SfizzVstUpdates.cpp ${RINGBUFFER_HEADERS})
SfizzFileScan.cpp source_group("Header Files" FILES ${RINGBUFFER_HEADERS})
SfizzForeignPaths.cpp target_include_directories(sfizz-ring-buffer INTERFACE "external/ring_buffer")
SfizzSettings.cpp add_library(sfizz::ring-buffer ALIAS sfizz-ring-buffer)
VstPluginFactory.cpp
X11RunLoop.cpp
NativeHelpers.cpp
FileTrie.cpp)
set(VSTPLUGIN_HEADERS # Build the VST shared code
add_library(sfizz-vst3-core STATIC
SfizzVstProcessor.cpp
SfizzVstProcessor.h SfizzVstProcessor.h
SfizzVstController.cpp
SfizzVstController.h SfizzVstController.h
SfizzVstEditor.cpp
SfizzVstEditor.h SfizzVstEditor.h
SfizzVstState.cpp
SfizzVstState.h SfizzVstState.h
SfizzVstParameters.h SfizzVstParameters.h
SfizzVstUpdates.h SfizzVstUpdates.h
SfizzVstUpdates.cpp
SfizzFileScan.h SfizzFileScan.h
SfizzFileScan.cpp
SfizzForeignPaths.h SfizzForeignPaths.h
SfizzForeignPaths.cpp
SfizzSettings.h SfizzSettings.h
X11RunLoop.h SfizzSettings.cpp
IdleUpdateHandler.h FileTrie.h
FileTrie.cpp
NativeHelpers.h NativeHelpers.h
FileTrie.h) NativeHelpers.cpp
VstPluginFactory.cpp
IdleUpdateHandler.h
X11RunLoop.h
X11RunLoop.cpp)
if(APPLE) if(APPLE)
set(VSTPLUGIN_MAC_SOURCES target_sources(sfizz-vst3-core PRIVATE
SfizzForeignPaths.mm SfizzForeignPaths.mm
SfizzSettings.mm SfizzSettings.mm
NativeHelpers.mm) NativeHelpers.mm)
list(APPEND VSTPLUGIN_SOURCES ${VSTPLUGIN_MAC_SOURCES}) set_property(
set_property(SOURCE ${VSTPLUGIN_MAC_SOURCES} APPEND_STRING SOURCE SfizzForeignPaths.mm
PROPERTY COMPILE_FLAGS " -fobjc-arc") SfizzSettings.mm
NativeHelpers.mm
APPEND_STRING
PROPERTY COMPILE_FLAGS " -fobjc-arc")
endif() endif()
target_include_directories(sfizz-vst3-core
add_library(${VSTPLUGIN_PRJ_NAME} MODULE PRIVATE "${CMAKE_CURRENT_BINARY_DIR}")
${VSTPLUGIN_HEADERS} target_link_libraries(sfizz-vst3-core PRIVATE
${VSTPLUGIN_SOURCES})
if(WIN32)
target_sources(${VSTPLUGIN_PRJ_NAME} PRIVATE vst3.def)
endif()
target_link_libraries(${VSTPLUGIN_PRJ_NAME}
PRIVATE sfizz::sfizz PRIVATE sfizz::sfizz
PRIVATE sfizz::import PRIVATE sfizz::import
PRIVATE sfizz::editor PRIVATE sfizz::editor
PRIVATE sfizz::plugins-common PRIVATE sfizz::plugins-common
PRIVATE sfizz::pugixml sfizz::filesystem) PRIVATE sfizz::pugixml sfizz::filesystem
target_include_directories(${VSTPLUGIN_PRJ_NAME} PRIVATE sfizz::ring-buffer
PRIVATE "${CMAKE_CURRENT_BINARY_DIR}") 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 set_target_properties(${VSTPLUGIN_PRJ_NAME} PROPERTIES
OUTPUT_NAME "${PROJECT_NAME}" OUTPUT_NAME "${PROJECT_NAME}"
PREFIX "") PREFIX "")
@ -75,18 +103,6 @@ set_target_properties(${VSTPLUGIN_PRJ_NAME} PROPERTIES
plugin_add_vst3sdk(${VSTPLUGIN_PRJ_NAME}) plugin_add_vst3sdk(${VSTPLUGIN_PRJ_NAME})
plugin_add_vstgui(${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") if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
target_link_libraries(${VSTPLUGIN_PRJ_NAME} PRIVATE target_link_libraries(${VSTPLUGIN_PRJ_NAME} PRIVATE
"-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/vst3.version") "-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") set_target_properties(${VSTPLUGIN_PRJ_NAME} PROPERTIES LINK_FLAGS "-static")
endif() 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") # Create the bundle(see "VST 3 Locations / Format")
execute_process( execute_process(
COMMAND "${CMAKE_COMMAND}" -E make_directory "${PROJECT_BINARY_DIR}/${VSTPLUGIN_BUNDLE_NAME}/Contents/Resources") COMMAND "${CMAKE_COMMAND}" -E make_directory "${PROJECT_BINARY_DIR}/${VSTPLUGIN_BUNDLE_NAME}/Contents/Resources")
@ -145,10 +150,6 @@ else()
DESTINATION "${PROJECT_BINARY_DIR}/${VSTPLUGIN_BUNDLE_NAME}") DESTINATION "${PROJECT_BINARY_DIR}/${VSTPLUGIN_BUNDLE_NAME}")
endif() endif()
gw_target_warn(${VSTPLUGIN_PRJ_NAME} PRIVATE
"-Wno-ignored-qualifiers"
"-Wno-unused-parameter")
# To help debugging the link only # To help debugging the link only
if(FALSE) if(FALSE)
target_link_options(${VSTPLUGIN_PRJ_NAME} PRIVATE "-Wl,-no-undefined") target_link_options(${VSTPLUGIN_PRJ_NAME} PRIVATE "-Wl,-no-undefined")
@ -177,9 +178,7 @@ elseif(SFIZZ_AU)
"${AUWRAPPER_BASEDIR}/aucocoaview.mm" "${AUWRAPPER_BASEDIR}/aucocoaview.mm"
"${AUWRAPPER_BASEDIR}/ausdk.mm" "${AUWRAPPER_BASEDIR}/ausdk.mm"
"${AUWRAPPER_BASEDIR}/auwrapper.mm" "${AUWRAPPER_BASEDIR}/auwrapper.mm"
"${AUWRAPPER_BASEDIR}/NSDataIBStream.mm" "${AUWRAPPER_BASEDIR}/NSDataIBStream.mm")
${VSTPLUGIN_HEADERS}
${VSTPLUGIN_SOURCES})
target_include_directories(${AUPLUGIN_PRJ_NAME} PRIVATE target_include_directories(${AUPLUGIN_PRJ_NAME} PRIVATE
"${VST3SDK_BASEDIR}") "${VST3SDK_BASEDIR}")
target_link_libraries(${AUPLUGIN_PRJ_NAME} PRIVATE target_link_libraries(${AUPLUGIN_PRJ_NAME} PRIVATE
@ -192,13 +191,7 @@ elseif(SFIZZ_AU)
"${APPLE_COREMIDI_LIBRARY}") "${APPLE_COREMIDI_LIBRARY}")
target_link_libraries(${AUPLUGIN_PRJ_NAME} target_link_libraries(${AUPLUGIN_PRJ_NAME}
PRIVATE sfizz::sfizz PRIVATE sfizz-vst3-core)
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}")
set_target_properties(${AUPLUGIN_PRJ_NAME} PROPERTIES set_target_properties(${AUPLUGIN_PRJ_NAME} PROPERTIES
OUTPUT_NAME "${PROJECT_NAME}" OUTPUT_NAME "${PROJECT_NAME}"
PREFIX "") PREFIX "")
@ -249,9 +242,6 @@ elseif(SFIZZ_AU)
"${VST3SDK_BASEDIR}/public.sdk/source/vst/hosting/pluginterfacesupport.cpp" "${VST3SDK_BASEDIR}/public.sdk/source/vst/hosting/pluginterfacesupport.cpp"
"${VST3SDK_BASEDIR}/public.sdk/source/vst/hosting/processdata.cpp") "${VST3SDK_BASEDIR}/public.sdk/source/vst/hosting/processdata.cpp")
# Add the ring buffer
target_link_libraries(${AUPLUGIN_PRJ_NAME} PRIVATE sfizz_ring_buffer)
# Add generated source # Add generated source
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/include") file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/include")
target_include_directories(${AUPLUGIN_PRJ_NAME} PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/include") target_include_directories(${AUPLUGIN_PRJ_NAME} PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/include")
@ -314,10 +304,6 @@ elseif(SFIZZ_AU)
"${AUWRAPPER_BASEDIR}/auresource.r") "${AUWRAPPER_BASEDIR}/auresource.r")
endif() endif()
gw_target_warn(${AUPLUGIN_PRJ_NAME} PRIVATE
"-Wno-ignored-qualifiers"
"-Wno-unused-parameter")
# Installation # Installation
if(AUPLUGIN_INSTALL_DIR) if(AUPLUGIN_INSTALL_DIR)
install(DIRECTORY "${PROJECT_BINARY_DIR}/${AUPLUGIN_BUNDLE_NAME}" install(DIRECTORY "${PROJECT_BINARY_DIR}/${AUPLUGIN_BUNDLE_NAME}"

View file

@ -41,6 +41,9 @@ else()
endif() endif()
target_include_directories(vst3sdk PUBLIC "${VST3SDK_BASEDIR}") target_include_directories(vst3sdk PUBLIC "${VST3SDK_BASEDIR}")
target_link_libraries(vst3sdk PUBLIC Threads::Threads) target_link_libraries(vst3sdk PUBLIC Threads::Threads)
if(APPLE)
target_link_libraries(vst3sdk PUBLIC ${APPLE_FOUNDATION_LIBRARY})
endif()
if(MINGW) if(MINGW)
target_compile_definitions(vst3sdk PUBLIC target_compile_definitions(vst3sdk PUBLIC
"_NATIVE_WCHAR_T_DEFINED=1" "__wchar_t=wchar_t") "_NATIVE_WCHAR_T_DEFINED=1" "__wchar_t=wchar_t")