Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(mode): add purego tag when pure #3901

Merged
merged 1 commit into from
May 8, 2024
Merged

Conversation

mattyclarkson
Copy link
Contributor

The community has agreed1 that "pure" builds of Go code should use the purego build tag.

This change adds that de-facto tag.

Spun out from bazelbuild/bazel-central-registry#1629 to solve building of circl.

@mattyclarkson
Copy link
Contributor Author

For what it's worth: this works with cloudflare/circl#492

@mattyclarkson
Copy link
Contributor Author

mattyclarkson commented Apr 6, 2024

This branch updates Gazelle to 0.36.0 to get the purego patch.

The Bazel 6.0.0 CI states:

Error computing the main repository mapping: The MODULE.bazel file of gazelle@0.36.0 declares overrides

That would come from the single_version_override that is in the Gazelle release.

I can reproduce that locally:

$ USE_BAZEL_VERSION=6.0.0 bazelisk build --announce_rc -- //...
Starting local Bazel server and connecting to it...
INFO: Options provided by the client:
  Inherited 'common' options: --isatty=1 --terminal_columns=190
INFO: Reading rc options for 'build' from /home/matt-clarkson/git/github/bazelbuild/rules_go/tests/bcr/.bazelrc:
  Inherited 'common' options: --enable_bzlmod
ERROR: Error computing the main repository mapping: The MODULE.bazel file of gazelle@0.36.0 declares overrides

That is a a bug with Bazel 6.0.0, 6.1.0, 6.2.0. Fixed in 6.3.0. We may have to update to 6.3.0 in the CI.

FYI: @tyler-french, @fmeum

@fmeum
Copy link
Collaborator

fmeum commented Apr 6, 2024

I think it's fine to require 6.3.0+ and make the according change to CI. Minor updates are assumed to be backwards compatible anyway.

@mattyclarkson
Copy link
Contributor Author

OK. Updated to 6.3.0. All green on CI 🎉

@fmeum
Copy link
Collaborator

fmeum commented Apr 6, 2024

@mattyclarkson Thanks!

@tyler-french Could you test this on the Über codebase?

@mattyclarkson
Copy link
Contributor Author

@tyler-french / @fmeum if you have time in the next release cycle: it'd be great to get this in. It would allow cloudflare/circl#492 to build without modification to the generated Gazelle build files (and possibly other modules). Thanks.

The community has agreed[1] that "pure" builds of Go code should
use the `purego` build tag.

This change adds that de-facto tag.

The minimum version of Gazelle is bumped to `0.36.0` which includes a patch[2]
for ignoring the `purego` tag so that the source flies are passed to the
compiler for conditional compilation decisions.

[1]: golang/go#23172
[2]: bazelbuild/bazel-gazelle#1767
@tyler-french
Copy link
Contributor

@tyler-french / @fmeum if you have time in the next release cycle: it'd be great to get this in. It would allow cloudflare/circl#492 to build without modification to the generated Gazelle build files (and possibly other modules). Thanks.

Yes. I was blocked on something else but I will get this tested this week.

@tyler-french
Copy link
Contributor

I tested this and its compatible with all existing rules, but I'm trying to remove patches from github.com/cloudflare/circl that add the cgo tags and export the .h files and it's failing.

Are there other changes needed to fix this build?

Copy link
Contributor

@tyler-french tyler-french left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tested at Uber

@mattyclarkson
Copy link
Contributor Author

mattyclarkson commented May 8, 2024

I tested this and its compatible with all existing rules, but I'm trying to remove patches from github.com/cloudflare/circl that add the cgo tags and export the .h files and it's failing.

Are there other changes needed to fix this build?

You need cloudflare/circl#492 which switches all their build tags to purego. That is in circl@1.3.8.

Gazelle learnt to understand purego tags in bazelbuild/bazel-gazelle#1767 which is in gazelle@0.36.0.

With those two things and this patch, you should be able to generate working build files direcly with Gazelle.

If you have a Go module that depends on cloudflare/circl in go.mod and are using the Gazelle extension, upgrading to 1.3.8 should make everything work.

