Skip to content

Release v0.10.3

Compare
Choose a tag to compare
@sgammon sgammon released this 13 Sep 22:26
· 160 commits to main since this release
v0.10.3
f83e23d

Summary

This release adds a few features and fixes. See below for details. Please see the release notes from 0.10.1 for an exhaustive list of changes and features.

This release includes @ruwi-next's first contribution. Thank you! 🥳

Installation

Via WORKSPACE.bazel:

http_archive(
    name = "rules_graalvm",
    sha256 = "1f4b9979e75033042df4e9405a0a949aa5dd9427e72c8aafd8891d8f674e75e4",
    strip_prefix = "rules_graalvm-0.10.3",
    urls = [
        "https://github.com/sgammon/rules_graalvm/releases/download/v0.10.3/rules_graalvm-0.10.3.zip",
    ],
)
load("@rules_graalvm//graalvm:repositories.bzl", "graalvm_repository")
graalvm_repository(
    name = "graalvm",
    components = [
       # if you need components like `js` or `wasm`, add them here
    ],
    distribution = "ce",  # `oracle`, `ce`, or `community`
    java_version = "20",  # `17`, `20`, or `21`, as supported by the version provided
    version = "20.0.2",  # earlier version format like `22.x` also supported
)
Artifact SHA256
rules_graalvm-0.10.3.zip 1f4b9979e75033042df4e9405a0a949aa5dd9427e72c8aafd8891d8f674e75e4
rules_graalvm-0.10.3.tgz b846e46415d7b97881725a1d67c825120568ecfdf5f83cec4df0f7df5eae59ac

Or, via MODULE.bazel:

bazel_dep(name = "rules_graalvm", version = "0.10.3")
gvm = use_extension("@rules_graalvm//:extensions.bzl", "graalvm")

gvm.graalvm(
    name = "graalvm",
    version = "20.0.2",  # earlier version format like `22.x` also supported
    distribution = "ce",  # `oracle`, `ce`, or `community`
    java_version = "20",  # `17`, `20`, or `21`, as supported by the version provided
    components = [
       # if you need components like `js` or `wasm`, add them here
    ],
)
use_repo(gvm, "graalvm")
use_repo(gvm, "graalvm_toolchains")
register_toolchains("@graalvm_toolchains//:all")
Artifact Integrity value
rules_graalvm-0.10.3.zip sha256-H0uZeedQMwQt9OlAWgqUmqXdlCfnLIqv2Ikdj2dOdeQ=
rules_graalvm-0.10.3.tgz sha256-uEbkZBXXuXiBclodZ8glEgVo7P31+DzsTfD3316uWaw=

Using GraalVM as your Java toolchain

Via WORKSPACE.bazel:

# graalvm_repository(...)
load("@rules_graalvm//graalvm:workspace.bzl", "register_graalvm_toolchains")

register_graalvm_toolchains()

Via Bzlmod:

register_toolchains("@graalvm_toolchains//:all")

To use the toolchain, add this to your .bazelrc:

build --extra_toolchains=@graalvm_toolchains//:toolchain
build --java_runtime_version=graalvm_20

Note

If you name your repository example and set the Java version to 21, your java_runtime_version would be example_21, and your toolchain repo would be @example_toolchains.


Release Notes

See below for breaking changes in this release, and then everything else that changed.

Breaking changes: 0.10.x series

  • The default_executable_name attribute and parameter has been renamed to executable_name.
    This is because there is no other executable name parameter; setting this attribute will unconditionally change the output binary name.

  • Legacy GVM is only usable with the legacy rules.
    Previously, it was possible to use a rather old version of GraalVM (Java 11-era) with the new-style rules. This use is no longer supported because older versions of native-image show incompatibilities with Bazel's process wrapper.

  • Native image builds will now respect Bazel flags like --compilation_mode=opt.
    Defaults have been left to GraalVM to maintain backward compatibility with the default case, which builds binaries with -O2 (optimizations on). However, this is still a breaking change because the behavior will be different if --compilation_mode was being explicitly set to any value other than opt. Note that Bazel's default value of fastbuild also applies here, so passing no value at all will result in a behavior change (optfastbuild).

  • The order of options passed to native-image has changed.
    Attributes like extra_args now pass later on the command line (last, actually, for extra_args); because native-image options are last-wins, this should allow overriding any of the flags injected by the rules. This should offer users a path forward even if the flags passed by the rules are incompatible in some way. This change in the order of action arguments may result in cache misses. Otherwise, this change should be transparent to rule users.

  • Hermetic build environment improvements.
    The parameter use_default_shell_env is no longer passed to the underlying native-image compile action; instead, the toolchain environment is assembled for strict use. Native compiler environment variables like INCLUDE, LIB, DEVELOPER_DIR, and SDKROOT no longer need to be passed via --action_env.

  • Toolchain targets and registration.
    See below for an exhaustive description, but basically, the registration calls for toolchains need to change, but only for users who are consuming via Bzlmod.

Breaking changes: Toolchain registration

When registering toolchains in a Bzlmod installation of these rules, the target @graalvm//:all must be changed to two toolchain registrations, based on the desired functionality:

Register the Java toolchain:

register_toolchains("@graalvm_toolchains//:toolchain")

Register the GVM toolchain:

register_toolchains("@graalvm_toolchains//:toolchain_gvm")

To keep the :all target:

register_toolchains("@graalvm_toolchains//:all")

What's Changed

  • fix: Bazel version checks for dev versions by @fmeum in #128
  • fix(windows): added use_param_file for args by @sgammon in #132

Full Changelog: v0.10.2...v0.10.3