Skip to content

Commit

Permalink
Merge pull request #507 from alexarchambault/graalvm-java-17
Browse files Browse the repository at this point in the history
Update GraalVM to 21.3.0, use Java 17 GraalVM
  • Loading branch information
alexarchambault committed Dec 29, 2021
2 parents 2182c26 + 1258b4b commit a8cff19
Show file tree
Hide file tree
Showing 6 changed files with 54 additions and 10 deletions.
3 changes: 1 addition & 2 deletions build.sc
Original file line number Diff line number Diff line change
Expand Up @@ -337,8 +337,7 @@ trait Cli extends SbtModule with CliLaunchers with ScalaCliPublishModule with Fo
)
def mainClass = Some("scala.cli.ScalaCli")

def localRepoJar = `local-repo`.localRepoJar()
def graalVmVersion = deps.graalVmVersion
def localRepoJar = `local-repo`.localRepoJar()

object test extends Tests with ScalaCliScalafixModule
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,18 @@ abstract class PackageTestDefinitions(val scalaVersionOpt: Option[String])

private lazy val extraOptions = scalaVersionArgs ++ TestUtil.extraOptions

def maybeUseBash(cmd: os.Shellable*)(cwd: os.Path = null): os.CommandResult = {
val res = os.proc(cmd: _*).call(cwd = cwd, check = false)
if (Properties.isLinux && res.exitCode == 127)
// /bin/sh seems to have issues with '%' signs in PATH, that coursier can leave
// in the JVM path entry (https://unix.stackexchange.com/questions/126955/percent-in-path-environment-variable)
os.proc(("/bin/bash": os.Shellable) +: cmd: _*).call(cwd = cwd)
else {
expect(res.exitCode == 0)
res
}
}

test("simple script") {
val fileName = "simple.sc"
val message = "Hello"
Expand Down Expand Up @@ -39,7 +51,7 @@ abstract class PackageTestDefinitions(val scalaVersionOpt: Option[String])
expect(os.isFile(launcher))
expect(Files.isExecutable(launcher.toNIO))

val output = os.proc(launcher.toString).call(cwd = root).out.text().trim
val output = maybeUseBash(launcher)(cwd = root).out.text().trim
expect(output == message)
}
}
Expand Down Expand Up @@ -68,7 +80,7 @@ abstract class PackageTestDefinitions(val scalaVersionOpt: Option[String])
expect(os.isFile(launcher))
expect(Files.isExecutable(launcher.toNIO))

val output = os.proc(launcher.toString).call(cwd = root).out.text().trim
val output = maybeUseBash(launcher.toString)(cwd = root).out.text().trim
expect(output == message)
}
}
Expand Down Expand Up @@ -192,7 +204,7 @@ abstract class PackageTestDefinitions(val scalaVersionOpt: Option[String])
launcher
}

val output = os.proc(runnableLauncher.toString).call(cwd = root).out.text().trim
val output = maybeUseBash(runnableLauncher.toString)(cwd = root).out.text().trim
expect(output == message)
}
}
Expand Down
12 changes: 10 additions & 2 deletions project/deps.sc
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import mill._, scalalib._

import scala.util.Properties

object Scala {
def scala212 = "2.12.15"
def scala213 = "2.13.6"
Expand Down Expand Up @@ -90,15 +92,21 @@ object Deps {
def usingDirectives = ivy"org.virtuslab:using_directives:0.0.7-4f0dd5d-SNAPSHOT"
}

def graalVmVersion = "21.2.0"
private def graalVmVersion =
if (Properties.isWin) "21.2.0"
else "21.3.0"
def graalVmJvmId =
if (Properties.isWin) s"graalvm-java16:$graalVmVersion"
else s"graalvm-java17:$graalVmVersion"

def csDockerVersion = Deps.Versions.coursier

def buildCsVersion = Deps.Versions.coursier

object Docker {
def customMuslBuilderImageName = "scala-cli-base-musl"
def muslBuilder =
"messense/rust-musl-cross@sha256:12d0dd535ef7364bf49cb2608ae7eaf60e40d07834eb4d9160c592422a08d3b3"
s"$customMuslBuilderImageName:latest"

def testImage = "ubuntu:18.04"
def alpineTestImage =
Expand Down
3 changes: 3 additions & 0 deletions project/musl-image/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
FROM messense/rust-musl-cross@sha256:47a3721b3e186abfd705feb1e03bf1d5212357ea26762cceef11530e0a2f2c7c
ADD setup.sh /setup.sh
RUN /setup.sh
9 changes: 9 additions & 0 deletions project/musl-image/setup.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#!/usr/bin/env bash
set -e

cd /usr/local/musl/bin

for i in x86_64-unknown-linux-musl-*; do
dest="$(echo "$i" | sed 's/-unknown//')"
ln -s "$i" "$dest"
done
19 changes: 16 additions & 3 deletions project/settings.sc
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ trait CliLaunchers extends SbtModule { self =>
trait CliNativeImage extends NativeImage {
def nativeImageCsCommand = Seq(cs())
def nativeImagePersist = System.getenv("CI") != null
def nativeImageGraalVmJvmId = s"graalvm-java11:${deps.graalVmVersion}"
def nativeImageGraalVmJvmId = deps.graalVmJvmId
def nativeImageOptions = T {
val usesDocker = nativeImageDockerParams().nonEmpty
val cLibPath =
Expand Down Expand Up @@ -312,6 +312,20 @@ trait CliLaunchers extends SbtModule { self =>
s"https://github.com/coursier/coursier/releases/download/v${deps.csDockerVersion}/cs-x86_64-pc-linux.gz"
)
)
def nativeImageOptions = T {
super.nativeImageOptions() ++ Seq(
"-H:-CheckToolchain"
)
}
def buildHelperImage = T {
os.proc("docker", "build", "-t", Docker.customMuslBuilderImageName, ".")
.call(cwd = os.pwd / "project" / "musl-image", stdout = os.Inherit)
()
}
def nativeImage = T {
buildHelperImage()
super.nativeImage()
}
}

object `mostly-static-image` extends CliNativeImage {
Expand All @@ -324,7 +338,6 @@ trait CliLaunchers extends SbtModule { self =>
}

def localRepoJar: T[PathRef]
def graalVmVersion: String

def nativeImageMainClass = T {
mainClass().getOrElse(sys.error("Don't know what main class to use"))
Expand Down Expand Up @@ -370,7 +383,7 @@ trait CliLaunchers extends SbtModule { self =>
// format: off
Seq(
cs(), "java-home",
"--jvm", s"graalvm-java11:$graalVmVersion",
"--jvm", deps.graalVmJvmId,
"--jvm-index", jvmIndex
).!!.trim
// format: on
Expand Down

0 comments on commit a8cff19

Please sign in to comment.