PCSX2 / pcsx2

PCSX2 - The Playstation 2 Emulator
https://pcsx2.net
GNU General Public License v3.0
11.7k stars 1.62k forks source link

[Feature Request]: Building without QT6 dependency #9955

Closed vanfanel closed 1 year ago

vanfanel commented 1 year ago

Description

Hi,

I usually build my own lightweight GNU/Linux systems based on Debian, modern MESA, modern Wayland, ALSA and SDL2.

QT6 is a pretty heavy dependency (having many dependencies itself) I would like to avoid. So, is it possible or would it possible to build a commandline-only PCSX2 on GNU/Linux not depending on QT6?

Reason

-Simpler and faster building process -Better suited for lightweight systems

Examples

For example, adding a simple -D_USE_QT=OFF cmake flag would be enough.

RedDevilus commented 1 year ago

I don't think we use the full Qt6 suite, but no idea how much lighter that is for Linux side. Technically you can build without Qt as they aren't tightly knit GUI and emulation code.

refractionpcsx2 commented 1 year ago

Although I suspect nobody on the team will want to do this, so it might be a "PR's welcome" kinda deal, you can run the emulator with the -nogui parameter to start the emulator with a minimal amount of stuff and no interface, but of course this won't help build times/executable size.

That said, we need some sort of interface, as the output needs to be sent to a window of some sort, and right now that window is Qt, so if somebody was to implement your idea, they would need some sort of replacement window which worked cross platform (I wouldn't want to have to do WinAPI and whatever linux has), but aside from that, the emulator and GUI are technically separate, as part of the work Stenzek did cutting out WX.

Right now we have the GS runner which takes the compiled PCSX2.lib (which is just the emulator) and runs that surfaceless in the background, kind of as an example of how separated things are.

vanfanel commented 1 year ago

Ah, so you use QT6 for window management. Why not use SDL2 instead? That's OS-gnostic too. SDL_CreateWindow() and there you go, you can create an OpenGL or Vulkan context window with the same function, too. And since SDL2 is already a dependency, there wouldn't be any bloat associated.

refractionpcsx2 commented 1 year ago

Because we have everything inside the Qt window :P we don't want a separate window for SDL. I guess that could be done for your Qt-less idea.

vanfanel commented 1 year ago

Right. I guess it would be SDL2 window + commandline interface only.

I am not familiar with PCSX2 code at all. It would imply adding a whole new backend, right? I mean, not easily done with simple ifdefs around Window creation...

refractionpcsx2 commented 1 year ago

you would need to assemble a frontend project to attach to it, like right now pcsx2 compiles to a lib (on the windows side, I have no idea about linux) and the qt interface is compiled separately, I presume we have some way of linking them together, but I don't know the details, it's not something I've dove in to, but you would need to provide a basic SDL frontend to replace that, I would guess, plus a way to pass commandline parameters, so the user can load roms etc.

vanfanel commented 1 year ago

Sounds pretty much above my head. Would a payment be accepted for the needed work? Like 1000 Euros, for example.

Also, no need for any kind of menu on SDL2, only the emulation window.

refractionpcsx2 commented 1 year ago

I don't do work for money, the moment you do, people expect support, to get their monies worth. I do this for a hobby, I don't want to take on monetary responsibility.

vanfanel commented 1 year ago

I perfectly understand what you mean. But I am not expecting any responsibility at all, I don't mind if it takes a month or a year, and I don't expect anything special. I don't work for money either, so I perfectly get your point.

stenzek commented 1 year ago

What interface would it use then? How would you configure controllers? Or change any settings? Editing inis by hand is the opposite of useable.

I did this ages ago - it just opened the big picture UI. Even ran directly on the TTY and didn't need X. But it's pointless, because even so, it was still missing critical features like achievements login, automatic updates, relative mouse mode, etc.

If we shipped that, users would use it and complain that things didn't work. Not to mention another thing that we have to maintain and keep working, when none of the team use it. Same reason I stopped supporting duckstation-nogui.

Qt is tiny, really. Our AppImages are less than 50MB. If you insist on building yourself, when we already provide self contained builds, any issues with Qt are on you, not us.