1 2#------------------------------------------------------------------------------- 3# Includes 4#------------------------------------------------------------------------------- 5include(SMTG_CodeSign) 6 7if(SMTG_MAC AND SMTG_ADD_VSTGUI) 8 if(XCODE) 9 set(SMTG_AUV3_FOLDER FOLDER "AudioUnit V3") 10 11 set(auv3wrappermacos_sources 12 ${SDK_ROOT}/public.sdk/source/vst/auv3wrapper/AUv3WrappermacOS/main.mm 13 ) 14 15 set(auv3wrappermacosextension_sources 16 ${SDK_ROOT}/public.sdk/source/vst/auv3wrapper/Shared/AUv3WrapperFactory.mm 17 ) 18 19 set(auv3wrapperios_sources 20 ) 21 22 set(auv3wrapperiosextension_sources 23 ${SDK_ROOT}/public.sdk/source/vst/auv3wrapper/Shared/AUv3WrapperFactory.mm 24 ) 25 26 #-------------------------------------------------------------------------------------------------------- 27 # Add a AudioUnit Version 3 target for macOS 28 # @param target target name 29 # @param BuildTarget must be either "macOS" or "iOS" 30 # @param OutputName Output App name 31 # @param BundleID Bundle Identifier 32 # @param AudioUnitConfigHeader configuration header 33 # @param EntitlementFile Code sign entitlements file 34 # @param AppSources Application Sources 35 # @param AppUIResources Application UI Resources 36 # @param AppInfoPlist Info.plist for the application 37 # @param ExtensionInfoPlist Info.plist for the app-extension 38 # @param vst3_plugin_target the vst3 plugin target 39 #-------------------------------------------------------------------------------------------------------- 40 function(smtg_add_auv3 target BuildTarget OutputName BundleID AudioUnitConfigHeader EntitlementFile AppSources AppUIResources AppInfoPlist ExtensionInfoPlist vst3_plugin_target) 41 if(BuildTarget STREQUAL macOS) 42 set(macOS TRUE) 43 elseif(BuildTarget STREQUAL iOS) 44 set(iOS TRUE) 45 else() 46 message(FATAL_ERROR "BuildTarget must be macOS or iOS not ${BuildTarget}") 47 endif() 48 49 if(macOS) 50 set(link_frameworks 51 "-framework Accelerate" 52 "-framework AppKit" 53 "-framework AudioToolbox" 54 "-framework AVFoundation" 55 "-framework CoreAudioKit" 56 "-framework OpenGL" 57 "-framework QuartzCore" 58 "-framework CoreMIDI" 59 ) 60 set(app-extension-target ${target}_appextension_macos) 61 set(app-target ${target}) 62 set(app-extension-sources ${auv3wrappermacosextension_sources}) 63 set(auwrapper-sources ${auv3wrappermacos_sources} ${AppSources}) 64 set(auwrapper-lib auv3wrappermacos) 65 else() 66 set(link_frameworks 67 "-framework UIKit" 68 "-framework CoreAudioKit" 69 "-framework AudioToolbox" 70 "-framework CoreGraphics" 71 "-framework QuartzCore" 72 "-framework CoreText" 73 "-framework Accelerate" 74 "-framework AVFoundation" 75 "-framework ImageIO" 76 "-framework MobileCoreServices" 77 "-framework MediaPlayer" 78 "-framework CoreMIDI" 79 ) 80 set(app-extension-target ${target}_appextension_ios) 81 set(app-target ${target}) 82 set(app-extension-sources ${auv3wrapperiosextension_sources}) 83 set(auwrapper-sources ${AppSources}) 84 set(auwrapper-lib auv3wrapperios) 85 endif() 86 87 set(auwrapper-xib-resources ${AppUIResources}) 88 89 get_filename_component(AudioUnitConfig ${AudioUnitConfigHeader} ABSOLUTE) 90 get_filename_component(AppInfoPlist ${AppInfoPlist} ABSOLUTE) 91 get_filename_component(ExtensionInfoPlist ${ExtensionInfoPlist} ABSOLUTE) 92 get_filename_component(EntitlementFile ${EntitlementFile} ABSOLUTE) 93 94 # app-extension 95 add_executable(${app-extension-target} ${app-extension-sources}) 96 target_link_libraries(${app-extension-target} PRIVATE ${auwrapper-lib} ${link_frameworks}) 97 add_dependencies(${app-extension-target} "${vst3_plugin_target}") 98 set_target_properties(${app-extension-target} PROPERTIES 99 # BUNDLE YES 100 # MACOSX_BUNDLE TRUE 101 XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER ${BundleID}.appex 102 XCODE_ATTRIBUTE_INFOPLIST_PREFIX_HEADER ${AudioUnitConfig} 103 XCODE_ATTRIBUTE_GCC_PREFIX_HEADER ${AudioUnitConfig} 104 XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES 105 XCODE_ATTRIBUTE_WRAPPER_EXTENSION appex 106 XCODE_PRODUCT_TYPE com.apple.product-type.app-extension 107 ${SMTG_AUV3_FOLDER} 108 ) 109 smtg_set_bundle(${app-extension-target} INFOPLIST "${ExtensionInfoPlist}" PREPROCESS) 110 111 # application 112 add_executable(${app-target} ${auwrapper-sources} ${auwrapper-xib-resources}) 113 target_link_libraries(${app-target} PRIVATE ${auwrapper-lib} ${link_frameworks}) 114 add_dependencies(${app-target} "${app-extension-target}") 115 set_target_properties(${app-target} PROPERTIES RESOURCE "${auwrapper-xib-resources}") 116 set_target_properties(${app-target} PROPERTIES 117 MACOSX_BUNDLE TRUE 118 OUTPUT_NAME "${OutputName}" 119 XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER ${BundleID} 120 XCODE_ATTRIBUTE_INFOPLIST_PREFIX_HEADER ${AudioUnitConfig} 121 XCODE_ATTRIBUTE_GCC_PREFIX_HEADER ${AudioUnitConfig} 122 XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES 123 ${SMTG_AUV3_FOLDER} 124 ) 125 smtg_set_bundle(${app-target} INFOPLIST "${AppInfoPlist}" PREPROCESS) 126 127 get_target_property(PLUGIN_PACKAGE_PATH ${vst3_plugin_target} SMTG_PLUGIN_PACKAGE_PATH) 128 129 if(macOS) 130 add_custom_command(TARGET ${app-extension-target} 131 COMMENT "Copy VST3 plugin into App-Extension" 132 POST_BUILD 133 COMMAND rm -Rf 134 "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$<CONFIG>/$<TARGET_FILE_NAME:${app-extension-target}>.appex/Contents/PlugIns/plugin.vst3" 135 COMMAND ${CMAKE_COMMAND} -E make_directory 136 "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$<CONFIG>/$<TARGET_FILE_NAME:${app-extension-target}>.appex/Contents/PlugIns/plugin.vst3" 137 COMMAND /bin/cp -a -v 138 "${PLUGIN_PACKAGE_PATH}/" 139 "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$<CONFIG>/$<TARGET_FILE_NAME:${app-extension-target}>.appex/Contents/PlugIns/plugin.vst3/" 140 ) 141 142 add_custom_command(TARGET ${app-target} 143 COMMENT "Copy App-Extension into Application" 144 POST_BUILD 145 COMMAND rm -Rf 146 "$<TARGET_BUNDLE_CONTENT_DIR:${app-target}>/PlugIns/auv3.appex" 147 COMMAND ${CMAKE_COMMAND} -E make_directory 148 "$<TARGET_BUNDLE_CONTENT_DIR:${app-target}>/PlugIns/auv3.appex" 149 COMMAND /bin/cp -a -v 150 "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$<CONFIG>/$<TARGET_FILE_NAME:${app-extension-target}>.appex/" 151 "$<TARGET_BUNDLE_CONTENT_DIR:${app-target}>/PlugIns/auv3.appex/" 152 ) 153 smtg_codesign_target(${app-target} ${SMTG_IOS_DEVELOPMENT_TEAM} "${SMTG_CODE_SIGN_IDENTITY_MAC}") 154 smtg_codesign_target(${app-extension-target} ${SMTG_IOS_DEVELOPMENT_TEAM} "${SMTG_CODE_SIGN_IDENTITY_MAC}") 155 set_target_properties(${app-extension-target} PROPERTIES 156 XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "${EntitlementFile}" 157 ) 158 else() 159 add_custom_command(TARGET ${app-extension-target} 160 COMMENT "Copy VST3 plugin into App-Extension" 161 POST_BUILD 162 COMMAND rm -Rf 163 "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$<CONFIG>/$<TARGET_FILE_NAME:${app-extension-target}>.appex/PlugIns/plugin.vst3" 164 COMMAND ${CMAKE_COMMAND} -E make_directory 165 "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$<CONFIG>/$<TARGET_FILE_NAME:${app-extension-target}>.appex/PlugIns/plugin.vst3" 166 COMMAND /bin/cp -a -v 167 "${PLUGIN_PACKAGE_PATH}/" 168 "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$<CONFIG>/$<TARGET_FILE_NAME:${app-extension-target}>.appex/PlugIns/plugin.vst3/" 169 ) 170 add_custom_command(TARGET ${app-target} 171 COMMENT "Copy App-Extension into Application" 172 POST_BUILD 173 COMMAND rm -Rf 174 "$<TARGET_BUNDLE_DIR:${app-target}>/PlugIns/auv3.appex" 175 COMMAND ${CMAKE_COMMAND} -E make_directory 176 "$<TARGET_BUNDLE_DIR:${app-target}>/PlugIns/auv3.appex" 177 COMMAND /bin/cp -a -v 178 "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$<CONFIG>/$<TARGET_FILE_NAME:${app-extension-target}>.appex/" 179 "$<TARGET_BUNDLE_DIR:${app-target}>/PlugIns/auv3.appex/" 180 ) 181 182 smtg_set_platform_ios(${app-target}) 183 smtg_set_platform_ios(${app-extension-target}) 184 smtg_codesign_target(${app-target} ${SMTG_IOS_DEVELOPMENT_TEAM} "${SMTG_IOS_DEVELOPMENT_TEAM}") 185 smtg_codesign_target(${app-extension-target} ${SMTG_IOS_DEVELOPMENT_TEAM} "${SMTG_IOS_DEVELOPMENT_TEAM}") 186 187 set_target_properties(${app-target} PROPERTIES 188 XCODE_ATTRIBUTE_ENABLE_BITCODE "NO" 189 ) 190 set_target_properties(${app-extension-target} PROPERTIES 191 XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "${EntitlementFile}" 192 XCODE_ATTRIBUTE_ENABLE_BITCODE "NO" 193 ) 194 endif() 195 196 set(AUV3_APP_TARGET ${app-target} PARENT_SCOPE) 197 set(AUV3_EXTENSION_TARGET ${app-extension-target} PARENT_SCOPE) 198 199 endfunction() 200 201 endif() 202endif()