315 lines
13 KiB
CMake
315 lines
13 KiB
CMake
|
|
#------------------------------------------------------------------------
|
|
# 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 $<TARGET_FILE:${target}>)
|
|
add_custom_command(
|
|
TARGET ${target} POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E echo [SMTG] Validator started...
|
|
COMMAND
|
|
$<TARGET_FILE:validator>
|
|
"${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
|
|
$<TARGET_FILE:validator>
|
|
$<$<CONFIG:Debug>:${PLUGIN_PACKAGE_PATH}>
|
|
$<$<CONFIG:Release>:${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 <Path> 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
|
|
$<TARGET_FILE:moduleinfotool> -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
|
|
$<TARGET_FILE:moduleinfotool> -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 <path> 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 <Name> The name of the package [optional] if not present
|
|
# @param MODULEINFO_COMPATIBILITY <path> The path to the compatibility json file [optional]
|
|
# @param SOURCES_LIST <sources> 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)
|