Skip to content

Commit

Permalink
Use OS and arch from environment when installing Zig
Browse files Browse the repository at this point in the history
  • Loading branch information
lptr committed Sep 10, 2024
1 parent 19e3fb0 commit ca32eaf
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 4 deletions.
1 change: 1 addition & 0 deletions build-logic/src/main/kotlin/gradlebuild.zig.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import gradlebuild.ZigBuild
import gradlebuild.ZigInstall
import org.gradle.internal.os.OperatingSystem
import java.util.*

interface TargetPlatform : Named {
Expand Down
30 changes: 26 additions & 4 deletions build-logic/src/main/kotlin/gradlebuild/ZigInstall.kt
Original file line number Diff line number Diff line change
Expand Up @@ -65,12 +65,12 @@ abstract class ZigInstall @Inject constructor(@Inject val exec: ExecOperations)
}

// Install Zig
println("Installing Zig ${zigVersion.get()}")
println("Installing Zig ${zigVersion.get()} for ${os()} ${arch()}")
val cacheRoot = cacheDir.get().asFile
cacheRoot.mkdirs()
val zigArchive = cacheRoot.resolve("zig-${zigVersion.get()}.tar.xz")
val zigArchive = cacheRoot.resolve("${zigName(zigVersion.get())}.tar.xz")
// TODO Figure out OS and architecture
downloadFile("https://ziglang.org/builds/zig-macos-aarch64-${zigVersion.get()}.tar.xz", zigArchive)
downloadFile("https://ziglang.org/builds/${zigName(zigVersion.get())}.tar.xz", zigArchive)
unpackTarXz(zigArchive, installDir)
val executable = installDir.zigExecutablePath(zigVersion.get())
executable.setExecutable(true)
Expand Down Expand Up @@ -105,5 +105,27 @@ abstract class ZigInstall @Inject constructor(@Inject val exec: ExecOperations)
}

private fun File.zigExecutablePath(version: String): File =
resolve("zig-macos-aarch64-${version}/zig")
resolve("${zigName(version)}/zig")

private fun zigName(zigVersion: String) =
"zig-${os()}-${arch()}-${zigVersion}"

private fun os(): String {
val os = System.getProperty("os.name").lowercase()
return when {
os.contains("mac") -> "macos"
os.contains("win") -> "windows"
os.contains("linux") -> "linux"
else -> error("Unsupported OS: $os")
}
}

private fun arch(): String {
val arch = System.getProperty("os.arch").lowercase()
return when {
arch.contains("x86_64") -> "x86_64"
arch.contains("aarch64") -> "aarch64"
else -> error("Unsupported architecture: $arch")
}
}
}

0 comments on commit ca32eaf

Please sign in to comment.