From b2c9aa036c343421fc7facc6326fad1d3cbfad59 Mon Sep 17 00:00:00 2001 From: Sam Gammon Date: Thu, 7 Sep 2023 21:01:49 -0700 Subject: [PATCH] fix!: toolchain registration logic - fix!: toolchain repo format -> `_toolchains` (previously was `_toolchain_config_repo`) - fix: registration of toolchain targets from workspace hook - use toolchain targets directly instead of `@graalvm//:*` aliases - docs: rebuild apidoc - chore: update bzlmod lock Signed-off-by: Sam Gammon --- MODULE.bazel.lock | 32 +++++++++++------------ docs/api/artifacts.md | 49 ++++++++++++++++++++++++++++++++++++ internal/graalvm_bindist.bzl | 9 +++++-- internal/toolchain.bzl | 19 ++++++++++---- 4 files changed, 86 insertions(+), 23 deletions(-) diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index d7952cf7..f02f143a 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -1,6 +1,6 @@ { "lockFileVersion": 1, - "moduleFileHash": "52c1294a2e8cdc9af230e8eafa594cddbd4f018b7883ae952309842fecb4f7c0", + "moduleFileHash": "7cff39c6f83ae0e3749c480c8ff5a49502c8530de78fd818bae563b2b9667068", "flags": { "cmdRegistries": [ "https://bcr.bazel.build/" @@ -95,7 +95,7 @@ "usingModule": "", "location": { "file": "@@//:MODULE.bazel", - "line": 206, + "line": 207, "column": 23 }, "imports": { @@ -113,7 +113,7 @@ "devDependency": true, "location": { "file": "@@//:MODULE.bazel", - "line": 211, + "line": 212, "column": 17 } } @@ -127,7 +127,7 @@ "usingModule": "", "location": { "file": "@@//:MODULE.bazel", - "line": 218, + "line": 219, "column": 20 }, "imports": { @@ -145,7 +145,7 @@ "devDependency": true, "location": { "file": "@@//:MODULE.bazel", - "line": 223, + "line": 224, "column": 10 } } @@ -159,7 +159,7 @@ "usingModule": "", "location": { "file": "@@//:MODULE.bazel", - "line": 238, + "line": 239, "column": 21 }, "imports": {}, @@ -171,7 +171,7 @@ "devDependency": true, "location": { "file": "@@//:MODULE.bazel", - "line": 243, + "line": 244, "column": 15 } } @@ -185,7 +185,7 @@ "usingModule": "", "location": { "file": "@@//:MODULE.bazel", - "line": 245, + "line": 246, "column": 20 }, "imports": { @@ -201,7 +201,7 @@ "devDependency": true, "location": { "file": "@@//:MODULE.bazel", - "line": 250, + "line": 251, "column": 23 } } @@ -2989,19 +2989,19 @@ } }, "//:extensions.bzl%graalvm": { - "bzlTransitiveDigest": "qZN6woJ7KzJyFqM6aFbedUsBEN3WR4SctkhSvFbHfTo=", + "bzlTransitiveDigest": "HB8LFS2lXMh6hanImKRfxGmo3gfmdRgMveI2sNB3vrQ=", "accumulatedFileDigests": {}, "envVariables": {}, "generatedRepoSpecs": { - "graalvm": { + "graalvm_toolchains": { "bzlFile": "@@//internal:graalvm_bindist.bzl", - "ruleClassName": "_graalvm_bindist_repository", - "attributes": {"name":"--_main~graalvm~graalvm","version":"--20.0.2","java_version":"--20","distribution":"--ce","components":["--wasm","--js"],"setup_actions":[],"enable_toolchain":true,"toolchain_config":"--graalvm_toolchain_config_repo"} + "ruleClassName": "_toolchain_config", + "attributes": {"name":"--_main~graalvm~graalvm_toolchains","build_file":"--\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"graalvm_20\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"20\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"toolchain_gvm\",\n actual = \"gvm\",\n visibility = [\"//visibility:public\"],\n)\ntoolchain(\n name = \"gvm\",\n exec_compatible_with = [\n \n ],\n target_compatible_with = [\n \n ],\n toolchain = \"@graalvm//:gvm\",\n toolchain_type = \"@rules_graalvm//graalvm/toolchain\",\n visibility = [\"//visibility:public\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@graalvm//:jdk\",\n visibility = [\"//visibility:public\"],\n)\n\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@graalvm//:jdk\",\n visibility = [\"//visibility:public\"],\n)\n\n"} }, - "graalvm_toolchain_config_repo": { + "graalvm": { "bzlFile": "@@//internal:graalvm_bindist.bzl", - "ruleClassName": "_toolchain_config", - "attributes": {"name":"--_main~graalvm~graalvm_toolchain_config_repo","build_file":"--\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"graalvm_20\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"20\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"toolchain_gvm\",\n actual = \"gvm\",\n visibility = [\"//visibility:public\"],\n)\ntoolchain(\n name = \"gvm\",\n exec_compatible_with = [\n \n ],\n target_compatible_with = [\n \n ],\n toolchain = \"@graalvm//:gvm\",\n toolchain_type = \"@rules_graalvm//graalvm/toolchain\",\n visibility = [\"//visibility:public\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@graalvm//:jdk\",\n visibility = [\"//visibility:public\"],\n)\n\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@graalvm//:jdk\",\n visibility = [\"//visibility:public\"],\n)\n\n"} + "ruleClassName": "_graalvm_bindist_repository", + "attributes": {"name":"--_main~graalvm~graalvm","version":"--20.0.2","java_version":"--20","distribution":"--ce","components":["--wasm","--js"],"setup_actions":[],"enable_toolchain":true,"toolchain_config":"--graalvm_toolchains"} } } }, diff --git a/docs/api/artifacts.md b/docs/api/artifacts.md index 233f6a60..2a8d87c8 100755 --- a/docs/api/artifacts.md +++ b/docs/api/artifacts.md @@ -2,6 +2,55 @@ Defines Maven helpers and coordinates for GraalVM artifacts. + + +## alias.artifact + +
+alias.artifact(artifact, repo, version)
+
+ +Helper which rewrites a target to be compatible with `rules_jvm_external`. + +**PARAMETERS** + + +| Name | Description | Default Value | +| :------------- | :------------- | :------------- | +| artifact | Enumerated artifact entry. | none | +| repo | Repository name; defaults to `@maven`. | `"@maven"` | +| version | Defaults to `None`; optional. | `None` | + +**RETURNS** + +Artifact target. + + + + +## alias.coordinate + +
+alias.coordinate(group, artifact, repo, version)
+
+ +Helper which rewrites a target to be compatible with `rules_jvm_external`. + +**PARAMETERS** + + +| Name | Description | Default Value | +| :------------- | :------------- | :------------- | +| group | Group for the artifact. | none | +| artifact | ID for the artifact. | none | +| repo | Repository name; defaults to `@maven`. | `"@maven"` | +| version | Defaults to `None`; optional. | `None` | + +**RETURNS** + +Artifact target. + + ## graalvm.artifact diff --git a/internal/graalvm_bindist.bzl b/internal/graalvm_bindist.bzl index 116250b6..4665c439 100644 --- a/internal/graalvm_bindist.bzl +++ b/internal/graalvm_bindist.bzl @@ -692,6 +692,7 @@ def graalvm_repository( components = [], setup_actions = [], register_all = False, + toolchain_repo_name = None, **kwargs): """Declare a GraalVM distribution repository, and optionally a Java toolchain to match. @@ -719,9 +720,13 @@ def graalvm_repository( components: Components to install in the target GVM installation. setup_actions: GraalVM Updater commands that should be run; pass complete command strings that start with "gu". register_all: Register all GraalVM repositories and use `target_compatible_with` (experimental). + toolchain_repo_name: Explicit name to give to the toolchain config repo; if `None` (default), a sensible + name is used in the format `_toolchains`. **kwargs: Passed to the underlying bindist repository rule. """ + toolchain_repo_name = toolchain_repo_name or (name + "_toolchains") + # if we're running on Bazel before 7, we need to omit the bootstrap toolchain, because # it doesn't yet exist in Bazel's internals. bootstrap_runtime_toolchain = "" @@ -747,7 +752,7 @@ toolchain( if toolchain: _toolchain_config( - name = name + "_toolchain_config_repo", + name = toolchain_repo_name, build_file = """ config_setting( name = "prefix_version_setting", @@ -815,7 +820,7 @@ toolchain( components = components, setup_actions = setup_actions, enable_toolchain = toolchain, - toolchain_config = "%s_toolchain_config_repo" % name, + toolchain_config = toolchain_repo_name, **kwargs ) else: diff --git a/internal/toolchain.bzl b/internal/toolchain.bzl index 64d8cb70..338709c1 100644 --- a/internal/toolchain.bzl +++ b/internal/toolchain.bzl @@ -1,7 +1,7 @@ "Defines toolchain registration functions for use in downstream Bazel projects." -_TARGET_JAVA_TOOLCHAIN = ":jvm" -_TARGET_GVM_TOOLCHAIN = ":sdk" +_TARGET_JAVA_TOOLCHAIN = ":toolchain" +_TARGET_GVM_TOOLCHAIN = ":toolchain_gvm" GraalVMToolchainInfo = provider( doc = "Information about the GraalVM runtime and compiler.", @@ -132,11 +132,12 @@ able to run it from the command line. }, ) -def repo_target(repo, target): +def _repo_target(repo, target): return "{}//{}".format(repo, target) def register_graalvm_toolchains( name = "@graalvm", + toolchain_repo_name_format = "%s_toolchains", register_java_toolchain = True, register_gvm_toolchain = True): """Register GraalVM toolchains for Native Image and installed language components. @@ -167,9 +168,17 @@ def register_graalvm_toolchains( name: Name of the main `graalvm` repository (the `graalvm_repository`). register_java_toolchain: Whether to register a Java toolchain; defaults to `True`. register_gvm_toolchain: Whether to register a GraalVM toolchain; defaults to `True`. + toolchain_repo_name_format: Format expected for the toolchain config repo name; '%s' is + replaced with `name`. """ if register_java_toolchain: - native.register_toolchains(repo_target(name, _TARGET_JAVA_TOOLCHAIN)) + native.register_toolchains(_repo_target( + toolchain_repo_name_format % name, + _TARGET_JAVA_TOOLCHAIN, + )) if register_gvm_toolchain: - native.register_toolchains(repo_target(name, _TARGET_GVM_TOOLCHAIN)) + native.register_toolchains(_repo_target( + toolchain_repo_name_format % name, + _TARGET_GVM_TOOLCHAIN, + ))