mirror of
https://github.com/robbert-vdh/yabridge.git
synced 2026-05-10 04:30:12 +02:00
[yabridgectl] Add support for 32-bit yabridge VST3
Bundles containing a 32-bit version of `libyabridge-vst3.so` should use the `x86-linux` directory instead of the `x86_64-linux` directory.
This commit is contained in:
@@ -68,6 +68,8 @@ Versioning](https://semver.org/spec/v2.0.0.html).
|
|||||||
|
|
||||||
### yabridgectl
|
### yabridgectl
|
||||||
|
|
||||||
|
- Added support for setting up merged VST3 bundles with a 32-bit version of
|
||||||
|
`libyabridge-vst3.so`.
|
||||||
- Copies of `libyabridge-vst2.so` and `libyabridge-vst3.so` are now reflinked
|
- Copies of `libyabridge-vst2.so` and `libyabridge-vst3.so` are now reflinked
|
||||||
when supported by the file system. This speeds up the file coyping process
|
when supported by the file system. This speeds up the file coyping process
|
||||||
while also reducing the amount of disk space used for yabridge when using
|
while also reducing the amount of disk space used for yabridge when using
|
||||||
|
|||||||
@@ -98,7 +98,8 @@ pub fn show_status(config: &Config) -> Result<()> {
|
|||||||
.unwrap_or_else(|| String::from("<auto>"))
|
.unwrap_or_else(|| String::from("<auto>"))
|
||||||
);
|
);
|
||||||
|
|
||||||
match config.files() {
|
let files = config.files();
|
||||||
|
match &files {
|
||||||
Ok(files) => {
|
Ok(files) => {
|
||||||
println!(
|
println!(
|
||||||
"libyabridge-vst2.so: '{}'",
|
"libyabridge-vst2.so: '{}'",
|
||||||
@@ -108,6 +109,7 @@ pub fn show_status(config: &Config) -> Result<()> {
|
|||||||
"libyabridge-vst3.so: {}\n",
|
"libyabridge-vst3.so: {}\n",
|
||||||
files
|
files
|
||||||
.libyabridge_vst3
|
.libyabridge_vst3
|
||||||
|
.as_ref()
|
||||||
.map(|(path, arch)| format!("'{}' ({})", path.display(), arch))
|
.map(|(path, arch)| format!("'{}' ({})", path.display(), arch))
|
||||||
.unwrap_or_else(|| "<not found>".red().to_string())
|
.unwrap_or_else(|| "<not found>".red().to_string())
|
||||||
);
|
);
|
||||||
@@ -123,7 +125,9 @@ pub fn show_status(config: &Config) -> Result<()> {
|
|||||||
// be added both with and without a trailing slash
|
// be added both with and without a trailing slash
|
||||||
println!("\n{}", path.join("").display());
|
println!("\n{}", path.join("").display());
|
||||||
|
|
||||||
for (plugin_path, (plugin, status)) in search_results.installation_status() {
|
for (plugin_path, (plugin, status)) in
|
||||||
|
search_results.installation_status(files.as_ref().ok())
|
||||||
|
{
|
||||||
let plugin_type = match plugin {
|
let plugin_type = match plugin {
|
||||||
Plugin::Vst2(Vst2Plugin { architecture, .. }) => {
|
Plugin::Vst2(Vst2Plugin { architecture, .. }) => {
|
||||||
format!("{}, {}", "VST2".cyan(), architecture)
|
format!("{}, {}", "VST2".cyan(), architecture)
|
||||||
@@ -302,8 +306,13 @@ pub fn do_sync(config: &mut Config, options: &SyncOptions) -> Result<()> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// We're building a merged VST3 bundle containing both a copy or symlink to
|
// We're building a merged VST3 bundle containing both a copy or symlink to
|
||||||
// `libyabridge-vst3.so` and the Windows VST3 plugin
|
// `libyabridge-vst3.so` and the Windows VST3 plugin. The path to this native
|
||||||
let native_module_path = module.target_native_module_path();
|
// module will depend on whether `libyabridge-vst3.so` is a 32-bit or a 64-bit
|
||||||
|
// library file.
|
||||||
|
// TODO: Make sure the bundle is cleared before setting this up for the first
|
||||||
|
// time, or else it won't be possible to cleanly switch between 32-bit and
|
||||||
|
// 64-bit yabridge.
|
||||||
|
let native_module_path = module.target_native_module_path(Some(&files));
|
||||||
utils::create_dir_all(native_module_path.parent().unwrap())?;
|
utils::create_dir_all(native_module_path.parent().unwrap())?;
|
||||||
if install_file(
|
if install_file(
|
||||||
options.force,
|
options.force,
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ use std::path::{Path, PathBuf};
|
|||||||
use std::process::Command;
|
use std::process::Command;
|
||||||
use walkdir::WalkDir;
|
use walkdir::WalkDir;
|
||||||
|
|
||||||
use crate::config::yabridge_vst3_home;
|
use crate::config::{yabridge_vst3_home, YabridgeFiles};
|
||||||
use crate::utils::get_file_type;
|
use crate::utils::get_file_type;
|
||||||
|
|
||||||
/// Stores the results from searching through a directory. We'll search for Windows VST2 plugin
|
/// Stores the results from searching through a directory. We'll search for Windows VST2 plugin
|
||||||
@@ -189,8 +189,10 @@ impl Vst3Module {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Get the path to the `libyabridge.so` file in `~/.vst3` corresponding to the bridged version
|
/// Get the path to the `libyabridge.so` file in `~/.vst3` corresponding to the bridged version
|
||||||
/// of this module.
|
/// of this module. The path here depends on whether we're using a 32-bit or 64-bit version of
|
||||||
pub fn target_native_module_path(&self) -> PathBuf {
|
/// yabridge. If the configuration is not given (for instance, becuase yabridge is not set up
|
||||||
|
/// properly) we'll assume the module should be 64-bit.
|
||||||
|
pub fn target_native_module_path(&self, config: Option<&YabridgeFiles>) -> PathBuf {
|
||||||
let native_module_name = match &self.module {
|
let native_module_name = match &self.module {
|
||||||
Vst3ModuleType::Legacy(path) | Vst3ModuleType::Bundle(path) => path
|
Vst3ModuleType::Legacy(path) | Vst3ModuleType::Bundle(path) => path
|
||||||
.with_extension("so")
|
.with_extension("so")
|
||||||
@@ -203,7 +205,16 @@ impl Vst3Module {
|
|||||||
|
|
||||||
let mut path = self.target_bundle_home();
|
let mut path = self.target_bundle_home();
|
||||||
path.push("Contents");
|
path.push("Contents");
|
||||||
path.push("x86_64-linux");
|
|
||||||
|
#[allow(clippy::wildcard_in_or_patterns)]
|
||||||
|
match config.and_then(|c| c.libyabridge_vst3.as_ref()) {
|
||||||
|
Some((_, LibArchitecture::Lib32)) => path.push("x86-linux"),
|
||||||
|
// NOTE: We'll always fall back to this if `libyabridge-vst3.so` is not found, just so
|
||||||
|
// we cannot get any errors during `yabridgectl status` even if yabridge is not
|
||||||
|
// set up correctly.
|
||||||
|
Some((_, LibArchitecture::Lib64)) | _ => path.push("x86_64-linux"),
|
||||||
|
}
|
||||||
|
|
||||||
path.push(native_module_name);
|
path.push(native_module_name);
|
||||||
path
|
path
|
||||||
}
|
}
|
||||||
@@ -269,7 +280,10 @@ impl SearchResults {
|
|||||||
/// Create a map out of all found plugins based on their file path that contains both a
|
/// Create a map out of all found plugins based on their file path that contains both a
|
||||||
/// reference to the plugin (so we can print information about it) and the current installation
|
/// reference to the plugin (so we can print information about it) and the current installation
|
||||||
/// status. The installation status will be `None` if the plugin has not yet been set up.
|
/// status. The installation status will be `None` if the plugin has not yet been set up.
|
||||||
pub fn installation_status(&self) -> BTreeMap<PathBuf, (&Plugin, Option<NativeFile>)> {
|
pub fn installation_status(
|
||||||
|
&self,
|
||||||
|
config: Option<&YabridgeFiles>,
|
||||||
|
) -> BTreeMap<PathBuf, (&Plugin, Option<NativeFile>)> {
|
||||||
let so_files: HashMap<&Path, &NativeFile> = self
|
let so_files: HashMap<&Path, &NativeFile> = self
|
||||||
.so_files
|
.so_files
|
||||||
.iter()
|
.iter()
|
||||||
@@ -293,7 +307,7 @@ impl SearchResults {
|
|||||||
vst3_module.original_path().to_owned(),
|
vst3_module.original_path().to_owned(),
|
||||||
(
|
(
|
||||||
plugin,
|
plugin,
|
||||||
get_file_type(vst3_module.target_native_module_path()),
|
get_file_type(vst3_module.target_native_module_path(config)),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user