Development:Setting up Thunks
Revision as of 02:30, 13 July 2021 by Sonicadvance1 (talk | contribs) (Created page with "== Build Dependencies == * g++-x86-64-linux-gnu (For building thunks) * Development libraries for various thunks == Setting cmake to build thunks == Pass in to cmake the opti...")
Build Dependencies
- g++-x86-64-linux-gnu (For building thunks)
- Development libraries for various thunks
Setting cmake to build thunks
Pass in to cmake the option to enable thunk building.
- -DBUILD_THUNKS=True
FEX thunk options
- FEX_THUNKHOSTLIBS, -t <Thunk Host Libs Path>, --thunkhostlibs=<Thunk Host Libs path>, JSON: ThunkHostLibs:<Path>
- Folder to find the host-side thunking libraries.
- FEX by default installs these files to: /usr/lib/fex-emu/HostThunks/
- FEX_THUNKGUESTLIBS, -j <Thunk Host Libs Path>, --thunkguestlibs=<Thunk Host Libs path>, JSON: ThunkGuestLibs:<Path>
- Folder to find the guest-side thunking libraries.
- FEX by default installs these files to: /usr/share/fex-emu/GuestThunks/
- FEX_THUNKCONFIG, -k <Thunk Config json path>, --thunkconfig=<Thunk Config json path>, JSON: ThunkConfig:<Path>
- A json file specifying where to overlay the thunks.
- If the filename isn't a path then FEX will search for the file in $HOME/.fex-emu/ThunkConfigs/
How to use Thunks
Once Thunks are built and installed then you can can set the three configuration options to the correct paths
- The user can likely set ThunkHostLibs and ThunkGuestLibs to the global install path
- Unless these are set in the ThunkConfig file, these will be unused
- Overriding these to another location is useful for application specific hacks if necessary
- Setting the global application profile for ThunkConfig is useful for testing but not recommended for long term use
- Due to the unstable nature of thunks, it is recommended to use application specific profiles to enable thunks
- This allows the user to test applications first using the global config, then once confirmed it works, generating an application profile
- Recommended to reduce the application profile to the minimum set of options. FEXConfig will save a full config.
ThunkConfig example
This is just an example for how one could lay out the thunks.
- Save this to a file somewhere and point ThunkConfig option to it
- $HOME/.fex-emu/ThunkConfigs/ isn't a bad choice for consistency.
{ "thunks": { "libGL-guest.so": ["/lib/x86_64-linux-gnu/libGL.so.1", "/usr/lib/x86_64-linux-gnu/libGL.so.1"], "libasound-guest.so": ["/lib/x86_64-linux-gnu/libasound.so.2", "/usr/lib/x86_64-linux-gnu/libasound.so.2"], "libX11-guest.so": ["/lib/x86_64-linux-gnu/libX11.so.6", "/usr/lib/x86_64-linux-gnu/libX11.so.6"], "libXrender-guest.so": ["/lib/x86_64-linux-gnu/libXrender.so.1", "/usr/lib/x86_64-linux-gnu/libXrender.so.1"], "libXext-guest.so": ["/lib/x86_64-linux-gnu/libXext.so.6", "/usr/lib/x86_64-linux-gnu/libXext.so.6"], "libXfixes-guest.so": ["/lib/x86_64-linux-gnu/libXfixes.so.3", "/usr/lib/x86_64-linux-gnu/libXfixes.so.3"] } }
Limitations and problems
- 32-bit thunks aren't available currently
- Requires kernel patches for ARM64 support
- Thunks aren't fully stable. Expect missing symbols and crashes.