Skip to content

Commit

Permalink
Improve toolchain resolution debug logging
Browse files Browse the repository at this point in the history
* Group logging into a single debug message per (toolchain type, target platform) pair to avoid mixed output lines. This allows to reduce the length of debug lines as repeated information is explicit from the context in the previous lines.
* Use indentation to highlight resolution phases
  1. looking for all toolchains matching the target platform
  2. looking for all exec platforms matching the said toolchain
* Add a summary message containing all the selected triplets
* Less aggressive printing of exec platform resolution
* Speedup toolchain resolution a bit by stopping search as soon as all
  exec platforms have a toolchain assigned.

#####  Baseline output

```
Extracting Bazel installation...
Starting local Bazel server and connecting to it...
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @bazel_tools//tools/jdk:nonprebuilt_toolchain_java10; mismatching config settings: nonprebuilt_toolchain_java10_version_setting
INFO: ToolchainResolution:   Type @bazel_tools//tools/jdk:toolchain_type: target platform @local_config_platform//:host: execution //:default_host_platform: Selected toolchain @bazel_tools//tools/jdk:nonprebuilt_toolchain_java11
INFO: ToolchainResolution:   Type @bazel_tools//tools/jdk:toolchain_type: target platform @local_config_platform//:host: execution @local_config_platform//:host: Selected toolchain @bazel_tools//tools/jdk:nonprebuilt_toolchain_java11
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @bazel_tools//tools/jdk:nonprebuilt_toolchain_java12; mismatching config settings: nonprebuilt_toolchain_java12_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @bazel_tools//tools/jdk:nonprebuilt_toolchain_java13; mismatching config settings: nonprebuilt_toolchain_java13_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @bazel_tools//tools/jdk:nonprebuilt_toolchain_java14; mismatching config settings: nonprebuilt_toolchain_java14_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @bazel_tools//tools/jdk:nonprebuilt_toolchain_java15; mismatching config settings: nonprebuilt_toolchain_java15_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @bazel_tools//tools/jdk:nonprebuilt_toolchain_java16; mismatching config settings: nonprebuilt_toolchain_java16_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @bazel_tools//tools/jdk:nonprebuilt_toolchain_java17; mismatching config settings: nonprebuilt_toolchain_java17_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @bazel_tools//tools/jdk:nonprebuilt_toolchain_java18; mismatching config settings: nonprebuilt_toolchain_java18_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @bazel_tools//tools/jdk:nonprebuilt_toolchain_java19; mismatching config settings: nonprebuilt_toolchain_java19_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @bazel_tools//tools/jdk:nonprebuilt_toolchain_java20; mismatching config settings: nonprebuilt_toolchain_java20_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @bazel_tools//tools/jdk:nonprebuilt_toolchain_java21; mismatching config settings: nonprebuilt_toolchain_java21_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @bazel_tools//tools/jdk:nonprebuilt_toolchain_java22; mismatching config settings: nonprebuilt_toolchain_java22_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @bazel_tools//tools/jdk:nonprebuilt_toolchain_java23; mismatching config settings: nonprebuilt_toolchain_java23_version_setting
INFO: ToolchainResolution:   Type @bazel_tools//tools/jdk:runtime_toolchain_type: target platform @local_config_platform//:host: execution //:default_host_platform: Selected toolchain @rules_java~7.0.6~toolchains~local_jdk//:jdk
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @bazel_tools//tools/jdk:nonprebuilt_toolchain_java24; mismatching config settings: nonprebuilt_toolchain_java24_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @bazel_tools//tools/jdk:nonprebuilt_toolchain_java25; mismatching config settings: nonprebuilt_toolchain_java25_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @bazel_tools//tools/jdk:nonprebuilt_toolchain_java26; mismatching config settings: nonprebuilt_toolchain_java26_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @bazel_tools//tools/jdk:nonprebuilt_toolchain_java27; mismatching config settings: nonprebuilt_toolchain_java27_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/cpp:toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @bazel_tools~cc_configure_extension~local_config_cc//:cc-compiler-armeabi-v7a; mismatching values: armv7, android
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @bazel_tools//tools/jdk:nonprebuilt_toolchain_java28; mismatching config settings: nonprebuilt_toolchain_java28_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @bazel_tools//tools/jdk:nonprebuilt_toolchain_java29; mismatching config settings: nonprebuilt_toolchain_java29_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @bazel_tools//tools/jdk:nonprebuilt_toolchain_java30; mismatching config settings: nonprebuilt_toolchain_java30_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @bazel_tools//tools/jdk:nonprebuilt_toolchain_java8; mismatching config settings: nonprebuilt_toolchain_java8_default_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @bazel_tools//tools/jdk:nonprebuilt_toolchain_java8; mismatching config settings: nonprebuilt_toolchain_java8_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @bazel_tools//tools/jdk:nonprebuilt_toolchain_java9; mismatching config settings: nonprebuilt_toolchain_java9_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:toolchain_type: target platform @local_config_platform//:host: execution platform //:default_host_platform: Skipping toolchain //:bazel_java_toolchain; execution platform already has selected toolchain
INFO: ToolchainResolution:   Type @bazel_tools//tools/jdk:runtime_toolchain_type: target platform @local_config_platform//:host: execution @local_config_platform//:host: Selected toolchain @rules_java~7.0.6~toolchains~local_jdk//:jdk
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:runtime_toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @rules_java~7.0.6~toolchains~remotejdk11_linux//:jdk; mismatching config settings: prefix_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:runtime_toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @rules_java~7.0.6~toolchains~remotejdk11_linux_aarch64//:jdk; mismatching config settings: prefix_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:runtime_toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @rules_java~7.0.6~toolchains~remotejdk11_linux_ppc64le//:jdk; mismatching config settings: prefix_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:runtime_toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @rules_java~7.0.6~toolchains~remotejdk11_linux_s390x//:jdk; mismatching config settings: prefix_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:runtime_toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @rules_java~7.0.6~toolchains~remotejdk11_macos//:jdk; mismatching config settings: prefix_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:toolchain_type: target platform @local_config_platform//:host: execution platform @local_config_platform//:host: Skipping toolchain //:bazel_java_toolchain; execution platform already has selected toolchain
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @rules_java~7.0.6//toolchains:toolchain_java10; mismatching config settings: toolchain_java10_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:toolchain_type: target platform @local_config_platform//:host: execution platform //:default_host_platform: Skipping toolchain @rules_java~7.0.6//toolchains:toolchain_java11; execution platform already has selected toolchain
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:toolchain_type: target platform @local_config_platform//:host: execution platform @local_config_platform//:host: Skipping toolchain @rules_java~7.0.6//toolchains:toolchain_java11; execution platform already has selected toolchain
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @rules_java~7.0.6//toolchains:toolchain_java8; mismatching config settings: toolchain_java8_default_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @rules_java~7.0.6//toolchains:toolchain_java8; mismatching config settings: toolchain_java8_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @rules_java~7.0.6//toolchains:toolchain_java9; mismatching config settings: toolchain_java9_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @rules_java~7.0.6//toolchains:toolchain_jdk_17; mismatching config settings: toolchain_jdk_17_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @rules_java~7.0.6//toolchains:toolchain_jdk_21; mismatching config settings: toolchain_jdk_21_version_setting
INFO: ToolchainResolution:   Type @bazel_tools//tools/cpp:toolchain_type: target platform @local_config_platform//:host: execution //:default_host_platform: Selected toolchain @bazel_tools~cc_configure_extension~local_config_cc//:cc-compiler-k8
INFO: ToolchainResolution:   Type @bazel_tools//tools/cpp:toolchain_type: target platform @local_config_platform//:host: execution @local_config_platform//:host: Selected toolchain @bazel_tools~cc_configure_extension~local_config_cc//:cc-compiler-k8
INFO: ToolchainResolution:     Type @bazel_tools//tools/cpp:toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @bazel_tools~cc_configure_extension~local_config_cc//:cc-compiler-armeabi-v7a; mismatching values: armv7, android
INFO: ToolchainResolution:     Type @bazel_tools//tools/cpp:toolchain_type: target platform @local_config_platform//:host: execution platform //:default_host_platform: Skipping toolchain @bazel_tools~cc_configure_extension~local_config_cc//:cc-compiler-k8; execution platform already has selected toolchain
INFO: ToolchainResolution:     Type @bazel_tools//tools/cpp:toolchain_type: target platform @local_config_platform//:host: execution platform @local_config_platform//:host: Skipping toolchain @bazel_tools~cc_configure_extension~local_config_cc//:cc-compiler-k8; execution platform already has selected toolchain
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:runtime_toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @rules_java~7.0.6~toolchains~remotejdk11_macos_aarch64//:jdk; mismatching config settings: prefix_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:runtime_toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @rules_java~7.0.6~toolchains~remotejdk11_win//:jdk; mismatching config settings: prefix_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:runtime_toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @rules_java~7.0.6~toolchains~remotejdk11_win_arm64//:jdk; mismatching config settings: prefix_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:runtime_toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @rules_java~7.0.6~toolchains~remotejdk17_linux//:jdk; mismatching config settings: prefix_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:runtime_toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @rules_java~7.0.6~toolchains~remotejdk17_linux_aarch64//:jdk; mismatching config settings: prefix_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:runtime_toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @rules_java~7.0.6~toolchains~remotejdk17_linux_ppc64le//:jdk; mismatching config settings: prefix_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:runtime_toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @rules_java~7.0.6~toolchains~remotejdk17_linux_s390x//:jdk; mismatching config settings: prefix_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:runtime_toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @rules_java~7.0.6~toolchains~remotejdk17_macos//:jdk; mismatching config settings: prefix_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:runtime_toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @rules_java~7.0.6~toolchains~remotejdk17_macos_aarch64//:jdk; mismatching config settings: prefix_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:runtime_toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @rules_java~7.0.6~toolchains~remotejdk17_win//:jdk; mismatching config settings: prefix_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:runtime_toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @rules_java~7.0.6~toolchains~remotejdk17_win_arm64//:jdk; mismatching config settings: prefix_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:runtime_toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @rules_java~7.0.6~toolchains~remotejdk21_linux//:jdk; mismatching config settings: prefix_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:runtime_toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @rules_java~7.0.6~toolchains~remotejdk21_linux_aarch64//:jdk; mismatching config settings: prefix_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:runtime_toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @rules_java~7.0.6~toolchains~remotejdk21_macos//:jdk; mismatching config settings: prefix_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:runtime_toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @rules_java~7.0.6~toolchains~remotejdk21_macos_aarch64//:jdk; mismatching config settings: prefix_version_setting
INFO: ToolchainResolution:     Type @bazel_tools//tools/jdk:runtime_toolchain_type: target platform @local_config_platform//:host: Rejected toolchain @rules_java~7.0.6~toolchains~remotejdk21_win//:jdk; mismatching config settings: prefix_version_setting
INFO: ToolchainResolution: Target platform @local_config_platform//:host: Selected execution platform //:default_host_platform, type @bazel_tools//tools/cpp:toolchain_type -> toolchain @bazel_tools~cc_configure_extension~local_config_cc//:cc-compiler-k8, type @bazel_tools//tools/jdk:toolchain_type -> toolchain @bazel_tools//tools/jdk:nonprebuilt_toolchain_java11, type @bazel_tools//tools/jdk:runtime_toolchain_type -> toolchain @rules_java~7.0.6~toolchains~local_jdk//:jdk
INFO: ToolchainResolution: Target platform @local_config_platform//:host: Selected execution platform //:default_host_platform,
INFO: ToolchainResolution: Target platform @local_config_platform//:host: Selected execution platform //:default_host_platform, type @bazel_tools//tools/cpp:toolchain_type -> toolchain @bazel_tools~cc_configure_extension~local_config_cc//:cc-compiler-k8
INFO: ToolchainResolution: Target platform @local_config_platform//:host: Selected execution platform //:default_host_platform, type @bazel_tools//tools/jdk:toolchain_type -> toolchain @bazel_tools//tools/jdk:nonprebuilt_toolchain_java11
INFO: ToolchainResolution: Target platform @local_config_platform//:host: Selected execution platform //:default_host_platform, type @bazel_tools//tools/jdk:runtime_toolchain_type -> toolchain @rules_java~7.0.6~toolchains~local_jdk//:jdk
DEBUG: /home/layus/.cache/bazel/_bazel_layus/9cba04cd38f91c4f00ab1cb532fc20ef/external/rules_jvm_external~5.2/private/extensions/maven.bzl:141:14: The maven repository 'maven' is used in two different bazel modules, originally in 'bazel' and now in 'protobuf'
DEBUG: /home/layus/.cache/bazel/_bazel_layus/9cba04cd38f91c4f00ab1cb532fc20ef/external/rules_jvm_external~5.2/private/extensions/maven.bzl:141:14: The maven repository 'maven' is used in two different bazel modules, originally in 'bazel' and now in 'protobuf'
DEBUG: /home/layus/.cache/bazel/_bazel_layus/9cba04cd38f91c4f00ab1cb532fc20ef/external/rules_jvm_external~5.2/private/extensions/maven.bzl:141:14: The maven repository 'maven' is used in two different bazel modules, originally in 'bazel' and now in 'protobuf'
DEBUG: /home/layus/.cache/bazel/_bazel_layus/9cba04cd38f91c4f00ab1cb532fc20ef/external/rules_jvm_external~5.2/private/extensions/maven.bzl:141:14: The maven repository 'maven' is used in two different bazel modules, originally in 'bazel' and now in 'protobuf'
INFO: Analyzed target //src:bazel_nojdk (472 packages loaded, 10806 targets configured).
INFO: Found 1 target...
Target //src:bazel_nojdk up-to-date:
  bazel-bin/src/bazel_nojdk
INFO: Elapsed time: 14.165s, Critical Path: 0.49s
INFO: 1 process: 1 internal.
INFO: Build completed successfully, 1 total action
````

##### This PR

```
Extracting Bazel installation...
Starting local Bazel server and connecting to it...
INFO: Performing resolution of @bazel_tools//tools/jdk:runtime_toolchain_type for target platform @local_config_platform//:host
  Toolchain @rules_java~7.0.6~toolchains~local_jdk//:jdk is compatible with target plaform, searching for execution platforms:
    Compatible execution platform //:default_host_platform
    Compatible execution platform @local_config_platform//:host
  All execution platforms have been assigned a @bazel_tools//tools/jdk:runtime_toolchain_type toolchain, stopping
 => Recap of selected @bazel_tools//tools/jdk:runtime_toolchain_type toolchains for target platform @local_config_platform//:host:
  Selected toolchain @rules_java~7.0.6~toolchains~local_jdk//:jdk to run on exec platform //:default_host_platform
  Selected toolchain @rules_java~7.0.6~toolchains~local_jdk//:jdk to run on exec platform @local_config_platform//:host
