-
Notifications
You must be signed in to change notification settings - Fork 1.7k
[GR-18218] Full support for the Foreign Function & Memory API in Native Image #8113
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
Is there an issue where we can track support for (downcalls) on ARM64 (aka aarch64)? |
@msgilligan I would consider this to be in the scope of this roadmap item: JEP 454 includes aarch64, so full support in Native Image means that it works on all supported platforms including aarch64 on Linux/macOS. |
One example of an upcall not working (yet) is described in #8616 AFAIUI. |
@fniephaus Going by #8677 there should be better support for JEP 454 in latest master (commit 7b51429). Is that supposed to fix the test case from #8616? It doesn't for me, fwiw. Just checking. |
@jerboaa despite the dynamic nature of the JEP 454 foreign call API, GraalVM Native Image needs to generate stub code for such calls ahead of time, which requires configuration or registration (like JNI calls do). Have a look at the |
I take it the native image agent won't help with that kind of registration config generation?
OK thanks! Is there some documentation describing how this is supposed to get used going forward? Or maybe there are some examples I could look at? It sounds like #8616 won't work verbatim... |
The agent does not generate a foreign API configuration, but I believe it would catch the target methods for upcalls that are needed in the reflection configuration. |
Thanks, I'll give that a go. |
@peter-hofer Good afternoon! I would like to ask if there are plans to add dynamic call of native method without mandatory registration at the build stage? |
@Arcane561 we are working on a mechanism that picks up the method handles that |
Only |
Hello, has there be progress to support arm64 downcall, but maybe upcall too ? Some part of the JDK already use FFM which tends to be problematic e.g. to run image generation (which do some layout stuff with fonts). EDIT: looking up the message I see this limitation is still in actual: Line 221 in d5c7b8a
|
@bric3 work is underway on aarch64 support for the FFM API. |
Do you know if this can make it for 24? Regardless this is exciting, and I can only thank you and all involved. |
@bric3 that seems unlikely, but we expect it will be part of the upcoming 25 LTS release. |
Thank you for the heads-up, I'm looking forward to it :) |
AArch64 support for Linux and Darwin landed today: #10856 |
@alexarchambault This will only be for GraalVM 25 (and newer, ofc). |
Thanks! Looking forward to GraalVM 25 then |
If you are adventurous you can try out GraalVM 25 dev builds, e.g.: https://github.com/graalvm/graalvm-ce-dev-builds/releases/tag/25.0.0-dev-20250403_0843 |
TL;DR
Add full support for the Foreign Function & Memory API (JEP 454) to Native Image.
Goals
The Foreign Function & Memory (FFM) API became GA in JDK 22, a new API "by which Java programs can interoperate with code and data outside of the Java runtime."
Since GraalVM for JDK 22, most features of the FFM API are already supported (see release notes). However, support is still experimental and therefore needs to be enabled with option
-H:+ForeignAPISupport
at image build time. Full support for the FFM API is ongoing work.Note that GraalVM for JDK 22 and later support the FFM API on HotSpot (e.g. when Graal is used as a JIT compiler).
As part of #7152 and #7238, we have already added preliminary support for foreign downcalls and an infrastructure to support upcalls in the future. Documentation on what parts of the FFM API work with Native Image and how they can be used can be found here.
Missing Features / Open Tasks
Arena.ofShared()
)Non-Goals
Related PRs
The text was updated successfully, but these errors were encountered: