Reimplements tools/check.py in a faster language (picked Rust to learn
and play with the language and because installing dependencies is way
easier than with C++)
On my machine, a full run takes ~160ms with this new implementation
and 49s (!) with check.py.
The main performance improvements come from not having to use
pyelftools and the Python bindings of Capstone (which are both insanely
slow and perhaps less efficient than they could be). Function checking
is now also performed in parallel rather than sequentially for yet
another significant performance boost.
Other tweaks include editing Capstone and the bindings to avoid
computing expensive things that we don't actually need and avoiding
dynamic memory allocations in hot paths as much as possible.
check.py will be removed after the setup instructions are updated.
The intention was to catch functional regressions in non-matching
functions but this doesn't actually work well because referenced
code and data may have moved after a function was dumped, in which
case the reference checker is unable to verify that function calls
and data references are still correct.
Considering this increases the amount of complexity in the checker
and makes the workflow more complicated for contributors, let's just
drop this mechanism. It isn't worth it.
Putting binary files in the repo is also pretty meh.
This project is not going to decompile libcurl and NEX. It's just not
the main focus of the project and it's unlikely to yield any kind of
interesting information.
PosTrackerUploader and possibly the network save transfer stuff
do use NEX but those are secondary, possibly debug-only features.
Furthermore decompiling those two systems does not require actually
implementing the entirely of libcurl+NEX (~1MB); we just have to
write "API stubs" (headers) for the few parts of NEX that are used
by BotW code.