From fac6d6bf9813f0b4cd18230ba9297b51e45fb419 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Tue, 7 Jun 2022 23:42:41 +0200 Subject: [PATCH] Use separate plugin-cache for Apple/M1 Plugins on Apple can be multi-arch (Intel + ARM), or AUs may be bridged by Rosetta. A user can also run Intel binary of Ardour or M1 binary on M1 CPUs on macOS. Each can see different plugins - notably VST3 plugins that are Intel only can be scanned using the Intel binary, but are later not available with the M1 build. --- libs/ardour/auv2_scan.cc | 4 ++++ libs/ardour/plugin_manager.cc | 10 +++++++++- libs/ardour/vst3_scan.cc | 4 ++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/libs/ardour/auv2_scan.cc b/libs/ardour/auv2_scan.cc index 9abfb2c985..c81ea9e73b 100644 --- a/libs/ardour/auv2_scan.cc +++ b/libs/ardour/auv2_scan.cc @@ -418,7 +418,11 @@ discover_auv2 (CAComponentDescription& desc, std::vector& rv, static string auv2_info_cache_dir () { +#ifdef __aarch64__ + string dir = Glib::build_filename (ARDOUR::user_cache_directory (), "auv2-arm64"); +#else string dir = Glib::build_filename (ARDOUR::user_cache_directory (), "auv2"); +#endif /* if the directory doesn't exist, try to create it */ if (!Glib::file_test (dir, Glib::FILE_TEST_IS_DIR)) { if (g_mkdir (dir.c_str (), 0700)) { diff --git a/libs/ardour/plugin_manager.cc b/libs/ardour/plugin_manager.cc index dff6b1bba0..743208d5f1 100644 --- a/libs/ardour/plugin_manager.cc +++ b/libs/ardour/plugin_manager.cc @@ -164,7 +164,11 @@ std::string PluginManager::vst3_scanner_bin_path = ""; # endif #endif -#define AUV2_BLACKLIST "auv2_blacklist.txt" +#ifdef __aarch64__ +# define AUV2_BLACKLIST "auv2_a64_blacklist.txt" +#else +# define AUV2_BLACKLIST "auv2_blacklist.txt" +#endif PluginManager& PluginManager::instance() @@ -1945,7 +1949,11 @@ void PluginManager::clear_vst3_cache () { #ifdef VST3_SUPPORT +# if defined __APPLE__ && defined __aarch64__ + string dn = Glib::build_filename (ARDOUR::user_cache_directory(), "vst-arm64"); +# else string dn = Glib::build_filename (ARDOUR::user_cache_directory(), "vst"); +# endif vector v3i_files; find_files_matching_regex (v3i_files, dn, "\\.v3i$", false); for (vector::iterator i = v3i_files.begin(); i != v3i_files.end (); ++i) { diff --git a/libs/ardour/vst3_scan.cc b/libs/ardour/vst3_scan.cc index 25115bb442..55ececf3cf 100644 --- a/libs/ardour/vst3_scan.cc +++ b/libs/ardour/vst3_scan.cc @@ -350,7 +350,11 @@ ARDOUR::module_path_vst3 (string const& path) static string vst3_info_cache_dir () { +#if defined __APPLE__ && defined __aarch64__ + string dir = Glib::build_filename (ARDOUR::user_cache_directory (), "vst-arm64"); +#else string dir = Glib::build_filename (ARDOUR::user_cache_directory (), "vst"); +#endif /* if the directory doesn't exist, try to create it */ if (!Glib::file_test (dir, Glib::FILE_TEST_IS_DIR)) { if (g_mkdir (dir.c_str (), 0700)) {