diff --git a/flake.lock b/flake.lock index 3d582cb..40fc1fc 100644 --- a/flake.lock +++ b/flake.lock @@ -90,11 +90,11 @@ "nixpkgs-stable": "nixpkgs-stable" }, "locked": { - "lastModified": 1750439346, - "narHash": "sha256-qBAYx+elqqQDiAzUQQAmPJjmqiatJYxgTeGZlJH3fnI=", + "lastModified": 1750443503, + "narHash": "sha256-TVDR3EyVhOdgcWKhSa5tFqEKgCzRgADcfaThmimkIFw=", "owner": "nix-community", "repo": "emacs-overlay", - "rev": "51a0c157c2556ce628cbc2e4b251570dae4df0af", + "rev": "4b39688c50935c3b279f1443221573cd54698240", "type": "github" }, "original": { @@ -1036,11 +1036,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1750083401, - "narHash": "sha256-ynqbgIYrg7P1fAKYqe8I/PMiLABBcNDYG9YaAP/d/C4=", + "lastModified": 1750431636, + "narHash": "sha256-vnzzBDbCGvInmfn2ijC4HsIY/3W1CWbwS/YQoFgdgPg=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "61837d2a33ccc1582c5fabb7bf9130d39fee59ad", + "rev": "1552a9f4513f3f0ceedcf90320e48d3d47165712", "type": "github" }, "original": { @@ -1144,11 +1144,11 @@ }, "nixpkgs-stable_3": { "locked": { - "lastModified": 1750151854, - "narHash": "sha256-3za+1J9FifMetO7E/kwgyW+dp+8pPBNlWKfcBovnn6M=", + "lastModified": 1750330365, + "narHash": "sha256-hJ7XMNVsTnnbV2NPmStCC07gvv5l2x7+Skb7hyUzazg=", "owner": "nixos", "repo": "nixpkgs", - "rev": "ad5c70bcc5cc5178205161b7a7d61a6e80f6d244", + "rev": "d883b6213afa179b58ba8bace834f1419707d0ad", "type": "github" }, "original": { @@ -1224,11 +1224,11 @@ }, "nixpkgs_6": { "locked": { - "lastModified": 1750134718, - "narHash": "sha256-v263g4GbxXv87hMXMCpjkIxd/viIF7p3JpJrwgKdNiI=", + "lastModified": 1750365781, + "narHash": "sha256-XE/lFNhz5lsriMm/yjXkvSZz5DfvKJLUjsS6pP8EC50=", "owner": "nixos", "repo": "nixpkgs", - "rev": "9e83b64f727c88a7711a2c463a7b16eedb69a84c", + "rev": "08f22084e6085d19bcfb4be30d1ca76ecb96fe54", "type": "github" }, "original": { diff --git a/homes/emenel/default.nix b/homes/emenel/default.nix index 4aa7471..6eb43ee 100644 --- a/homes/emenel/default.nix +++ b/homes/emenel/default.nix @@ -12,7 +12,7 @@ in desktop music langs - mpd + # mpd beets emacs ]; diff --git a/hosts/eddie/configuration.nix b/hosts/eddie/configuration.nix index 4774831..9288043 100644 --- a/hosts/eddie/configuration.nix +++ b/hosts/eddie/configuration.nix @@ -56,17 +56,6 @@ }); }) - # adds wine patch that makes softube plugin ui work - (final: prev: { - wineWowPackages.stagingFull = pkgs-stable.wineWowPackages.stagingFull.overrideAttrs - (old: { - patches = [ ../../patches/wine-6006.patch ]; - waylandSupport = true; - fontconfigSupport = true; - vulkanSupport = true; - }); - }) - # adds newer bitwig version package. i'm sure this is a hack, but it works. (final: prev: { bitwig-studio5-3 = pkgs-local.bitwig-studio.bitwig-bubblewrap.override { @@ -363,7 +352,7 @@ services.accounts-daemon.enable = true; - programs.virt-manager.enable = true; + # programs.virt-manager.enable = true; virtualisation = { libvirtd = { enable = true; diff --git a/modules/home/music.nix b/modules/home/music.nix index 38a3189..868498f 100644 --- a/modules/home/music.nix +++ b/modules/home/music.nix @@ -6,8 +6,8 @@ tal.bassline tal.j8 tal.u-no-lx - # chair-audio.snare - # chair-audio.cymb + chair-audio.snare + chair-audio.cymb the-usual-suspects.vavra the-usual-suspects.nodal-red the-usual-suspects.xenia @@ -33,7 +33,7 @@ supercollider-with-plugins aubio - carla + # carla tenacity renoise diff --git a/overlays/hardcode-dependencies.patch b/overlays/hardcode-dependencies.patch index e5ab002..8139b8e 100644 --- a/overlays/hardcode-dependencies.patch +++ b/overlays/hardcode-dependencies.patch @@ -1,11 +1,11 @@ -diff --git a/meson.build b/meson.build -index 9e69128d..8c53ac88 100644 ---- a/meson.build -+++ b/meson.build -@@ -226,7 +226,7 @@ if is_64bit_system +diff --git a/overlays/meson.build b/overlays/meson.build +index 12ecb97..a6e39ff 100644 +--- a/overlays/meson.build ++++ b/overlays/meson.build +@@ -218,7 +218,7 @@ if is_64bit_system xcb_64bit_dep = dependency('xcb') endif - if with_32bit_libraries or with_bitbridge + if with_bitbridge - xcb_32bit_dep = winegcc.find_library('xcb') + xcb_32bit_dep = winegcc.find_library('xcb', dirs: ['@libxcb32@/lib']) endif diff --git a/overlays/meson-p.build b/overlays/meson-p.build deleted file mode 100644 index a6e39ff..0000000 --- a/overlays/meson-p.build +++ /dev/null @@ -1,385 +0,0 @@ -project( - 'yabridge', - 'cpp', - version : '5.1.1', - meson_version : '>=0.56', - default_options : [ - 'warning_level=3', - 'cpp_std=c++2a', - # Even though Meson will complain that this option does not exist, without - # this Meson will not apply the above option to native targets - 'build.cpp_std=c++2a', - ], -) - -# -# Build options -# - -# In theory yabridge should compile fine on a 32-bit system, but you will always -# need to pass `-Dbitbridge=true`. We just make sure that we won't build -# any 64-bit binaries in that situation. -is_64bit_system = build_machine.cpu_family() not in ['x86', 'arm'] -with_bitbridge = get_option('bitbridge') -with_clap = get_option('clap') -with_winedbg = get_option('winedbg') -with_vst3 = get_option('vst3') - -# -# Compiler flags -# - -# Depending on the `bitbridge` flag we'll enable building secondary 32-bit -# host applications 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 - -# These variables are used to generate a `config.h` file. The library names will -# be prefixed with `lib` and suffixed with `.so`, and the host names will be -# suffixed with `.exe`. -clap_plugin_name = 'yabridge-clap' -vst2_plugin_name = 'yabridge-vst2' -vst3_plugin_name = 'yabridge-vst3' -host_name_64bit = 'yabridge-host' -host_name_32bit = 'yabridge-host-32' - -compiler_options = [ - '-fvisibility=hidden', - '-fvisibility-inlines-hidden', - # We use an intrinsic to force flush-to-zero. SSE2 is always enabled in x86_64 - # CPUs, but when we're compiling the 32-bit bitbridge we need to manually add - # this flag. - '-msse2', - # FIXME: Bitsery relies on the definitions from ``, which is no - # longer included transitively with GCC 13. This should be removed once - # bitsery is updated to support GCC 13. - '-include', - 'cstdint', -] - -chainloader_compiler_options = [ - # We use our process library for sending notifications from the chainloaders, - # but we don't need the Asio pipe support there - '-DWITHOUT_ASIO', -] - -# HACK: Some stuff from `windows.h` that we don't need results in conflicting -# definitions, so we'll try to exclude those bits -wine_compiler_options = [ - '-DNOMINMAX', - # Since Wine 5.12 any use of attributes (like visibility specifiers, or - # calling conventions) in templated member or variable types causes a warning - '-Wno-attributes', - '-Wno-ignored-attributes', - # Winsock conflicts with the Posix sockets API. Before Wine 6.8 there was a - # `WINE_NOWINSOCK` that would exclude just `winsock.h` from `windows.h`, but - # they got rid of that so we now need to explicitly define the ifdef guards - '-D__WINE_WINSOCKAPI_STDLIB_H', - '-D_WINSOCKAPI_', - # This is only relevant for Wine 6.2, but commit - # `0c19e2e487d36a89531daf4897c0b6390d82a843`, broke compilation of - # `shobjidl.h` under C++. - # - # https://bugs.winehq.org/show_bug.cgi?id=50670 - '-D__IFileOperation_INTERFACE_DEFINED__', - # This Wine 6.20 commit `dfdf56fbe47f8ff50ebe533e6d73f2de6546f008` added a - # bunch of new SAL includes to `windows.h`, which include things like `__in` - # and `__out`. This breaks libstdc++ compilation since they often use those - # names for function parameters. - # - # https://bugs.winehq.org/show_bug.cgi?id=51919 - '-D__WINE_SAL_H__', -] - -# NOTE: GCC doesn't 8-byte align doubles in structs on x86 for ABI-compatibilty -# reasons, but MSVC++ does. We need to force this same alignment to be -# ABI-compatible with 32-bit binaries created with MSVC++ on Windows. -wine_32bit_compiler_options = wine_compiler_options + ['-m32', '-malign-double'] -wine_64bit_compiler_options = wine_compiler_options + ['-m64'] - -# Enable addition assertions on the STL containers during debug builds. Meson -# has a `cpp_debugstl` option, but it's nicer having this automatically tied to -# debug builds. -if get_option('buildtype') == 'debug' - compiler_options += ['-D_GLIBCXX_DEBUG'] -endif - -if with_bitbridge - compiler_options += '-DWITH_BITBRIDGE' -endif - -if with_clap - compiler_options += '-DWITH_CLAP' -endif - -# This provides an easy way to start the Wine plugin host using winedbg since it -# can be quite a pain to set up -if with_winedbg - compiler_options += '-DWITH_WINEDBG' -endif - -if with_vst3 - compiler_options += '-DWITH_VST3' -endif - -# -# Wine checks -# - -# 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 - -# Wine versions after Wine 5.6 and before 6.0 require a `__cdecl` calling -# convention to be specified on the `main()` functions or else `argc` and `argv` -# will point to the wrong memory. Similarly, with other versions of Wine this -# should _not_ be specified for the same reason. We'll try to figure out the -# current Wine version and add this calling convention based on that. Also, -# printing the configure-time Wine version might be useful in diagnosing build -# issues so we'll do just that. -# -# https://bugs.winehq.org/show_bug.cgi?id=49138 -wine_version = run_command( - 'sh', '-c', '''wine --version | grep --only-matching -E '[0-9]+\.[0-9]+(-?rc[0-9]+)?' | head -n1''', - check : false -) -if wine_version.returncode() == 0 - wine_version = wine_version.stdout() - message('Targetting Wine @0@'.format(wine_version)) - - # Wine versions below 5.7 will segfault in `CoCreateGuid` which gets called - # during static initialization. I'm not exactly sure why this is happening, - # but to prevent this from causing more headaches and confusion in the future - # we should just immediately error out when building yabridge's VST3 support - # with these older Wine versions. - if wine_version.version_compare('<5.7') and with_vst3 - error('Because of a bug in Wine < 5.7\n' + - 'you cannot build yabridge with VST3 support using these older Wine versions.\n' + - 'Use the \'-Dvst3=false\' build option to disable VST3 support.\n\n' + - 'https://github.com/robbert-vdh/yabridge/issues/63#issuecomment-757369645') - endif - # This version of yabridge will not work when built against Wine 7.21, 7.22, - # or 8.0-rc1 because of https://bugs.winehq.org/show_bug.cgi?id=53912. We'll - # outright prevent building yabridge with these versions to avoid broken - # yabridge builds. If anyone's reading this because you ran into the error - # below, either build with Wine 8.0-rc2+, or stick with yabridge 5.0.2 if - # you're stuck with Wine 7.22. - # NOTE: Meson considers 8.0 to be below 8.0rc2, so this third check is also - # needed - if wine_version.version_compare('>=7.21') and \ - wine_version.version_compare('<8.0rc2') and \ - wine_version.version_compare('!=8.0') - error('Building this version of yabridge against Wine ' + wine_version + - 'would result in nonfunctional binaries. Either build yabridge 5.0.2 ' + - 'with Wine 7.22, or switch to Wine 8.0-rc2+. Yabridge built with 8.0-rc2+ ' + - 'will also work with older Wine versions, but yabridge built against older ' + - 'Wine versions will not work with Wine 7.21+.\n\n' + - 'https://bugs.winehq.org/show_bug.cgi?id=53912') - endif - - if wine_version.version_compare('>=5.7') and \ - wine_version.version_compare('<6.0') - message('- Using the cdecl calling convention') - compiler_options += '-DWINE_USE_CDECL' - endif - if wine_version.version_compare('<6.23') and with_winedbg - message('- Using legacy winedbg argument quoting') - compiler_options += '-DWINEDBG_LEGACY_ARGUMENT_QUOTING' - endif -else - warning('Unable to determine the current Wine version') -endif - -# -# Dependencies -# - -include_dir = include_directories('src/include', is_system : true) - -# These dependencies require separate linking flags for the 32-bit and 64-bit -# versions - -# I honestly have no idea what the correct way is to have `dependency()` or -# `compiler.find_dependency()` search for 32-bit versions of libraries when -# cross-compiling. Meson also doesn't seem to respect the default linker -# search path set by the system in `find_library()`. If anyone does know how -# to properly do this, please let me know! -winegcc = meson.get_compiler('cpp', native : false) - -if is_64bit_system - xcb_64bit_dep = dependency('xcb') -endif -if with_bitbridge - xcb_32bit_dep = winegcc.find_library('xcb', dirs: ['@libxcb32@/lib']) -endif - -# These are all headers-only libraries, and thus won't require separate 32-bit -# and 64-bit versions - -asio_dep = dependency('asio', version : '>=1.28.0') - -if meson.version().version_compare('>=0.60') - # Bitsery's CMake build definition is capitalized for some reason - bitsery_dep = dependency('bitsery', 'Bitsery', version : '>=5.2.0') -else - # Mmeson <=0.6.0 didn't support multiple names for a dependency, and since at - # the moment this is only relevant for packing on Arch btw, it's probably - # better to remove this conditional later than it is to bump the minimum Meson - # version now. - bitsery_dep = dependency('bitsery', version : '>=5.2.0') -endif - -# The D-Bus headers are also only accessed through the include path. We don't -# link to libdbus-1 to make soname changes don't completely break yabridge. -dbus_dep = dependency('dbus-1').partial_dependency(compile_args : true, includes : true) -function2_dep = dependency('function2', version : '>=4.0.0') -ghc_filesystem_dep = dependency('ghc_filesystem', modules : 'ghcFilesystem::ghc_filesystem', version : '>=1.5.0') -threads_dep = dependency('threads') -# Tomlplusplus recently added a shraed library version. We don't want to link to -# that. `compile_library` is deprecated but it (incorrectly) defaults to `true` -# so we can't omit it. -tomlplusplus_dep = dependency('tomlplusplus', version : '>=3.4.0', default_options : ['compile_library=false']).partial_dependency(compile_args : true, includes : true) - -dl_dep = declare_dependency(link_args : '-ldl') -rt_dep = declare_dependency(link_args : '-lrt') - -wine_ole32_dep = declare_dependency(link_args : '-lole32') -# The SDK includes a comment pragma that would link to this on MSVC -wine_shell32_dep = declare_dependency(link_args : '-lshell32') -# The built in threads dependency does not know how to handle winegcc -wine_threads_dep = declare_dependency(link_args : '-lpthread') -wine_uuid_dep = declare_dependency(link_args : '-luuid') - -if with_clap - clap_dep = dependency('clap', version : ['>=1.1.7', '<1.2']) -endif - -# We need to build the VST3 SDK dependencies in tree because Meson won't let us -# build both native, 32-bit cross compiled and 64-bit cross compiled -# dependencies from a (CMake) subproject -if with_vst3 - subdir('src/common/vst3') -endif - -# -# Binaries -# -# The application consists of a plugin (`libyabridge-{clap,vst2,vst3}.so`) that calls -# 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 -# and the name of the host binary -subdir('src/common/config') - -# These only contain the definitions for sources and dependencies. It would be -# nice to define the libraries and executables inside of these meson.build -# files, but that will also scatter the build artifacts around in the `build/` -# directory and it's much more convenient having all of the important files -# directory under `build/`. -# https://github.com/mesonbuild/meson/pull/4037 -subdir('src/chainloader') -subdir('src/plugin') -subdir('src/wine-host') - -shared_library( - vst2_plugin_name, - vst2_plugin_sources, - native : true, - include_directories : include_dir, - dependencies : vst2_plugin_deps, - # NOTE: LTO does not support Winelibs, and it seems to break - # `libyabridge-vst2.so` in Bitwig for some reason. It should be left - # turned off for the time being except for on the chainloader - # libraries. - cpp_args : compiler_options, -) -shared_library( - 'yabridge-chainloader-vst2', - vst2_chainloader_sources, - native : true, - dependencies : chainloader_deps, - cpp_args : compiler_options + chainloader_compiler_options, - # LTO is useful here to get rid of unused code - override_options : ['b_lto=true'], -) - -if with_clap - # This is the CLAP equivalent of `libyabridge-vst2.so`. The Wine host - # applications can handle VST2, VST3, and CLAP plugins. - shared_library( - clap_plugin_name, - clap_plugin_sources, - native : true, - include_directories : include_dir, - dependencies : clap_plugin_deps, - cpp_args : compiler_options, - ) - shared_library( - 'yabridge-chainloader-clap', - clap_chainloader_sources, - native : true, - dependencies : clap_chainloader_deps, - cpp_args : compiler_options + chainloader_compiler_options, - # See above - override_options : ['b_lto=true'], - ) -endif - -if with_vst3 - # This is the VST3 equivalent of `libyabridge-vst2.so`. The Wine host - # applications can handle both VST2, VST3 and CLAP plugins. - shared_library( - vst3_plugin_name, - vst3_plugin_sources, - native : true, - include_directories : include_dir, - dependencies : vst3_plugin_deps, - cpp_args : compiler_options, - ) - shared_library( - 'yabridge-chainloader-vst3', - vst3_chainloader_sources, - native : true, - dependencies : chainloader_deps, - cpp_args : compiler_options + chainloader_compiler_options, - # See above - override_options : ['b_lto=true'], - ) -endif - -if is_64bit_system - executable( - host_name_64bit, - host_sources, - native : false, - include_directories : include_dir, - dependencies : host_64bit_deps, - cpp_args : compiler_options + wine_64bit_compiler_options, - link_args : ['-m64'], - ) -endif - -if with_bitbridge - executable( - host_name_32bit, - host_sources, - native : false, - include_directories : include_dir, - dependencies : host_32bit_deps, - cpp_args : compiler_options + wine_32bit_compiler_options, - link_args : ['-m32'], - ) -endif diff --git a/overlays/meson.build b/overlays/meson.build deleted file mode 100644 index 12ecb97..0000000 --- a/overlays/meson.build +++ /dev/null @@ -1,385 +0,0 @@ -project( - 'yabridge', - 'cpp', - version : '5.1.1', - meson_version : '>=0.56', - default_options : [ - 'warning_level=3', - 'cpp_std=c++2a', - # Even though Meson will complain that this option does not exist, without - # this Meson will not apply the above option to native targets - 'build.cpp_std=c++2a', - ], -) - -# -# Build options -# - -# In theory yabridge should compile fine on a 32-bit system, but you will always -# need to pass `-Dbitbridge=true`. We just make sure that we won't build -# any 64-bit binaries in that situation. -is_64bit_system = build_machine.cpu_family() not in ['x86', 'arm'] -with_bitbridge = get_option('bitbridge') -with_clap = get_option('clap') -with_winedbg = get_option('winedbg') -with_vst3 = get_option('vst3') - -# -# Compiler flags -# - -# Depending on the `bitbridge` flag we'll enable building secondary 32-bit -# host applications 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 - -# These variables are used to generate a `config.h` file. The library names will -# be prefixed with `lib` and suffixed with `.so`, and the host names will be -# suffixed with `.exe`. -clap_plugin_name = 'yabridge-clap' -vst2_plugin_name = 'yabridge-vst2' -vst3_plugin_name = 'yabridge-vst3' -host_name_64bit = 'yabridge-host' -host_name_32bit = 'yabridge-host-32' - -compiler_options = [ - '-fvisibility=hidden', - '-fvisibility-inlines-hidden', - # We use an intrinsic to force flush-to-zero. SSE2 is always enabled in x86_64 - # CPUs, but when we're compiling the 32-bit bitbridge we need to manually add - # this flag. - '-msse2', - # FIXME: Bitsery relies on the definitions from ``, which is no - # longer included transitively with GCC 13. This should be removed once - # bitsery is updated to support GCC 13. - '-include', - 'cstdint', -] - -chainloader_compiler_options = [ - # We use our process library for sending notifications from the chainloaders, - # but we don't need the Asio pipe support there - '-DWITHOUT_ASIO', -] - -# HACK: Some stuff from `windows.h` that we don't need results in conflicting -# definitions, so we'll try to exclude those bits -wine_compiler_options = [ - '-DNOMINMAX', - # Since Wine 5.12 any use of attributes (like visibility specifiers, or - # calling conventions) in templated member or variable types causes a warning - '-Wno-attributes', - '-Wno-ignored-attributes', - # Winsock conflicts with the Posix sockets API. Before Wine 6.8 there was a - # `WINE_NOWINSOCK` that would exclude just `winsock.h` from `windows.h`, but - # they got rid of that so we now need to explicitly define the ifdef guards - '-D__WINE_WINSOCKAPI_STDLIB_H', - '-D_WINSOCKAPI_', - # This is only relevant for Wine 6.2, but commit - # `0c19e2e487d36a89531daf4897c0b6390d82a843`, broke compilation of - # `shobjidl.h` under C++. - # - # https://bugs.winehq.org/show_bug.cgi?id=50670 - '-D__IFileOperation_INTERFACE_DEFINED__', - # This Wine 6.20 commit `dfdf56fbe47f8ff50ebe533e6d73f2de6546f008` added a - # bunch of new SAL includes to `windows.h`, which include things like `__in` - # and `__out`. This breaks libstdc++ compilation since they often use those - # names for function parameters. - # - # https://bugs.winehq.org/show_bug.cgi?id=51919 - '-D__WINE_SAL_H__', -] - -# NOTE: GCC doesn't 8-byte align doubles in structs on x86 for ABI-compatibilty -# reasons, but MSVC++ does. We need to force this same alignment to be -# ABI-compatible with 32-bit binaries created with MSVC++ on Windows. -wine_32bit_compiler_options = wine_compiler_options + ['-m32', '-malign-double'] -wine_64bit_compiler_options = wine_compiler_options + ['-m64'] - -# Enable addition assertions on the STL containers during debug builds. Meson -# has a `cpp_debugstl` option, but it's nicer having this automatically tied to -# debug builds. -if get_option('buildtype') == 'debug' - compiler_options += ['-D_GLIBCXX_DEBUG'] -endif - -if with_bitbridge - compiler_options += '-DWITH_BITBRIDGE' -endif - -if with_clap - compiler_options += '-DWITH_CLAP' -endif - -# This provides an easy way to start the Wine plugin host using winedbg since it -# can be quite a pain to set up -if with_winedbg - compiler_options += '-DWITH_WINEDBG' -endif - -if with_vst3 - compiler_options += '-DWITH_VST3' -endif - -# -# Wine checks -# - -# 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 - -# Wine versions after Wine 5.6 and before 6.0 require a `__cdecl` calling -# convention to be specified on the `main()` functions or else `argc` and `argv` -# will point to the wrong memory. Similarly, with other versions of Wine this -# should _not_ be specified for the same reason. We'll try to figure out the -# current Wine version and add this calling convention based on that. Also, -# printing the configure-time Wine version might be useful in diagnosing build -# issues so we'll do just that. -# -# https://bugs.winehq.org/show_bug.cgi?id=49138 -wine_version = run_command( - 'sh', '-c', '''wine --version | grep --only-matching -E '[0-9]+\.[0-9]+(-?rc[0-9]+)?' | head -n1''', - check : false -) -if wine_version.returncode() == 0 - wine_version = wine_version.stdout() - message('Targetting Wine @0@'.format(wine_version)) - - # Wine versions below 5.7 will segfault in `CoCreateGuid` which gets called - # during static initialization. I'm not exactly sure why this is happening, - # but to prevent this from causing more headaches and confusion in the future - # we should just immediately error out when building yabridge's VST3 support - # with these older Wine versions. - if wine_version.version_compare('<5.7') and with_vst3 - error('Because of a bug in Wine < 5.7\n' + - 'you cannot build yabridge with VST3 support using these older Wine versions.\n' + - 'Use the \'-Dvst3=false\' build option to disable VST3 support.\n\n' + - 'https://github.com/robbert-vdh/yabridge/issues/63#issuecomment-757369645') - endif - # This version of yabridge will not work when built against Wine 7.21, 7.22, - # or 8.0-rc1 because of https://bugs.winehq.org/show_bug.cgi?id=53912. We'll - # outright prevent building yabridge with these versions to avoid broken - # yabridge builds. If anyone's reading this because you ran into the error - # below, either build with Wine 8.0-rc2+, or stick with yabridge 5.0.2 if - # you're stuck with Wine 7.22. - # NOTE: Meson considers 8.0 to be below 8.0rc2, so this third check is also - # needed - if wine_version.version_compare('>=7.21') and \ - wine_version.version_compare('<8.0rc2') and \ - wine_version.version_compare('!=8.0') - error('Building this version of yabridge against Wine ' + wine_version + - 'would result in nonfunctional binaries. Either build yabridge 5.0.2 ' + - 'with Wine 7.22, or switch to Wine 8.0-rc2+. Yabridge built with 8.0-rc2+ ' + - 'will also work with older Wine versions, but yabridge built against older ' + - 'Wine versions will not work with Wine 7.21+.\n\n' + - 'https://bugs.winehq.org/show_bug.cgi?id=53912') - endif - - if wine_version.version_compare('>=5.7') and \ - wine_version.version_compare('<6.0') - message('- Using the cdecl calling convention') - compiler_options += '-DWINE_USE_CDECL' - endif - if wine_version.version_compare('<6.23') and with_winedbg - message('- Using legacy winedbg argument quoting') - compiler_options += '-DWINEDBG_LEGACY_ARGUMENT_QUOTING' - endif -else - warning('Unable to determine the current Wine version') -endif - -# -# Dependencies -# - -include_dir = include_directories('src/include', is_system : true) - -# These dependencies require separate linking flags for the 32-bit and 64-bit -# versions - -# I honestly have no idea what the correct way is to have `dependency()` or -# `compiler.find_dependency()` search for 32-bit versions of libraries when -# cross-compiling. Meson also doesn't seem to respect the default linker -# search path set by the system in `find_library()`. If anyone does know how -# to properly do this, please let me know! -winegcc = meson.get_compiler('cpp', native : false) - -if is_64bit_system - xcb_64bit_dep = dependency('xcb') -endif -if with_bitbridge - xcb_32bit_dep = winegcc.find_library('xcb') -endif - -# These are all headers-only libraries, and thus won't require separate 32-bit -# and 64-bit versions - -asio_dep = dependency('asio', version : '>=1.28.0') - -if meson.version().version_compare('>=0.60') - # Bitsery's CMake build definition is capitalized for some reason - bitsery_dep = dependency('bitsery', 'Bitsery', version : '>=5.2.0') -else - # Mmeson <=0.6.0 didn't support multiple names for a dependency, and since at - # the moment this is only relevant for packing on Arch btw, it's probably - # better to remove this conditional later than it is to bump the minimum Meson - # version now. - bitsery_dep = dependency('bitsery', version : '>=5.2.0') -endif - -# The D-Bus headers are also only accessed through the include path. We don't -# link to libdbus-1 to make soname changes don't completely break yabridge. -dbus_dep = dependency('dbus-1').partial_dependency(compile_args : true, includes : true) -function2_dep = dependency('function2', version : '>=4.0.0') -ghc_filesystem_dep = dependency('ghc_filesystem', modules : 'ghcFilesystem::ghc_filesystem', version : '>=1.5.0') -threads_dep = dependency('threads') -# Tomlplusplus recently added a shraed library version. We don't want to link to -# that. `compile_library` is deprecated but it (incorrectly) defaults to `true` -# so we can't omit it. -tomlplusplus_dep = dependency('tomlplusplus', version : '>=3.4.0', default_options : ['compile_library=false']).partial_dependency(compile_args : true, includes : true) - -dl_dep = declare_dependency(link_args : '-ldl') -rt_dep = declare_dependency(link_args : '-lrt') - -wine_ole32_dep = declare_dependency(link_args : '-lole32') -# The SDK includes a comment pragma that would link to this on MSVC -wine_shell32_dep = declare_dependency(link_args : '-lshell32') -# The built in threads dependency does not know how to handle winegcc -wine_threads_dep = declare_dependency(link_args : '-lpthread') -wine_uuid_dep = declare_dependency(link_args : '-luuid') - -if with_clap - clap_dep = dependency('clap', version : ['>=1.1.7', '<1.2']) -endif - -# We need to build the VST3 SDK dependencies in tree because Meson won't let us -# build both native, 32-bit cross compiled and 64-bit cross compiled -# dependencies from a (CMake) subproject -if with_vst3 - subdir('src/common/vst3') -endif - -# -# Binaries -# -# The application consists of a plugin (`libyabridge-{clap,vst2,vst3}.so`) that calls -# 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 -# and the name of the host binary -subdir('src/common/config') - -# These only contain the definitions for sources and dependencies. It would be -# nice to define the libraries and executables inside of these meson.build -# files, but that will also scatter the build artifacts around in the `build/` -# directory and it's much more convenient having all of the important files -# directory under `build/`. -# https://github.com/mesonbuild/meson/pull/4037 -subdir('src/chainloader') -subdir('src/plugin') -subdir('src/wine-host') - -shared_library( - vst2_plugin_name, - vst2_plugin_sources, - native : true, - include_directories : include_dir, - dependencies : vst2_plugin_deps, - # NOTE: LTO does not support Winelibs, and it seems to break - # `libyabridge-vst2.so` in Bitwig for some reason. It should be left - # turned off for the time being except for on the chainloader - # libraries. - cpp_args : compiler_options, -) -shared_library( - 'yabridge-chainloader-vst2', - vst2_chainloader_sources, - native : true, - dependencies : chainloader_deps, - cpp_args : compiler_options + chainloader_compiler_options, - # LTO is useful here to get rid of unused code - override_options : ['b_lto=true'], -) - -if with_clap - # This is the CLAP equivalent of `libyabridge-vst2.so`. The Wine host - # applications can handle VST2, VST3, and CLAP plugins. - shared_library( - clap_plugin_name, - clap_plugin_sources, - native : true, - include_directories : include_dir, - dependencies : clap_plugin_deps, - cpp_args : compiler_options, - ) - shared_library( - 'yabridge-chainloader-clap', - clap_chainloader_sources, - native : true, - dependencies : clap_chainloader_deps, - cpp_args : compiler_options + chainloader_compiler_options, - # See above - override_options : ['b_lto=true'], - ) -endif - -if with_vst3 - # This is the VST3 equivalent of `libyabridge-vst2.so`. The Wine host - # applications can handle both VST2, VST3 and CLAP plugins. - shared_library( - vst3_plugin_name, - vst3_plugin_sources, - native : true, - include_directories : include_dir, - dependencies : vst3_plugin_deps, - cpp_args : compiler_options, - ) - shared_library( - 'yabridge-chainloader-vst3', - vst3_chainloader_sources, - native : true, - dependencies : chainloader_deps, - cpp_args : compiler_options + chainloader_compiler_options, - # See above - override_options : ['b_lto=true'], - ) -endif - -if is_64bit_system - executable( - host_name_64bit, - host_sources, - native : false, - include_directories : include_dir, - dependencies : host_64bit_deps, - cpp_args : compiler_options + wine_64bit_compiler_options, - link_args : ['-m64'], - ) -endif - -if with_bitbridge - executable( - host_name_32bit, - host_sources, - native : false, - include_directories : include_dir, - dependencies : host_32bit_deps, - cpp_args : compiler_options + wine_32bit_compiler_options, - link_args : ['-m32'], - ) -endif diff --git a/packages/rmpc-latest.nix b/packages/rmpc-latest.nix index d0dba66..e5156cf 100644 --- a/packages/rmpc-latest.nix +++ b/packages/rmpc-latest.nix @@ -15,11 +15,11 @@ rustPlatform.buildRustPackage rec { owner = "mierak"; repo = "rmpc"; rev = "master"; - hash = "sha256-ERLOi+TyAq3Dkmk1UfTqqIdI/LqxAk7bFJfq+18Kqlw="; + hash = "sha256-dMFqofhhRsibw3D09JLGWK4Zk8n353OCvTV3+G6hAes="; }; useFetchCargoVendor = true; - cargoHash = "sha256-Je9xYnRmS45ZW81ym1Y53L6sxqJzKutRhTzcSPJ1lDI="; + cargoHash = "sha256-xXH/MRQgT/Je/aOCZ26vdC3PtlosXLIrjbOHtnvf9os="; checkFlags = [ # Test currently broken, needs to be removed. See https://github.com/mierak/rmpc/issues/254 diff --git a/patches/wine-6006.patch b/patches/wine-6006.patch deleted file mode 100644 index 88d20ca..0000000 --- a/patches/wine-6006.patch +++ /dev/null @@ -1,173 +0,0 @@ -From 23a6646d697ddfc51e3deab018853a22376dacdf Mon Sep 17 00:00:00 2001 -From: Grazvydas Ignotas -Date: Sun, 7 Jul 2024 00:11:26 +0300 -Subject: [PATCH 1/2] dwmapi: Drop unnecessary static, improve variable names. - ---- - dlls/dwmapi/dwmapi_main.c | 9 +++++---- - 1 file changed, 5 insertions(+), 4 deletions(-) - -diff --git a/dlls/dwmapi/dwmapi_main.c b/dlls/dwmapi/dwmapi_main.c -index adc02552ba7..8d4ccbb1fc4 100644 ---- a/dlls/dwmapi/dwmapi_main.c -+++ b/dlls/dwmapi/dwmapi_main.c -@@ -184,9 +184,9 @@ HRESULT WINAPI DwmEnableBlurBehindWindow(HWND hWnd, const DWM_BLURBEHIND *pBlurB - */ - BOOL WINAPI DwmDefWindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam, LRESULT *plResult) - { -- static int i; -+ static BOOL once; - -- if (!i++) FIXME("stub\n"); -+ if (!once++) FIXME("stub\n"); - - return FALSE; - } -@@ -273,7 +273,8 @@ static int get_display_frequency(void) - HRESULT WINAPI DwmGetCompositionTimingInfo(HWND hwnd, DWM_TIMING_INFO *info) - { - LARGE_INTEGER performance_frequency, qpc; -- static int i, display_frequency; -+ int display_frequency; -+ static BOOL once; - - if (!info) - return E_INVALIDARG; -@@ -281,7 +282,7 @@ HRESULT WINAPI DwmGetCompositionTimingInfo(HWND hwnd, DWM_TIMING_INFO *info) - if (info->cbSize != sizeof(DWM_TIMING_INFO)) - return MILERR_MISMATCHED_SIZE; - -- if(!i++) FIXME("(%p %p)\n", hwnd, info); -+ if (!once++) FIXME("(%p %p)\n", hwnd, info); - - memset(info, 0, info->cbSize); - info->cbSize = sizeof(DWM_TIMING_INFO); --- -GitLab - - -From 9bd6b35aa8d9b92593db1722ce533e0e4d8985ad Mon Sep 17 00:00:00 2001 -From: Grazvydas Ignotas -Date: Sun, 7 Jul 2024 00:18:40 +0300 -Subject: [PATCH 2/2] dwmapi: Simulate DwmFlush blocking behavior. - -The documentation states it's a blocking call. There are reports of it -being used for WaitForVBlank-like purposes [1]. Without blocking Softube -VST plugin logic breaks and they never update their UIs. - -[1] https://news.ycombinator.com/item?id=34501612 - -Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=56935 ---- - dlls/dwmapi/dwmapi_main.c | 23 +++++++++++++++++++-- - dlls/dwmapi/tests/dwmapi.c | 41 ++++++++++++++++++++++++++++++++++++++ - 2 files changed, 62 insertions(+), 2 deletions(-) - -diff --git a/dlls/dwmapi/dwmapi_main.c b/dlls/dwmapi/dwmapi_main.c -index 8d4ccbb1fc4..419216534aa 100644 ---- a/dlls/dwmapi/dwmapi_main.c -+++ b/dlls/dwmapi/dwmapi_main.c -@@ -32,6 +32,7 @@ - - WINE_DEFAULT_DEBUG_CHANNEL(dwmapi); - -+static int get_display_frequency(void); - - /********************************************************************** - * DwmIsCompositionEnabled (DWMAPI.@) -@@ -88,9 +89,26 @@ HRESULT WINAPI DwmGetColorizationColor(DWORD *colorization, BOOL *opaque_blend) - */ - HRESULT WINAPI DwmFlush(void) - { -+ static volatile LONG last_time; - static BOOL once; -+ DWORD now, interval, last = last_time, target; -+ int freq; - -- if (!once++) FIXME("() stub\n"); -+ if (!once++) FIXME("() semi-stub\n"); -+ -+ // simulate the WaitForVBlank-like blocking behavior -+ freq = get_display_frequency(); -+ interval = 1000 / freq; -+ now = GetTickCount(); -+ if (now - last < interval) -+ target = last + interval; -+ else -+ { -+ // act as if we were called midway between 2 vsyncs -+ target = now + interval / 2; -+ } -+ Sleep(target - now); -+ InterlockedCompareExchange(&last_time, target, last); - - return S_OK; - } -@@ -262,7 +280,8 @@ static int get_display_frequency(void) - } - else - { -- WARN("Failed to query display frequency, returning a fallback value.\n"); -+ static BOOL once; -+ if (!once++) WARN("Failed to query display frequency, returning a fallback value.\n"); - return 60; - } - } -diff --git a/dlls/dwmapi/tests/dwmapi.c b/dlls/dwmapi/tests/dwmapi.c -index a89a1fd705b..20628578f41 100644 ---- a/dlls/dwmapi/tests/dwmapi.c -+++ b/dlls/dwmapi/tests/dwmapi.c -@@ -140,9 +140,50 @@ cleanup: - DestroyWindow(hwnd); - } - -+static void test_DwmFlush(void) -+{ -+ LARGE_INTEGER frequency, ts[2]; -+ int i, result, ms; -+ DEVMODEA mode; -+ BOOL enabled; -+ HRESULT hr; -+ -+ enabled = FALSE; -+ hr = DwmIsCompositionEnabled(&enabled); -+ ok(hr == S_OK, "Got hr %#lx.\n", hr); -+ if (!enabled) -+ { -+ skip("DWM is disabled.\n"); -+ return; -+ } -+ -+ memset(&mode, 0, sizeof(mode)); -+ mode.dmSize = sizeof(mode); -+ result = EnumDisplaySettingsA(NULL, ENUM_CURRENT_SETTINGS, &mode); -+ ok(result, "Failed to get display mode %#lx.\n", GetLastError()); -+ ok(mode.dmDisplayFrequency != 0, "dmDisplayFrequency is 0.\n"); -+ -+ result = QueryPerformanceFrequency(&frequency); -+ ok(result, "Failed to get performance counter frequency.\n"); -+ -+ result = QueryPerformanceCounter(&ts[0]); -+ ok(result, "Failed to read performance counter.\n"); -+ for (i = 0; i < 2; i++) -+ { -+ hr = DwmFlush(); -+ ok(hr == S_OK, "Got hr %#lx.\n", hr); -+ } -+ result = QueryPerformanceCounter(&ts[1]); -+ ok(result, "Failed to read performance counter.\n"); -+ ms = (ts[1].QuadPart - ts[0].QuadPart) * 1000 / frequency.QuadPart; -+ ok(ms >= 1000 / mode.dmDisplayFrequency, -+ "DwmFlush() took %dms with dmDisplayFrequency %ld.\n", ms, mode.dmDisplayFrequency); -+} -+ - START_TEST(dwmapi) - { - test_DwmIsCompositionEnabled(); - test_DwmGetCompositionTimingInfo(); - test_DWMWA_EXTENDED_FRAME_BOUNDS(); -+ test_DwmFlush(); - } --- -GitLab -