Skip to content

PipeASIO v1.7.0

Latest

Choose a tag to compare

@github-actions github-actions released this 06 Sep 18:54
v1.7.0
bb7911e

Added

  • ARM64 front ends (#23): aarch64-windows/pipeasio64.dll for native ARM64
    Windows hosts and arm64ec-windows/pipeasio64.dll for x86_64 hosts under
    Wine with FEX, over the one aarch64 unixlib. BUILD_ARM64 (default on)
    builds each when clang, lld and Wine's <arch>-windows import
    libraries are present. CI builds the aarch64 pair on a Debian ARM64 runner
    (Debian ships no arm64ec import libraries), runs the unit tests and the ABI
    layout check there, and regsvr32 in a throwaway prefix loads it as a
    builtin and registers the CLSID. Untested against a real audio host on
    ARM64 hardware; the README says so.

Changed

  • The 64-bit driver is built as a PE front end plus a unixlib, the layout Wine
    uses for its own modules and the only one aarch64 and arm64ec Wine load
    (#23). Until now it was a single winegcc ELF (pipeasio64.dll.so) behind a
    fake PE stub; the 32-bit front end already had the split layout, and the
    64-bit build now goes through the same code. The install is
    x86_64-windows/pipeasio64.dll (a real PE) and x86_64-unix/pipeasio64.so;
    the pipeasio.dll symlinks are gone because the real PE does not need them.
    Measured against the single-ELF build at 128 frames: same round trip (one
    buffer), same xrun count, pw-top ERR +0 on every SCHED_FIFO leg.
  • The PE half is linked by winegcc the way Wine links its own modules:
    Wine's headers and import libraries, no MinGW runtime, ucrtbase instead
    of the MinGW api-set imports, and a Win32 TLS slot instead of
    _Thread_local. Building needs a cross compiler for it: the MinGW gcc
    and g++ for x86 targets (mingw-w64-gcc on Arch, gcc-mingw-w64-x86-64
    plus g++-mingw-w64-x86-64 on Debian/Ubuntu, mingw64-gcc plus
    mingw64-gcc-c++ on Fedora), previously only needed for the opt-in 32-bit
    front end, or clang with lld for any target. The Wine library root is
    probed (lib/wine, lib64/wine-wow64/wine, lib/<multiarch>/wine)
    rather than assumed, and a bundled unixlib.h covers Debian and Ubuntu,
    whose libwine-dev omits it. The unixlib is linked with the host compiler
    the way Wine links its own (-shared -Bsymbolic -z,defs), and the two test
    hosts are PE programs (asio_probe.exe, asio_loopback.exe) rather than
    winegcc ELF .exe.so files: both winegcc ELF paths are x86-only.
  • Upgrading from 1.6.0 or older: run pipeasio-register again in every
    prefix.
    Those installs staged a 2 KB stub into system32 that looks for
    the .dll.so, which the new install no longer ships; until re-registered
    the driver fails to load with c0000135. The test runners re-register a
    prefix automatically when its staged PE is not the installed one.
  • The unixlib ABI is at version 4: the host's callback buffer pointer is
    carried as a 64-bit value so the x86_64 front end fits the same unixlib as
    the i386 one.

Install

Prebuilt for Arch Linux / CachyOS (x86_64). The exact build toolchain (Wine, glibc, PipeWire, MinGW) is recorded in BUILD-INFO.txt inside the tarball.

  • User-local: tar -xzf pipeasio-v1.7.0-archlinux-x86_64.tar.gz -C "$HOME/.local", then run pipeasio-register.
  • Proton / Faugus: extract to $HOME/.local and set WINEDLLPATH=$HOME/.local/lib/wine.

Compatibility

A Wine builtin DLL is coupled to the Wine version and glibc it was built against. A different Wine or an older glibc may fail to load (regsvr32 c0000135). In that case build from source (README) or use the AUR package. Source tarballs are attached automatically below.