From 77d0f5b8cafb005e672cb6243aea34c38ad5f4b9 Mon Sep 17 00:00:00 2001 From: translatenix <119817707+translatenix@users.noreply.github.com> Date: Wed, 7 Feb 2024 20:57:53 -0800 Subject: [PATCH] Only build static executable if musl toolchain is installed (#83) This improves the development experience for (WSL) Linux users. They can now run "./gradlew buildNative" without having a musl toolchain installed. In this case, only the dynamically linked executable will be built. --- buildSrc/src/main/kotlin/BuildInfo.kt | 5 +++++ pkl-cli/pkl-cli.gradle.kts | 2 +- pkl-core/pkl-core.gradle.kts | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/buildSrc/src/main/kotlin/BuildInfo.kt b/buildSrc/src/main/kotlin/BuildInfo.kt index e8d85daa..7edf206a 100644 --- a/buildSrc/src/main/kotlin/BuildInfo.kt +++ b/buildSrc/src/main/kotlin/BuildInfo.kt @@ -95,6 +95,11 @@ open class BuildInfo(project: Project) { java.lang.Boolean.getBoolean("releaseBuild") } + val hasMuslToolchain: Boolean by lazy { + // see "install musl" in .circleci/jobs/BuildNativeJob.pkl + File(System.getProperty("user.home"), "staticdeps/bin/x86_64-linux-musl-gcc").exists() + } + val os: org.gradle.internal.os.OperatingSystem by lazy { org.gradle.internal.os.OperatingSystem.current() } diff --git a/pkl-cli/pkl-cli.gradle.kts b/pkl-cli/pkl-cli.gradle.kts index 75f98326..dcb19f22 100644 --- a/pkl-cli/pkl-cli.gradle.kts +++ b/pkl-cli/pkl-cli.gradle.kts @@ -254,7 +254,7 @@ val linuxExecutableAarch64: TaskProvider by tasks.registering(Exec::class) */ val alpineExecutableAmd64: TaskProvider by tasks.registering(Exec::class) { configureExecutable( - buildInfo.os.isLinux && buildInfo.arch == "amd64", + buildInfo.os.isLinux && buildInfo.arch == "amd64" && buildInfo.hasMuslToolchain, file("$buildDir/executable/pkl-alpine-linux-amd64"), listOf( "--static", diff --git a/pkl-core/pkl-core.gradle.kts b/pkl-core/pkl-core.gradle.kts index 7583e4c0..569ba83f 100644 --- a/pkl-core/pkl-core.gradle.kts +++ b/pkl-core/pkl-core.gradle.kts @@ -256,7 +256,7 @@ val testLinuxExecutableAarch64 by tasks.registering(Test::class) { } val testAlpineExecutableAmd64 by tasks.registering(Test::class) { - enabled = buildInfo.os.isLinux && buildInfo.arch == "amd64" + enabled = buildInfo.os.isLinux && buildInfo.arch == "amd64" && buildInfo.hasMuslToolchain dependsOn(":pkl-cli:alpineExecutableAmd64") inputs.dir("src/test/files/LanguageSnippetTests/input")