INFO: Performing resolution of @bazel_tools//tools/jdk:toolchain_type for target platform @local_config_platform//:host
  Rejected toolchain @bazel_tools//tools/jdk:nonprebuilt_toolchain_java10; mismatching config settings: nonprebuilt_toolchain_java10_version_setting
  Toolchain @bazel_tools//tools/jdk:nonprebuilt_toolchain_java11 is compatible with target plaform, searching for execution platforms:
    Compatible execution platform //:default_host_platform
    Compatible execution platform @local_config_platform//:host
  All execution platforms have been assigned a @bazel_tools//tools/jdk:toolchain_type toolchain, stopping
 => Recap of selected @bazel_tools//tools/jdk:toolchain_type toolchains for target platform @local_config_platform//:host:
  Selected toolchain @bazel_tools//tools/jdk:nonprebuilt_toolchain_java11 to run on exec platform //:default_host_platform
  Selected toolchain @bazel_tools//tools/jdk:nonprebuilt_toolchain_java11 to run on exec platform @local_config_platform//:host
INFO: Performing resolution of @bazel_tools//tools/cpp:toolchain_type for target platform @local_config_platform//:host
  Rejected toolchain @bazel_tools~cc_configure_extension~local_config_cc//:cc-compiler-armeabi-v7a; mismatching values: armv7, android
  Toolchain @bazel_tools~cc_configure_extension~local_config_cc//:cc-compiler-k8 is compatible with target plaform, searching for execution platforms:
    Compatible execution platform //:default_host_platform
    Compatible execution platform @local_config_platform//:host
  All execution platforms have been assigned a @bazel_tools//tools/cpp:toolchain_type toolchain, stopping
 => Recap of selected @bazel_tools//tools/cpp:toolchain_type toolchains for target platform @local_config_platform//:host:
  Selected toolchain @bazel_tools~cc_configure_extension~local_config_cc//:cc-compiler-k8 to run on exec platform //:default_host_platform
  Selected toolchain @bazel_tools~cc_configure_extension~local_config_cc//:cc-compiler-k8 to run on exec platform @local_config_platform//:host
