Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -135,16 +135,16 @@ YUP is usable for experimentation, examples, prototypes, and contributors who ar
## Supported Plugin Formats
| | **CLAP** | **VST3** | **VST2** | **AUv3** | **AUv2** | **AAX** | **LV2** |
|--------------------------|:------------------:|:------------------:|:------------------:|:------------------:|:-------------------------:|:---------------------:|:---------------------:|
| **Windows** | :white_check_mark: | :white_check_mark: | | | | :construction: | |
| **macOS** | :white_check_mark: | :white_check_mark: | | :construction: | :white_check_mark: | :construction: | |
| **Linux** | :construction: | :construction: | | | | | |
| **Windows** | :white_check_mark: | :white_check_mark: | | | | :construction: | :construction: |
| **macOS** | :white_check_mark: | :white_check_mark: | | :construction: | :white_check_mark: | :construction: | :construction: |
| **Linux** | :construction: | :construction: | | | | | :construction: |


## Supported Plugin Hosting Formats
| | **CLAP** | **VST3** | **VST2** | **AUv3** | **AUv2** | **AAX** | **LV2** |
|--------------------------|:------------------:|:------------------:|:------------------:|:------------------:|:-------------------------:|:---------------------:|:---------------------:|
| **Windows** | :construction: | :construction: | | | | | |
| **macOS** | :white_check_mark: | :white_check_mark: | | | :white_check_mark: | | |
| **Windows** | :white_check_mark: | :white_check_mark: | | | | | |
| **macOS** | :white_check_mark: | :white_check_mark: | | :construction: | :white_check_mark: | | |
| **Linux** | :construction: | :construction: | | | | | |


