The official ccache documentation[1] recommends to set
`CMAKE_C(XX)_COMPILER_LAUNCHER` to ccache to enable ccache.
These also work as envionment variables (supported by CMake itself).
However, using these instructions generates the following error during
building:
ccache: error: Recursive invocation (the name of the ccache binary must be "ccache")
This is because Dolphin adds an additional command ccache layer (ccache
ccache compiler ...).
This fixes that issue by checking for `CMAKE_C(XX)_COMPILER_LAUNCHER`
before inserting our own. Also, use `CMAKE_C(XX)_COMPILER_LAUNCHER`
to add ccache because the CMake docs discourages the use of
`RULE_LAUNCH_COMPILE` in favour of `CMAKE_C(XX)_COMPILER_LAUNCHER`.
[1]: https://github.com/ccache/ccache/wiki/CMake
We currently have 32 different binaries containing unit tests. At least
when I build for Android, each one takes up over 200 MiB, and linking
them all increases my incremental build times by over a minute. I'd
like to change this for the sake of my productivity and disk space.
For reference, MSBuild is already putting all tests in a single binary.
This lets us reduce the number of USE_RETRO_ACHIEVEMENTS ifdefs in the
code base, reducing visual clutter. In particular, needing an ifdef for
each call to IsHardcodeModeActive was annoying to me. This also reduces
the risk that someone writes code that accidentally fails to compile
with USE_RETRO_ACHIEVEMENTS disabled.
We could cut down on ifdefs even further by making HardcodeWarningWidget
always exist, but that would result in non-trivial code ending up in the
binary even with USE_RETRO_ACHIEVEMENTS disabled, so I'm leaving it out
of this PR. It's not a lot of code though, so I might end up revisiting
it at some point.
Enable emulator hotkeys and controller input (when that option is
enabled) when a TAS Input window has focus, as if it was the render
window instead. This allows TASers to use frame advance and the like
without having to switch the focused window or disabling Hotkeys Require
Window Focus which also picks up keypresses while other apps are active.
Cursor updates are disabled when the TAS Input window has focus, as
otherwise the Wii IR widget (and anything else controlled by the mouse)
becomes unusable. The cursor continues to work normally when the render
window has focus.