libFEXCore dlopen/API improvements Right now even though FEXCore is provided as a shared library, its API is not really something that works if you want to dlopen it. Static linking and dynamic linking is fine with it though. This comes from FEXCore not ever fully being designed to have dlopen be the path of usage. - Experimental branch: https://github.com/Sonicadvance1/FEX/tree/dlopen_improvements - This provides a little test application that can execute test code - `LD_LIBRARY_PATH=./External/FEXCore/Source/ ./FEXCore_Test/APITest` - Need to disable early return on the loader when it fails to find a symbol. Lots of thing need to be fixed to work with this. - [ ] Provide a loader API to make people's lives easier - Test branch has this loader in the `FCL::LoadFEXCoreSymbols` function. - Every symbol then gets exposed under `FCL::` prefix - [ ] Fully qualify all types used in exported symbols. - [ ] Remove all uses of class inheritance across the file boundary - [ ] SignalDelegator - [ ] SyscallHandler - [ ] CodeLoader? - [ ] FEXCore::Config::Layer - [ ] More? - This needs to be done because vtable expose across dlopen boundary is a broken mess. - APITest.cpp has a hack to expose `RegisterFrontendHostSignalHandler` through `FCL` which is a nightmare. - [ ] Need to provide a helper to expose locally visible `jemalloc` symbols that use `FCL::jemalloc` symbols - APITest.cpp has a simple wrapper for this. This would need to be a in header that is included in all files that use `fexl::` - Bit tricky - [ ] Remove static initializers in FEXCore - These can cause initialization problems in debug builds when symbols aren't fully loaded yet. - [ ] Config.cpp - [ ] More. - [ ] Need some versioning so that if the loader tries to load a different versioned FEXCore, early exit. - [ ] Remove duplicated symbol names where the only difference is arguments? - Might be able to represent these with some thought? Haven't thought hard about it yet. - [ ] FEXCore::Context::Context::InvalidateGuestCodeRange - [ ] FEXCore::FileLoading::LoadFile - [ ] Work towards lessening symbol leakage. If a symbol isn't actually necessary outside of FEXCore, ensure it isn't leaked. - [ ] Add unit tests that test each aspect of the API individually in as small of chunks as possible This is going to be quite a bit of work, so delaying it until absolutely necessary will be nice.