-
Notifications
You must be signed in to change notification settings - Fork 897
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[build] Add soversion to dxvk-native binaries #3743
Conversation
Quick update to use meson.project_version() to get the major/minor version of the soname, to avoid adding new constants that need bumping for every release. |
You need to update I am also not completely confident we need soversioning? We should never be breaking ABI. |
Will look into the symlinks soon, I don't think the artifact zip files will be able to preserve them so this would only help the tar releases. @smcv may have a better explanation but I think this is needed in case a breakage is necessary; the unversioned .so should only be present as part of the development package. |
Confirmed that artifactsv3 is what's causing the symlinks to get resolved, so the latest push includes a commit to tar the steamrt-sniper build. I could have sworn that the action supports using tar as the format, but even their own README suggests using tar inside of the zip to fix this, so here we are... |
Every library author says "we will never break ABI", until they find a reason to want to break ABI :-) I can see the argument that the API and ABI of DXVK are (by design) tied to the fixed API and ABI of Windows DirectX, and therefore breaking API or ABI would defeat the purpose of DXVK. But, at the same time, the API and ABI of the WSIs is clearly less set in stone, because how those work is entirely a DXVK invention (Windows DirectX doesn't have SDL or GLFW as a backend), and I see @flibitijibibo making changes in various PRs that look like they are probably an ABI break for those. Even if you set a policy of being careful to avoid ABI breaks (after some cutoff date at which you declare the ABI to be stable), there are places where the ABI has been chosen by this project and could break. Any time there is a change of the form "xyz has changed, old binaries must be recompiled", the SONAME needs to (be able to) change: this is just how ABI compatibility on Linux works, and it's what allows the old and new libraries to coexist until all dependent binaries have been recompiled against the new library. If you're right about the ABI never changing, then the ABI major version (the 0 in Conversely, if you turn out to be wrong about never breaking ABI, then having the ABI major version in place provides an exit strategy to be able to accommodate an ABI break. |
Coming from FAudio, a similar situation, I have to agree with the above - yes, the .0 is a weird quirk, but once it's done it's done and you don't have to think about it again... if anything it gives you the freedom to break if you need to, since you don't have to worry about breaking apps that link directly to .so. (This would actually be true of Source1 apps that might get forced onto Sniper, should there actually be a breakage between the bundled 1.9.x version and upstream) Another thing that I considered was my ability to commit in writing that I could preserve the ABI - part of that commitment is being able to say that I control the ABI, and while I didn't do a 1:1 replication, I still ultimately have to concede control to MS who controls XAudio(2)'s design. While wildly unlikely, MS still technically has the right to just break the ABI, and we would have to follow along to keep up. In other words, I guess it's better to use the phrase "API contract" rather than ABI, even though they should be the same anyway. |
Looks like the added |
Zips can't preserve the symlink, so make the .tar.gz package with package_native.sh and zip that up instead.
Obsoleted via #3834 |
Part of #3451