Expand Down
34 changes: 34 additions & 0 deletions cmake/platforms/mac/AudioPluginInfo_AAX.plist.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>${MACOSX_BUNDLE_EXECUTABLE_NAME}</string>
<key>CFBundleGetInfoString</key>
<string>${MACOSX_BUNDLE_BUNDLE_VERSION}, Copyright (c) 2026</string>
<key>CFBundleIdentifier</key>
<string>${MACOSX_BUNDLE_GUI_IDENTIFIER}</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${MACOSX_BUNDLE_BUNDLE_NAME}</string>
<key>CFBundlePackageType</key>
<string>@YUP_AUDIO_PLUGIN_BUNDLE_PACKAGE_TYPE@</string>
<key>CFBundleShortVersionString</key>
<string>${MACOSX_BUNDLE_SHORT_VERSION_STRING}</string>
<key>CFBundleSignature</key>
<string>PTul</string>
<key>CFBundleVersion</key>
<string>${MACOSX_BUNDLE_BUNDLE_VERSION}</string>
<key>LSMultipleInstancesProhibited</key>
<true/>
<key>LSPrefersCarbon</key>
<false/>
<key>NSAppleScriptEnabled</key>
<string>No</string>
<key>CSResourcesFileMapped</key>
<true/>
</dict>
</plist>
30 changes: 30 additions & 0 deletions cmake/platforms/mac/AudioUnitV3ContainerInfo.plist.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>${MACOSX_BUNDLE_EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key>
<string>@auv3_container_bundle_identifier@</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>@PLUGIN_AU_NAME@</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>@PLUGIN_AU_VERSION@</string>
<key>CFBundleVersion</key>
<string>@PLUGIN_AU_VERSION@</string>
<key>NSHumanReadableCopyright</key>
<string>Copyright (c) 2026 - kunitoki@gmail.com</string>
<key>NSHighResolutionCapable</key>
<true/>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
<key>LSUIElement</key>
<true/>
</dict>
</plist>
61 changes: 61 additions & 0 deletions cmake/platforms/mac/AudioUnitV3Info.plist.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>${MACOSX_BUNDLE_EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key>
<string>${MACOSX_BUNDLE_GUI_IDENTIFIER}</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>@PLUGIN_AU_NAME@</string>
<key>CFBundlePackageType</key>
<string>XPC!</string>
<key>CFBundleShortVersionString</key>
<string>@PLUGIN_AU_VERSION@</string>
<key>CFBundleVersion</key>
<string>@PLUGIN_AU_VERSION@</string>
<key>CFBundleSignature</key>
<string>@PLUGIN_AU_MANUFACTURER@</string>
<key>NSHumanReadableCopyright</key>
<string>Copyright (c) 2026 - kunitoki@gmail.com</string>
<key>NSHighResolutionCapable</key>
<true/>
<key>NSExtension</key>
<dict>
<key>NSExtensionPrincipalClass</key>
<string>YUPAUv3ViewController</string>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.AudioUnit-UI</string>
<key>NSExtensionAttributes</key>
<dict>
<key>NSExtensionServiceRoleType</key>
<string>NSExtensionServiceRoleTypeEditor</string>
<key>AudioComponents</key>
<array>
<dict>
<key>type</key>
<string>@PLUGIN_AU_TYPE@</string>
<key>subtype</key>
<string>@PLUGIN_AU_SUBTYPE@</string>
<key>manufacturer</key>
<string>@PLUGIN_AU_MANUFACTURER@</string>
<key>name</key>
<string>@PLUGIN_AU_NAME@</string>
<key>version</key>
<integer>1</integer>
<key>sandboxSafe</key>
<true/>
<key>tags</key>
<array>
<string>@PLUGIN_AU_TAG@</string>
</array>
</dict>
</array>
</dict>
</dict>
</dict>
</plist>
12 changes: 12 additions & 0 deletions cmake/platforms/mac/AudioUnitV3_Entitlements.plist
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.device.audio-input</key>
<true/>
<key>com.apple.security.device.midi</key>
<true/>
</dict>
</plist>
56 changes: 42 additions & 14 deletions cmake/plugins/yup_plugin_aax.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ function (_yup_find_aax_sdk)
set (AAX_SDK_ROOT "$ENV{YUP_AAX_SDK_ROOT}")
else()
_yup_message (STATUS "YUP_AAX_SDK_ROOT not set — AAX plugin support disabled")
# _yup_message (FATAL_ERROR "YUP_AAX_SDK_ROOT must be set when PLUGIN_CREATE_AAX is enabled")
return()
endif()

Expand All @@ -45,6 +46,9 @@ function (_yup_find_aax_sdk)
target_include_directories (yup_audio_plugin_client_aaxsdk_headers INTERFACE
"${AAX_SDK_ROOT}/Interfaces"
"${AAX_SDK_ROOT}/Interfaces/ACF")
target_compile_options (yup_audio_plugin_client_aaxsdk_headers INTERFACE
$<$<CXX_COMPILER_ID:GNU,Clang,AppleClang>:-Wno-multichar>
$<$<CXX_COMPILER_ID:GNU,Clang,AppleClang>:-Wno-undef-prefix>)

# --- Build AAXLibrary (static library from SDK sources) ---
set (AAX_LIBRARY_SOURCE_DIR "${AAX_SDK_ROOT}/Libs/AAXLibrary/source")
Expand All @@ -54,27 +58,31 @@ function (_yup_find_aax_sdk)
file (GLOB_RECURSE AAX_LIBRARY_SOURCES
"${AAX_LIBRARY_SOURCE_DIR}/*.cpp")

# AAX_CAutoreleasePool.Win.cpp and .OSX.mm define the same symbols unguarded
if (YUP_PLATFORM_MAC)
file (GLOB_RECURSE AAX_LIBRARY_WIN_SOURCES
"${AAX_LIBRARY_SOURCE_DIR}/*.Win.cpp")
if (AAX_LIBRARY_WIN_SOURCES)
list (REMOVE_ITEM AAX_LIBRARY_SOURCES ${AAX_LIBRARY_WIN_SOURCES})
endif()
file (GLOB_RECURSE AAX_LIBRARY_OBJC_SOURCES
"${AAX_LIBRARY_SOURCE_DIR}/*.mm"
"${AAX_LIBRARY_SOURCE_DIR}/*.OSX.*")
list (APPEND AAX_LIBRARY_SOURCES ${AAX_LIBRARY_OBJC_SOURCES})
else()
# Exclude macOS-specific files on Windows/Linux
file (GLOB_RECURSE AAX_LIBRARY_OSX_SOURCES
"${AAX_LIBRARY_SOURCE_DIR}/*_OSX.*"
"${AAX_LIBRARY_SOURCE_DIR}/*.mm")
if (AAX_LIBRARY_OSX_SOURCES)
list (REMOVE_ITEM AAX_LIBRARY_SOURCES ${AAX_LIBRARY_OSX_SOURCES})
endif()
list (APPEND AAX_LIBRARY_SOURCES ${AAX_LIBRARY_OBJC_SOURCES})
endif()

# Class factory implementation required by AAX_Init.cpp
list (APPEND AAX_LIBRARY_SOURCES "${AAX_SDK_ROOT}/Interfaces/ACF/CACFClassFactory.cpp")

if (AAX_LIBRARY_SOURCES)
add_library (yup_audio_plugin_client_aaxlib STATIC ${AAX_LIBRARY_SOURCES})
target_compile_features (yup_audio_plugin_client_aaxlib PRIVATE cxx_std_17)
target_include_directories (yup_audio_plugin_client_aaxlib PRIVATE
"${AAX_SDK_ROOT}/Interfaces"
"${AAX_SDK_ROOT}/Interfaces/ACF")
"${AAX_SDK_ROOT}/Interfaces/ACF"
"${AAX_SDK_ROOT}/Libs/AAXLibrary/include")
target_compile_options (yup_audio_plugin_client_aaxlib PRIVATE
$<$<CXX_COMPILER_ID:GNU,Clang,AppleClang>:-Wno-multichar>
$<$<CXX_COMPILER_ID:GNU,Clang,AppleClang>:-Wno-undef-prefix>)
target_compile_definitions (yup_audio_plugin_client_aaxlib PRIVATE
AAX_LIBRARY_BINARY=1)

Expand Down Expand Up @@ -129,6 +137,11 @@ function (_yup_audio_plugin_create_aax

_yup_find_aax_sdk()

if (NOT TARGET yup_audio_plugin_client_aaxsdk)
_yup_message (STATUS "Skipping AAX plugin target for ${target_name} (AAX SDK not available)")
return()
endif()

_yup_message (STATUS "Setting up AAX plugin client")
_yup_module_setup_plugin_client (
${target_name}
Expand All @@ -151,6 +164,12 @@ function (_yup_audio_plugin_create_aax
YUP_AUDIO_PLUGIN_ENABLE_AAX=1
YUP_STANDALONE_APPLICATION=0)

# The ACF entry points (ACFRegisterPlugin, ACFStartup, ...) exported by the
# plugin binary are defined in the SDK's AAX_Exports.cpp
get_target_property (aax_sdk_root yup_audio_plugin_client_aaxsdk YUP_AAX_SDK_ROOT)
target_sources (${target_name}_aax_plugin PRIVATE
"${aax_sdk_root}/Interfaces/AAX_Exports.cpp")

target_link_libraries (${target_name}_aax_plugin PRIVATE
${target_name}_shared
yup_audio_plugin_client
Expand Down Expand Up @@ -197,13 +216,22 @@ function (_yup_audio_plugin_create_aax

set (aax_plugin_path "$<TARGET_BUNDLE_DIR:${target_name}_aax_plugin>")
else()
# Windows AAX: directory bundle with .aaxplugin extension
# Windows AAX plugins are directory bundles laid out as
# Name.aaxplugin/Contents/x64/Name.aaxplugin
set (aax_bundle_dir "${CMAKE_CURRENT_BINARY_DIR}/${target_name}_aax_plugin.aaxplugin")

set_target_properties (${target_name}_aax_plugin PROPERTIES
PREFIX ""
SUFFIX ".aaxplugin")
SUFFIX ".aaxplugin"
OUTPUT_NAME "${target_name}_aax_plugin"
RUNTIME_OUTPUT_DIRECTORY "$<1:${aax_bundle_dir}/Contents/x64>"
LIBRARY_OUTPUT_DIRECTORY "$<1:${aax_bundle_dir}/Contents/x64>")

set (aax_plugin_path "$<TARGET_FILE_DIR:${target_name}_aax_plugin>")
set (aax_plugin_path "${aax_bundle_dir}")
endif()

yup_codesign_target (${target_name}_aax_plugin "${aax_plugin_path}")

yup_audio_plugin_copy_bundle (${target_name} aax)

endfunction()
Loading
Loading