Comments (16)
With port overlays its pretty easy to use any version of the lib we want. The actual issue are the many breaking changes they introduced, so updating our code to support fmt 9.x.x is no longer trivial.
I think it makes more sense to include fmt 7.x.x as a git submodule which avoids the need for vcpkg. In the long term we can then work towards supporting later versions of fmt.
from cemu.
The issue is not vcpkg itself, as it is usable on Linux, but the fact that users can't use the system version. This also makes it unlikely for Cemu to be packaged by distros, as they have a policy of not allowing bundled libraries, except for rare cases.
No pressure though, updating the used fmt version is far from the only problem affecting the Linux builds :)
from cemu.
@Tachi107 fmt 9.0.0 has breaking changes compared to 7.1.3 . It can be ported but won't be easy
For example, many functions are under new namespaces and some functions(mainly used by Cemu) are now deprecated
from cemu.
Yeah I know, that's why I opened an issue instead of submitting a PR ;)
from cemu.
vcpkg doesn't offer fmt 9.0.0 yet, despite it being released over a month ago. I assume this is another blocker for the developers of Cemu
from cemu.
@Scrumplex It does offer it
I think they merged it recently
from cemu.
Yes, it was merged 22 days ago, see microsoft/vcpkg#25658
from cemu.
If a distribution won't allow Cemu to be packaged without bundling certain libraries (where Cemu depends on a version that's incompatible with the system one) then honestly that distribution shouldn't be packaging Cemu in the first place, or they should be packaging a version of that library co-installable with the official "system" library (such as libfmt-7
which could be installed alongside libfmt
).
from cemu.
@Scrumplex It does offer it I think they merged it recently
hmm, the website only shows 8.1.1 though :|
from cemu.
If a distribution won't allow Cemu to be packaged without bundling certain libraries (where Cemu depends on a version that's incompatible with the system one) then honestly that distribution shouldn't be packaging Cemu in the first place, or they should be packaging a version of that library co-installable with the official "system" library (such as
libfmt-7
which could be installed alongsidelibfmt
).
There are a lot of pros and cons of the "no bundling" policy (security, reproducibility, size...). Sometimes it is even possible to install different versions of the same library, but you quickly run into issues like "both libfmt-7 and libfmt-9 install /usr/include/fmt/format.h
, how can they co-exist?"; you could move the headers to /usr/include/fmt7
and /usr/include/fmt9
, but now you broke pretty much every project using the library. It is not that easy.
Anyway, distribution policies are outside of the scope of this issue.
from cemu.
There are a lot of pros and cons of the "no bundling" policy (security, reproducibility, size...).
I am well aware, having been substantially involved as a system package and maintainer for a number of years now. That has given me a lot of first-hand experience in how the needs/goals of distributions and the needs/goals of complex applications are often diametrically opposed.
but you quickly run into issues like "both libfmt-7 and libfmt-9 install /usr/include/fmt/format.h, how can they co-exist?
Typically for rolling distributions this is done when libfmt is upgraded from say major version 7 to 8. libfmt
will retain the normal paths (like /usr/include/fmt/format.h
), while a new package libfmt-7
will be introduced which is patched to change the install directories just enough that there are no conflicts with the libfmt
package (such as /usr/include/fmt7/format.h
). Then packages that are not yet compatible with major version 8 will receive patches to force it to use the libfmt-7
version of the files. This overlap gives more time to the various packages to fix support for the new major version without breaking users in the process (the libfmt-7
override patch is removed when the package is updated to the new version that works with the libfmt
package).
The alternative here is that the distro updates the libfmt
package to v8 which breaks the packages not yet compatible with v7 (obviously an unacceptable scenario). The worse alternative is that the distribution holds back the libfmt
update until all packages are ready for it (which is obviously an even more unacceptable scenario).
Anyway, distribution policies are outside of the scope of this issue
I will note that you yourself brought up packaging of Cemu with "This also makes it unlikely for Cemu to be packaged by distros". The natural question that brings up is "Is being packaged by distributions an explicit goal of the Cemu Linux port?". I'll open up a separate issue for that discussion however.
from cemu.
The alternative here is that the distro updates the
libfmt
package to v8 which breaks the packages not yet compatible with v7 (obviously an unacceptable scenario). The worse alternative is that the distribution holds back thelibfmt
update until all packages are ready for it (which is obviously an even more unacceptable scenario).
Yeah in Debian we update libfmt and fill release-critical bugs to all the packages that fail to build with the new release. This also incentivises maintainers to write patches to fix the build failures and submit them upstream.
Anyway, distribution policies are outside of the scope of this issue
I will note that you yourself brought up packaging of Cemu with "This also makes it unlikely for Cemu to be packaged by distros". The natural question that brings up is "Is being packaged by distributions an explicit goal of the Cemu Linux port?". I'll open up a separate issue for that discussion however.
I expressed myself poorly. I meant that it should not be the main focus of the thread. Distribution policies are one of the reason why I reported this, but it is not what the thread is about.
Just curious, on what distro do you work?
from cemu.
Yeah in Debian we update libfmt and fill release-critical bugs to all the packages that fail to build with the new release. This also incentivises maintainers to write patches to fix the build failures and submit them upstream.
And it still means that for users of that distro that Cemu is likely going to be broken until those patches are created because the new version of the library probably breaks ABI compatibility (otherwise Cemu would have likely built against it).
Just curious, on what distro do you work?
Solus Linux now, but I'm also currently involved in the still-nascent SerpentOS.
from cemu.
And it still means that for users of that distro that Cemu is likely going to be broken until those patches are created because the new version of the library probably breaks ABI compatibility (otherwise Cemu would have likely built against it).
No, Cemu is not going to be broken. The only thing that gets replaced are the development headers, shared libraries are versioned (a compiled executable doesn't link to libfmt.so
, it links to libfmt.so.7
). This means that the package can't be updated until the bug is fixed, but current builds will continue to work. With regards to shared libraries and ABI Debian's process is pretty solid.
Solus Linux now, but I'm also currently involved in the still-nascent SerpentOS.
Oh, cool :)
from cemu.
Closing this because of our stance in regards to #78.
Currently, the officially encouraged way of building Cemu for development is with vcpkg which we have bundled with the fmt version that works. If thats not possible for whatever reason and system libraries have to be used (pull request for that is pending) then we can solve the original issue by using fmt as a git submodule. I rather not we swap out library versions and potentially introduce new bugs when we still have so many problems to solve.
from cemu.
@Exzap you should close this as "wontfix", not "completed"
from cemu.
Related Issues (20)
- [Feature Request] Option to select the default audio device HOT 5
- Graphic pack causes crash when emulator path contains accents HOT 10
- [feature request]: Game compatibility column
- [feature request]: Gamepad button to activate and deactivate Gyro
- [Bug] Cemu doesn't record play time HOT 11
- Call of Duty Black Ops II - Cannot add 2nd player for splitscreen HOT 1
- [Feature suggestion] Do nicer handling of game crashes
- [Bug/Win 11] Controller Current Profile xml files are deleted if the controller is disconnected
- [Bug] Cemu crashes when starting game HOT 5
- [Bug] Cemu does not compile with fmt 10+ HOT 2
- [Feature Request] Adding post processing filters to enhance the shaders quality
- Linux (Arch Linux x86_64): Linking Fails Against Glslang 13.1.1 HOT 9
- [Win] BOTW Inventory Screen Severely Garbed on Release 2.0-52+ When Not Focused HOT 14
- Cemu 2.0-61 Super Mario 3D World HOT 3
- [Bug] [Linux/Flatpak] Crashing when starting a game in OpenGL HOT 2
- [Feature request] Supporting the motion controls of Dualshock 3 HOT 5
- [Feature Request] Add an option to play the game's startup music
- Wii U Pro Controller automatically disconnects while Cemu is open HOT 5
- [Linux] Weird lag spikes for no reason HOT 6
- Bayonetta 2 missing textures and a strange line in some shadows HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from cemu.