从 bazel 3.6.0 切换到 3.7.0 时如何解决 @bazel_tools//tools/android:databinding_exec
How to resolve @bazel_tools//tools/android:databinding_exec when switching from bazel 3.6.0 to 3.7.0
一直在用bazel搭建一个android项目,一开始是0.24版本,后来用了较长时间的2.0版本,现在想换到最新的3.7。 0 / 3.7.1 版本。
目前我正在为 android 使用以下重要的 .bazelrc 设置:
build:androidbuild --crosstool_top=@androidndk//:default_crosstool
build:androidbuild --host_crosstool_top=@bazel_tools//tools/cpp:toolchain
build:android-32 --config=androidbuild --cpu=x86 --fat_apk_cpu=x86
所有 cc_binary / cc_library 目标仍然可以像以前一样构建,但是android_binary 目标不再构建,我收到此错误:
ERROR: While resolving toolchains for target
@bazel_tools//tools/android:databinding_exec: No matching toolchains
found for types @bazel_tools//tools/cpp:toolchain_type. Maybe
--incompatible_use_cc_configure_from_rules_cc has been flipped and there is no default C++ toolchain added in the WORKSPACE file? See
https://github.com/bazelbuild/bazel/issues/10134 for details and
migration instructions.
我试图找出哪个bazel版本开始抛出这个错误,我发现我仍然可以用3.6.0构建我的项目,但是如果我切换到3.7.0我开始出现上面的错误或 3.7.1.
查看 3.6.0 与 3.7.0 的变化,我想知道新的 create_dummy_sdk_toolchain 调用 tools/android/android_sdk_repository_template .bzl 会导致此失败,或者还有其他我遗漏的东西(比如 cc_flags_supplier.bzl / compiler_flag.bzl 中的更改 源将 incompatible_use_toolchain_transition 设置为 True).
我尝试了使用 --platforms 的方法,但即使在那种情况下我仍然遇到错误:
build:androidbuild --extra_toolchains=@androidndk//:all
build:android-32 --config=androidbuild --cpu=x86 --platforms=//config:android_x86
有:
platform(
name = "android_x86",
constraint_values = [
"@bazel_tools//platforms:x86_32",
"@bazel_tools//platforms:android",
],
cpu_constraints = [
],
os_constraints = [
],
target_platform = True,
)
错误:
ERROR: While resolving toolchains for target
@bazel_tools//tools/android:instrumentation_test_check: No matching
toolchains found for types @bazel_tools//tools/cpp:toolchain_type.
Maybe --incompatible_use_cc_configure_from_rules_cc has been flipped
and there is no default C++ toolchain added in the WORKSPACE file? See
https://github.com/bazelbuild/bazel/issues/10134 for details and
migration instructions.
你能告诉我解决由 3.6.0 与 3.7.0 差异引起的问题所需的项目缺少什么吗,我们现在需要为 [=81= 定义一个合适的工具链吗? ](我们不能再依赖 bazel 来弄清楚如何构建 android 目标)吗?
更新Dec/16/2020
看起来问题是由这段代码引起的:
工作空间:
register_execution_platforms(
"//tools/config:host_platform",
)
在 BUILD 文件中:
platform(
name = "host_platform",
constraint_values = [
],
cpu_constraints = [
"@bazel_tools//platforms:x86_32",
"@bazel_tools//platforms:x86_64",
],
host_platform = True,
os_constraints = [
"@bazel_tools//platforms:windows",
],
)
出于某种原因,这在 bazel 3.6.0 中有效,即使主机是 Linux,但它在 3.7.0 中不再有效。
问题是由这段代码引起的:
工作空间:
register_execution_platforms(
"//tools/config:host_platform",
)
在 BUILD 文件中:
platform(
name = "host_platform",
constraint_values = [
],
cpu_constraints = [
"@bazel_tools//platforms:x86_32",
"@bazel_tools//platforms:x86_64",
],
host_platform = True,
os_constraints = [
"@bazel_tools//platforms:windows",
],
)
出于某种原因,这在 bazel 3.6.0 中工作,即使主机是 Linux,但它不再在 3.7.0 中工作。
当我做 bazel build --platforms=//:linux_arm64 它给了我同样的错误:
为目标 @io_bazel_rules_go//:cgo_context_data 解析工具链时:找不到类型 @bazel_tools//tools/cpp:toolchain_type 的匹配工具链。也许 --incompatible_use_cc_configure_from_rules_cc 被翻转了,WORKSPACE 文件中没有添加默认的 C++ 工具链?有关详细信息和迁移说明,请参阅 https://github.com/bazelbuild/bazel/issues/10134。
跟随命令有效
bazel build --platforms=@io_bazel_rules_go//go/toolchain:linux_arm64
一直在用bazel搭建一个android项目,一开始是0.24版本,后来用了较长时间的2.0版本,现在想换到最新的3.7。 0 / 3.7.1 版本。
目前我正在为 android 使用以下重要的 .bazelrc 设置:
build:androidbuild --crosstool_top=@androidndk//:default_crosstool
build:androidbuild --host_crosstool_top=@bazel_tools//tools/cpp:toolchain
build:android-32 --config=androidbuild --cpu=x86 --fat_apk_cpu=x86
所有 cc_binary / cc_library 目标仍然可以像以前一样构建,但是android_binary 目标不再构建,我收到此错误:
ERROR: While resolving toolchains for target @bazel_tools//tools/android:databinding_exec: No matching toolchains found for types @bazel_tools//tools/cpp:toolchain_type. Maybe --incompatible_use_cc_configure_from_rules_cc has been flipped and there is no default C++ toolchain added in the WORKSPACE file? See https://github.com/bazelbuild/bazel/issues/10134 for details and migration instructions.
我试图找出哪个bazel版本开始抛出这个错误,我发现我仍然可以用3.6.0构建我的项目,但是如果我切换到3.7.0我开始出现上面的错误或 3.7.1.
查看 3.6.0 与 3.7.0 的变化,我想知道新的 create_dummy_sdk_toolchain 调用 tools/android/android_sdk_repository_template .bzl 会导致此失败,或者还有其他我遗漏的东西(比如 cc_flags_supplier.bzl / compiler_flag.bzl 中的更改 源将 incompatible_use_toolchain_transition 设置为 True).
我尝试了使用 --platforms 的方法,但即使在那种情况下我仍然遇到错误:
build:androidbuild --extra_toolchains=@androidndk//:all
build:android-32 --config=androidbuild --cpu=x86 --platforms=//config:android_x86
有:
platform(
name = "android_x86",
constraint_values = [
"@bazel_tools//platforms:x86_32",
"@bazel_tools//platforms:android",
],
cpu_constraints = [
],
os_constraints = [
],
target_platform = True,
)
错误:
ERROR: While resolving toolchains for target @bazel_tools//tools/android:instrumentation_test_check: No matching toolchains found for types @bazel_tools//tools/cpp:toolchain_type. Maybe --incompatible_use_cc_configure_from_rules_cc has been flipped and there is no default C++ toolchain added in the WORKSPACE file? See https://github.com/bazelbuild/bazel/issues/10134 for details and migration instructions.
你能告诉我解决由 3.6.0 与 3.7.0 差异引起的问题所需的项目缺少什么吗,我们现在需要为 [=81= 定义一个合适的工具链吗? ](我们不能再依赖 bazel 来弄清楚如何构建 android 目标)吗?
更新Dec/16/2020
看起来问题是由这段代码引起的:
工作空间:
register_execution_platforms(
"//tools/config:host_platform",
)
在 BUILD 文件中:
platform(
name = "host_platform",
constraint_values = [
],
cpu_constraints = [
"@bazel_tools//platforms:x86_32",
"@bazel_tools//platforms:x86_64",
],
host_platform = True,
os_constraints = [
"@bazel_tools//platforms:windows",
],
)
出于某种原因,这在 bazel 3.6.0 中有效,即使主机是 Linux,但它在 3.7.0 中不再有效。
问题是由这段代码引起的:
工作空间:
register_execution_platforms(
"//tools/config:host_platform",
)
在 BUILD 文件中:
platform(
name = "host_platform",
constraint_values = [
],
cpu_constraints = [
"@bazel_tools//platforms:x86_32",
"@bazel_tools//platforms:x86_64",
],
host_platform = True,
os_constraints = [
"@bazel_tools//platforms:windows",
],
)
出于某种原因,这在 bazel 3.6.0 中工作,即使主机是 Linux,但它不再在 3.7.0 中工作。
当我做 bazel build --platforms=//:linux_arm64 它给了我同样的错误: 为目标 @io_bazel_rules_go//:cgo_context_data 解析工具链时:找不到类型 @bazel_tools//tools/cpp:toolchain_type 的匹配工具链。也许 --incompatible_use_cc_configure_from_rules_cc 被翻转了,WORKSPACE 文件中没有添加默认的 C++ 工具链?有关详细信息和迁移说明,请参阅 https://github.com/bazelbuild/bazel/issues/10134。
跟随命令有效 bazel build --platforms=@io_bazel_rules_go//go/toolchain:linux_arm64