This is a big rework of how dependencies are handled internally. All the
calls to CMake functions changing directory-wide properties that were
previously used to link to external and internal dependencies have been
replaced with their "target_" counterparts. This makes it possible to
express more clearly the relationships between different targets and
should also make the build script more robust in general.
In doing this, I've also made it possible to link to system libraries if
so desired; the versioned calls to find_package() will make sure that
the found dependencies are compatible with the ones required by Cemu,
and will abort the build otherwise.
Cemu's internal targets are deeply interconnected, making it hard to
fully benefit from a target-based approach. Nonetheless, I did my best
to mark PUBLIC dependencies as such, for example when an internal target
like CemuGui exposes a dependency as part of its API, i.e. it includes
a third party header in one of its public headers.
This will significantly help with improving the build experience on
Linux, thus helping a bit with the resolution of #1.
Doesn't seem like there's a way to bypass the need for default values in their API, and since their versions doesn't seem to be reliable enough to know whether maxDualSourceDrawBuffersEXT exists. This way it's default initialized to 0 which is fine for Cemu.
The previous implementation used an std::stringstream to concatenate
the generated random string.
The new one uses a simple preallocated std::string, as the size of the
output is already known - it is the length parameter.
It also uses std::generate_n() instead of an explicit loop, making the
code more concise and potentially faster, as no calls to
std::string::operator+= are needed.
Calling GenerateRandomString(1'000'000) with the std::stringstream-based
implementation allocated 16 times, for a total of 3'173'516 bytes.
The new one cuts this down to 4 allocs, for a total of 1'076'864 bytes.
There is currently an issue where building from scratch causes the Windows CI machine to run out of disk space. Since it works when the job is re-run with cached packages we'll just leave it at that for now