INFO: ToolchainResolution: Target platform @local_config_platform//:host: Selected execution platform //:default_host_platform, type @bazel_tools//tools/cpp:toolchain_type -> toolchain @bazel_tools~cc_configure_extension~local_config_cc//:cc-compiler-k8, type @bazel_tools//tools/jdk:toolchain_type -> toolchain @bazel_tools//tools/jdk:nonprebuilt_toolchain_java11, type @bazel_tools//tools/jdk:runtime_toolchain_type -> toolchain @rules_java~7.0.6~toolchains~local_jdk//:jdk
INFO: ToolchainResolution: Target platform @local_config_platform//:host: Selected execution platform //:default_host_platform,
INFO: ToolchainResolution: Target platform @local_config_platform//:host: Selected execution platform //:default_host_platform, type @bazel_tools//tools/cpp:toolchain_type -> toolchain @bazel_tools~cc_configure_extension~local_config_cc//:cc-compiler-k8
INFO: ToolchainResolution: Target platform @local_config_platform//:host: Selected execution platform //:default_host_platform, type @bazel_tools//tools/jdk:toolchain_type -> toolchain @bazel_tools//tools/jdk:nonprebuilt_toolchain_java11
INFO: ToolchainResolution: Target platform @local_config_platform//:host: Selected execution platform //:default_host_platform, type @bazel_tools//tools/jdk:runtime_toolchain_type -> toolchain @rules_java~7.0.6~toolchains~local_jdk//:jdk
DEBUG: /home/layus/.cache/bazel/_bazel_layus/9cba04cd38f91c4f00ab1cb532fc20ef/external/rules_jvm_external~5.2/private/extensions/maven.bzl:141:14: The maven repository 'maven' is used in two different bazel modules, originally in 'bazel' and now in 'protobuf'
DEBUG: /home/layus/.cache/bazel/_bazel_layus/9cba04cd38f91c4f00ab1cb532fc20ef/external/rules_jvm_external~5.2/private/extensions/maven.bzl:141:14: The maven repository 'maven' is used in two different bazel modules, originally in 'bazel' and now in 'protobuf'
DEBUG: /home/layus/.cache/bazel/_bazel_layus/9cba04cd38f91c4f00ab1cb532fc20ef/external/rules_jvm_external~5.2/private/extensions/maven.bzl:141:14: The maven repository 'maven' is used in two different bazel modules, originally in 'bazel' and now in 'protobuf'
DEBUG: /home/layus/.cache/bazel/_bazel_layus/9cba04cd38f91c4f00ab1cb532fc20ef/external/rules_jvm_external~5.2/private/extensions/maven.bzl:141:14: The maven repository 'maven' is used in two different bazel modules, originally in 'bazel' and now in 'protobuf'
INFO: Analyzed target //src:bazel_nojdk (472 packages loaded, 10806 targets configured).
INFO: Found 1 target...
Target //src:bazel_nojdk up-to-date:
  bazel-bin/src/bazel_nojdk
