Files
yabridge/meson.build
T
Robbert van der Helm d9ff98de84 Move everything configuration related to plugin
If it's tied to the .so file rather than the .dll file it wouldn't make
any sense to use it directly from the Wine host.
2020-05-15 16:35:18 +02:00

143 lines
4.6 KiB
Meson

project(
'yabridge',
'cpp',
version : '1.1.4',
default_options : ['warning_level=3', 'cpp_std=c++17', 'build.cpp_std=c++17']
)
# Meson does not let us set a default cross compiler, which makes sense, but it
# also means that it's easy to forget. This will cause the setup process to
# abort if no cross compiler has been set up.
winelib_check = '''#ifndef __WINE__
#error 1
#endif'''
if not meson.get_compiler('cpp').compiles(winelib_check)
error('You need to set up a cross compiler, check the README for compilation instructions.')
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 hosts. 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
# can be quite a pain to set up
compiler_options = []
if get_option('use-winedbg')
compiler_options += '-DUSE_WINEDBG'
endif
if get_option('use-bitbridge')
compiler_options += '-DUSE_BITBRIDGE'
endif
# Generate header files for configuration variables such as the current git tag
# and the name of the host binary
subdir('src/common/config')
# Statically link against Boost.Filesystem, otherwise it becomes impossible to
# distribute a prebuilt version of yabridge. For the Wine host applications we
# only use the headers only libraries.
boost_dep = dependency('boost', version : '>=1.66', static : true)
boost_filesystem_dep = dependency('boost', version : '>=1.66', modules : ['filesystem'], static : true)
bitsery_dep = subproject('bitsery').get_variable('bitsery_dep')
threads_dep = dependency('threads')
tomlplusplus_dep = subproject('tomlplusplus').get_variable('tomlplusplus_dep')
# The built in threads dependency does not know how to handle winegcc
wine_threads_dep = declare_dependency(link_args : '-lpthread')
xcb_dep = dependency('xcb')
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(
'yabridge',
[
'src/common/logging.cpp',
'src/common/serialization.cpp',
'src/plugin/configuration.cpp',
'src/plugin/plugin.cpp',
'src/plugin/plugin-bridge.cpp',
'src/plugin/utils.cpp',
version_header,
],
native : true,
include_directories : include_dir,
dependencies : [
boost_dep,
boost_filesystem_dep,
bitsery_dep,
threads_dep,
tomlplusplus_dep
],
cpp_args : compiler_options,
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/vst-host.cpp',
'src/wine-host/wine-bridge.cpp',
'src/wine-host/utils.cpp',
version_header,
]
executable(
host_name_64bit,
host_sources,
native : false,
include_directories : include_dir,
dependencies : [
boost_dep,
bitsery_dep,
tomlplusplus_dep,
wine_threads_dep,
xcb_dep
],
cpp_args : compiler_options + ['-m64'],
link_args : ['-m64']
)
if get_option('use-bitbridge')
message('Bitbridge enabled, configuring a 32-bit host application')
# I honestly have no idea what the correct way to have `find_dependency()` use
# `/usr/lib32` instead of `/usr/lib` is. If anyone does know, please tell me!
winegcc = meson.get_compiler('cpp', native : false)
xcb_dep = winegcc.find_library('xcb')
executable(
host_name_32bit,
host_sources,
native : false,
include_directories : include_dir,
dependencies : [
boost_dep,
bitsery_dep,
tomlplusplus_dep,
wine_threads_dep,
xcb_dep
],
# FIXME: 32-bit winegcc defines `__stdcall` differently than the 64-bit
# version, and one of the changes is the inclusion of
# `__atribute__((__force_align_arg_pointer__))`. For whetever reason
# this causes GCC to complain when using function pointers with the
# `__stdcall` calling convention in template arguments, although it
# otherwise works just fine. We don't ignore any warnings in the
# regular host application so this should not cause any issues!
cpp_args : compiler_options + ['-m32', '-Wno-ignored-attributes'],
link_args : ['-m32']
)
endif