mirror of
https://github.com/robbert-vdh/yabridge.git
synced 2026-05-09 20:29:10 +02:00
Add another flag for enabling a bit bridge build
This commit is contained in:
@@ -0,0 +1,16 @@
|
|||||||
|
[binaries]
|
||||||
|
c = 'winegcc'
|
||||||
|
cpp = 'wineg++'
|
||||||
|
ar = 'ar'
|
||||||
|
strip = 'strip'
|
||||||
|
|
||||||
|
[properties]
|
||||||
|
# These would be the arguments for 64-bit compilation. We'll set the `-m64` flag
|
||||||
|
# (or `-m32`) in our meson.build to allow the 32-bit bitbridge to be built in
|
||||||
|
# the same build directory as the plugin and the regular 64-bit version of the
|
||||||
|
# host application to ensure that they are always in sync.
|
||||||
|
# c_args = ['-m64']
|
||||||
|
# cpp_args = ['-m64']
|
||||||
|
# cpp_link_args = ['-m64', '-mwindows']
|
||||||
|
cpp_link_args = ['-mwindows']
|
||||||
|
needs_exe_wrapper = true
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
[binaries]
|
|
||||||
c = 'winegcc'
|
|
||||||
cpp = 'wineg++'
|
|
||||||
ar = 'ar'
|
|
||||||
strip = 'strip'
|
|
||||||
|
|
||||||
[properties]
|
|
||||||
c_args=['-m64']
|
|
||||||
cpp_args=['-m64']
|
|
||||||
cpp_link_args=['-m64', '-mwindows']
|
|
||||||
needs_exe_wrapper = true
|
|
||||||
|
|
||||||
[host_machine]
|
|
||||||
system = 'linux'
|
|
||||||
cpu_family = 'x86_64'
|
|
||||||
cpu = 'x86_64'
|
|
||||||
endian = 'little'
|
|
||||||
+47
-20
@@ -12,9 +12,19 @@ winelib_check = '''#ifndef __WINE__
|
|||||||
#error 1
|
#error 1
|
||||||
#endif'''
|
#endif'''
|
||||||
if not meson.get_compiler('cpp').compiles(winelib_check)
|
if not meson.get_compiler('cpp').compiles(winelib_check)
|
||||||
error('You need to set up a cross compiler, check the README for more information.')
|
error('You need to set up a cross compiler, check the README for compilation instructions.')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# Depending on the `use-bitbridge` flag we'll enable building a second 32-bit
|
||||||
|
# host application that can act as a bit bridge for using 32-bit Windows plugins
|
||||||
|
# in 64-bit Linux VST hsots. The plugin will determine which host application to
|
||||||
|
# use based on the `.dll` file it's trying to load.
|
||||||
|
# This setup is necessary until Meson provides a way to have multiple
|
||||||
|
# cross-builds for a single build directory:
|
||||||
|
# https://github.com/mesonbuild/meson/issues/5125
|
||||||
|
host_name_64bit = 'yabridge-host'
|
||||||
|
host_name_32bit = 'yabridge-host-32'
|
||||||
|
|
||||||
# This provides an easy way to start the Wine VST host using winedbg since it
|
# This provides an easy way to start the Wine VST host using winedbg since it
|
||||||
# can be quite a pain to set up
|
# can be quite a pain to set up
|
||||||
compiler_options = []
|
compiler_options = []
|
||||||
@@ -22,13 +32,8 @@ if get_option('use-winedbg')
|
|||||||
compiler_options += '-DUSE_WINEDBG'
|
compiler_options += '-DUSE_WINEDBG'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# The application consists of a VST plugin (yabridge) that calls a winelib
|
|
||||||
# program (yabridge-host) that can host Windows VST plugins. More information
|
|
||||||
# about the way these two components work together can be found in the readme
|
|
||||||
# file.
|
|
||||||
|
|
||||||
# Generate header files for configuration variables such as the current git tag
|
# Generate header files for configuration variables such as the current git tag
|
||||||
# and the last commit hash
|
# and the name of the host binary
|
||||||
subdir('src/common/config')
|
subdir('src/common/config')
|
||||||
|
|
||||||
boost_dep = dependency('boost', modules : ['filesystem'])
|
boost_dep = dependency('boost', modules : ['filesystem'])
|
||||||
@@ -40,6 +45,11 @@ xcb_dep = dependency('xcb')
|
|||||||
|
|
||||||
include_dir = include_directories('src/include')
|
include_dir = include_directories('src/include')
|
||||||
|
|
||||||
|
# The application consists of a VST plugin (yabridge) that calls a winelib
|
||||||
|
# program (yabridge-host) that can host Windows VST plugins. More information
|
||||||
|
# about the way these two components work together can be found in the readme
|
||||||
|
# file.
|
||||||
|
|
||||||
shared_library(
|
shared_library(
|
||||||
'yabridge',
|
'yabridge',
|
||||||
[
|
[
|
||||||
@@ -56,21 +66,38 @@ shared_library(
|
|||||||
link_args : ['-ldl']
|
link_args : ['-ldl']
|
||||||
)
|
)
|
||||||
|
|
||||||
|
host_sources = [
|
||||||
|
'src/common/logging.cpp',
|
||||||
|
'src/common/serialization.cpp',
|
||||||
|
'src/wine-host/editor.cpp',
|
||||||
|
'src/wine-host/editor.cpp',
|
||||||
|
'src/wine-host/plugin-bridge.cpp',
|
||||||
|
'src/wine-host/vst-host.cpp',
|
||||||
|
'src/wine-host/utils.cpp',
|
||||||
|
version_header,
|
||||||
|
]
|
||||||
|
|
||||||
executable(
|
executable(
|
||||||
'yabridge-host',
|
host_name_64bit,
|
||||||
[
|
host_sources,
|
||||||
'src/common/logging.cpp',
|
|
||||||
'src/common/serialization.cpp',
|
|
||||||
'src/wine-host/editor.cpp',
|
|
||||||
'src/wine-host/editor.cpp',
|
|
||||||
'src/wine-host/plugin-bridge.cpp',
|
|
||||||
'src/wine-host/vst-host.cpp',
|
|
||||||
'src/wine-host/utils.cpp',
|
|
||||||
version_header,
|
|
||||||
],
|
|
||||||
native : false,
|
native : false,
|
||||||
include_directories : include_dir,
|
include_directories : include_dir,
|
||||||
dependencies : [boost_dep, bitsery_dep, wine_threads_dep, xcb_dep],
|
dependencies : [boost_dep, bitsery_dep, wine_threads_dep, xcb_dep],
|
||||||
cpp_args : compiler_options,
|
cpp_args : compiler_options + ['-m64'],
|
||||||
link_args : []
|
link_args : ['-m64']
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if get_option('use-bitbridge')
|
||||||
|
compiler_options += '-DUSE_BITBRIDGE'
|
||||||
|
|
||||||
|
# TODO: Use 32 bit libraries
|
||||||
|
executable(
|
||||||
|
host_name_32bit,
|
||||||
|
host_sources,
|
||||||
|
native : false,
|
||||||
|
include_directories : include_dir,
|
||||||
|
dependencies : [boost_dep, bitsery_dep, wine_threads_dep, xcb_dep],
|
||||||
|
cpp_args : compiler_options + ['-m32'],
|
||||||
|
link_args : ['-m32']
|
||||||
|
)
|
||||||
|
endif
|
||||||
|
|||||||
+9
-1
@@ -1,6 +1,14 @@
|
|||||||
|
option(
|
||||||
|
'use-bitbridge',
|
||||||
|
type : 'boolean',
|
||||||
|
value : false,
|
||||||
|
description : '''Build a 32-bit host application for hosting 32-bit plugins.
|
||||||
|
See the readme for full instructions on how to use this.'''
|
||||||
|
)
|
||||||
|
|
||||||
option(
|
option(
|
||||||
'use-winedbg',
|
'use-winedbg',
|
||||||
type : 'boolean',
|
type : 'boolean',
|
||||||
value : false,
|
value : false,
|
||||||
description: 'Whether to run the Wien VST host with GDB attached. Might not always be reliable.'
|
description : 'Whether to run the Wien VST host with GDB attached. Might not always be reliable.'
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
// yabridge: a Wine VST bridge
|
||||||
|
// Copyright (C) 2020 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 <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The name of the wine host name, e.g. `yabridge-host.exe` for the regular 64
|
||||||
|
* bit build.
|
||||||
|
*/
|
||||||
|
constexpr char yabridge_wine_host_name[] = "@host_binary_64bit@";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The name of the 32-bit wine host name, 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_wine_host_name_32bit[] = "@host_binary_32bit@";
|
||||||
@@ -1,3 +1,16 @@
|
|||||||
|
# Contains constants determined while configuring the build. As an alternative
|
||||||
|
# to preprocessor macros.
|
||||||
|
config_header = configure_file(
|
||||||
|
input : 'config.h.in',
|
||||||
|
output : 'config.h',
|
||||||
|
configuration : configuration_data(
|
||||||
|
{
|
||||||
|
'host_binary_32bit': host_name_32bit + '.exe',
|
||||||
|
'host_binary_64bit': host_name_64bit + '.exe',
|
||||||
|
}
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
# Generate a file containing the last annotated git tag and possibly also the
|
# Generate a file containing the last annotated git tag and possibly also the
|
||||||
# amount of commits since then and the hash of the last commit
|
# amount of commits since then and the hash of the last commit
|
||||||
version_header = vcs_tag(
|
version_header = vcs_tag(
|
||||||
|
|||||||
@@ -30,6 +30,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Generated inside of build directory
|
// Generated inside of build directory
|
||||||
|
#include <src/common/config/config.h>
|
||||||
#include <src/common/config/version.h>
|
#include <src/common/config/version.h>
|
||||||
|
|
||||||
#include "../common/communication.h"
|
#include "../common/communication.h"
|
||||||
@@ -40,11 +41,6 @@ namespace bp = boost::process;
|
|||||||
// boost::filesystem
|
// boost::filesystem
|
||||||
namespace fs = boost::filesystem;
|
namespace fs = boost::filesystem;
|
||||||
|
|
||||||
/**
|
|
||||||
* The name of the wine VST host binary.
|
|
||||||
*/
|
|
||||||
constexpr auto yabridge_wine_host_name = "yabridge-host.exe";
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used for generating random identifiers.
|
* Used for generating random identifiers.
|
||||||
*/
|
*/
|
||||||
@@ -500,6 +496,8 @@ fs::path find_wine_vst_host() {
|
|||||||
return host_path;
|
return host_path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: First, check whether the plugin is 32-bit or 64-bit, and then
|
||||||
|
// search for the correct binary accordingly
|
||||||
// Bosot will return an empty path if the file could not be found in the
|
// Bosot will return an empty path if the file could not be found in the
|
||||||
// search path
|
// search path
|
||||||
const fs::path vst_host_path = bp::search_path(yabridge_wine_host_name);
|
const fs::path vst_host_path = bp::search_path(yabridge_wine_host_name);
|
||||||
|
|||||||
Reference in New Issue
Block a user