diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7ff1c688..75ca75dd 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -49,11 +49,11 @@ jobs: meson setup build --buildtype=release --cross-file=cross-wine.conf --unity=on --unity-size=10000 -Dbitbridge=true -Dcpp_link_args='-mwindows -static-libstdc++' -Dbuild.cpp_link_args='-static-libstdc++' ninja -C build - name: Strip remaining debug symbols - run: strip build/libyabridge{,-chainloader}-{vst2,vst3}.so build/yabridge-{host,group}{,-32}.exe.so + run: strip build/libyabridge{,-chainloader}-{vst2,vst3}.so build/yabridge-host{,-32}.exe.so - name: Create an archive for the binaries run: | mkdir yabridge - cp build/libyabridge{,-chainloader}-{vst2,vst3}.so build/yabridge-{host,group}{,-32}.exe{,.so} yabridge + cp build/libyabridge{,-chainloader}-{vst2,vst3}.so build/yabridge-host{,-32}.exe{,.so} yabridge cp CHANGELOG.md README.md yabridge tar -caf "$ARCHIVE_NAME" yabridge @@ -87,11 +87,11 @@ jobs: meson setup build --buildtype=release --cross-file=cross-wine.conf --unity=on --unity-size=10000 -Dbitbridge=true ninja -C build - name: Strip remaining debug symbols - run: strip build/libyabridge{,-chainloader}-{vst2,vst3}.so build/yabridge-{host,group}{,-32}.exe.so + run: strip build/libyabridge{,-chainloader}-{vst2,vst3}.so build/yabridge-host{,-32}.exe.so - name: Create an archive for the binaries run: | mkdir yabridge - cp build/libyabridge{,-chainloader}-{vst2,vst3}.so build/yabridge-{host,group}{,-32}.exe{,.so} yabridge + cp build/libyabridge{,-chainloader}-{vst2,vst3}.so build/yabridge-host{,-32}.exe{,.so} yabridge cp CHANGELOG.md README.md yabridge tar -caf "$ARCHIVE_NAME" yabridge @@ -127,11 +127,11 @@ jobs: meson setup build --buildtype=release --cross-file=cross-wine.conf --unity=on --unity-size=10000 -Dbitbridge=true -Dcpp_link_args='-mwindows -static-libstdc++' -Dbuild.cpp_args='-m32' -Dbuild.cpp_link_args='-m32 -static-libstdc++' ninja -C build - name: Strip remaining debug symbols - run: strip build/libyabridge{,-chainloader}-{vst2,vst3}.so build/yabridge-{host,group}{,-32}.exe.so + run: strip build/libyabridge{,-chainloader}-{vst2,vst3}.so build/yabridge-host{,-32}.exe.so - name: Create an archive for the binaries run: | mkdir yabridge - cp build/libyabridge{,-chainloader}-{vst2,vst3}.so build/yabridge-{host,group}{,-32}.exe{,.so} yabridge + cp build/libyabridge{,-chainloader}-{vst2,vst3}.so build/yabridge-host{,-32}.exe{,.so} yabridge cp CHANGELOG.md README.md yabridge tar -caf "$ARCHIVE_NAME" yabridge diff --git a/CHANGELOG.md b/CHANGELOG.md index 5118a2c7..2646d189 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,6 +38,8 @@ Versioning](https://semver.org/spec/v2.0.0.html). gets rid of the runtime dependency on Boost.Filesystem for those builds, and it also makes compiling slightly faster and the binaries slightly smaller. Before this, yabridge would need to be rebuilt whenever Boost got updated. +- The functionality for the `yabridge-group` binaries has been merged into the + `yabridge-host` binaries. - When mapping shared memory for audio and the user does not have permissions to lock the memory, yabridge will now retry mapping the memory without locking it instead of immediately terminating the process. An annoying desktop @@ -55,6 +57,8 @@ Versioning](https://semver.org/spec/v2.0.0.html). - Removed the `with-static-boost` build option since there's no longer a dependency on Boost.Filesystem. +- Removed the `yabridge-group*` binaries as they are now part of the + `yabridge-host*` binaries. This saves precious megabytes. ### Fixed @@ -80,6 +84,8 @@ Versioning](https://semver.org/spec/v2.0.0.html). - `libyabridge-chainloader-vst2.so` and `libyabridge-chainloader-vst3.so` are new files that should be included in the package. +- The `yabridge-group` binaries no longer exist as they are now part of the + `yabridge-host` binaries. - The `with-bitbridge` build option has been renamed to just `bitbridge`. - Completely removed the dependency on all Boost libraries. - Added a dependency on the headers-only diff --git a/README.md b/README.md index 0d861630..6595cb9b 100644 --- a/README.md +++ b/README.md @@ -819,11 +819,10 @@ meson setup build --buildtype=release --cross-file cross-wine.conf -Dbitbridge=t ninja -C build ``` -This will produce four files called `yabridge-host-32.exe`, -`yabridge-host-32.exe.so`, `yabridge-group-32.exe` and -`yabridge-group-32.exe.so`. Yabridge will detect whether the plugin you're -trying to load is 32-bit or 64-bit, and will run either the regular version or -the `*-32.exe` variant accordingly. +This will produce a second plugin host binary called `yabridge-host-32.exe`. +Yabridge will detect whether the plugin you're trying to load is 32-bit or +64-bit, and will run either the regular version or the `*-32.exe` variant +accordingly. ### 32-bit libraries diff --git a/ROADMAP.md b/ROADMAP.md index 972771fe..b865b67d 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -23,8 +23,6 @@ page lists some of those. - Replace the use of `notify-send` for notifications with using `libdbus` directly. Most systems will have both available by default, but some less common distros split `notify-send` from the rest of the `libnotify` package. -- Possibly combine the `yabridge-host` and `yabridge-group` binaries to save - some disk space as 95% of their code overlaps. - Consider adding an option for yabridgectl to set up VST2 plugins in `~/.vst`. As discussed in a couple places already doing so would come with a number of downsides and potential pitfalls so this may not happen. diff --git a/meson.build b/meson.build index 294fb5f8..ba218ae7 100644 --- a/meson.build +++ b/meson.build @@ -41,10 +41,8 @@ with_vst3 = get_option('vst3') # suffixed with `.exe`. vst2_plugin_name = 'yabridge-vst2' vst3_plugin_name = 'yabridge-vst3' -individual_host_name_64bit = 'yabridge-host' -individual_host_name_32bit = 'yabridge-host-32' -group_host_name_64bit = 'yabridge-group' -group_host_name_32bit = 'yabridge-group-32' +host_name_64bit = 'yabridge-host' +host_name_32bit = 'yabridge-host-32' compiler_options = [ '-fvisibility=hidden', @@ -231,11 +229,11 @@ endif # Binaries # # The application consists of a plugin (`libyabridge-{vst2,vst3}.so`) that calls -# a Winelib application (`yabridge-{host,group}{,-32}.exe`) that can host -# Windows VST2 and VST3 plugins. These plugins can in turn be loaded from small -# stub libraries dubbed chainloaders to avoid having to copy large plugin -# libraries around. More information about the way these two components work -# together can be found in `docs/architecture.md`. +# a Winelib application (`yabridge-host{,-32}.exe`) that can host Windows VST2 +# and VST3 plugins. These plugins can in turn be loaded from small stub +# libraries dubbed chainloaders to avoid having to copy large plugin libraries +# around. More information about the way these two components work together can +# be found in `docs/architecture.md`. # # Generate header files for configuration variables such as the current git tag @@ -298,36 +296,24 @@ endif if is_64bit_system executable( - individual_host_name_64bit, - individual_host_sources, + host_name_64bit, + host_sources, native : false, - dependencies : host_common_64bit_dep, - link_args : ['-m64'], - ) - - executable( - group_host_name_64bit, - group_host_sources, - native : false, - dependencies : host_common_64bit_dep, + include_directories : include_dir, + dependencies : host_64bit_deps, + cpp_args : compiler_options + wine_64bit_compiler_options, link_args : ['-m64'], ) endif if with_bitbridge executable( - individual_host_name_32bit, - individual_host_sources, + host_name_32bit, + host_sources, native : false, - dependencies : host_common_32bit_dep, - link_args : ['-m32'], - ) - - executable( - group_host_name_32bit, - group_host_sources, - native : false, - dependencies : host_common_32bit_dep, + include_directories : include_dir, + dependencies : host_32bit_deps, + cpp_args : compiler_options + wine_32bit_compiler_options, link_args : ['-m32'], ) endif diff --git a/src/chainloader/utils.cpp b/src/chainloader/utils.cpp index 72505c53..4e36bdd6 100644 --- a/src/chainloader/utils.cpp +++ b/src/chainloader/utils.cpp @@ -36,15 +36,15 @@ void* find_plugin_library(const std::string& name) { // `dlopen()` for distro packaged versions of yabridge const std::vector search_path = get_augmented_search_path(); if (const auto& yabridge_host_path = - search_in_path(search_path, yabridge_individual_host_name)) { + search_in_path(search_path, yabridge_host_name)) { const fs::path candidate = yabridge_host_path->parent_path() / name; if (fs::exists(candidate)) { return dlopen(candidate.c_str(), RTLD_LAZY | RTLD_LOCAL); } } - if (const auto& yabridge_host_32_path = search_in_path( - search_path, yabridge_individual_host_name_32bit)) { + if (const auto& yabridge_host_32_path = + search_in_path(search_path, yabridge_host_name_32bit)) { const fs::path candidate = yabridge_host_32_path->parent_path() / name; if (fs::exists(candidate)) { diff --git a/src/common/config/config.h.in b/src/common/config/config.h.in index c207ecb4..779c87ce 100644 --- a/src/common/config/config.h.in +++ b/src/common/config/config.h.in @@ -30,26 +30,11 @@ constexpr char yabridge_vst3_plugin_name[] = "@vst3_plugin_name@"; * The name of the Wine plugin host application, e.g. `yabridge-host.exe` for * the regular 64-bit build. */ -constexpr char yabridge_individual_host_name[] = - "@individual_host_binary_64bit@"; - -/** - * The name of the group host application, e.g. `yabridge-group.exe` for the - * regular 64-bit build. - */ -constexpr char yabridge_group_host_name[] = "@group_host_binary_64bit@"; +constexpr char yabridge_host_name[] = "@host_binary_64bit@"; /** * The name of the 32-bit Wine plugin host application, e.g. * `yabridge-host-32.exe`.` This is used as a bitbridge to be able to load * legacy 32-bit only Windows plugins from a 64-bit Linux host. */ -constexpr char yabridge_individual_host_name_32bit[] = - "@individual_host_binary_32bit@"; - -/** - * The name of the 32-bit group host application, e.g. `yabridge-group-32.exe`.` - * This is used as a bitbridge to be able to load legacy 32-bit only Windows - * plugins from a 64-bit Linux host. - */ -constexpr char yabridge_group_host_name_32bit[] = "@group_host_binary_32bit@"; +constexpr char yabridge_host_name_32bit[] = "@host_binary_32bit@"; diff --git a/src/common/config/meson.build b/src/common/config/meson.build index b4e1425c..76af406f 100644 --- a/src/common/config/meson.build +++ b/src/common/config/meson.build @@ -7,10 +7,8 @@ config_header = configure_file( { 'vst2_plugin_name': 'lib' + vst2_plugin_name + '.so', 'vst3_plugin_name': 'lib' + vst3_plugin_name + '.so', - 'individual_host_binary_32bit': individual_host_name_32bit + '.exe', - 'individual_host_binary_64bit': individual_host_name_64bit + '.exe', - 'group_host_binary_32bit': group_host_name_32bit + '.exe', - 'group_host_binary_64bit': group_host_name_64bit + '.exe', + 'host_binary_32bit': host_name_32bit + '.exe', + 'host_binary_64bit': host_name_64bit + '.exe', } ) ) diff --git a/src/plugin/host-process.cpp b/src/plugin/host-process.cpp index 0e7a161e..d7328b4a 100644 --- a/src/plugin/host-process.cpp +++ b/src/plugin/host-process.cpp @@ -110,8 +110,7 @@ IndividualHost::IndividualHost(asio::io_context& io_context, : HostProcess(io_context, sockets), plugin_info_(plugin_info), host_path_(find_vst_host(plugin_info.native_library_path_, - plugin_info.plugin_arch_, - false)), + plugin_info.plugin_arch_)), handle_(launch_host( host_path_, { @@ -172,8 +171,7 @@ GroupHost::GroupHost(asio::io_context& io_context, : HostProcess(io_context, sockets), plugin_info_(plugin_info), host_path_(find_vst_host(plugin_info.native_library_path_, - plugin_info.plugin_arch_, - true)) { + plugin_info.plugin_arch_)) { // When using plugin groups, we'll first try to connect to an existing group // host process and ask it to host our plugin. If no such process exists, // then we'll start a new process. In the event that multiple yabridge @@ -205,8 +203,8 @@ GroupHost::GroupHost(asio::io_context& io_context, // because it should run independently of this yabridge instance as // it will likely outlive it. Process::Handle group_host = - launch_host(host_path_, {group_socket_path.string()}, logger, - config, plugin_info); + launch_host(host_path_, {"group", group_socket_path.string()}, + logger, config, plugin_info); group_host.detach(); group_host_connect_handler_ = diff --git a/src/plugin/utils.cpp b/src/plugin/utils.cpp index 28164f5e..c395a2d4 100644 --- a/src/plugin/utils.cpp +++ b/src/plugin/utils.cpp @@ -304,13 +304,10 @@ std::string create_logger_prefix(const fs::path& endpoint_base_dir) { } fs::path find_vst_host(const ghc::filesystem::path& this_plugin_path, - LibArchitecture plugin_arch, - bool use_plugin_groups) { - auto host_name = use_plugin_groups ? yabridge_group_host_name - : yabridge_individual_host_name; + LibArchitecture plugin_arch) { + auto host_name = yabridge_host_name; if (plugin_arch == LibArchitecture::dll_32) { - host_name = use_plugin_groups ? yabridge_group_host_name_32bit - : yabridge_individual_host_name_32bit; + host_name = yabridge_host_name_32bit; } // If our `.so` file is a symlink, then search for the host in the directory diff --git a/src/plugin/utils.h b/src/plugin/utils.h index a1536c97..7b165606 100644 --- a/src/plugin/utils.h +++ b/src/plugin/utils.h @@ -181,7 +181,7 @@ std::string create_logger_prefix( const ghc::filesystem::path& endpoint_base_dir); /** - * Finds the Wine VST host (either `yabridge-host.exe` or `yabridge-host.exe` + * Finds the Wine VST host (either `yabridge-host.exe` or `yabridge-host-32.exe` * depending on the plugin). For this we will search in two places: * * 1. Alongside libyabridge-{vst2,vst3}.so if the file got symlinked. This is @@ -195,16 +195,13 @@ std::string create_logger_prefix( * from. * @param plugin_arch The architecture of the plugin, either 64-bit or 32-bit. * Used to determine which host application to use, if available. - * @param use_plugin_groups Whether the plugin is using plugin groups and we - * should be looking for the group host instead of the individual plugin host. * * @return The a path to the VST host, if found. * @throw std::runtime_error If the Wine VST host could not be found. */ ghc::filesystem::path find_vst_host( const ghc::filesystem::path& this_plugin_path, - LibArchitecture plugin_arch, - bool use_plugin_groups); + LibArchitecture plugin_arch); /** * Generate the group socket endpoint name used based on the name of the group, diff --git a/src/wine-host/group-host.cpp b/src/wine-host/group-host.cpp deleted file mode 100644 index ccc065c4..00000000 --- a/src/wine-host/group-host.cpp +++ /dev/null @@ -1,98 +0,0 @@ -// yabridge: a Wine plugin bridge -// Copyright (C) 2020-2022 Robbert van der Helm -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -#include - -// Generated inside of the build directory -#include -#include - -#include "../common/utils.h" -#include "bridges/group.h" -#include "bridges/vst2.h" - -static const std::string host_name = "yabridge group host version " + - std::string(yabridge_git_version) -#ifdef __i386__ - + " (32-bit compatibility mode)" -#endif - ; - -/** - * This works very similar to the host application defined in - * `individual-host.cpp`, but instead of just loading a single plugin this will - * act as a daemon that can host multiple 'grouped' plugins. This works by - * allowing the `libyabridge-{vst2,vst3}.so` instance to connect this this - * process over a socket to ask this process to host a VST `.dll` file using a - * provided socket. After that initialization step both the regular individual - * plugin host and this group plugin host will function identically on both the - * plugin and the Wine VST host side. - */ -int YABRIDGE_EXPORT -#ifdef WINE_USE_CDECL - __cdecl -#endif - main(int argc, char* argv[]) { - // Instead of directly hosting a plugin, this process will receive a UNIX - // domain socket endpoint path that it should listen on to allow yabridge - // instances to spawn plugins in this process. - if (argc < 2) { - std::cerr << host_name << std::endl; - std::cerr << "Usage: " -#ifdef __i386__ - << yabridge_group_host_name_32bit -#else - << yabridge_group_host_name -#endif - << " " << std::endl; - - return 1; - } - - const std::string group_socket_endpoint_path(argv[1]); - - std::cerr << "Initializing " << host_name << std::endl; - - // NOTE: Some plugins use Microsoft COM, but don't initialize it first and - // just pray the host does it for them. Examples of this are - // PSPaudioware's InfiniStrip and Shattered Glass Audio Code Red Free. - OleInitialize(nullptr); - - try { - GroupBridge bridge(group_socket_endpoint_path); - - // Blocks the main thread until all plugins have exited - bridge.handle_incoming_connections(); - } catch (const std::system_error& error) { - // If another process is already listening on the socket, we'll just - // print a message and exit quietly. This could happen if the host - // starts multiple yabridge instances that all use the same plugin group - // at the same time. - // The same error is also used if we could not create a pipe. Since that - // error is so rare, we'll just print to STDERR before that happens to - // differentiate the two cases. - std::cerr << "Another process is already listening on this group's " - "socket, connecting to the existing process:" - << std::endl; - std::cerr << error.what() << std::endl; - - return 0; - } - - // Like in `individual-host.cpp`, this shouldn't be needed, but sometimes - // with Wine background threads will be kept alive while this process exits - TerminateProcess(GetCurrentProcess(), 0); -} diff --git a/src/wine-host/individual-host.cpp b/src/wine-host/individual-host.cpp deleted file mode 100644 index 267bac24..00000000 --- a/src/wine-host/individual-host.cpp +++ /dev/null @@ -1,155 +0,0 @@ -// yabridge: a Wine plugin bridge -// Copyright (C) 2020-2022 Robbert van der Helm -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -#include -#include - -// Generated inside of the build directory -#include -#include - -#include "../common/utils.h" -#include "bridges/vst2.h" -#ifdef WITH_VST3 -#include "bridges/vst3.h" -#endif - -static const std::string host_name = "yabridge host version " + - std::string(yabridge_git_version) -#ifdef __i386__ - + " (32-bit compatibility mode)" -#endif - ; - -/** - * This is the default plugin host application. It will load the specified - * plugin plugin, and then connect back to the `libyabridge-{vst2,vst3}.so` - * instance that spawned this over the socket. - */ -int YABRIDGE_EXPORT -#ifdef WINE_USE_CDECL - __cdecl -#endif - main(int argc, char* argv[]) { - // We pass the plugin format, the name of the VST2 plugin .dll file or VST3 - // bundle to load, the base directory for the Unix domain socket endpoints - // to connect to and the process ID of the process the native plugin is - // being hosted in as arguments for yabridge-host.exe - if (argc < 5) { - std::cerr << host_name << std::endl; - std::cerr << "Usage: " -#ifdef __i386__ - << yabridge_individual_host_name_32bit -#else - << yabridge_individual_host_name -#endif - << " " - " " - << std::endl; - - return 1; - } - - const std::string plugin_type_str(argv[1]); - const PluginType plugin_type = plugin_type_from_string(plugin_type_str); - const std::string plugin_location(argv[2]); - const std::string socket_endpoint_path(argv[3]); - const pid_t parent_pid = std::stoi(argv[4]); - - std::cerr << "Initializing " << host_name << std::endl; - std::cerr << "Preparing to load " << plugin_type_to_string(plugin_type) - << " plugin at '" << plugin_location << "'" << std::endl; - - // NOTE: Some plugins use Microsoft COM, but don't initialize it first and - // just pray the host does it for them. Examples of this are - // PSPaudioware's InfiniStrip and Shattered Glass Audio Code Red Free. - OleInitialize(nullptr); - - // As explained in `Vst2Bridge`, the plugin has to be initialized in the - // same thread as the one that calls `io_context.run()`. This setup is - // slightly more convoluted than it has to be, but doing it this way we - // don't need to differentiate between individually hosted plugins and - // plugin groups when it comes to event handling. - MainContext main_context{}; - std::unique_ptr bridge; - try { - switch (plugin_type) { - case PluginType::vst2: - bridge = std::make_unique( - main_context, plugin_location, socket_endpoint_path, - parent_pid); - break; - case PluginType::vst3: -#ifdef WITH_VST3 - bridge = std::make_unique( - main_context, plugin_location, socket_endpoint_path, - parent_pid); -#else - std::cerr << "This version of yabridge has not been compiled " - "with VST3 support" - << std::endl; - return 1; -#endif - break; - case PluginType::unknown: - std::cerr << "Unknown plugin type '" << plugin_type_str << "'" - << std::endl; - return 1; - break; - }; - } catch (const std::exception& error) { - std::cerr << "Error while initializing the Wine plugin host:" - << std::endl; - std::cerr << error.what() << std::endl; - - // See below, just returning from `main()` isn't enough to terminate the - // process - TerminateProcess(GetCurrentProcess(), 0); - - return 1; - } - - // Let the plugin receive and handle its events on its own thread. Some - // potentially unsafe events that should always be run from the UI thread - // will be posted to `main_context`. - Win32Thread worker_thread([&]() { - pthread_setname_np(pthread_self(), "worker"); - - bridge->run(); - - // // When the sockets get closed, this application should - // // terminate gracefully - // main_context.stop(); - // FIXME: So some of the background threads spawned by the plugin may - // get stuck if the host got terminated abruptly. After an entire - // day of debugging I still have no idea whether this is a bug in - // yabridge, Wine, or those plugins, but just killing off this - // process and all of its threads 'fixes' the issue. - // - // https://github.com/robbert-vdh/yabridge/issues/69 - TerminateProcess(GetCurrentProcess(), 0); - }); - - std::cerr << "Finished initializing '" << plugin_location << "'" - << std::endl; - - // Handle Win32 messages and X11 events on a timer, just like in - // `GroupBridge::async_handle_events()`` - main_context.async_handle_events( - [&]() { bridge->handle_events(); }, - [&]() { return !bridge->inhibits_event_loop(); }); - main_context.run(); -} diff --git a/src/wine-host/meson.build b/src/wine-host/meson.build index 62c45ed0..8ab34796 100644 --- a/src/wine-host/meson.build +++ b/src/wine-host/meson.build @@ -1,11 +1,7 @@ -# The plugin host applications come on four flavours: hosting a single plugin -# and hosting multiple plugins within a single process, and 32-bit and 64-bit. -# We will compile the shared parts for the individual an plugin group hosts as a -# static library first to cut down on compile times. -# # As with the libraries, we cannot call `executable()` here since we would like # to keep all relevant files in the root of the build directory, and Meson # doesn't have a way to customize that yet. + if is_64bit_system host_64bit_deps = [ configuration_dep, @@ -54,7 +50,7 @@ if with_bitbridge endif endif -host_common_sources = files( +host_sources = files( '../common/communication/vst2.cpp', '../common/serialization/vst2.cpp', '../common/configuration.cpp', @@ -67,14 +63,16 @@ host_common_sources = files( '../common/utils.cpp', '../include/llvm/small-vector.cpp', 'bridges/common.cpp', + 'bridges/group.cpp', 'bridges/vst2.cpp', 'editor.cpp', + 'host.cpp', 'utils.cpp', 'xdnd-proxy.cpp', ) if with_vst3 - host_common_sources += files( + host_sources += files( '../common/logging/vst3.cpp', '../common/serialization/vst3/component-handler/component-handler.cpp', '../common/serialization/vst3/component-handler/component-handler-2.cpp', @@ -139,48 +137,3 @@ if with_vst3 'bridges/vst3.cpp', ) endif - -# These will be linked against a static library made from `host_common_sources` -individual_host_sources = files( - 'individual-host.cpp', -) -group_host_sources = files( - 'bridges/group.cpp', - 'group-host.cpp', -) - -if is_64bit_system - host_common_64bit = static_library( - 'host_common_64bit', - host_common_sources, - native : false, - include_directories : include_dir, - dependencies : host_64bit_deps, - cpp_args : compiler_options + wine_64bit_compiler_options, - link_args : ['-m64'], - ) - host_common_64bit_dep = declare_dependency( - link_with : host_common_64bit, - include_directories : include_dir, - dependencies : host_64bit_deps, - compile_args : compiler_options + wine_64bit_compiler_options, - ) -endif - -if with_bitbridge - host_common_32bit = static_library( - 'host_common_32bit', - host_common_sources, - native : false, - include_directories : include_dir, - dependencies : host_32bit_deps, - cpp_args : compiler_options + wine_32bit_compiler_options, - link_args : ['-m32'], - ) - host_common_32bit_dep = declare_dependency( - link_with : host_common_32bit, - include_directories : include_dir, - dependencies : host_32bit_deps, - compile_args : compiler_options + wine_32bit_compiler_options, - ) -endif