Development:Setting up Thunks

From FEX-Emu Wiki
Revision as of 23:54, 8 October 2021 by Sonicadvance1 (talk | contribs)
Jump to navigation Jump to search

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"]
   }
 }

Thunks Database format

Incoming

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.