Skip to content
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

Add support for GraalVM #9

Closed
wants to merge 1 commit into from
Closed

Commits on Jun 11, 2024

  1. Add support for GraalVM

    Adds a JAR publication at `jna-graalvm.jar`, with accompanying
    build infrastructure, which provides support for JNA within the
    context of the Substrate Virtual Machine (SVM).
    
    GraalVM Native Image targets use SVM instead of JVM at runtime.
    JNA's current strategy of unpacking libraries at runtime works
    under SVM, but is suboptimal; the binary is native, so it can
    simply include JNA object code for the current platform directly.
    
    To accomplish this, several GraalVM "feature" implementations are
    provided in this new publication. By default, regular JNA access
    is enabled through the `JavaNativeAccess` feature; this class
    enables reflection and runtime JNI configurations for downstream
    projects which use JNA.
    
    Another feature, `SubstrateStaticJNA`, is experimental because it
    relies on unstable GraalVM APIs, but instead of loading JNA at
    runtime from a dynamic library, it builds JNA into the final
    native image with a static object.
    
    These features are enabled through a resource within `META-INF`,
    called `native-image.properties`, which is picked up by the native
    image compiler at build time. The new artifact only needs to be
    present for GraalVM native targets at build time; otherwise, the
    classes and libraries in `jna-graalvm.jar` are inert.
    
    Includes tested support for:
    - macOS aarch64
    - Linux amd64
    
    - feat: add `jna-graalvm.jar` publication
    - feat: add base `JavaNativeAccess` feature for auto-config of JNA
    - feat: add initial implementation of `SubstrateStaticJNA` feature
    - test: sample/test gradle build for native image
    - chore: ci config to run native sample
    
    Signed-off-by: Sam Gammon <[email protected]>
    sgammon committed Jun 11, 2024
    Configuration menu
    Copy the full SHA
    03d97a0 View commit details
    Browse the repository at this point in the history