Skip to content
Commits on Source (4)
# [1.0.0-alpha.8](https://git.gitlab.arm.com/bazel/rules_toolchain/compare/v1.0.0-alpha.7...v1.0.0-alpha.8) (2023-12-11)
### Bug Fixes
- make sure symlinks have `.exe` extension on Windows ([85f15d1](https://git.gitlab.arm.com/bazel/rules_toolchain/commit/85f15d1b590237374c59c8037eca3ea56777c8ee))
# [1.0.0-alpha.7](https://git.gitlab.arm.com/bazel/rules_toolchain/compare/v1.0.0-alpha.6...v1.0.0-alpha.7) (2023-12-08)
### Bug Fixes
......
module(
name = "rules_toolchain",
version = "1.0.0-alpha.7",
version = "1.0.0-alpha.8",
bazel_compatibility = [
">=6.4.0",
],
......
......@@ -87,4 +87,33 @@ toolchain(
)
```
## Usage
### Toolchain
Declare the usage of the toolchain in a rule definition:
```py
def implementation(ctx):
toolchain = ctx.toolchains["//toolchain/echo:type"]
print(toolchain.executable)
print(toolchain.default.files)
print(toolchain.default.runfiles)
example = rule(
implementation = implementation,
toolchains = ["//toolchain/echo:type"],
)
```
### Variable
Pass the resolved toolchain to a rule that supports variables:
```py
genrule(
toolchains = ["//toolchain/echo:resolved"]
)
```
[resolved]: https://github.com/bazelbuild/bazel/issues/14009
......@@ -848,7 +848,7 @@
"moduleExtensions": {
"//:MODULE.bazel%_repo_rules": {
"general": {
"bzlTransitiveDigest": "H6a/EFhNB57YKE/R9dWOnzyt7/yZUN4dwbh4eVfSEko=",
"bzlTransitiveDigest": "gyM/unRUgkxmFCQHcLcZtVkdb+4qFdRusznNLzQ7Ukc=",
"accumulatedFileDigests": {},
"envVariables": {},
"generatedRepoSpecs": {
......
......@@ -21,16 +21,23 @@ ATTRS = {
doc = "The toolchain type to resolve and forward on providers.",
mandatory = True,
),
"_windows": attr.label(
providers = [platform_common.ConstraintValueInfo],
default = "//toolchain/constraint/os:windows",
),
}
def implementation(ctx):
basename = ctx.attr.basename or ctx.label.name
toolchain = ctx.toolchains[ctx.attr.toolchain_type.label]
windows = ctx.attr._windows[platform_common.ConstraintValueInfo]
target = toolchain.executable
extension = target.extension
if extension in ("bat", "cmd"):
basename = "{}.{}".format(basename, extension)
elif not extension and "." not in basename and ctx.target_platform_has_constraint(windows):
basename = "{}.exe".format(basename)
executable = ctx.actions.declare_file(basename)
ctx.actions.symlink(
......
......@@ -15,11 +15,26 @@ ATTRS = {
doc = "Extra files that are needed at runtime.",
allow_files = True,
),
"_windows": attr.label(
providers = [platform_common.ConstraintValueInfo],
default = "//toolchain/constraint/os:windows",
),
}
def implementation(ctx):
basename = ctx.attr.basename or ctx.label.name
variable = ctx.attr.variable or basename.upper()
windows = ctx.attr._windows[platform_common.ConstraintValueInfo]
if "." not in ctx.attr.path:
extension = None
else:
_, extension = ctx.attr.path.rsplit(".", 1)
if extension in ("bat", "cmd"):
basename = "{}.{}".format(basename, extension)
elif not extension and "." not in basename and ctx.target_platform_has_constraint(windows):
basename = "{}.exe".format(basename)
executable = ctx.actions.declare_symlink(basename)
ctx.actions.symlink(
......
......@@ -54,16 +54,23 @@ ATTRS = {
doc = "Extra files that are needed at runtime.",
allow_files = True,
),
"_windows": attr.label(
providers = [platform_common.ConstraintValueInfo],
default = "//toolchain/constraint/os:windows",
),
}
def implementation(ctx):
basename = ctx.attr.basename or ctx.label.name
variable = ctx.attr.variable or basename.upper()
windows = ctx.attr._windows[platform_common.ConstraintValueInfo]
target = ctx.executable.target
extension = target.extension
if extension in ("bat", "cmd"):
basename = "{}.{}".format(basename, extension)
elif not extension and "." not in basename and ctx.target_platform_has_constraint(windows):
basename = "{}.exe".format(basename)
executable = ctx.actions.declare_file(basename)
ctx.actions.symlink(
......