diff --git a/.circleci/script/gen_ci.clj b/.circleci/script/gen_ci.clj index a58ba7e0..dee3fe60 100644 --- a/.circleci/script/gen_ci.clj +++ b/.circleci/script/gen_ci.clj @@ -80,7 +80,7 @@ :working_directory "~/repo" :environment {:LEIN_ROOT "true" :BABASHKA_PLATFORM "linux" - :GRAALVM_VERSION "22.3.1" + :GRAALVM_VERSION "21" :GRAALVM_HOME graalvm-home :BABASHKA_TEST_ENV "jvm"} :resource_class "large" @@ -120,7 +120,7 @@ java -jar \"$jar\" --config .build/bb.edn --deps-root . release-artifact \"$refl (defn unix [shorted? static? musl? arch executor-conf resource-class graalvm-home platform] (let [env {:LEIN_ROOT "true" - :GRAALVM_VERSION "22.3.1" + :GRAALVM_VERSION "21" :GRAALVM_HOME graalvm-home :BABASHKA_PLATFORM (if (= "mac" platform) "macos" @@ -178,7 +178,7 @@ java -jar \"$jar\" --config .build/bb.edn --deps-root . release-artifact \"$refl {:persist_to_workspace {:root "/tmp" :paths ["release"]}} {:save_cache - {:paths ["~/.m2" "~/graalvm-ce-java19-22.3.1"] + {:paths ["~/.m2" "~/graalvm"] :key cache-key}} {:store_artifacts {:path "/tmp/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"}]} machine-executor-conf {:machine {:image "ubuntu-2004:202111-01"}} mac-executor-conf {:macos {:xcode "14.0.0"}} - linux-graalvm-home "/home/circleci/graalvm-ce-java19-22.3.1" - mac-graalvm-home "/Users/distiller/graalvm-ce-java19-22.3.1/Contents/Home"] + linux-graalvm-home "/home/circleci/graalvm" + mac-graalvm-home "/Users/distiller/graalvm/Contents/Home"] (ordered-map :version 2.1 :commands diff --git a/.cirrus.yml b/.cirrus.yml index d0e0445b..2c9f9700 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -5,8 +5,8 @@ task: skip: "changesIncludeOnly('logo/*', '**.md')" env: LEIN_ROOT: "true" - GRAALVM_VERSION: "22.3.1" - GRAALVM_HOME: ${HOME}/graalvm-ce-java19-22.3.1/Contents/Home + GRAALVM_VERSION: "21" + GRAALVM_HOME: ${HOME}/graalvm/Contents/Home BABASHKA_PLATFORM: macos # used in release script BABASHKA_ARCH: aarch64 BABASHKA_TEST_ENV: native diff --git a/CHANGELOG.md b/CHANGELOG.md index 0f0ac3d3..b757de18 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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` - 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 +- [#1624](https://github.com/babashka/babashka/pull/1624): Use Oracle GraalVM 21 ([@lispyclouds](https://github.com/lispyclouds)) ## 1.3.184 (2023-08-22) diff --git a/Dockerfile b/Dockerfile index ad2d2e9f..38a5b8d3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,24 +5,25 @@ RUN apt update RUN apt install --no-install-recommends -yy build-essential zlib1g-dev WORKDIR "/opt" -ENV GRAALVM_VERSION="22.3.1" +ENV GRAALVM_VERSION="21" ARG TARGETARCH # Do not set those directly, use TARGETARCH instead ENV BABASHKA_ARCH= ENV GRAALVM_ARCH= 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 \ export GRAALVM_ARCH=aarch64; \ fi && \ 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 && \ - tar -xzf 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 + mkdir graalvm + tar -xzf graalvm-jdk-${GRAALVM_VERSION}_linux-${GRAALVM_ARCH}_bin.tar.gz -C graalvm --strip-components 1 ARG BABASHKA_XMX="-J-Xmx4500m" -ENV GRAALVM_HOME="/opt/graalvm-ce-java19-${GRAALVM_VERSION}" -ENV JAVA_HOME="/opt/graalvm-ce-java19-${GRAALVM_VERSION}/bin" +ENV GRAALVM_HOME="/opt/graalvm" +ENV JAVA_HOME="$GRAALVM_HOME/bin" ENV PATH="$JAVA_HOME:$PATH" ENV BABASHKA_XMX=$BABASHKA_XMX diff --git a/appveyor.yml b/appveyor.yml index fe3ec5a9..49a27c2f 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -2,13 +2,13 @@ version: "v-{build}" -image: Visual Studio 2019 +image: Visual Studio 2022 clone_folder: C:\projects\babashka environment: - GRAALVM_HOME: C:\projects\babashka\graalvm\graalvm-ce-java19-22.3.1 - JAVA_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-jdk-21+35.1 BABASHKA_XMX: "-J-Xmx5g" skip_commits: @@ -37,8 +37,9 @@ clone_script: - cmd: git submodule update --init --recursive build_script: +# TODO: Extract the zip by removing the top level folder to remove the hardcoded path for GRAALVM_HOME - 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 }" @@ -55,8 +56,6 @@ build_script: # see https://github.com/quarkusio/quarkus/pull/7663 - cmd: >- - call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat" - call script/uberjar.bat call script/compile.bat @@ -68,13 +67,13 @@ build_script: jar -cMf %zip% bb.exe bb --config .build/bb.edn --deps-root . release-artifact %zip% - + before_test: - cmd: >- set BABASHKA_CLASSPATH= set BABASHKA_TEST_ENV=native - + test_script: - cmd: >- call script/test.bat :windows diff --git a/doc/build.md b/doc/build.md index 00857f8a..e9d80976 100644 --- a/doc/build.md +++ b/doc/build.md @@ -3,24 +3,24 @@ ## Prerequisites - 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 with C++" workload is recommended. - Set `$GRAALVM_HOME` to the GraalVM distribution directory. On macOS this can look like: ``` shell - export GRAALVM_HOME=~/Downloads/graalvm-ce-java19-22.3.1/Contents/Home + export GRAALVM_HOME=~/Downloads/graalvm-jdk-21/Contents/Home ``` On linux: ``` 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): ``` - 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: ``` @@ -62,7 +62,7 @@ take long to complete. ### 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: ```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_DATASCRIPT` | Includes [datascript](https://github.com/tonsky/datascript) | `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_PRIORITY_MAP` | Includes [clojure.data.priority-map](https://github.com/clojure/data.priority-map) | `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` | Note that httpkit server is currently experimental, the feature flag could be toggled to `false` in a future release. diff --git a/doc/dev.md b/doc/dev.md index 6415f933..d00505c8 100644 --- a/doc/dev.md +++ b/doc/dev.md @@ -37,7 +37,7 @@ reasons: ## 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 diff --git a/script/compile b/script/compile index 964a2b06..7406d585 100755 --- a/script/compile +++ b/script/compile @@ -46,7 +46,8 @@ args=("-jar" "$BABASHKA_JAR" "--install-exit-handlers" # --trace-class-initialization=jdk.internal.net.http.common.DebugLogger,jdk.internal.net.http.websocket.WebSocketImpl,jdk.internal.net.http.common.Utils "$BABASHKA_XMX" - "--enable-preview") + "--enable-preview" + "-O1") BABASHKA_STATIC=${BABASHKA_STATIC:-} BABASHKA_MUSL=${BABASHKA_MUSL:-} diff --git a/script/compile.bat b/script/compile.bat index c813f5f1..5a257676 100644 --- a/script/compile.bat +++ b/script/compile.bat @@ -31,6 +31,7 @@ call %GRAALVM_HOME%\bin\native-image.cmd ^ "--no-fallback" ^ "--enable-preview" ^ "--install-exit-handlers" ^ + "-O1" ^ "%BABASHKA_XMX%" if %errorlevel% neq 0 exit /b %errorlevel% diff --git a/script/install-graalvm b/script/install-graalvm index 4e564e6f..6e64b41d 100755 --- a/script/install-graalvm +++ b/script/install-graalvm @@ -4,37 +4,33 @@ set -euo pipefail INSTALL_DIR="${1:-$HOME}" -GRAALVM_VERSION="${GRAALVM_VERSION:-21.2.0}" +GRAALVM_VERSION="${GRAALVM_VERSION:-21}" -case "$BABASHKA_PLATFORM" in - macos) - GRAALVM_PLATFORM="darwin" - ;; - linux) - GRAALVM_PLATFORM="linux" - ;; -esac +GRAALVM_PLATFORM=$BABASHKA_PLATFORM case "${BABASHKA_ARCH:-}" in aarch64) GRAALVM_ARCH="aarch64" ;; *) - GRAALVM_ARCH="amd64" + GRAALVM_ARCH="x64" ;; 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 -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 "https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-$GRAALVM_VERSION/$GRAALVM_FILENAME" - curl -LO "https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-$GRAALVM_VERSION/$GRAALVM_FILENAME" + echo "$DOWNLOAD_URL" + curl -LO "$DOWNLOAD_URL" ls -la - tar xzvf "$GRAALVM_FILENAME" - ls -la "graalvm-ce-java19-$GRAALVM_VERSION" + mkdir "$GRAALVM_DIR_NAME" + tar xzvf "$GRAALVM_FILENAME" -C "$GRAALVM_DIR_NAME" --strip-components 1 + ls -la "$GRAALVM_DIR_NAME" fi popd >/dev/null