From d580161d012be12d5e9027f93db566251bc00096 Mon Sep 17 00:00:00 2001 From: Walter Oggioni Date: Mon, 3 Mar 2025 13:29:16 +0800 Subject: [PATCH] added `nativeCompilerPath` property to GraalVM `NativeImage` task --- .../gradle/graalvm/NativeImageTask.java | 23 +++++++++++++++++++ gradle.properties | 2 +- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/graalvm/src/main/java/net/woggioni/gradle/graalvm/NativeImageTask.java b/graalvm/src/main/java/net/woggioni/gradle/graalvm/NativeImageTask.java index 94fb0e2..ca21b09 100644 --- a/graalvm/src/main/java/net/woggioni/gradle/graalvm/NativeImageTask.java +++ b/graalvm/src/main/java/net/woggioni/gradle/graalvm/NativeImageTask.java @@ -19,6 +19,7 @@ import org.gradle.api.tasks.Classpath; import org.gradle.api.tasks.Exec; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.InputDirectory; +import org.gradle.api.tasks.InputFile; import org.gradle.api.tasks.Optional; import org.gradle.api.tasks.OutputFile; import org.gradle.api.tasks.PathSensitive; @@ -30,6 +31,7 @@ import org.gradle.jvm.toolchain.JavaToolchainService; import org.gradle.process.CommandLineArgumentProvider; import javax.inject.Inject; +import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -41,6 +43,9 @@ import static net.woggioni.gradle.graalvm.Constants.GRAALVM_TASK_GROUP; @CacheableTask public abstract class NativeImageTask extends Exec { + public static final String NATIVE_COMPILER_PATH_ENV_VARIABLE = "GRAAL_NATIVE_COMPILER_PATH"; + public static final String NATIVE_COMPILER_PATH_PROPERTY_KEY = "graal.native.compiler.path"; + @Classpath public abstract Property getClasspath(); @@ -48,6 +53,10 @@ public abstract class NativeImageTask extends Exec { @PathSensitive(PathSensitivity.RELATIVE) public abstract DirectoryProperty getGraalVmHome(); + @InputFile + @PathSensitive(PathSensitivity.ABSOLUTE) + public abstract RegularFileProperty getNativeCompilerPath(); + @Input public abstract Property getUseMusl(); @Input @@ -80,6 +89,17 @@ public abstract class NativeImageTask extends Exec { getBuildStaticImage().convention(false); getEnableFallback().convention(false); getLinkAtBuildTime().convention(false); + Provider nativeComnpilerProvider = project.provider(() -> { + String envVar; + File compilerPath = null; + if(project.hasProperty(NATIVE_COMPILER_PATH_PROPERTY_KEY)) { + compilerPath = new File(project.property(NATIVE_COMPILER_PATH_PROPERTY_KEY).toString()); + } else if((envVar = System.getenv(NATIVE_COMPILER_PATH_ENV_VARIABLE)) != null) { + compilerPath = new File(envVar); + } + return compilerPath; + }); + getNativeCompilerPath().convention(project.getLayout().file(nativeComnpilerProvider)); ExtensionContainer ext = project.getExtensions(); JavaApplication javaApplication = ext.findByType(JavaApplication.class); if(!Objects.isNull(javaApplication)) { @@ -124,6 +144,9 @@ public abstract class NativeImageTask extends Exec { if(getLinkAtBuildTime().get()) { result.add("--link-at-build-time"); } + if(getNativeCompilerPath().isPresent()) { + result.add("--native-compiler-path=" + getNativeCompilerPath().getAsFile().get()); + } JavaModuleDetector javaModuleDetector = getJavaModuleDetector(); boolean useJpms = getMainModule().isPresent(); FileCollection classpath = getClasspath().get(); diff --git a/gradle.properties b/gradle.properties index cf569fe..27ad06d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ lys.catalog.version=2025.02.05 -version.myGradlePlugins=2025.02.28 +version.myGradlePlugins=2025.03.03 version.gradle=8.12 gitea.maven.url = https://gitea.woggioni.net/api/packages/woggioni/maven