From 56f4a8bfa1b17bea6c794c5c82cc226f4728510d Mon Sep 17 00:00:00 2001 From: Googler Date: Wed, 9 Oct 2024 08:25:32 -0700 Subject: [PATCH] Add testing for Bazel@HEAD and Bazel 6 PiperOrigin-RevId: 684046113 Change-Id: I98875f8c67b491759f121c21e33ed04ec1d590e0 --- .bazelci/presubmit.yml | 131 ++++++++++++++++------ WORKSPACE | 13 ++- cc/BUILD | 5 +- cc/common/cc_shared_library_hint_info.bzl | 5 +- cc/private/bazel7/BUILD | 24 ++++ cc/private/rules_impl/native.bzl | 3 - cc/toolchains/actions.bzl | 2 +- cc/toolchains/impl/variables.bzl | 4 +- cc/toolchains/tool.bzl | 2 +- cc/toolchains/tool_map.bzl | 2 +- examples/custom_toolchain/BUILD | 2 +- 11 files changed, 139 insertions(+), 54 deletions(-) create mode 100644 cc/private/bazel7/BUILD diff --git a/.bazelci/presubmit.yml b/.bazelci/presubmit.yml index 2b2dd22..7406069 100644 --- a/.bazelci/presubmit.yml +++ b/.bazelci/presubmit.yml @@ -1,54 +1,111 @@ --- -x_defaults: - # YAML has a feature for "repeated nodes", BazelCI is fine with extra nodes - # it doesn't know about; so that is used to avoid repeating common subparts. - common: &common - # We have to list every package because even with exclusion notation -//foo - # Bazel will load the excluded package and it will be an error because at - # release Bazel the cc_libraries do not have all the attributes. - build_targets: - - "//:all" - - "//cc:all" - - "//cc/private/rules_impl:all" - - "//cc/private/toolchain:all" - - "//cc/runfiles:all" - - "//examples:all" - - "//examples/my_c_archive:all" - - "//examples/my_c_compile:all" - - "//examples/write_cc_toolchain_cpu:all" - - "//tests/..." - test_flags: - - "--test_timeout=120" - test_targets: - - "//:all" - - "//cc:all" - - "//cc/private/rules_impl:all" - - "//cc/private/toolchain:all" - - "//examples:all" - - "//examples/my_c_archive:all" - - "//examples/my_c_compile:all" - - "//examples/write_cc_toolchain_cpu:all" - - "//tests/..." +build_targets: &build_targets + - "//:all" + - "//cc/..." + - "//examples/..." + - "//tests/..." + - "-//examples/custom_toolchain:legacy_selector" # Example only works on Linux +test_targets: &test_targets + - "//:all" + - "//cc/..." + - "//examples/..." + - "//tests/..." + - "-//examples/custom_toolchain:legacy_selector" # Example only works on Linux + +build_targets_bazel_6: &build_targets_bazel_6 + - "//:all" + - "//cc:all" + - "//examples/..." + - "//tests/..." + - "-//examples/custom_toolchain:legacy_selector" # Example only works on Linux + - "-//tests/rule_based_toolchain/..." # proto.encode_text doesn't support None + - "-//cc:optional_current_cc_toolchain" # Not supported in Bazel 6 +test_targets_bazel_6: &test_targets_bazel_6 + - "//:all" + - "//cc:all" + - "//examples/..." + - "//tests/..." + - "-//examples/custom_toolchain:legacy_selector" # Example only works on Linux + - "-//tests/rule_based_toolchain/..." # proto.encode_text doesn't support None + - "-//cc:optional_current_cc_toolchain" # Not supported in Bazel 6 buildifier: version: latest warnings: "all" tasks: - ubuntu1804: - <<: *common + ubuntu2004: + name: Docs + test_targets: + - "//docs/..." + - "-//docs:toolchain_api_diff_test" # Bazel adds loads statements in examples + +# Bazel LTS + ubuntu2004: + name: Ubuntu 20.04 (Bazel LTS) + build_targets: *build_targets + test_targets: *test_targets macos: - <<: *common + name: MacOS (Bazel LTS) + build_targets: *build_targets + test_targets: *test_targets windows: - <<: *common + name: Windows (Bazel LTS) + build_targets: *build_targets + test_targets: *test_targets ubuntu_bzlmod: - name: Bzlmod - platform: ubuntu1804 + name: Ubuntu 20.04 (Bazel LTS, bzlmod) + platform: ubuntu2004 build_flags: - "--enable_bzlmod" - "--ignore_dev_dependency" - build_targets: + +# Bazel@HEAD + ubuntu2004_head: + name: Ubuntu 20.04 (Bazel HEAD) + bazel: last_green + platform: ubuntu2004 + build_targets: *build_targets + test_targets: + - "//:all" - "//cc/..." + - "//examples/..." + - "//tests/..." + - "-//examples/custom_toolchain:legacy_selector" # Example only works on Linux + - "-//tests/system_library:system_library_test" # Fails because of repo setup + macos_head: + name: MacOS (Bazel HEAD) + bazel: last_green + platform: macos + build_targets: *build_targets + test_targets: *test_targets + windows_head: + name: Windows (Bazel HEAD) + bazel: last_green + platform: macos + build_targets: *build_targets + test_targets: *test_targets + +# Bazel 6 + ubuntu2004_bazel_6: + name: Ubuntu 20.04 (Bazel 6) + bazel: 6.3.0 + platform: ubuntu2004 + build_targets: *build_targets_bazel_6 + test_targets: *test_targets_bazel_6 + macos_bazel_6: + name: MacOS (Bazel 6) + bazel: 6.3.0 + platform: macos + build_targets: *build_targets_bazel_6 + test_targets: *test_targets_bazel_6 + windows_bazel_6: + name: Windows (Bazel 6) + bazel: 6.3.0 + platform: macos + build_targets: *build_targets_bazel_6 + test_targets: *test_targets_bazel_6 + ubuntu_rule_based_toolchains: name: Ubuntu rule-based toolchains platform: ubuntu1804 diff --git a/WORKSPACE b/WORKSPACE index 9501829..237189c 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -4,10 +4,10 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( name = "bazel_skylib", - sha256 = "b8a1527901774180afc798aeb28c4634bdccf19c4d98e7bdd1ce79d1fe9aaad7", + sha256 = "bc283cdfcd526a52c3201279cda4bc298652efa898b10b4db0837dc51652756f", urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.4.1/bazel-skylib-1.4.1.tar.gz", - "https://github.com/bazelbuild/bazel-skylib/releases/download/1.4.1/bazel-skylib-1.4.1.tar.gz", + "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.7.1/bazel-skylib-1.7.1.tar.gz", + "https://github.com/bazelbuild/bazel-skylib/releases/download/1.7.1/bazel-skylib-1.7.1.tar.gz", ], ) @@ -30,3 +30,10 @@ http_archive( strip_prefix = "rules_testing-0.6.0", url = "https://github.com/bazelbuild/rules_testing/releases/download/v0.6.0/rules_testing-v0.6.0.tar.gz", ) + +http_archive( + name = "protobuf", + sha256 = "da288bf1daa6c04d03a9051781caa52aceb9163586bff9aa6cfb12f69b9395aa", + strip_prefix = "protobuf-27.0", + url = "https://github.com/protocolbuffers/protobuf/releases/download/v27.0/protobuf-27.0.tar.gz", +) diff --git a/cc/BUILD b/cc/BUILD index 0fb5da3..020abb8 100644 --- a/cc/BUILD +++ b/cc/BUILD @@ -102,9 +102,10 @@ bzl_library( cc_toolchain_alias(name = "current_cc_toolchain") -cc_toolchain_alias( +# Use alias, because it doesn't build on Bazel 6. +alias( name = "optional_current_cc_toolchain", - mandatory = False, + actual = "//cc/private/bazel7:optional_current_cc_toolchain", ) cc_libc_top_alias(name = "current_libc_top") diff --git a/cc/common/cc_shared_library_hint_info.bzl b/cc/common/cc_shared_library_hint_info.bzl index 3a29868..133990b 100644 --- a/cc/common/cc_shared_library_hint_info.bzl +++ b/cc/common/cc_shared_library_hint_info.bzl @@ -13,6 +13,5 @@ # limitations under the License. """CcSharedLibraryInfo""" -load("//cc/private/rules_impl:native.bzl", "NativeCcSharedLibraryHintInfo") - -CcSharedLibraryHintInfo = NativeCcSharedLibraryHintInfo +# Backward compatibility with Bazel 6 +CcSharedLibraryHintInfo = getattr(cc_common, "CcSharedLibraryHintInfo", provider("CcSharedLibraryHintInfo", fields = ["attributes", "owners"])) diff --git a/cc/private/bazel7/BUILD b/cc/private/bazel7/BUILD new file mode 100644 index 0000000..ebf88d4 --- /dev/null +++ b/cc/private/bazel7/BUILD @@ -0,0 +1,24 @@ +# Copyright 2024 The Bazel Authors. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +package(default_visibility = ["//visibility:public"]) + +licenses(["notice"]) # Apache 2.0 + +# The target is here, because it's doesn't build on Bazel 6. +# Unfortunately, rules_cc doesn't have a WORKSPACE setup and thus can't use bazel_features check. +cc_toolchain_alias( + name = "optional_current_cc_toolchain", + mandatory = False, +) diff --git a/cc/private/rules_impl/native.bzl b/cc/private/rules_impl/native.bzl index b4c7b9c..e5fabd3 100644 --- a/cc/private/rules_impl/native.bzl +++ b/cc/private/rules_impl/native.bzl @@ -35,6 +35,3 @@ native_cc_common = cc_common # buildifier: disable=native-cc NativeCcSharedLibraryInfo = CcSharedLibraryInfo - -# buildifier: disable=native-cc -NativeCcSharedLibraryHintInfo = CcSharedLibraryHintInfo diff --git a/cc/toolchains/actions.bzl b/cc/toolchains/actions.bzl index 3193b7d..84dc837 100644 --- a/cc/toolchains/actions.bzl +++ b/cc/toolchains/actions.bzl @@ -40,7 +40,7 @@ cc_action_type = rule( `cc_action_type` rules are used to associate arguments and tools together to perform a specific action. Bazel prescribes a set of known action types that are used to drive typical C/C++/ObjC actions like compiling, linking, and archiving. The set of well-known action -types can be found in [//third_party/bazel_rules/rules_cc/cc/toolchains/actions:BUILD](https://github.com/bazelbuild/rules_cc/tree/main/cc/toolchains/actions/BUILD). +types can be found in [@rules_cc//cc/toolchains/actions:BUILD](https://github.com/bazelbuild/rules_cc/tree/main/cc/toolchains/actions/BUILD). It's possible to create project-specific action types for use in toolchains. Be careful when doing this, because every toolchain that encounters the action will need to be configured to diff --git a/cc/toolchains/impl/variables.bzl b/cc/toolchains/impl/variables.bzl index 35cc84a..aab365d 100644 --- a/cc/toolchains/impl/variables.bzl +++ b/cc/toolchains/impl/variables.bzl @@ -75,7 +75,7 @@ def cc_variable(name, type, **kwargs): it's not possible to declare custom variables. For a full list of available variables, see - [//third_party/bazel_rules/rules_cc/cc/toolchains/varaibles:BUILD](https://github.com/bazelbuild/rules_cc/tree/main/cc/toolchains/variables/BUILD). + [@rules_cc//cc/toolchains/varaibles:BUILD](https://github.com/bazelbuild/rules_cc/tree/main/cc/toolchains/variables/BUILD). Example: ``` @@ -91,7 +91,7 @@ def cc_variable(name, type, **kwargs): Args: name: (str) The name of the outer variable, and the rule. type: The type of the variable, constructed using `types` factory in - [//third_party/bazel_rules/rules_cc/cc/toolchains/impl:variables.bzl](https://github.com/bazelbuild/rules_cc/tree/main/cc/toolchains/impl/variables.bzl). + [@rules_cc//cc/toolchains/impl:variables.bzl](https://github.com/bazelbuild/rules_cc/tree/main/cc/toolchains/impl/variables.bzl). **kwargs: [common attributes](https://bazel.build/reference/be/common-definitions#common-attributes) that should be applied to this rule. """ _cc_variable(name = name, type = json.encode(type), **kwargs) diff --git a/cc/toolchains/tool.bzl b/cc/toolchains/tool.bzl index 9bef3b1..a60d458 100644 --- a/cc/toolchains/tool.bzl +++ b/cc/toolchains/tool.bzl @@ -102,7 +102,7 @@ This can help work around errors like: providers = [ToolCapabilityInfo], doc = """Declares that a tool is capable of doing something. -For example, `//third_party/bazel_rules/rules_cc/cc/toolchains/capabilities:supports_pic`. +For example, `@rules_cc//cc/toolchains/capabilities:supports_pic`. """, ), }, diff --git a/cc/toolchains/tool_map.bzl b/cc/toolchains/tool_map.bzl index 53866a8..64d8a37 100644 --- a/cc/toolchains/tool_map.bzl +++ b/cc/toolchains/tool_map.bzl @@ -75,7 +75,7 @@ def cc_tool_map(name, tools, **kwargs): `CXX=/path/to/clang++` environment variables that most build systems use to determine which tools to use for a given action. To simplify usage, some actions have been grouped together (for example, - [//third_party/bazel_rules/rules_cc/cc/toolchains/actions:cpp_compile_actions](https://github.com/bazelbuild/rules_cc/tree/main/cc/toolchains/actions/BUILD)) to + [@rules_cc//cc/toolchains/actions:cpp_compile_actions](https://github.com/bazelbuild/rules_cc/tree/main/cc/toolchains/actions/BUILD)) to logically express "all the C++ compile actions". In Bazel, there is a little more granularity to the mapping, so the mapping doesn't follow the diff --git a/examples/custom_toolchain/BUILD b/examples/custom_toolchain/BUILD index 371fdfd..de188b4 100644 --- a/examples/custom_toolchain/BUILD +++ b/examples/custom_toolchain/BUILD @@ -81,7 +81,7 @@ filegroup( cc_toolchain_suite( name = "legacy_selector", toolchains = { - "x86": ":my_custom_toolchain", + "k8": ":my_custom_toolchain", }, )