Commit c2cf4c2
authored
[ABLD-395] Framework to create toolchains for OS provided tools (#54177)
### What does this PR do?
- Creates a tiny framework for finding an OS provided tool and telling Bazel it is a toolchain.
- Use it for macos pkgbuild and codesign.
The important feature of the way this is implemented is that the toolchain always safely resolves on all platforms, so you can `bazel cquery` across platforms, even though you will fail if you try to `build`. Combined with `exec_compatible_with` you can make targets that only build if the required tools are available. This is important when there are different tools available as OSes evolve (or are simply different by vendor, like debian and redhat) and we need to create paths that can gracefully use different tools depending on what is available.
There is also a capability to use a bazel target as the tool implementation instead of looking it up in $PATH. That is useful for building alternate implementations (let's say a windows tool on linux). That will come into use in full remote execution mode, when the target and exec hosts can be different architectures.
**Examples:**
- I'm building a tarball, see if I have the xz toolchain and use that if available, otherwise fall back to a slower compresser
- The OS is evolving a tool, if we have version 1, it might have one name. In version 2, there might be a better tool. We want to make rules that can do the right thing regardless of what OS we have. This is a huge win for external users who may be using a different base linux to build.
### Motivation
This is an important part of our supply chain security posture. We want to account for every binary we use to build the product. Ideally that would include even basic low level things, like bash and cat. In practice we can make the tradeoff to stop at declaring the things that might vary across OSes or from OS release to release.
Eventually, we will expand this the framework to include package metadata (https://github.com/bazel-contrib/supply-chain/tree/main/metadata) that can be easily gathered into a workspace BOM.
The more immediate need is to create toolchains for pkgbuild and codesign to create rules to make macos packages. #54115
### Describe how you validated your changes
With the BUILD file
```
genrule(
name = "test",
cmd = select({
"@macos_codesign//:have_codesign": "echo GOT IT",
"//conditions:default": "echo wump, wump, wump",
}),
outs = ["test.out"],
)
```
macos:
```
$ bazel cquery --output=build //ztony:test
genrule(
name = "test",
outs = ["//ztony:test.out"],
cmd = "echo GOT IT",
)
$ bazel cquery @macos_codesign//:all
INFO: Analyzed 7 targets (0 packages loaded, 6 targets configured).
INFO: Found 7 targets...
@macos_codesign//:codesign_auto (eab6d8f)
@macos_codesign//:codesign_toolchain (eab6d8f)
@macos_codesign//:codesign_toolchain_type (eab6d8f)
@macos_codesign//:have_codesign (eab6d8f)
@macos_codesign//:is_codesign_available (eab6d8f)
@macos_codesign//:no_codesign (eab6d8f)
@macos_codesign//:zzz_codesign_missing_toolchain (eab6d8f)
```
linux:
```
$ bazel cquery --output=build //ztony:test
genrule(
name = "test",
outs = ["//ztony:test.out"],
cmd = "echo wump, wump, wump",
)
$ bazel cquery @macos_codesign//:all
@macos_codesign//:codesign_auto (a938602)
@macos_codesign//:codesign_toolchain (a938602)
@macos_codesign//:codesign_toolchain_type (a938602)
@macos_codesign//:have_codesign (a938602)
@macos_codesign//:is_codesign_available (a938602)
@macos_codesign//:no_codesign (a938602)
@macos_codesign//:zzz_codesign_missing_toolchain (a938602)
```
### Additional
This is an alternate version of #54154. I think I like it better.
[ABLD-386]: https://datadoghq.atlassian.net/browse/ABLD-386
Co-authored-by: tony.aiuto <tony.aiuto@datadoghq.com>1 parent 29a80d4 commit c2cf4c2
9 files changed
Lines changed: 220 additions & 0 deletions
File tree
- bazel/toolchains
- codesign
- common
- pkgbuild
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
126 | 126 | | |
127 | 127 | | |
128 | 128 | | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
129 | 153 | | |
130 | 154 | | |
131 | 155 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
0 commit comments