Updated flex/bison toolchain for bazel 8+ compat
diff --git a/.bazelrc b/.bazelrc index d82019b..7ededf0 100644 --- a/.bazelrc +++ b/.bazelrc
@@ -22,6 +22,9 @@ # clang-cl before fixing the issues unique to MSVC. common:windows --extra_toolchains=@local_config_cc//:cc-toolchain-x64_windows-clang-cl --extra_execution_platforms=//:x64_windows-clang-cl common:windows --compiler=clang-cl --cxxopt=/std:c++20 --host_cxxopt=/std:c++20 --client_env=BAZEL_CXXOPTS=/std:c++20 +# Actions (e.g. the genrules invoking win_flex.exe/win_bison.exe) need the +# invoking shell's PATH to find tools installed. +common:windows --action_env=PATH --host_action_env=PATH build --cxxopt="-Wno-unknown-warning-option" --host_cxxopt="-Wno-unknown-warning-option" # TODO: this looks like benign where it happens but to be explored further.
diff --git a/bazel/BUILD b/bazel/BUILD index 6dab72b..ebe6d5b 100644 --- a/bazel/BUILD +++ b/bazel/BUILD
@@ -4,6 +4,7 @@ load("@bazel_skylib//rules:common_settings.bzl", "bool_flag") load("@rules_cc//cc:defs.bzl", "cc_library") +load(":no_toolchain.bzl", "no_toolchain") package( default_applicable_licenses = ["//:license"], @@ -23,6 +24,7 @@ exports_files([ "bison.bzl", "flex.bzl", + "no_toolchain.bzl", "sh_test_with_runfiles_lib.bzl", "sh_test_with_runfiles_lib.sh", ]) @@ -37,6 +39,12 @@ flag_values = {":use_local_flex_bison": "true"}, ) +# Placeholder used where a select() would otherwise need to switch a +# genrule's non-configurable `toolchains` attribute (see flex.bzl/bison.bzl): +no_toolchain( + name = "no_toolchain", +) + bool_flag( name = "create_static_linked_executables", build_setting_default = False,
diff --git a/bazel/bison.bzl b/bazel/bison.bzl index f191209..9053b03 100644 --- a/bazel/bison.bzl +++ b/bazel/bison.bzl
@@ -26,6 +26,23 @@ extra_outs = []): """Build rule for generating C or C++ sources with Bison. """ + + native.alias( + name = name + "_bison_toolchain", + actual = select({ + "//bazel:use_local_flex_bison_enabled": "//bazel:no_toolchain", + "@platforms//os:windows": "//bazel:no_toolchain", + "//conditions:default": "@rules_bison//bison:current_bison_toolchain", + }), + ) + native.alias( + name = name + "_m4_toolchain", + actual = select({ + "//bazel:use_local_flex_bison_enabled": "//bazel:no_toolchain", + "@platforms//os:windows": "//bazel:no_toolchain", + "//conditions:default": "@rules_m4//m4:current_m4_toolchain", + }), + ) native.genrule( name = name, srcs = [src], @@ -35,12 +52,8 @@ "@platforms//os:windows": "win_bison.exe --defines=$(location " + header_out + ") --output-file=$(location " + source_out + ") " + " ".join(extra_options) + " $<", "//conditions:default": "M4=$(M4) $(BISON) --defines=$(location " + header_out + ") --output-file=$(location " + source_out + ") " + " ".join(extra_options) + " $<", }), - toolchains = select({ - "//bazel:use_local_flex_bison_enabled": [], - "@platforms//os:windows": [], - "//conditions:default": [ - "@rules_bison//bison:current_bison_toolchain", - "@rules_m4//m4:current_m4_toolchain", - ], - }), + toolchains = [ + ":" + name + "_bison_toolchain", + ":" + name + "_m4_toolchain", + ], )
diff --git a/bazel/flex.bzl b/bazel/flex.bzl index a398c6f..98f6c8c 100644 --- a/bazel/flex.bzl +++ b/bazel/flex.bzl
@@ -20,6 +20,23 @@ def genlex(name, src, out): """Generate C/C++ language source from lex file using Flex """ + + native.alias( + name = name + "_flex_toolchain", + actual = select({ + "//bazel:use_local_flex_bison_enabled": "//bazel:no_toolchain", + "@platforms//os:windows": "//bazel:no_toolchain", + "//conditions:default": "@rules_flex//flex:current_flex_toolchain", + }), + ) + native.alias( + name = name + "_m4_toolchain", + actual = select({ + "//bazel:use_local_flex_bison_enabled": "//bazel:no_toolchain", + "@platforms//os:windows": "//bazel:no_toolchain", + "//conditions:default": "@rules_m4//m4:current_m4_toolchain", + }), + ) native.genrule( name = name, srcs = [src], @@ -29,12 +46,8 @@ "@platforms//os:windows": "win_flex.exe --outfile=$@ $<", "//conditions:default": "M4=$(M4) $(FLEX) --outfile=$@ $<", }), - toolchains = select({ - "//bazel:use_local_flex_bison_enabled": [], - "@platforms//os:windows": [], - "//conditions:default": [ - "@rules_flex//flex:current_flex_toolchain", - "@rules_m4//m4:current_m4_toolchain", - ], - }), + toolchains = [ + ":" + name + "_flex_toolchain", + ":" + name + "_m4_toolchain", + ], )
diff --git a/bazel/no_toolchain.bzl b/bazel/no_toolchain.bzl new file mode 100644 index 0000000..07d4225 --- /dev/null +++ b/bazel/no_toolchain.bzl
@@ -0,0 +1,28 @@ +# -*- Python -*- +# Copyright 2017-2026 The Verible Authors. +# +# 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. + +"""A placeholder target for genrule's `toolchains` attribute. + +genrule's `toolchains` attribute requires each entry to provide +TemplateVariableInfo (or ToolchainTypeInfo). Used where a platform (e.g. +Windows) needs no real toolchain there, like for using local winflexbison. +""" + +def _no_toolchain_impl(ctx): + return [platform_common.TemplateVariableInfo({})] + +no_toolchain = rule( + implementation = _no_toolchain_impl, +)