RFR: 7903654: Jextract should use library lookup

Maurizio Cimadamore mcimadamore at openjdk.org
Wed Feb 7 22:01:16 UTC 2024


Historically, jextract has always used `System::loadLibrary` and `System::load` to load libraries specified via the `-l` option. This is suboptimal, as in the most common case, such libraries will be installed using e.g. `apt`, in which case `System::load/loadLibrary` is of little use, as it cannot find libraries in path known to the dynamic linker.

This patch changes the default for library loading to use `SymbolLookup::libraryLookup` instead. That is, in absence of any other options, each library provided via `-l` will create a new `SymbolLookup::loaderLookup`, associated with the library arena.

The `-l` option also supports a new disambiguation mechanism, borrowed from the gcc linker options - that is, if the library name starts with `:`, what follows is parsed as a path. Otherwise, we assume it's a library name, and we add prefix/suffix, using `System::mapLibraryName` before creating the lookup.

In cases where the old behavior is preferred (e.g. if libraries to be loaded sit in `java.library.path`) a fallback option has been provided, namely `--use-system-load-library`.

Regardless of the options used, the header class will feature a composite lookup. Inside this lookup we find:

1. one or more library lookup (one for each `-l` option)
2. the loader lookup
3. the native linker's default lookup

When `--use-system-load-library` is used, (1) is empty, and a static initializer block with the corresponding calls to `System::load`, `System::loadLibrary` is added instead.

-------------

Commit messages:
 - Merge branch 'panama' into better_library_loading
 - Update README
 - Simplify option
 - Initial push
 - Initial push

Changes: https://git.openjdk.org/jextract/pull/201/files
 Webrev: https://webrevs.openjdk.org/?repo=jextract&pr=201&range=00
  Issue: https://bugs.openjdk.org/browse/CODETOOLS-7903654
  Stats: 176 lines in 32 files changed: 91 ins; 18 del; 67 mod
  Patch: https://git.openjdk.org/jextract/pull/201.diff
  Fetch: git fetch https://git.openjdk.org/jextract.git pull/201/head:pull/201

PR: https://git.openjdk.org/jextract/pull/201


More information about the jextract-dev mailing list