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