152 lines
6.3 KiB
CMake
152 lines
6.3 KiB
CMake
|
|
include(SMTG_Bundle)
|
|
include(SMTG_UniversalBinary)
|
|
include(SMTG_CodeSign)
|
|
|
|
if(XCODE AND SMTG_ENABLE_AUV2_BUILDS)
|
|
|
|
set(SMTG_AUV2_FOLDER FOLDER "AudioUnit V2")
|
|
|
|
#------------------------------------------------------------------------
|
|
# Add an AudioUnit Version 2 target for macOS
|
|
# @param target target name
|
|
# @param BUNDLE_NAME name of the bundle
|
|
# @param BUNDLE_IDENTIFIER bundle identifier
|
|
# @param INFO_PLIST_TEMPLATE the info.plist file containing the needed AudioUnit keys
|
|
# @param VST3_PLUGIN_TARGET the vst3 plugin target
|
|
#------------------------------------------------------------------------
|
|
function(smtg_target_add_auv2 target)
|
|
|
|
set(oneValueArgs
|
|
BUNDLE_NAME
|
|
BUNDLE_IDENTIFIER
|
|
INFO_PLIST_TEMPLATE
|
|
VST3_PLUGIN_TARGET
|
|
)
|
|
|
|
cmake_parse_arguments(ARG "" "${oneValueArgs}" "" ${ARGN})
|
|
|
|
if(ARG_UNPARSED_ARGUMENTS)
|
|
message(FATAL_ERROR "[SMTG] The following parameters are unrecognized: ${ARG_UNPARSED_ARGUMENTS}")
|
|
endif(ARG_UNPARSED_ARGUMENTS)
|
|
|
|
if(ARG_KEYWORDS_MISSING_VALUES)
|
|
message(FATAL_ERROR "[SMTG] The following parameter values are missing: ${ARG_KEYWORDS_MISSING_VALUES}")
|
|
endif(ARG_KEYWORDS_MISSING_VALUES)
|
|
|
|
foreach(ARG_NAME ${oneValueArgs})
|
|
set(tmp ARG_${ARG_NAME})
|
|
if(NOT ${tmp})
|
|
message(FATAL_ERROR "[SMTG] Missing ${ARG_NAME} argument and value")
|
|
endif()
|
|
endforeach()
|
|
|
|
string(TIMESTAMP CocoaIdStamp "%Y%j%H%M%S")
|
|
string(MAKE_C_IDENTIFIER "SMTG_AUCocoaUIBase_${ARG_BUNDLE_NAME}${CocoaIdStamp}" SMTG_AUCocoaUIBase_CLASS_NAME)
|
|
|
|
add_library(${target} MODULE
|
|
${public_sdk_SOURCE_DIR}/source/vst/auwrapper/aucocoaview.mm
|
|
${public_sdk_SOURCE_DIR}/source/vst/auwrapper/aucocoaview.h
|
|
${public_sdk_SOURCE_DIR}/source/vst/auwrapper/auwrapper.mm
|
|
${public_sdk_SOURCE_DIR}/source/vst/auwrapper/auwrapper.h
|
|
${public_sdk_SOURCE_DIR}/source/vst/auwrapper/NSDataIBStream.mm
|
|
${public_sdk_SOURCE_DIR}/source/vst/auwrapper/NSDataIBStream.h
|
|
)
|
|
|
|
smtg_target_setup_universal_binary(${target})
|
|
smtg_target_codesign(${target} ${SMTG_IOS_DEVELOPMENT_TEAM} "${SMTG_CODE_SIGN_IDENTITY_MAC}")
|
|
|
|
target_compile_features(${target}
|
|
PUBLIC
|
|
cxx_std_17
|
|
)
|
|
|
|
target_compile_definitions(${target}
|
|
PRIVATE
|
|
SMTG_AUCocoaUIBase_CLASS_NAME=${SMTG_AUCocoaUIBase_CLASS_NAME}
|
|
CA_USE_AUDIO_PLUGIN_ONLY=0 # TODO: If true will let instruments fail validation
|
|
)
|
|
|
|
target_link_libraries(${target}
|
|
PRIVATE
|
|
sdk_hosting
|
|
"-framework AudioUnit"
|
|
"-framework CoreMIDI"
|
|
"-framework AudioToolbox"
|
|
"-framework CoreFoundation"
|
|
"-framework Carbon"
|
|
"-framework Cocoa"
|
|
"-framework CoreAudio"
|
|
)
|
|
if(NOT ${SMTG_COREAUDIO_SDK_PATH} STREQUAL "")
|
|
target_sources(${target}
|
|
PRIVATE
|
|
"${public_sdk_SOURCE_DIR}/source/vst/auwrapper/ausdk.mm"
|
|
)
|
|
target_include_directories(${target}
|
|
PRIVATE
|
|
"${SMTG_COREAUDIO_SDK_PATH}/**"
|
|
)
|
|
elseif(NOT ${SMTG_AUDIOUNIT_SDK_PATH} STREQUAL "")
|
|
target_compile_definitions(${target}
|
|
PRIVATE
|
|
SMTG_AUWRAPPER_USES_AUSDK
|
|
)
|
|
## Adding the xcodeproj will crash Xcode when closing and reopening the cmake generated project
|
|
# target_sources(${target} PRIVATE "${SMTG_AUDIOUNIT_SDK_PATH}/AudioUnitSDK.xcodeproj")
|
|
target_include_directories(${target}
|
|
PRIVATE
|
|
"${SMTG_AUDIOUNIT_SDK_PATH}/include/**"
|
|
)
|
|
add_custom_command(TARGET ${target}
|
|
PRE_BUILD
|
|
COMMAND "xcodebuild" -project "${SMTG_AUDIOUNIT_SDK_PATH}/AudioUnitSDK.xcodeproj" -target AudioUnitSDK build -configuration Release SYMROOT=${CMAKE_BINARY_DIR}/AudioUnitSDK/
|
|
)
|
|
target_link_libraries(${target}
|
|
PRIVATE
|
|
"${CMAKE_BINARY_DIR}/AudioUnitSDK/Release/libAudioUnitSDK.a"
|
|
)
|
|
endif()
|
|
|
|
smtg_target_set_bundle(${target}
|
|
INFOPLIST ${ARG_INFO_PLIST_TEMPLATE}
|
|
EXTENSION component
|
|
)
|
|
|
|
set(VST3_OUTPUT_DIR ${CMAKE_BINARY_DIR}/VST3)
|
|
set(outputdir ${VST3_OUTPUT_DIR}/$<CONFIG>)
|
|
set_target_properties(${target}
|
|
PROPERTIES
|
|
XCODE_ATTRIBUTE_GENERATE_PKGINFO_FILE "YES"
|
|
XCODE_ATTRIBUTE_PRODUCT_NAME "${ARG_BUNDLE_NAME}"
|
|
XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER ${ARG_BUNDLE_IDENTIFIER}
|
|
LIBRARY_OUTPUT_DIRECTORY ${VST3_OUTPUT_DIR}
|
|
${SMTG_AUV2_FOLDER}
|
|
)
|
|
|
|
add_dependencies(${target} ${ARG_VST3_PLUGIN_TARGET})
|
|
|
|
add_custom_command(TARGET ${target} POST_BUILD
|
|
COMMAND /bin/mkdir "-p" ${outputdir}/${ARG_BUNDLE_NAME}.component/Contents/Resources
|
|
COMMAND /bin/rm "-f" "${outputdir}/${ARG_BUNDLE_NAME}.component/Contents/Resources/plugin.vst3"
|
|
COMMAND /bin/ln "-svfF" "${outputdir}/$<TARGET_FILE_NAME:${ARG_VST3_PLUGIN_TARGET}>.vst3" "${outputdir}/${ARG_BUNDLE_NAME}.component/Contents/Resources/plugin.vst3"
|
|
COMMAND /bin/rm "-rf" "~/Library/Audio/Plug-Ins/Components/${ARG_BUNDLE_NAME}.component"
|
|
COMMAND /bin/cp "-rpf" "${outputdir}/${ARG_BUNDLE_NAME}.component" "~/Library/Audio/Plug-Ins/Components/"
|
|
BYPRODUCTS "~/Library/Audio/Plug-Ins/Components/${ARG_BUNDLE_NAME}.component"
|
|
)
|
|
smtg_target_add_custom_codesign_post_build_step(
|
|
TARGET
|
|
"${target}"
|
|
IDENTITY
|
|
${SMTG_CODE_SIGN_IDENTITY_MAC}
|
|
PATH
|
|
"~/Library/Audio/Plug-Ins/Components/${ARG_BUNDLE_NAME}.component"
|
|
FLAGS
|
|
--timestamp
|
|
)
|
|
|
|
endfunction(smtg_target_add_auv2)
|
|
else()
|
|
message("[SMTG] * To add an AudioUnit v2 target, you need to use the Xcode generator and set SMTG_COREAUDIO_SDK_PATH to the path of your installation of the CoreAudio SDK!")
|
|
endif(XCODE AND SMTG_ENABLE_AUV2_BUILDS)
|