INFO: Elapsed time: 13.732s, Critical Path: 0.39s
INFO: 1 process: 1 internal.
INFO: Build completed successfully, 1 total action
```

/fixes #17814

Closes #19926.

PiperOrigin-RevId: 576878906
Change-Id: I65517f320fde8c17e6f04a9d6b89c31ab6e6da33
  • Loading branch information
layus authored and copybara-github committed Oct 26, 2023
1 parent 781633c commit 0a9c9a7
Show file tree
Hide file tree
Showing 2 changed files with 137 additions and 61 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@
import com.google.devtools.build.lib.analysis.platform.ToolchainTypeInfo;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.server.FailureDetails.Toolchain.Code;
import com.google.devtools.build.lib.skyframe.ConfiguredTargetKey;
import com.google.devtools.build.lib.skyframe.toolchains.PlatformLookupUtil.InvalidPlatformException;
Expand Down Expand Up @@ -91,14 +90,22 @@ public SkyValue compute(SkyKey skyKey, Environment env)
.debugToolchainResolution(key.toolchainType().toolchainType());

// Find the right one.
return resolveConstraints(
key.toolchainType(),
key.toolchainTypeInfo(),
key.availableExecutionPlatformKeys(),
key.targetPlatformKey(),
toolchains.registeredToolchains(),
env,
debug ? env.getListener() : null);
List<String> resolutionTrace = debug ? new ArrayList<>() : null;
SingleToolchainResolutionValue toolchainResolution =
resolveConstraints(
key.toolchainType(),
key.toolchainTypeInfo(),
key.availableExecutionPlatformKeys(),
key.targetPlatformKey(),
toolchains.registeredToolchains(),
env,
resolutionTrace);

if (debug) {
env.getListener().handle(Event.info(String.join("\n", resolutionTrace)));
}

return toolchainResolution;
}

/**
Expand All @@ -114,7 +121,7 @@ private static SingleToolchainResolutionValue resolveConstraints(
ConfiguredTargetKey targetPlatformKey,
ImmutableList<DeclaredToolchainInfo> toolchains,
Environment env,
@Nullable EventHandler eventHandler)
@Nullable List<String> resolutionTrace)
throws ToolchainResolutionFunctionException, InterruptedException {

// Load the PlatformInfo needed to check constraints.
Expand Down Expand Up @@ -151,6 +158,13 @@ private static SingleToolchainResolutionValue resolveConstraints(
toolchain.toolchainType().typeLabel().equals(toolchainType.toolchainType()))
.collect(toImmutableList());

debugMessage(
resolutionTrace,
IndentLevel.TARGET_PLATFORM_LEVEL,
"Performing resolution of %s for target platform %s",
toolchainType.toolchainType(),
targetPlatform.label());

for (DeclaredToolchainInfo toolchain : filteredToolchains) {
// Make sure the target setting matches but watch out for resolution errors.
ArrayList<String> nonmatchingSettings = new ArrayList<>();
Expand Down Expand Up @@ -181,101 +195,149 @@ private static SingleToolchainResolutionValue resolveConstraints(
}
if (!nonmatchingSettings.isEmpty()) {
debugMessage(
eventHandler,
" Type %s: %s platform %s: Rejected toolchain %s; mismatching config settings: %s",
toolchainType.toolchainType(),
"target",
targetPlatform.label(),
resolutionTrace,
IndentLevel.TOOLCHAIN_LEVEL,
"Rejected toolchain %s; mismatching config settings: %s",
toolchain.toolchainLabel(),
String.join(", ", nonmatchingSettings));
continue;
}

// Make sure the target platform matches.
if (!checkConstraints(
eventHandler,
resolutionTrace,
toolchain.targetConstraints(),
"target",
/* isTargetPlatform= */ true,
targetPlatform,
toolchainType,
toolchain.toolchainLabel())) {
continue;
}

debugMessage(
resolutionTrace,
IndentLevel.TOOLCHAIN_LEVEL,
"Toolchain %s is compatible with target plaform, searching for execution platforms:",
toolchain.toolchainLabel());

boolean done = true;

// Find the matching execution platforms.
for (ConfiguredTargetKey executionPlatformKey : availableExecutionPlatformKeys) {
// Only check the toolchains if this is a new platform.
if (platformKeysSeen.contains(executionPlatformKey)) {
debugMessage(
eventHandler,
" Type %s: target platform %s: execution platform %s: Skipping toolchain %s;"
+ " execution platform already has selected toolchain",
toolchainType.toolchainType(),
targetPlatform.label(),
executionPlatformKey.getLabel(),
toolchain.toolchainLabel());
resolutionTrace,
IndentLevel.EXECUTION_PLATFORM_LEVEL,
"Skipping execution platform %s; it has already selected a toolchain",
executionPlatformKey.getLabel());
continue;
}

PlatformInfo executionPlatform = platforms.get(executionPlatformKey);
if (!checkConstraints(
eventHandler,
resolutionTrace,
toolchain.execConstraints(),
"execution",
/* isTargetPlatform= */ false,
executionPlatform,
toolchainType,
toolchain.toolchainLabel())) {
// Keep looking for a valid toolchain for this exec platform
done = false;
continue;
}

debugMessage(
eventHandler,
" Type %s: target platform %s: execution %s: Selected toolchain %s",
toolchainType.toolchainType(),
targetPlatform.label(),
executionPlatformKey.getLabel(),
toolchain.toolchainLabel());
resolutionTrace,
IndentLevel.EXECUTION_PLATFORM_LEVEL,
"Compatible execution platform %s",
executionPlatformKey.getLabel());
builder.put(executionPlatformKey, toolchain.toolchainLabel());
platformKeysSeen.add(executionPlatformKey);
}

if (done) {
debugMessage(
resolutionTrace,
IndentLevel.TOOLCHAIN_LEVEL,
"All execution platforms have been assigned a %s toolchain, stopping",
toolchainType.toolchainType());
break;
}
}

ImmutableMap<ConfiguredTargetKey, Label> resolvedToolchainLabels = builder.buildOrThrow();
if (resolvedToolchainLabels.isEmpty()) {
debugMessage(
eventHandler,
" Type %s: target platform %s: No toolchains found.",
toolchainType.toolchainType(),
targetPlatform.label());
if (resolutionTrace != null) {
if (resolvedToolchainLabels.isEmpty()) {
debugMessage(
resolutionTrace,
IndentLevel.TARGET_PLATFORM_LEVEL,
"No %s toolchain found for target platform %s.",
toolchainType.toolchainType(),
targetPlatform.label());
} else {
debugMessage(
resolutionTrace,
IndentLevel.TARGET_PLATFORM_LEVEL,
"Recap of selected %s toolchains for target platform %s:",
toolchainType.toolchainType(),
targetPlatform.label());
resolvedToolchainLabels.forEach(
(executionPlatformKey, toolchainLabel) ->
debugMessage(
resolutionTrace,
IndentLevel.TOOLCHAIN_LEVEL,
"Selected %s to run on execution platform %s",
toolchainLabel,
executionPlatformKey.getLabel()));
}
}

return SingleToolchainResolutionValue.create(toolchainTypeInfo, resolvedToolchainLabels);
}

/** Helper enum to define the three indentation levels used in {@code debugMessage}. */
private enum IndentLevel {
TARGET_PLATFORM_LEVEL(""),
TOOLCHAIN_LEVEL(" "),
EXECUTION_PLATFORM_LEVEL(" ");

final String value;

IndentLevel(String value) {
this.value = value;
}

public String indent() {
return value;
}
}

/**
* Helper method to print a debugging message, if the given {@link EventHandler} is not {@code
* Helper method to print a debugging message, if the given {@code resolutionTrace} is not {@code
* null}.
*/
@FormatMethod
private static void debugMessage(
@Nullable EventHandler eventHandler, @FormatString String template, Object... args) {
if (eventHandler == null) {
@Nullable List<String> resolutionTrace,
IndentLevel indent,
@FormatString String template,
Object... args) {
if (resolutionTrace == null) {
return;
}

eventHandler.handle(Event.info("ToolchainResolution: " + String.format(template, args)));
String padding = resolutionTrace.isEmpty() ? "" : " ".repeat("INFO: ".length());
resolutionTrace.add(
padding + "ToolchainResolution: " + indent.indent() + String.format(template, args));
}

/**
* Returns {@code true} iff all constraints set by the toolchain and in the {@link PlatformInfo}
* match.
*/
private static boolean checkConstraints(
@Nullable EventHandler eventHandler,
@Nullable List<String> resolutionTrace,
ConstraintCollection toolchainConstraints,
String platformType,
boolean isTargetPlatform,
PlatformInfo platform,
ToolchainTypeRequirement toolchainType,
Label toolchainLabel) {

// Check every constraint_setting in either the toolchain or the platform.
Expand All @@ -295,7 +357,7 @@ private static boolean checkConstraints(
.filter(toolchainConstraints::hasWithoutDefault)
.collect(ImmutableSet.toImmutableSet());

if (!mismatchSettingsWithDefault.isEmpty()) {
if (resolutionTrace != null && !mismatchSettingsWithDefault.isEmpty()) {
String mismatchValues =
mismatchSettingsWithDefault.stream()
.filter(toolchainConstraints::has)
Expand All @@ -313,15 +375,21 @@ private static boolean checkConstraints(
if (!missingSettings.isEmpty()) {
missingSettings = "; missing: " + missingSettings;
}
debugMessage(
eventHandler,
" Type %s: %s platform %s: Rejected toolchain %s%s%s",
toolchainType.toolchainType(),
platformType,
platform.label(),
toolchainLabel,
mismatchValues,
missingSettings);
if (isTargetPlatform) {
debugMessage(
resolutionTrace,
IndentLevel.TOOLCHAIN_LEVEL,
"Rejected toolchain %s%s",
toolchainLabel,
mismatchValues + missingSettings);
} else {
debugMessage(
resolutionTrace,
IndentLevel.EXECUTION_PLATFORM_LEVEL,
"Incompatible execution platform %s%s",
platform.label(),
mismatchValues + missingSettings);
}
}

return mismatchSettingsWithDefault.isEmpty();
Expand Down
14 changes: 11 additions & 3 deletions src/test/shell/integration/toolchain_test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -689,8 +689,12 @@ EOF
--toolchain_resolution_debug=toolchain:test_toolchain \
--platform_mappings= \
"//${pkg}/demo:use" &> $TEST_log || fail "Build failed"
expect_log "ToolchainResolution: Type //${pkg}/toolchain:test_toolchain: target platform ${default_host_platform}: execution ${default_host_platform}: Selected toolchain //register/${pkg}:test_toolchain_impl_1"
expect_log "ToolchainResolution: Target platform ${default_host_platform}: Selected execution platform ${default_host_platform}, type //${pkg}/toolchain:test_toolchain -> toolchain //register/${pkg}:test_toolchain_impl_1"
expect_log "Performing resolution of //${pkg}/toolchain:test_toolchain for target platform ${default_host_platform}"
expect_log "Toolchain //register/${pkg}:test_toolchain_impl_1 is compatible with target plaform, searching for execution platforms:"
expect_log "Compatible execution platform ${default_host_platform}"
expect_log "Recap of selected //${pkg}/toolchain:test_toolchain toolchains for target platform ${default_host_platform}:"
expect_log "Selected //register/${pkg}:test_toolchain_impl_1 to run on execution platform ${default_host_platform}"
expect_log "Target platform ${default_host_platform}: Selected execution platform ${default_host_platform}, type //${pkg}/toolchain:test_toolchain -> toolchain //register/${pkg}:test_toolchain_impl_1"
expect_log 'Using toolchain: rule message: "this is the rule", toolchain extra_str: "foo from test_toolchain"'
}

Expand All @@ -716,7 +720,11 @@ EOF
--toolchain_resolution_debug=demo:use \
--platform_mappings= \
"//${pkg}/demo:use" &> $TEST_log || fail "Build failed"
expect_log "ToolchainResolution: Type //${pkg}/toolchain:test_toolchain: target platform ${default_host_platform}: execution ${default_host_platform}: Selected toolchain //register/${pkg}:test_toolchain_impl_1"
expect_log "Performing resolution of //${pkg}/toolchain:test_toolchain for target platform ${default_host_platform}"
expect_log "Toolchain //register/${pkg}:test_toolchain_impl_1 is compatible with target plaform, searching for execution platforms:"
expect_log "Compatible execution platform ${default_host_platform}"
expect_log "Recap of selected //${pkg}/toolchain:test_toolchain toolchains for target platform ${default_host_platform}:"
expect_log "Selected //register/${pkg}:test_toolchain_impl_1 to run on execution platform ${default_host_platform}"
expect_log "ToolchainResolution: Target platform ${default_host_platform}: Selected execution platform ${default_host_platform}, type //${pkg}/toolchain:test_toolchain -> toolchain //register/${pkg}:test_toolchain_impl_1"
expect_log 'Using toolchain: rule message: "this is the rule", toolchain extra_str: "foo from test_toolchain"'
}
Expand Down

0 comments on commit 0a9c9a7

Please sign in to comment.