Added
- ARM64 front ends (#23):
aarch64-windows/pipeasio64.dllfor native ARM64
Windows hosts andarm64ec-windows/pipeasio64.dllfor x86_64 hosts under
Wine with FEX, over the one aarch64 unixlib.BUILD_ARM64(default on)
builds each whenclang,lldand Wine's<arch>-windowsimport
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, andregsvr32in 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 singlewinegccELF (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) andx86_64-unix/pipeasio64.so;
thepipeasio.dllsymlinks 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-topERR +0 on everySCHED_FIFOleg. - The PE half is linked by
winegccthe way Wine links its own modules:
Wine's headers and import libraries, no MinGW runtime,ucrtbaseinstead
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-gccon Arch,gcc-mingw-w64-x86-64
plusg++-mingw-w64-x86-64on Debian/Ubuntu,mingw64-gccplus
mingw64-gcc-c++on Fedora), previously only needed for the opt-in 32-bit
front end, orclangwithlldfor any target. The Wine library root is
probed (lib/wine,lib64/wine-wow64/wine,lib/<multiarch>/wine)
rather than assumed, and a bundledunixlib.hcovers Debian and Ubuntu,
whoselibwine-devomits 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
winegccELF.exe.sofiles: bothwinegccELF paths are x86-only. - Upgrading from 1.6.0 or older: run
pipeasio-registeragain in every
prefix. Those installs staged a 2 KB stub intosystem32that looks for
the.dll.so, which the new install no longer ships; until re-registered
the driver fails to load withc0000135. 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 runpipeasio-register. - Proton / Faugus: extract to
$HOME/.localand setWINEDLLPATH=$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.