Skip to content

Commit

Permalink
fix!: toolchain registration logic
Browse files Browse the repository at this point in the history
- fix!: toolchain repo format -> `<name>_toolchains` (previously
  was `<name>_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 <[email protected]>
  • Loading branch information
sgammon committed Sep 8, 2023
1 parent 77c9c05 commit b2c9aa0
Show file tree
Hide file tree
Showing 4 changed files with 86 additions and 23 deletions.
32 changes: 16 additions & 16 deletions MODULE.bazel.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

49 changes: 49 additions & 0 deletions docs/api/artifacts.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,55 @@

Defines Maven helpers and coordinates for GraalVM artifacts.

<a id="alias.artifact"></a>

## alias.artifact

<pre>
alias.artifact(<a href="#alias.artifact-artifact">artifact</a>, <a href="#alias.artifact-repo">repo</a>, <a href="#alias.artifact-version">version</a>)
</pre>

Helper which rewrites a target to be compatible with `rules_jvm_external`.

**PARAMETERS**


| Name | Description | Default Value |
| :------------- | :------------- | :------------- |
| <a id="alias.artifact-artifact"></a>artifact | Enumerated artifact entry. | none |
| <a id="alias.artifact-repo"></a>repo | Repository name; defaults to `@maven`. | `"@maven"` |
| <a id="alias.artifact-version"></a>version | Defaults to `None`; optional. | `None` |

**RETURNS**

Artifact target.


<a id="alias.coordinate"></a>

## alias.coordinate

<pre>
alias.coordinate(<a href="#alias.coordinate-group">group</a>, <a href="#alias.coordinate-artifact">artifact</a>, <a href="#alias.coordinate-repo">repo</a>, <a href="#alias.coordinate-version">version</a>)
</pre>

Helper which rewrites a target to be compatible with `rules_jvm_external`.

**PARAMETERS**


| Name | Description | Default Value |
| :------------- | :------------- | :------------- |
| <a id="alias.coordinate-group"></a>group | Group for the artifact. | none |
| <a id="alias.coordinate-artifact"></a>artifact | ID for the artifact. | none |
| <a id="alias.coordinate-repo"></a>repo | Repository name; defaults to `@maven`. | `"@maven"` |
| <a id="alias.coordinate-version"></a>version | Defaults to `None`; optional. | `None` |

**RETURNS**

Artifact target.


<a id="graalvm.artifact"></a>

## graalvm.artifact
Expand Down
9 changes: 7 additions & 2 deletions internal/graalvm_bindist.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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 `<name>_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 = ""
Expand All @@ -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",
Expand Down Expand Up @@ -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:
Expand Down
19 changes: 14 additions & 5 deletions internal/toolchain.bzl
Original file line number Diff line number Diff line change
@@ -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.",
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -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,
))

0 comments on commit b2c9aa0

Please sign in to comment.