This is a Gradle plugin for integrating Project Panama's jextract
tool in the build process.
There is also a full demo project showcasing the gradle-jextract
plugin.
Since the plugin is available on Gradle's Plugin Portal it can be applied within the build script's plugins
block.
plugins {
id "io.github.krakowski.jextract" version "0.5.0"
}
Applying the plugin adds the jextract
task which can be configured by the build script.
jextract {
header("${project.projectDir}/src/main/c/stdio.h") {
// The library name
libraries = [ 'stdc++' ]
// The package under which all source files will be generated
targetPackage = 'org.unix'
// The generated class name
className = 'Linux'
}
}
If the Gradle Java Plugin or
Application plugin is applied, the gradle-jextract
plugin configures them and uses the configured toolchain for its task, which can be set as follows.
java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(22))
}
}
If your JDK is not installed in one of the default locations, Gradle can be instructed to search in a custom location.
To enable this feature the org.gradle.java.installations.paths
property has to be set within your global gradle.properties
file usually located inside ${HOME}/.gradle
.
org.gradle.java.installations.paths=/custom/path/jdk22
The plugin will first try to find jextract
inside PATH
and then fall back to ${JAVA_HOME}/bin
.
The jextract
task exposes the following configuration options.
Name | Type | Required | Description |
---|---|---|---|
libraries |
java.lang.String[] |
The libraries against which the native code will link ¹ | |
includes |
java.lang.String[] |
A list of directories which should be included during code generation | |
targetPackage |
java.lang.String |
:black_circle: | The package under which all bindings will be generated |
className |
java.lang.String |
The generated class file's name | |
functions |
java.lang.String[] |
Whitelist of function symbols | |
constants |
java.lang.String[] |
Whitelist of macro and enum constant symbols | |
structs |
java.lang.String[] |
Whitelist of struct symbols | |
typedefs |
java.lang.String[] |
Whitelist of typedef symbols | |
unions |
java.lang.String[] |
Whitelist of union symbols | |
variables |
java.lang.String[] |
Whitelist of global variable symbols | |
definedMacros |
java.lang.String[] |
List of additional defined C preprocessor macros | |
useSystemLoadLibrary |
java.lang.Boolean |
Load libraries into the loader symbol lookup | |
outputDir |
org.gradle.api.file.Directory |
The output directory under which the generated source files will be placed |
¹ libraries option can use simple library name "stdc++" or full path to the shared libraries. Full path need to be prefixed with ":" character. For example ":/usr/lib/libstdc++.so" doc
This project is licensed under the GNU GPLv3 License - see the LICENSE file for details.