#------------------------------------------------------------------------ # Includes #------------------------------------------------------------------------ include(SMTG_AddSMTGLibrary) set(SMTG_RUN_VST_VALIDATOR_DEFAULT ON) set(SMTG_CREATE_MODULE_INFO_DEFAULT ON) # Run the Validator after each new compilation of VST3 Plug-ins option(SMTG_RUN_VST_VALIDATOR "Run VST validator on VST3 Plug-ins" ${SMTG_RUN_VST_VALIDATOR_DEFAULT}) # Create the moduleinfo.json file after building option(SMTG_CREATE_MODULE_INFO "Create the moduleinfo.json file" ${SMTG_CREATE_MODULE_INFO_DEFAULT}) #------------------------------------------------------------------------ # Runs the validator on a VST3 target. # # The validator will be run on the target as a post build step. # # @param target The target which the validator will validate. function(smtg_target_run_vst_validator target) if(TARGET validator) message(STATUS "[SMTG] Setup running validator for ${target}") add_dependencies(${target} validator) if(SMTG_WIN AND NOT SMTG_CREATE_BUNDLE_FOR_WINDOWS) set(TARGET_PATH $) add_custom_command( TARGET ${target} POST_BUILD COMMAND ${CMAKE_COMMAND} -E echo [SMTG] Validator started... COMMAND $ "${TARGET_PATH}" WORKING_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" COMMAND ${CMAKE_COMMAND} -E echo [SMTG] Validator finished. ) else() get_target_property(PLUGIN_PACKAGE_PATH ${target} SMTG_PLUGIN_PACKAGE_PATH) add_custom_command( TARGET ${target} POST_BUILD COMMAND ${CMAKE_COMMAND} -E echo [SMTG] Validator started... COMMAND $ $<$:${PLUGIN_PACKAGE_PATH}> $<$:${PLUGIN_PACKAGE_PATH}> WORKING_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" COMMAND ${CMAKE_COMMAND} -E echo [SMTG] Validator finished. ) endif() endif(TARGET validator) endfunction(smtg_target_run_vst_validator) #------------------------------------------------------------------------ # Runs the moduleinfotool on a VST3 target. # # The moduleinfotool will be run on the target as a post build step and # generates a moduleinfo.json file inside the VST 3 bundle. # # @param target The target for which the moduleinfotool will create the file. # @param MODULEINFO_COMPATIBILITY The path to the compatibility json file [optional] function(smtg_target_create_module_info_file target) set(oneValueArgs MODULEINFO_COMPATIBILITY) cmake_parse_arguments(PARSE_ARGV 1 PARAMS "" "${oneValueArgs}" "") if(NOT SMTG_CREATE_MODULE_INFO) return() endif() if(SMTG_WIN AND NOT SMTG_CREATE_BUNDLE_FOR_WINDOWS) message(WARNING "[SMTG] No moduleinfo.json file for ${target} generated. Consider to enable SMTG_CREATE_BUNDLE_FOR_WINDOWS.") return() endif() message(STATUS "[SMTG] Setup running moduleinfotool for ${target}") add_dependencies(${target} moduleinfotool) get_target_property(PLUGIN_PACKAGE_PATH ${target} SMTG_PLUGIN_PACKAGE_PATH) set(SMTG_MODULEINFO_PATH_INSIDE_BUNDLE Contents/Resources/moduleinfo.json) if(DEFINED PARAMS_MODULEINFO_COMPATIBILITY) add_custom_command( TARGET ${target} POST_BUILD COMMAND $ -create -version ${PROJECT_VERSION} -path "${PLUGIN_PACKAGE_PATH}" -compat "${CMAKE_CURRENT_SOURCE_DIR}/${PARAMS_MODULEINFO_COMPATIBILITY}" -output "${PLUGIN_PACKAGE_PATH}/${SMTG_MODULEINFO_PATH_INSIDE_BUNDLE}" WORKING_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" ) else() add_custom_command( TARGET ${target} POST_BUILD COMMAND $ -create -version ${PROJECT_VERSION} -path "${PLUGIN_PACKAGE_PATH}" -output "${PLUGIN_PACKAGE_PATH}/${SMTG_MODULEINFO_PATH_INSIDE_BUNDLE}" WORKING_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" ) endif() if(SMTG_MAC) add_custom_command( TARGET ${target} POST_BUILD COMMAND codesign -f -s "-" -v "${PLUGIN_PACKAGE_PATH}/${SMTG_MODULEINFO_PATH_INSIDE_BUNDLE}" WORKING_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" ) endif() endfunction() #------------------------------------------------------------------------ # Set SMTG_PLUGIN_TARGET_PATH to default VST3 Path function(smtg_get_vst3_path) # here you can define the VST3 Plug-ins folder (it will be created), SMTG_PLUGIN_TARGET_DEFAULT_PATH will be set smtg_get_default_vst3_path() set(SMTG_PLUGIN_TARGET_USER_PATH "" CACHE PATH "Here you can redefine the VST3 Plug-ins folder") if(NOT ${SMTG_PLUGIN_TARGET_USER_PATH} STREQUAL "") set(PLUGIN_TARGET_PATH ${SMTG_PLUGIN_TARGET_USER_PATH}) else() set(PLUGIN_TARGET_PATH ${SMTG_PLUGIN_TARGET_DEFAULT_PATH}) endif() if(NOT ${PLUGIN_TARGET_PATH} STREQUAL "" AND SMTG_CREATE_PLUGIN_LINK) if(NOT EXISTS ${PLUGIN_TARGET_PATH}) message(STATUS "[SMTG] Create folder: " ${PLUGIN_TARGET_PATH}) if(SMTG_WIN) smtg_create_directory_as_admin_win(${PLUGIN_TARGET_PATH}) else() file(MAKE_DIRECTORY ${PLUGIN_TARGET_PATH}) endif(SMTG_WIN) endif(NOT EXISTS ${PLUGIN_TARGET_PATH}) endif(NOT ${PLUGIN_TARGET_PATH} STREQUAL "" AND SMTG_CREATE_PLUGIN_LINK) if(EXISTS ${PLUGIN_TARGET_PATH}) message(STATUS "[SMTG] SMTG_PLUGIN_TARGET_PATH is set to: " ${PLUGIN_TARGET_PATH}) else() message(STATUS "[SMTG] SMTG_PLUGIN_TARGET_PATH is not set!") endif(EXISTS ${PLUGIN_TARGET_PATH}) set(SMTG_PLUGIN_TARGET_PATH ${PLUGIN_TARGET_PATH} PARENT_SCOPE) endfunction(smtg_get_vst3_path) #------------------------------------------------------------------------ # Adds a VST3 target. # # @param target The target to which a VST3 Plug-in will be added. # @param pkg_name name of the created package # @param MODULEINFO_COMPATIBILITY The path to the compatibility json file [optional] function(smtg_add_vst3plugin_with_pkgname target pkg_name) #message(STATUS "[SMTG] target is ${target}") #message(STATUS "[SMTG] pkg_name is ${pkg_name}") set(oneValueArgs MODULEINFO_COMPATIBILITY) set(sourcesArgs SOURCES_LIST) cmake_parse_arguments(PARSE_ARGV 2 PARAMS "" "${oneValueArgs}" "${sourcesArgs}") #message(STATUS "[SMTG] PARAMS_UNPARSED_ARGUMENTS is ${PARAMS_UNPARSED_ARGUMENTS}") #message(STATUS "[SMTG] PARAMS_MODULEINFO_COMPATIBILITY is ${PARAMS_MODULEINFO_COMPATIBILITY}") #message(STATUS "[SMTG] PARAMS_SOURCES_LIST is ${PARAMS_SOURCES_LIST}") if(NOT EXISTS ${SMTG_PACKAGE_ICON_PATH}) set(SMTG_PACKAGE_ICON_PATH ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../templates/VST_Logo_Steinberg.ico) endif() #message(STATUS "[SMTG] SMTG_PACKAGE_ICON_PATH is ${SMTG_PACKAGE_ICON_PATH}") if(DEFINED PARAMS_SOURCES_LIST) set(SOURCES "${PARAMS_SOURCES_LIST}") else() set(SOURCES "${PARAMS_UNPARSED_ARGUMENTS}") endif() add_library(${target} MODULE "${SOURCES}") smtg_target_set_vst_win_architecture_name(${target}) smtg_target_make_plugin_package(${target} ${pkg_name} vst3) #################### # Workaround for Xcode 15 not allowing to add adhoc_codesign linker setting #################### if(SMTG_MAC AND XCODE_VERSION VERSION_GREATER_EQUAL 15) get_target_property(PLUGIN_PACKAGE_PATH ${target} SMTG_PLUGIN_PACKAGE_PATH) add_custom_command( TARGET ${target} POST_BUILD COMMENT "[SMTG] Adhoc codesign workaround for Xcode 15" COMMAND codesign --force --verbose --sign - "${PLUGIN_PACKAGE_PATH}" ) endif() if(SMTG_ENABLE_TARGET_VARS_LOG) smtg_target_dump_plugin_package_variables(${target}) endif(SMTG_ENABLE_TARGET_VARS_LOG) if(DEFINED PARAMS_MODULEINFO_COMPATIBILITY) smtg_target_create_module_info_file(${target} MODULEINFO_COMPATIBILITY "${PARAMS_MODULEINFO_COMPATIBILITY}") else() smtg_target_create_module_info_file(${target}) endif() if(SMTG_RUN_VST_VALIDATOR) smtg_target_run_vst_validator(${target}) endif(SMTG_RUN_VST_VALIDATOR) if(SMTG_CREATE_PLUGIN_LINK) smtg_get_vst3_path() smtg_target_create_link_to_plugin(${target} ${SMTG_PLUGIN_TARGET_PATH}) endif(SMTG_CREATE_PLUGIN_LINK) endfunction(smtg_add_vst3plugin_with_pkgname) #------------------------------------------------------------------------ # Adds a VST3 target. # # @param target The target to which a VST3 Plug-in will be added. # @param PACKAGE_NAME The name of the package [optional] if not present # @param MODULEINFO_COMPATIBILITY The path to the compatibility json file [optional] # @param SOURCES_LIST List of sources to add to target project [mandatory when PACKAGE_NAME is used] # for example: # smtg_add_vst3plugin(${target} PACKAGE_NAME "A Gain" SOURCES_LIST ${again_sources}) # smtg_add_vst3plugin(${target} PACKAGE_NAME "A Gain" MODULEINFO_COMPATIBILITY compat.json SOURCES_LIST ${again_sources}) # or # smtg_add_vst3plugin(${target} ${again_sources}) function(smtg_add_vst3plugin target) set(oneValueArgs PACKAGE_NAME MODULEINFO_COMPATIBILITY) set(sourcesArgs SOURCES_LIST) cmake_parse_arguments(PARSE_ARGV 1 PARAMS "${options}" "${oneValueArgs}" "${sourcesArgs}") #message(STATUS "[SMTG] PARAMS_UNPARSED_ARGUMENTS is ${PARAMS_UNPARSED_ARGUMENTS}") #message(STATUS "[SMTG] PARAMS_PACKAGE_NAME is ${PARAMS_PACKAGE_NAME}") #message(STATUS "[SMTG] PARAMS_SOURCES is ${PARAMS_SOURCES_NAME}") #message(STATUS "[SMTG] PARAMS_MODULEINFO_COMPATIBILITY is ${PARAMS_MODULEINFO_COMPATIBILITY}") set(SOURCES "${PARAMS_SOURCES_LIST}") if(SOURCES STREQUAL "") set(SOURCES ${PARAMS_UNPARSED_ARGUMENTS}) endif() set(pkg_name "${PARAMS_PACKAGE_NAME}") if(pkg_name STREQUAL "") set(pkg_name ${target}) endif() #message(STATUS "[SMTG] target is ${target}.") #message(STATUS "[SMTG] pkg_name is ${pkg_name}.") #message(STATUS "[SMTG] SOURCES is ${SOURCES}.") if(DEFINED PARAMS_MODULEINFO_COMPATIBILITY) set(SMTG_MODULEINFO_COMPATIBILITY "${PARAMS_MODULEINFO_COMPATIBILITY}") smtg_add_vst3plugin_with_pkgname(${target} ${pkg_name} MODULEINFO_COMPATIBILITY "${SMTG_MODULEINFO_COMPATIBILITY}" SOURCES_LIST ${SOURCES}) else() smtg_add_vst3plugin_with_pkgname(${target} ${pkg_name} ${SOURCES}) endif() endfunction(smtg_add_vst3plugin) #------------------------------------------------------------------------ # Adds a VST3 target for iOS # # @param sign_identity which code signing identity to use # @param target The target to which a VST3 Plug-in will be added. function(smtg_add_ios_vst3plugin target sign_identity pkg_name) if(SMTG_MAC AND XCODE AND SMTG_ENABLE_IOS_TARGETS) add_library(${target} MODULE ${ARGN}) set_target_properties(${target} PROPERTIES XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "${SMTG_CODE_SIGN_IDENTITY_IOS}" XCODE_ATTRIBUTE_ENABLE_BITCODE "NO" SMTG_DISABLE_CREATE_RESOURCE_FOLDER 1 ) if(SMTG_IOS_DEVELOPMENT_TEAM) set_target_properties(${target} PROPERTIES XCODE_ATTRIBUTE_DEVELOPMENT_TEAM ${SMTG_IOS_DEVELOPMENT_TEAM} ) endif(SMTG_IOS_DEVELOPMENT_TEAM) smtg_target_make_plugin_package(${target} ${pkg_name} vst3) if(SMTG_ENABLE_TARGET_VARS_LOG) smtg_target_dump_plugin_package_variables(${target}) endif(SMTG_ENABLE_TARGET_VARS_LOG) smtg_target_set_platform_ios(${target}) get_target_property(PLUGIN_PACKAGE_PATH ${target} SMTG_PLUGIN_PACKAGE_PATH) add_custom_command( TARGET ${target} POST_BUILD COMMENT "[SMTG] Codesign" COMMAND codesign --force --verbose --sign "${sign_identity}" "${PLUGIN_PACKAGE_PATH}" ) endif(SMTG_MAC AND XCODE AND SMTG_ENABLE_IOS_TARGETS) endfunction(smtg_add_ios_vst3plugin) #------------------------------------------------------------------------ # Deprecated since 3.7.4 ----------------------------- function(smtg_run_vst_validator target) message(DEPRECATION "[SMTG] Use smtg_target_run_vst_validator instead of smtg_run_vst_validator") smtg_target_run_vst_validator (${target}) endfunction(smtg_run_vst_validator) # Deprecated since 3.7.4 ----------------------------- function(smtg_add_vst3_resource target input_file) message(DEPRECATION "[SMTG] Use smtg_target_add_plugin_resources instead of smtg_add_vst3_resource") smtg_target_add_plugin_resources (${target} RESOURCES ${input_file} ) endfunction(smtg_add_vst3_resource) # Deprecated since 3.7.4 ----------------------------- function(smtg_add_vst3_snapshot target snapshot) message(DEPRECATION "[SMTG] Use smtg_target_add_plugin_snapshots instead of smtg_add_vst3_snapshot") smtg_target_add_plugin_snapshots (${target} RESOURCES ${snapshot} ) endfunction(smtg_add_vst3_snapshot)