@fmeum fmeum merged commit fcd6390 into bazelbuild:master May 8, 2024
2 checks passed
@mattyclarkson mattyclarkson deleted the purego branch May 8, 2024 19:42
cgrindel-self-hosted-renovate bot added a commit to cgrindel/bazel-starlib that referenced this pull request May 22, 2024
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [io_bazel_rules_go](https://togithub.com/bazelbuild/rules_go) |
http_archive | minor | `v0.47.1` -> `v0.48.0` |

---

### Release Notes

<details>
<summary>bazelbuild/rules_go (io_bazel_rules_go)</summary>

###
[`v0.48.0`](https://togithub.com/bazelbuild/rules_go/releases/tag/v0.48.0)

[Compare
Source](https://togithub.com/bazelbuild/rules_go/compare/v0.47.1...v0.48.0)

#### Important Changes!

`--incompatible_enable_proto_toolchain_resolution` is now supported in
`rules_go`. This means that protoc should now be supplied as a
toolchain. `protoc` can be registered using
https://github.com/aspect-build/toolchains_protoc, or a local proto
toolchain can be added.

#### `WORKSPACE` code

load("@&#8203;bazel_tools//tools/build_defs/repo:http.bzl",
"http_archive")

    http_archive(
        name = "io_bazel_rules_go",
sha256 =
"33acc4ae0f70502db4b893c9fc1dd7a9bf998c23e7ff2c4517741d4049a976f8",
        urls = [

"https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.48.0/rules_go-v0.48.0.zip",

"https://github.com/bazelbuild/rules_go/releases/download/v0.48.0/rules_go-v0.48.0.zip",
        ],
    )

load("@&#8203;io_bazel_rules_go//go:deps.bzl", "go_register_toolchains",
"go_rules_dependencies")

    go_rules_dependencies()

    go_register_toolchains(version = "1.22.3")

#### What's Changed

- Update docs to cover new FilePath ReplaceDirective Support by
[@&#8203;stefanpenner](https://togithub.com/stefanpenner) in
[bazelbuild/rules_go#3931
- go_test: use different mnemonic for compilation by
[@&#8203;sluongng](https://togithub.com/sluongng) in
[bazelbuild/rules_go#3936
- Add go.work support to the documentation by
[@&#8203;stefanpenner](https://togithub.com/stefanpenner) in
[bazelbuild/rules_go#3932
- feat(mode): add `purego` tag when `pure` by
[@&#8203;mattyclarkson](https://togithub.com/mattyclarkson) in
[bazelbuild/rules_go#3901
- generate_test_main: Move timeout handling back to bzltestutil by
[@&#8203;DolceTriade](https://togithub.com/DolceTriade) in
[bazelbuild/rules_go#3939
- Add support for `--incompatible_enable_proto_toolchain_resolution` by
[@&#8203;fmeum](https://togithub.com/fmeum) in
[bazelbuild/rules_go#3919
- Add exec_compatible_with to @&#8203;go_sdk//:builder by
[@&#8203;EdSchouten](https://togithub.com/EdSchouten) in
[bazelbuild/rules_go#3943
- prepare v0.48.0 release by
[@&#8203;tyler-french](https://togithub.com/tyler-french) in
[bazelbuild/rules_go#3946

#### New Contributors

- [@&#8203;stefanpenner](https://togithub.com/stefanpenner) made their
first contribution in
[bazelbuild/rules_go#3931

**Full Changelog**:
bazelbuild/rules_go@v0.47.1...v0.48.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config help](https://togithub.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Renovate
Bot](https://togithub.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNi4xMDkuNCIsInVwZGF0ZWRJblZlciI6IjM2LjEwOS40IiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: Self-hosted Renovate Bot <361546+cgrindel-self-hosted-renovate[bot]@users.noreply.github.enterprise.com>
renovate bot added a commit to kreempuff/rules_unreal_engine that referenced this pull request May 22, 2024
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [io_bazel_rules_go](https://togithub.com/bazelbuild/rules_go) |
http_archive | minor | `v0.47.1` -> `v0.48.0` |

---

> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.

---

### Release Notes

<details>
<summary>bazelbuild/rules_go (io_bazel_rules_go)</summary>

###
[`v0.48.0`](https://togithub.com/bazelbuild/rules_go/releases/tag/v0.48.0)

[Compare
Source](https://togithub.com/bazelbuild/rules_go/compare/v0.47.1...v0.48.0)

#### Important Changes!

`--incompatible_enable_proto_toolchain_resolution` is now supported in
`rules_go`. This means that protoc should now be supplied as a
toolchain. `protoc` can be registered using
https://github.com/aspect-build/toolchains_protoc, or a local proto
toolchain can be added.

#### `WORKSPACE` code

load("@&#8203;bazel_tools//tools/build_defs/repo:http.bzl",
"http_archive")

    http_archive(
        name = "io_bazel_rules_go",
sha256 =
"33acc4ae0f70502db4b893c9fc1dd7a9bf998c23e7ff2c4517741d4049a976f8",
        urls = [

"https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.48.0/rules_go-v0.48.0.zip",

"https://github.com/bazelbuild/rules_go/releases/download/v0.48.0/rules_go-v0.48.0.zip",
        ],
    )

load("@&#8203;io_bazel_rules_go//go:deps.bzl", "go_register_toolchains",
"go_rules_dependencies")

    go_rules_dependencies()

    go_register_toolchains(version = "1.22.3")

#### What's Changed

- Update docs to cover new FilePath ReplaceDirective Support by
[@&#8203;stefanpenner](https://togithub.com/stefanpenner) in
[bazelbuild/rules_go#3931
- go_test: use different mnemonic for compilation by
[@&#8203;sluongng](https://togithub.com/sluongng) in
[bazelbuild/rules_go#3936
- Add go.work support to the documentation by
[@&#8203;stefanpenner](https://togithub.com/stefanpenner) in
[bazelbuild/rules_go#3932
- feat(mode): add `purego` tag when `pure` by
[@&#8203;mattyclarkson](https://togithub.com/mattyclarkson) in
[bazelbuild/rules_go#3901
- generate_test_main: Move timeout handling back to bzltestutil by
[@&#8203;DolceTriade](https://togithub.com/DolceTriade) in
[bazelbuild/rules_go#3939
- Add support for `--incompatible_enable_proto_toolchain_resolution` by
[@&#8203;fmeum](https://togithub.com/fmeum) in
[bazelbuild/rules_go#3919
- Add exec_compatible_with to @&#8203;go_sdk//:builder by
[@&#8203;EdSchouten](https://togithub.com/EdSchouten) in
[bazelbuild/rules_go#3943
- prepare v0.48.0 release by
[@&#8203;tyler-french](https://togithub.com/tyler-french) in
[bazelbuild/rules_go#3946

#### New Contributors

- [@&#8203;stefanpenner](https://togithub.com/stefanpenner) made their
first contribution in
[bazelbuild/rules_go#3931

**Full Changelog**:
bazelbuild/rules_go@v0.47.1...v0.48.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/kreempuff/rules_unreal_engine).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zNjguMTAiLCJ1cGRhdGVkSW5WZXIiOiIzNy4zNjguMTAiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbXX0=-->
fmeum pushed a commit to bazel-contrib/toolchains_llvm that referenced this pull request May 22, 2024
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [io_bazel_rules_go](https://togithub.com/bazelbuild/rules_go) |
http_archive | minor | `v0.47.1` -> `v0.48.0` |

---

### Release Notes

<details>
<summary>bazelbuild/rules_go (io_bazel_rules_go)</summary>

###
[`v0.48.0`](https://togithub.com/bazelbuild/rules_go/releases/tag/v0.48.0)

[Compare
Source](https://togithub.com/bazelbuild/rules_go/compare/v0.47.1...v0.48.0)

#### Important Changes!

`--incompatible_enable_proto_toolchain_resolution` is now supported in
`rules_go`. This means that protoc should now be supplied as a
toolchain. `protoc` can be registered using
https://github.com/aspect-build/toolchains_protoc, or a local proto
toolchain can be added.

#### `WORKSPACE` code

load("@&#8203;bazel_tools//tools/build_defs/repo:http.bzl",
"http_archive")

    http_archive(
        name = "io_bazel_rules_go",
sha256 =
"33acc4ae0f70502db4b893c9fc1dd7a9bf998c23e7ff2c4517741d4049a976f8",
        urls = [

"https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.48.0/rules_go-v0.48.0.zip",

"https://github.com/bazelbuild/rules_go/releases/download/v0.48.0/rules_go-v0.48.0.zip",
        ],
    )

load("@&#8203;io_bazel_rules_go//go:deps.bzl", "go_register_toolchains",
"go_rules_dependencies")

    go_rules_dependencies()

    go_register_toolchains(version = "1.22.3")

#### What's Changed

- Update docs to cover new FilePath ReplaceDirective Support by
[@&#8203;stefanpenner](https://togithub.com/stefanpenner) in
[bazelbuild/rules_go#3931
- go_test: use different mnemonic for compilation by
[@&#8203;sluongng](https://togithub.com/sluongng) in
[bazelbuild/rules_go#3936
- Add go.work support to the documentation by
[@&#8203;stefanpenner](https://togithub.com/stefanpenner) in
[bazelbuild/rules_go#3932
- feat(mode): add `purego` tag when `pure` by
[@&#8203;mattyclarkson](https://togithub.com/mattyclarkson) in
[bazelbuild/rules_go#3901
- generate_test_main: Move timeout handling back to bzltestutil by
[@&#8203;DolceTriade](https://togithub.com/DolceTriade) in
[bazelbuild/rules_go#3939
- Add support for `--incompatible_enable_proto_toolchain_resolution` by
[@&#8203;fmeum](https://togithub.com/fmeum) in
[bazelbuild/rules_go#3919
- Add exec_compatible_with to @&#8203;go_sdk//:builder by
[@&#8203;EdSchouten](https://togithub.com/EdSchouten) in
[bazelbuild/rules_go#3943
- prepare v0.48.0 release by
[@&#8203;tyler-french](https://togithub.com/tyler-french) in
[bazelbuild/rules_go#3946

#### New Contributors

- [@&#8203;stefanpenner](https://togithub.com/stefanpenner) made their
first contribution in
[bazelbuild/rules_go#3931

**Full Changelog**:
bazelbuild/rules_go@v0.47.1...v0.48.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/bazel-contrib/toolchains_llvm).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zNjguMTAiLCJ1cGRhdGVkSW5WZXIiOiIzNy4zNjguMTAiLCJ0YXJnZXRCcmFuY2giOiJtYXN0ZXIiLCJsYWJlbHMiOltdfQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants