Use Oracle GraalVM 21 (#1624)

---------

Co-authored-by: Michiel Borkent <michielborkent@gmail.com>
This commit is contained in:
Rahuλ Dé 2023-09-27 11:23:57 +01:00 committed by GitHub
parent ef50677275
commit 6c1a66e853
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 45 additions and 46 deletions

View file

@ -80,7 +80,7 @@
:working_directory "~/repo" :working_directory "~/repo"
:environment {:LEIN_ROOT "true" :environment {:LEIN_ROOT "true"
:BABASHKA_PLATFORM "linux" :BABASHKA_PLATFORM "linux"
:GRAALVM_VERSION "22.3.1" :GRAALVM_VERSION "21"
:GRAALVM_HOME graalvm-home :GRAALVM_HOME graalvm-home
:BABASHKA_TEST_ENV "jvm"} :BABASHKA_TEST_ENV "jvm"}
:resource_class "large" :resource_class "large"
@ -120,7 +120,7 @@ java -jar \"$jar\" --config .build/bb.edn --deps-root . release-artifact \"$refl
(defn unix (defn unix
[shorted? static? musl? arch executor-conf resource-class graalvm-home platform] [shorted? static? musl? arch executor-conf resource-class graalvm-home platform]
(let [env {:LEIN_ROOT "true" (let [env {:LEIN_ROOT "true"
:GRAALVM_VERSION "22.3.1" :GRAALVM_VERSION "21"
:GRAALVM_HOME graalvm-home :GRAALVM_HOME graalvm-home
:BABASHKA_PLATFORM (if (= "mac" platform) :BABASHKA_PLATFORM (if (= "mac" platform)
"macos" "macos"
@ -178,7 +178,7 @@ java -jar \"$jar\" --config .build/bb.edn --deps-root . release-artifact \"$refl
{:persist_to_workspace {:root "/tmp" {:persist_to_workspace {:root "/tmp"
:paths ["release"]}} :paths ["release"]}}
{:save_cache {:save_cache
{:paths ["~/.m2" "~/graalvm-ce-java19-22.3.1"] {:paths ["~/.m2" "~/graalvm"]
:key cache-key}} :key cache-key}}
{:store_artifacts {:path "/tmp/release" {:store_artifacts {:path "/tmp/release"
:destination "release"}} :destination "release"}}
@ -190,8 +190,8 @@ java -jar \"$jar\" --config .build/bb.edn --deps-root . release-artifact \"$refl
(let [docker-executor-conf {:docker [{:image "circleci/clojure:openjdk-11-lein-2.9.8-bullseye"}]} (let [docker-executor-conf {:docker [{:image "circleci/clojure:openjdk-11-lein-2.9.8-bullseye"}]}
machine-executor-conf {:machine {:image "ubuntu-2004:202111-01"}} machine-executor-conf {:machine {:image "ubuntu-2004:202111-01"}}
mac-executor-conf {:macos {:xcode "14.0.0"}} mac-executor-conf {:macos {:xcode "14.0.0"}}
linux-graalvm-home "/home/circleci/graalvm-ce-java19-22.3.1" linux-graalvm-home "/home/circleci/graalvm"
mac-graalvm-home "/Users/distiller/graalvm-ce-java19-22.3.1/Contents/Home"] mac-graalvm-home "/Users/distiller/graalvm/Contents/Home"]
(ordered-map (ordered-map
:version 2.1 :version 2.1
:commands :commands

View file

@ -5,8 +5,8 @@ task:
skip: "changesIncludeOnly('logo/*', '**.md')" skip: "changesIncludeOnly('logo/*', '**.md')"
env: env:
LEIN_ROOT: "true" LEIN_ROOT: "true"
GRAALVM_VERSION: "22.3.1" GRAALVM_VERSION: "21"
GRAALVM_HOME: ${HOME}/graalvm-ce-java19-22.3.1/Contents/Home GRAALVM_HOME: ${HOME}/graalvm/Contents/Home
BABASHKA_PLATFORM: macos # used in release script BABASHKA_PLATFORM: macos # used in release script
BABASHKA_ARCH: aarch64 BABASHKA_ARCH: aarch64
BABASHKA_TEST_ENV: native BABASHKA_TEST_ENV: native

View file

@ -14,6 +14,7 @@ A preview of the next release can be installed from
- [#1619](https://github.com/babashka/babashka/issues/1619): Fix reflection issue with `Thread/sleep` in `core.async/timeout` - [#1619](https://github.com/babashka/babashka/issues/1619): Fix reflection issue with `Thread/sleep` in `core.async/timeout`
- Support interop on `java.util.stream.IntStream` - Support interop on `java.util.stream.IntStream`
- [#1513](https://github.com/babashka/babashka/issues/1513): Fix interop on `Thread/sleep` with numbers that aren't already longs - [#1513](https://github.com/babashka/babashka/issues/1513): Fix interop on `Thread/sleep` with numbers that aren't already longs
- [#1624](https://github.com/babashka/babashka/pull/1624): Use Oracle GraalVM 21 ([@lispyclouds](https://github.com/lispyclouds))
## 1.3.184 (2023-08-22) ## 1.3.184 (2023-08-22)

View file

@ -5,24 +5,25 @@ RUN apt update
RUN apt install --no-install-recommends -yy build-essential zlib1g-dev RUN apt install --no-install-recommends -yy build-essential zlib1g-dev
WORKDIR "/opt" WORKDIR "/opt"
ENV GRAALVM_VERSION="22.3.1" ENV GRAALVM_VERSION="21"
ARG TARGETARCH ARG TARGETARCH
# Do not set those directly, use TARGETARCH instead # Do not set those directly, use TARGETARCH instead
ENV BABASHKA_ARCH= ENV BABASHKA_ARCH=
ENV GRAALVM_ARCH= ENV GRAALVM_ARCH=
RUN if [ "${TARGETARCH}" = "" ] || [ "${TARGETARCH}" = "amd64" ]; then \ RUN if [ "${TARGETARCH}" = "" ] || [ "${TARGETARCH}" = "amd64" ]; then \
export GRAALVM_ARCH=amd64; export BABASHKA_ARCH=x86_64; \ export GRAALVM_ARCH=x64; export BABASHKA_ARCH=x86_64; \
elif [ "${TARGETARCH}" = "arm64" ]; then \ elif [ "${TARGETARCH}" = "arm64" ]; then \
export GRAALVM_ARCH=aarch64; \ export GRAALVM_ARCH=aarch64; \
fi && \ fi && \
echo "Installing GraalVM for ${GRAALVM_ARCH}" && \ echo "Installing GraalVM for ${GRAALVM_ARCH}" && \
curl -sLO https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-${GRAALVM_VERSION}/graalvm-ce-java19-linux-${GRAALVM_ARCH}-${GRAALVM_VERSION}.tar.gz && \ curl -sLO https://download.oracle.com/graalvm/${GRAALVM_VERSION}/archive/graalvm-jdk-${GRAALVM_VERSION}_linux-${GRAALVM_ARCH}_bin.tar.gz
tar -xzf graalvm-ce-java19-linux-${GRAALVM_ARCH}-${GRAALVM_VERSION}.tar.gz mkdir graalvm
tar -xzf graalvm-jdk-${GRAALVM_VERSION}_linux-${GRAALVM_ARCH}_bin.tar.gz -C graalvm --strip-components 1
ARG BABASHKA_XMX="-J-Xmx4500m" ARG BABASHKA_XMX="-J-Xmx4500m"
ENV GRAALVM_HOME="/opt/graalvm-ce-java19-${GRAALVM_VERSION}" ENV GRAALVM_HOME="/opt/graalvm"
ENV JAVA_HOME="/opt/graalvm-ce-java19-${GRAALVM_VERSION}/bin" ENV JAVA_HOME="$GRAALVM_HOME/bin"
ENV PATH="$JAVA_HOME:$PATH" ENV PATH="$JAVA_HOME:$PATH"
ENV BABASHKA_XMX=$BABASHKA_XMX ENV BABASHKA_XMX=$BABASHKA_XMX

View file

@ -2,13 +2,13 @@
version: "v-{build}" version: "v-{build}"
image: Visual Studio 2019 image: Visual Studio 2022
clone_folder: C:\projects\babashka clone_folder: C:\projects\babashka
environment: environment:
GRAALVM_HOME: C:\projects\babashka\graalvm\graalvm-ce-java19-22.3.1 GRAALVM_HOME: C:\projects\babashka\graalvm\graalvm-jdk-21+35.1
JAVA_HOME: C:\projects\babashka\graalvm\graalvm-ce-java19-22.3.1 JAVA_HOME: C:\projects\babashka\graalvm\graalvm-jdk-21+35.1
BABASHKA_XMX: "-J-Xmx5g" BABASHKA_XMX: "-J-Xmx5g"
skip_commits: skip_commits:
@ -37,8 +37,9 @@ clone_script:
- cmd: git submodule update --init --recursive - cmd: git submodule update --init --recursive
build_script: build_script:
# TODO: Extract the zip by removing the top level folder to remove the hardcoded path for GRAALVM_HOME
- cmd: >- - cmd: >-
powershell -Command "if (Test-Path('graalvm')) { return } else { (New-Object Net.WebClient).DownloadFile('https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-22.3.1/graalvm-ce-java19-windows-amd64-22.3.1.zip', 'graalvm.zip') }" powershell -Command "if (Test-Path('graalvm')) { return } else { (New-Object Net.WebClient).DownloadFile('https://download.oracle.com/graalvm/21/archive/graalvm-jdk-21_windows-x64_bin.zip', 'graalvm.zip') }"
powershell -Command "if (Test-Path('graalvm')) { return } else { Expand-Archive graalvm.zip graalvm }" powershell -Command "if (Test-Path('graalvm')) { return } else { Expand-Archive graalvm.zip graalvm }"
@ -55,8 +56,6 @@ build_script:
# see https://github.com/quarkusio/quarkus/pull/7663 # see https://github.com/quarkusio/quarkus/pull/7663
- cmd: >- - cmd: >-
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"
call script/uberjar.bat call script/uberjar.bat
call script/compile.bat call script/compile.bat
@ -68,13 +67,13 @@ build_script:
jar -cMf %zip% bb.exe jar -cMf %zip% bb.exe
bb --config .build/bb.edn --deps-root . release-artifact %zip% bb --config .build/bb.edn --deps-root . release-artifact %zip%
before_test: before_test:
- cmd: >- - cmd: >-
set BABASHKA_CLASSPATH= set BABASHKA_CLASSPATH=
set BABASHKA_TEST_ENV=native set BABASHKA_TEST_ENV=native
test_script: test_script:
- cmd: >- - cmd: >-
call script/test.bat :windows call script/test.bat :windows

View file

@ -3,24 +3,24 @@
## Prerequisites ## Prerequisites
- Install [lein](https://leiningen.org/) for producing uberjars - Install [lein](https://leiningen.org/) for producing uberjars
- Download [GraalVM](https://www.graalvm.org/downloads/). Currently we use *java19-22.3.1*. - Download [GraalVM](https://www.graalvm.org/downloads/). Currently we use *jdk-21*.
- For Windows, installing Visual Studio 2019 with the "Desktop development - For Windows, installing Visual Studio 2019 with the "Desktop development
with C++" workload is recommended. with C++" workload is recommended.
- Set `$GRAALVM_HOME` to the GraalVM distribution directory. On macOS this can look like: - Set `$GRAALVM_HOME` to the GraalVM distribution directory. On macOS this can look like:
``` shell ``` shell
export GRAALVM_HOME=~/Downloads/graalvm-ce-java19-22.3.1/Contents/Home export GRAALVM_HOME=~/Downloads/graalvm-jdk-21/Contents/Home
``` ```
On linux: On linux:
``` shell ``` shell
export GRAALVM_HOME=~/Downloads/graalvm-ce-java19-22.3.1 export GRAALVM_HOME=~/Downloads/graalvm-jdk-21
``` ```
On Windows, from the [Visual Studio 2019 x64 Native Tools Command Prompt](https://github.com/oracle/graal/issues/2116#issuecomment-590470806) or `cmd.exe` (not Powershell): On Windows, from the [Visual Studio 2019 x64 Native Tools Command Prompt](https://github.com/oracle/graal/issues/2116#issuecomment-590470806) or `cmd.exe` (not Powershell):
``` ```
set GRAALVM_HOME=%USERPROFILE%\Downloads\graalvm-ce-java19-22.3.1 set GRAALVM_HOME=%USERPROFILE%\Downloads\graalvm-ce-jdk-21
``` ```
If you are not running from the x64 Native Tools Command Prompt, you will need to set additional environment variables using: If you are not running from the x64 Native Tools Command Prompt, you will need to set additional environment variables using:
``` ```
@ -62,7 +62,7 @@ take long to complete.
### Alternative: Build inside Docker ### Alternative: Build inside Docker
To build a Linux version of babashka, you can use `docker build`, enabling the To build a Linux version of babashka, you can use `docker build`, enabling the
desired features via `--build-arg` like this: desired features via `--build-arg` like this:
```shell ```shell
@ -113,8 +113,8 @@ Babashka supports the following feature flags:
| `BABASHKA_FEATURE_ORACLEDB` | Includes the [Oracle](https://www.oracle.com/database/technologies/appdev/jdbc.html) JDBC driver | `false` | | `BABASHKA_FEATURE_ORACLEDB` | Includes the [Oracle](https://www.oracle.com/database/technologies/appdev/jdbc.html) JDBC driver | `false` |
| `BABASHKA_FEATURE_DATASCRIPT` | Includes [datascript](https://github.com/tonsky/datascript) | `false` | | `BABASHKA_FEATURE_DATASCRIPT` | Includes [datascript](https://github.com/tonsky/datascript) | `false` |
| `BABASHKA_FEATURE_LANTERNA` | Includes [clojure-lanterna](https://github.com/babashka/clojure-lanterna) | `false` | | `BABASHKA_FEATURE_LANTERNA` | Includes [clojure-lanterna](https://github.com/babashka/clojure-lanterna) | `false` |
| `BABASHKA_FEATURE_LOGGING` | Includes [clojure.tools.logging](https://github.com/clojure/tools.logging) with [taoensso.timbre](https://github.com/ptaoussanis/timbre) as the default implementation| `true` | | `BABASHKA_FEATURE_LOGGING` | Includes [clojure.tools.logging](https://github.com/clojure/tools.logging) with [taoensso.timbre](https://github.com/ptaoussanis/timbre) as the default implementation| `true` |
| `BABASHKA_FEATURE_PRIORITY_MAP` | Includes [clojure.data.priority-map](https://github.com/clojure/data.priority-map) | `true` | | `BABASHKA_FEATURE_PRIORITY_MAP` | Includes [clojure.data.priority-map](https://github.com/clojure/data.priority-map) | `true` |
Note that httpkit server is currently experimental, the feature flag could be toggled to `false` in a future release. Note that httpkit server is currently experimental, the feature flag could be toggled to `false` in a future release.

View file

@ -37,7 +37,7 @@ reasons:
## Requirements ## Requirements
You need [lein](https://leiningen.org/) for running JVM tests and/or producing uberjars. For building binaries you need GraalVM. Currently we use java19-22.3.1. You need [lein](https://leiningen.org/) for running JVM tests and/or producing uberjars. For building binaries you need GraalVM. Currently we use jdk-21
## Clone repository ## Clone repository

View file

@ -46,7 +46,8 @@ args=("-jar" "$BABASHKA_JAR"
"--install-exit-handlers" "--install-exit-handlers"
# --trace-class-initialization=jdk.internal.net.http.common.DebugLogger,jdk.internal.net.http.websocket.WebSocketImpl,jdk.internal.net.http.common.Utils # --trace-class-initialization=jdk.internal.net.http.common.DebugLogger,jdk.internal.net.http.websocket.WebSocketImpl,jdk.internal.net.http.common.Utils
"$BABASHKA_XMX" "$BABASHKA_XMX"
"--enable-preview") "--enable-preview"
"-O1")
BABASHKA_STATIC=${BABASHKA_STATIC:-} BABASHKA_STATIC=${BABASHKA_STATIC:-}
BABASHKA_MUSL=${BABASHKA_MUSL:-} BABASHKA_MUSL=${BABASHKA_MUSL:-}

View file

@ -31,6 +31,7 @@ call %GRAALVM_HOME%\bin\native-image.cmd ^
"--no-fallback" ^ "--no-fallback" ^
"--enable-preview" ^ "--enable-preview" ^
"--install-exit-handlers" ^ "--install-exit-handlers" ^
"-O1" ^
"%BABASHKA_XMX%" "%BABASHKA_XMX%"
if %errorlevel% neq 0 exit /b %errorlevel% if %errorlevel% neq 0 exit /b %errorlevel%

View file

@ -4,37 +4,33 @@ set -euo pipefail
INSTALL_DIR="${1:-$HOME}" INSTALL_DIR="${1:-$HOME}"
GRAALVM_VERSION="${GRAALVM_VERSION:-21.2.0}" GRAALVM_VERSION="${GRAALVM_VERSION:-21}"
case "$BABASHKA_PLATFORM" in GRAALVM_PLATFORM=$BABASHKA_PLATFORM
macos)
GRAALVM_PLATFORM="darwin"
;;
linux)
GRAALVM_PLATFORM="linux"
;;
esac
case "${BABASHKA_ARCH:-}" in case "${BABASHKA_ARCH:-}" in
aarch64) aarch64)
GRAALVM_ARCH="aarch64" GRAALVM_ARCH="aarch64"
;; ;;
*) *)
GRAALVM_ARCH="amd64" GRAALVM_ARCH="x64"
;; ;;
esac esac
GRAALVM_FILENAME="graalvm-ce-java19-$GRAALVM_PLATFORM-$GRAALVM_ARCH-$GRAALVM_VERSION.tar.gz" GRAALVM_DIR_NAME="graalvm"
GRAALVM_FILENAME="graalvm-jdk-${GRAALVM_VERSION}_${GRAALVM_PLATFORM}-${GRAALVM_ARCH}_bin.tar.gz"
DOWNLOAD_URL="https://download.oracle.com/graalvm/${GRAALVM_VERSION}/archive/${GRAALVM_FILENAME}"
pushd "$INSTALL_DIR" >/dev/null pushd "$INSTALL_DIR" >/dev/null
if ! [ -d "graalvm-ce-java19-$GRAALVM_VERSION" ]; then if ! [ -d "$GRAALVM_DIR_NAME" ]; then
echo "Downloading GraalVM $GRAALVM_PLATFORM-$GRAALVM_ARCH-$GRAALVM_VERSION on '$PWD'..." echo "Downloading GraalVM $GRAALVM_PLATFORM-$GRAALVM_ARCH-$GRAALVM_VERSION on '$PWD'..."
echo "https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-$GRAALVM_VERSION/$GRAALVM_FILENAME" echo "$DOWNLOAD_URL"
curl -LO "https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-$GRAALVM_VERSION/$GRAALVM_FILENAME" curl -LO "$DOWNLOAD_URL"
ls -la ls -la
tar xzvf "$GRAALVM_FILENAME" mkdir "$GRAALVM_DIR_NAME"
ls -la "graalvm-ce-java19-$GRAALVM_VERSION" tar xzvf "$GRAALVM_FILENAME" -C "$GRAALVM_DIR_NAME" --strip-components 1
ls -la "$GRAALVM_DIR_NAME"
fi fi
popd >/dev/null popd >/dev/null