1*61c4878aSAndroid Build Coastguard Worker# Copyright 2023 The Pigweed Authors 2*61c4878aSAndroid Build Coastguard Worker# 3*61c4878aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); you may not 4*61c4878aSAndroid Build Coastguard Worker# use this file except in compliance with the License. You may obtain a copy of 5*61c4878aSAndroid Build Coastguard Worker# the License at 6*61c4878aSAndroid Build Coastguard Worker# 7*61c4878aSAndroid Build Coastguard Worker# https://www.apache.org/licenses/LICENSE-2.0 8*61c4878aSAndroid Build Coastguard Worker# 9*61c4878aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 10*61c4878aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 11*61c4878aSAndroid Build Coastguard Worker# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 12*61c4878aSAndroid Build Coastguard Worker# License for the specific language governing permissions and limitations under 13*61c4878aSAndroid Build Coastguard Worker# the License. 14*61c4878aSAndroid Build Coastguard Worker 15*61c4878aSAndroid Build Coastguard Workerload("@bazel_skylib//rules:common_settings.bzl", "bool_flag") 16*61c4878aSAndroid Build Coastguard Workerload("@bazel_skylib//rules:copy_file.bzl", "copy_file") 17*61c4878aSAndroid Build Coastguard Workerload("@rules_cc//cc/toolchains:args.bzl", "cc_args") 18*61c4878aSAndroid Build Coastguard Workerload("@rules_cc//cc/toolchains:feature.bzl", "cc_feature") 19*61c4878aSAndroid Build Coastguard Workerload("@rules_cc//cc/toolchains:feature_constraint.bzl", "cc_feature_constraint") 20*61c4878aSAndroid Build Coastguard Workerload("@rules_cc//cc/toolchains:feature_set.bzl", "cc_feature_set") 21*61c4878aSAndroid Build Coastguard Workerload("@rules_cc//cc/toolchains:toolchain.bzl", "cc_toolchain") 22*61c4878aSAndroid Build Coastguard Workerload("//pw_toolchain/host_clang:paths.bzl", "LLVM_TOOLCHAIN") 23*61c4878aSAndroid Build Coastguard Worker 24*61c4878aSAndroid Build Coastguard Workerpackage(default_visibility = ["//visibility:public"]) 25*61c4878aSAndroid Build Coastguard Worker 26*61c4878aSAndroid Build Coastguard Workerlicenses(["notice"]) 27*61c4878aSAndroid Build Coastguard Worker 28*61c4878aSAndroid Build Coastguard Workerfilegroup(name = "empty") 29*61c4878aSAndroid Build Coastguard Worker 30*61c4878aSAndroid Build Coastguard Workercc_args( 31*61c4878aSAndroid Build Coastguard Worker name = "link_with_lld", 32*61c4878aSAndroid Build Coastguard Worker actions = ["@rules_cc//cc/toolchains/actions:link_actions"], 33*61c4878aSAndroid Build Coastguard Worker args = ["-fuse-ld=lld"], 34*61c4878aSAndroid Build Coastguard Worker) 35*61c4878aSAndroid Build Coastguard Worker 36*61c4878aSAndroid Build Coastguard Workercc_args( 37*61c4878aSAndroid Build Coastguard Worker name = "macos_link_libs", 38*61c4878aSAndroid Build Coastguard Worker actions = ["@rules_cc//cc/toolchains/actions:link_actions"], 39*61c4878aSAndroid Build Coastguard Worker args = [ 40*61c4878aSAndroid Build Coastguard Worker # Force dropping the system libc++. 41*61c4878aSAndroid Build Coastguard Worker "-nostdlib++", 42*61c4878aSAndroid Build Coastguard Worker # Use libc++ provided by the toolchain. 43*61c4878aSAndroid Build Coastguard Worker LLVM_TOOLCHAIN + "/lib/libc++.a", 44*61c4878aSAndroid Build Coastguard Worker ], 45*61c4878aSAndroid Build Coastguard Worker target_compatible_with = ["@platforms//os:macos"], 46*61c4878aSAndroid Build Coastguard Worker) 47*61c4878aSAndroid Build Coastguard Worker 48*61c4878aSAndroid Build Coastguard Workercc_args( 49*61c4878aSAndroid Build Coastguard Worker name = "linux_link_libs", 50*61c4878aSAndroid Build Coastguard Worker actions = ["@rules_cc//cc/toolchains/actions:link_actions"], 51*61c4878aSAndroid Build Coastguard Worker args = [ 52*61c4878aSAndroid Build Coastguard Worker "-pthread", 53*61c4878aSAndroid Build Coastguard Worker "-stdlib=libc++", 54*61c4878aSAndroid Build Coastguard Worker "--rtlib=compiler-rt", 55*61c4878aSAndroid Build Coastguard Worker "--unwindlib=libunwind", 56*61c4878aSAndroid Build Coastguard Worker ], 57*61c4878aSAndroid Build Coastguard Worker target_compatible_with = ["@platforms//os:linux"], 58*61c4878aSAndroid Build Coastguard Worker) 59*61c4878aSAndroid Build Coastguard Worker 60*61c4878aSAndroid Build Coastguard Workercc_args( 61*61c4878aSAndroid Build Coastguard Worker name = "libtool_darwin_flags", 62*61c4878aSAndroid Build Coastguard Worker actions = ["@rules_cc//cc/toolchains/actions:cpp_link_static_library"], 63*61c4878aSAndroid Build Coastguard Worker args = ["-no_warning_for_no_symbols"], 64*61c4878aSAndroid Build Coastguard Worker) 65*61c4878aSAndroid Build Coastguard Worker 66*61c4878aSAndroid Build Coastguard Worker# Thread safety warnings are only supported by Clang. 67*61c4878aSAndroid Build Coastguard Workercc_args( 68*61c4878aSAndroid Build Coastguard Worker name = "thread_safety_warnings", 69*61c4878aSAndroid Build Coastguard Worker actions = [ 70*61c4878aSAndroid Build Coastguard Worker "@rules_cc//cc/toolchains/actions:c_compile_actions", 71*61c4878aSAndroid Build Coastguard Worker "@rules_cc//cc/toolchains/actions:cpp_compile_actions", 72*61c4878aSAndroid Build Coastguard Worker ], 73*61c4878aSAndroid Build Coastguard Worker args = [ 74*61c4878aSAndroid Build Coastguard Worker "-Wthread-safety", 75*61c4878aSAndroid Build Coastguard Worker "-D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1", 76*61c4878aSAndroid Build Coastguard Worker ], 77*61c4878aSAndroid Build Coastguard Worker) 78*61c4878aSAndroid Build Coastguard Worker 79*61c4878aSAndroid Build Coastguard Workercc_args( 80*61c4878aSAndroid Build Coastguard Worker name = "verbose_compiler_flags", 81*61c4878aSAndroid Build Coastguard Worker actions = [ 82*61c4878aSAndroid Build Coastguard Worker "@rules_cc//cc/toolchains/actions:compile_actions", 83*61c4878aSAndroid Build Coastguard Worker "@rules_cc//cc/toolchains/actions:link_actions", 84*61c4878aSAndroid Build Coastguard Worker ], 85*61c4878aSAndroid Build Coastguard Worker args = ["-v"], 86*61c4878aSAndroid Build Coastguard Worker) 87*61c4878aSAndroid Build Coastguard Worker 88*61c4878aSAndroid Build Coastguard Worker# A feature that can be easily toggled to include extra compiler output to help 89*61c4878aSAndroid Build Coastguard Worker# debug things like include search path ordering and showing all the flags 90*61c4878aSAndroid Build Coastguard Worker# passed to the compiler. 91*61c4878aSAndroid Build Coastguard Worker# 92*61c4878aSAndroid Build Coastguard Worker# Add `--features=verbose_compiler_output` to your Bazel invocation to enable. 93*61c4878aSAndroid Build Coastguard Workercc_feature( 94*61c4878aSAndroid Build Coastguard Worker name = "verbose_compiler_output", 95*61c4878aSAndroid Build Coastguard Worker args = [":verbose_compiler_flags"], 96*61c4878aSAndroid Build Coastguard Worker feature_name = "verbose_compiler_output", 97*61c4878aSAndroid Build Coastguard Worker) 98*61c4878aSAndroid Build Coastguard Worker 99*61c4878aSAndroid Build Coastguard Workercc_args( 100*61c4878aSAndroid Build Coastguard Worker name = "no_unknown_warning_option", 101*61c4878aSAndroid Build Coastguard Worker actions = [ 102*61c4878aSAndroid Build Coastguard Worker "@rules_cc//cc/toolchains/actions:c_compile_actions", 103*61c4878aSAndroid Build Coastguard Worker "@rules_cc//cc/toolchains/actions:cpp_compile_actions", 104*61c4878aSAndroid Build Coastguard Worker ], 105*61c4878aSAndroid Build Coastguard Worker args = [ 106*61c4878aSAndroid Build Coastguard Worker "-Wno-unknown-warning-option", 107*61c4878aSAndroid Build Coastguard Worker ], 108*61c4878aSAndroid Build Coastguard Worker) 109*61c4878aSAndroid Build Coastguard Worker 110*61c4878aSAndroid Build Coastguard Workerbool_flag( 111*61c4878aSAndroid Build Coastguard Worker name = "asan", 112*61c4878aSAndroid Build Coastguard Worker build_setting_default = False, 113*61c4878aSAndroid Build Coastguard Worker) 114*61c4878aSAndroid Build Coastguard Worker 115*61c4878aSAndroid Build Coastguard Workerconfig_setting( 116*61c4878aSAndroid Build Coastguard Worker name = "asan_enabled", 117*61c4878aSAndroid Build Coastguard Worker flag_values = { 118*61c4878aSAndroid Build Coastguard Worker ":asan": "true", 119*61c4878aSAndroid Build Coastguard Worker }, 120*61c4878aSAndroid Build Coastguard Worker) 121*61c4878aSAndroid Build Coastguard Worker 122*61c4878aSAndroid Build Coastguard Workercc_feature( 123*61c4878aSAndroid Build Coastguard Worker name = "asan_feature", 124*61c4878aSAndroid Build Coastguard Worker args = ["//pw_toolchain/cc/args:asan"], 125*61c4878aSAndroid Build Coastguard Worker feature_name = "asan", 126*61c4878aSAndroid Build Coastguard Worker requires_any_of = [":asan_constraint"], 127*61c4878aSAndroid Build Coastguard Worker) 128*61c4878aSAndroid Build Coastguard Worker 129*61c4878aSAndroid Build Coastguard Workercc_feature_set( 130*61c4878aSAndroid Build Coastguard Worker name = "asan_constraint", 131*61c4878aSAndroid Build Coastguard Worker # Rust uses the C++ linker, but not the C++ compiler, so we need to ensure 132*61c4878aSAndroid Build Coastguard Worker # -fsanitize=address is not be specified during Rust linking. 133*61c4878aSAndroid Build Coastguard Worker all_of = [":rules_rust_unsupported_feature"], 134*61c4878aSAndroid Build Coastguard Worker) 135*61c4878aSAndroid Build Coastguard Worker 136*61c4878aSAndroid Build Coastguard Workerbool_flag( 137*61c4878aSAndroid Build Coastguard Worker name = "ubsan", 138*61c4878aSAndroid Build Coastguard Worker build_setting_default = False, 139*61c4878aSAndroid Build Coastguard Worker) 140*61c4878aSAndroid Build Coastguard Worker 141*61c4878aSAndroid Build Coastguard Workerconfig_setting( 142*61c4878aSAndroid Build Coastguard Worker name = "ubsan_enabled", 143*61c4878aSAndroid Build Coastguard Worker flag_values = { 144*61c4878aSAndroid Build Coastguard Worker ":ubsan": "true", 145*61c4878aSAndroid Build Coastguard Worker }, 146*61c4878aSAndroid Build Coastguard Worker) 147*61c4878aSAndroid Build Coastguard Worker 148*61c4878aSAndroid Build Coastguard Workercc_feature( 149*61c4878aSAndroid Build Coastguard Worker name = "ubsan_feature", 150*61c4878aSAndroid Build Coastguard Worker args = ["//pw_toolchain/cc/args:ubsan"], 151*61c4878aSAndroid Build Coastguard Worker feature_name = "ubsan", 152*61c4878aSAndroid Build Coastguard Worker requires_any_of = [":ubsan_constraint"], 153*61c4878aSAndroid Build Coastguard Worker) 154*61c4878aSAndroid Build Coastguard Worker 155*61c4878aSAndroid Build Coastguard Workercc_feature_set( 156*61c4878aSAndroid Build Coastguard Worker name = "ubsan_constraint", 157*61c4878aSAndroid Build Coastguard Worker # Rust uses the C++ linker, but not the C++ compiler, so we need to ensure 158*61c4878aSAndroid Build Coastguard Worker # -fsanitize=undefined is not be specified during Rust linking. 159*61c4878aSAndroid Build Coastguard Worker all_of = [":rules_rust_unsupported_feature"], 160*61c4878aSAndroid Build Coastguard Worker) 161*61c4878aSAndroid Build Coastguard Worker 162*61c4878aSAndroid Build Coastguard Workerbool_flag( 163*61c4878aSAndroid Build Coastguard Worker name = "tsan", 164*61c4878aSAndroid Build Coastguard Worker build_setting_default = False, 165*61c4878aSAndroid Build Coastguard Worker) 166*61c4878aSAndroid Build Coastguard Worker 167*61c4878aSAndroid Build Coastguard Workerconfig_setting( 168*61c4878aSAndroid Build Coastguard Worker name = "tsan_enabled", 169*61c4878aSAndroid Build Coastguard Worker flag_values = { 170*61c4878aSAndroid Build Coastguard Worker ":tsan": "true", 171*61c4878aSAndroid Build Coastguard Worker }, 172*61c4878aSAndroid Build Coastguard Worker) 173*61c4878aSAndroid Build Coastguard Worker 174*61c4878aSAndroid Build Coastguard Workercc_feature( 175*61c4878aSAndroid Build Coastguard Worker name = "tsan_feature", 176*61c4878aSAndroid Build Coastguard Worker args = ["//pw_toolchain/cc/args:tsan"], 177*61c4878aSAndroid Build Coastguard Worker feature_name = "tsan", 178*61c4878aSAndroid Build Coastguard Worker requires_any_of = [":tsan_constraint"], 179*61c4878aSAndroid Build Coastguard Worker) 180*61c4878aSAndroid Build Coastguard Worker 181*61c4878aSAndroid Build Coastguard Workercc_feature_set( 182*61c4878aSAndroid Build Coastguard Worker name = "tsan_constraint", 183*61c4878aSAndroid Build Coastguard Worker # Rust uses the C++ linker, but not the C++ compiler, so we need to ensure 184*61c4878aSAndroid Build Coastguard Worker # -fsanitize=undefined is not be specified during Rust linking. 185*61c4878aSAndroid Build Coastguard Worker all_of = [":rules_rust_unsupported_feature"], 186*61c4878aSAndroid Build Coastguard Worker) 187*61c4878aSAndroid Build Coastguard Worker 188*61c4878aSAndroid Build Coastguard Workerbool_flag( 189*61c4878aSAndroid Build Coastguard Worker name = "fuzztest", 190*61c4878aSAndroid Build Coastguard Worker build_setting_default = False, 191*61c4878aSAndroid Build Coastguard Worker) 192*61c4878aSAndroid Build Coastguard Worker 193*61c4878aSAndroid Build Coastguard Workerconfig_setting( 194*61c4878aSAndroid Build Coastguard Worker name = "fuzztest_enabled", 195*61c4878aSAndroid Build Coastguard Worker flag_values = { 196*61c4878aSAndroid Build Coastguard Worker ":fuzztest": "true", 197*61c4878aSAndroid Build Coastguard Worker }, 198*61c4878aSAndroid Build Coastguard Worker) 199*61c4878aSAndroid Build Coastguard Worker 200*61c4878aSAndroid Build Coastguard Workercc_feature( 201*61c4878aSAndroid Build Coastguard Worker name = "fuzztest_feature", 202*61c4878aSAndroid Build Coastguard Worker args = ["//pw_toolchain/cc/args:fuzztest"], 203*61c4878aSAndroid Build Coastguard Worker feature_name = "fuzztest", 204*61c4878aSAndroid Build Coastguard Worker) 205*61c4878aSAndroid Build Coastguard Worker 206*61c4878aSAndroid Build Coastguard Worker# This is a sentinel feature defined by rules_rust. It is by definition 207*61c4878aSAndroid Build Coastguard Worker# unsupported: rules_rust will disable this feature when linking Rust code. 208*61c4878aSAndroid Build Coastguard Workercc_feature( 209*61c4878aSAndroid Build Coastguard Worker name = "rules_rust_unsupported_feature", 210*61c4878aSAndroid Build Coastguard Worker feature_name = "rules_rust_unsupported_feature", 211*61c4878aSAndroid Build Coastguard Worker) 212*61c4878aSAndroid Build Coastguard Worker 213*61c4878aSAndroid Build Coastguard Worker# This is a sentinel feature defined by rules_go. It is by definition 214*61c4878aSAndroid Build Coastguard Worker# unsupported: rules_go will disable this feature when linking Go code. 215*61c4878aSAndroid Build Coastguard Workercc_feature( 216*61c4878aSAndroid Build Coastguard Worker name = "rules_go_unsupported_feature", 217*61c4878aSAndroid Build Coastguard Worker feature_name = "rules_go_unsupported_feature", 218*61c4878aSAndroid Build Coastguard Worker) 219*61c4878aSAndroid Build Coastguard Worker 220*61c4878aSAndroid Build Coastguard Workercc_feature_constraint( 221*61c4878aSAndroid Build Coastguard Worker name = "rules_go_constraint", 222*61c4878aSAndroid Build Coastguard Worker 223*61c4878aSAndroid Build Coastguard Worker # This constraint is saying "not not Golang" (yes Golang / only Golang). 224*61c4878aSAndroid Build Coastguard Worker none_of = [":rules_go_unsupported_feature"], 225*61c4878aSAndroid Build Coastguard Worker) 226*61c4878aSAndroid Build Coastguard Worker 227*61c4878aSAndroid Build Coastguard Worker# Golang doesn't link with PIE enabled. See pwbug.dev/347708308. 228*61c4878aSAndroid Build Coastguard Worker# 229*61c4878aSAndroid Build Coastguard Worker# We want to disable PIE only when we're *not* compiling Golang code. 230*61c4878aSAndroid Build Coastguard Workercc_args( 231*61c4878aSAndroid Build Coastguard Worker name = "no_pie_for_go_flags", 232*61c4878aSAndroid Build Coastguard Worker actions = ["@rules_cc//cc/toolchains/actions:link_actions"], 233*61c4878aSAndroid Build Coastguard Worker args = [ 234*61c4878aSAndroid Build Coastguard Worker "-no-pie", 235*61c4878aSAndroid Build Coastguard Worker ], 236*61c4878aSAndroid Build Coastguard Worker requires_any_of = [":rules_go_constraint"], 237*61c4878aSAndroid Build Coastguard Worker target_compatible_with = ["@platforms//os:linux"], 238*61c4878aSAndroid Build Coastguard Worker) 239*61c4878aSAndroid Build Coastguard Worker 240*61c4878aSAndroid Build Coastguard Workercc_args( 241*61c4878aSAndroid Build Coastguard Worker name = "silence_cgo_warnings", 242*61c4878aSAndroid Build Coastguard Worker actions = [ 243*61c4878aSAndroid Build Coastguard Worker "@rules_cc//cc/toolchains/actions:compile_actions", 244*61c4878aSAndroid Build Coastguard Worker "@rules_cc//cc/toolchains/actions:link_actions", 245*61c4878aSAndroid Build Coastguard Worker ], 246*61c4878aSAndroid Build Coastguard Worker args = ["-Wno-unused-parameter"], 247*61c4878aSAndroid Build Coastguard Worker requires_any_of = [":rules_go_constraint"], 248*61c4878aSAndroid Build Coastguard Worker) 249*61c4878aSAndroid Build Coastguard Worker 250*61c4878aSAndroid Build Coastguard Workercc_feature( 251*61c4878aSAndroid Build Coastguard Worker name = "supports_pic", 252*61c4878aSAndroid Build Coastguard Worker overrides = "@rules_cc//cc/toolchains/features:supports_pic", 253*61c4878aSAndroid Build Coastguard Worker) 254*61c4878aSAndroid Build Coastguard Worker 255*61c4878aSAndroid Build Coastguard Worker# Symlink to clangd, for user convenience. 256*61c4878aSAndroid Build Coastguard Workercopy_file( 257*61c4878aSAndroid Build Coastguard Worker name = "copy_clangd", 258*61c4878aSAndroid Build Coastguard Worker src = "@llvm_toolchain//:bin/clangd", 259*61c4878aSAndroid Build Coastguard Worker out = "clangd", 260*61c4878aSAndroid Build Coastguard Worker allow_symlink = True, 261*61c4878aSAndroid Build Coastguard Worker) 262*61c4878aSAndroid Build Coastguard Worker 263*61c4878aSAndroid Build Coastguard Workercc_toolchain( 264*61c4878aSAndroid Build Coastguard Worker name = "host_toolchain", 265*61c4878aSAndroid Build Coastguard Worker args = select({ 266*61c4878aSAndroid Build Coastguard Worker "@platforms//os:linux": [ 267*61c4878aSAndroid Build Coastguard Worker ":linux_link_libs", 268*61c4878aSAndroid Build Coastguard Worker ":no_pie_for_go_flags", 269*61c4878aSAndroid Build Coastguard Worker "@linux_sysroot//:sysroot", 270*61c4878aSAndroid Build Coastguard Worker ], 271*61c4878aSAndroid Build Coastguard Worker "@platforms//os:macos": [ 272*61c4878aSAndroid Build Coastguard Worker ":macos_link_libs", 273*61c4878aSAndroid Build Coastguard Worker ":libtool_darwin_flags", 274*61c4878aSAndroid Build Coastguard Worker "@macos_sysroot//:sysroot", 275*61c4878aSAndroid Build Coastguard Worker ], 276*61c4878aSAndroid Build Coastguard Worker "//conditions:default": [], 277*61c4878aSAndroid Build Coastguard Worker }) + [ 278*61c4878aSAndroid Build Coastguard Worker ":thread_safety_warnings", 279*61c4878aSAndroid Build Coastguard Worker ":link_with_lld", 280*61c4878aSAndroid Build Coastguard Worker "//pw_toolchain/cc/args:debugging", 281*61c4878aSAndroid Build Coastguard Worker "//pw_toolchain/cc/args:reduced_size", 282*61c4878aSAndroid Build Coastguard Worker "//pw_toolchain/cc/args:no_canonical_prefixes", 283*61c4878aSAndroid Build Coastguard Worker "//pw_toolchain/cc/args:no_rtti", 284*61c4878aSAndroid Build Coastguard Worker "//pw_toolchain/cc/args:wno_register", 285*61c4878aSAndroid Build Coastguard Worker "//pw_toolchain/cc/args:wnon_virtual_dtor", 286*61c4878aSAndroid Build Coastguard Worker "//pw_toolchain/cc/args:common_warnings", 287*61c4878aSAndroid Build Coastguard Worker "//pw_toolchain/cc/args:color_diagnostics", 288*61c4878aSAndroid Build Coastguard Worker # Must go after the general warnings that are enabled. 289*61c4878aSAndroid Build Coastguard Worker ":silence_cgo_warnings", 290*61c4878aSAndroid Build Coastguard Worker ] + select({ 291*61c4878aSAndroid Build Coastguard Worker "//pw_build:kythe": [":no_unknown_warning_option"], 292*61c4878aSAndroid Build Coastguard Worker "//conditions:default": [], 293*61c4878aSAndroid Build Coastguard Worker }), 294*61c4878aSAndroid Build Coastguard Worker enabled_features = [ 295*61c4878aSAndroid Build Coastguard Worker "@rules_cc//cc/toolchains/args:experimental_replace_legacy_action_config_features", 296*61c4878aSAndroid Build Coastguard Worker ":supports_pic", 297*61c4878aSAndroid Build Coastguard Worker ":rules_go_unsupported_feature", 298*61c4878aSAndroid Build Coastguard Worker ":rules_rust_unsupported_feature", 299*61c4878aSAndroid Build Coastguard Worker "//pw_toolchain/cc/capability:compiler_is_clang", 300*61c4878aSAndroid Build Coastguard Worker "//pw_toolchain/cc/capability:linker_is_clang", 301*61c4878aSAndroid Build Coastguard Worker ] + select({ 302*61c4878aSAndroid Build Coastguard Worker ":asan_enabled": [":asan_feature"], 303*61c4878aSAndroid Build Coastguard Worker "//conditions:default": [], 304*61c4878aSAndroid Build Coastguard Worker }) + select({ 305*61c4878aSAndroid Build Coastguard Worker ":ubsan_enabled": [":ubsan_feature"], 306*61c4878aSAndroid Build Coastguard Worker "//conditions:default": [], 307*61c4878aSAndroid Build Coastguard Worker }) + select({ 308*61c4878aSAndroid Build Coastguard Worker ":tsan_enabled": [":tsan_feature"], 309*61c4878aSAndroid Build Coastguard Worker "//conditions:default": [], 310*61c4878aSAndroid Build Coastguard Worker }) + select({ 311*61c4878aSAndroid Build Coastguard Worker "//pw_toolchain/cc:c++17_enabled": ["//pw_toolchain/cc/args:c++17_feature"], 312*61c4878aSAndroid Build Coastguard Worker "//conditions:default": [], 313*61c4878aSAndroid Build Coastguard Worker }) + select({ 314*61c4878aSAndroid Build Coastguard Worker "//pw_toolchain/cc:c++20_enabled": ["//pw_toolchain/cc/args:c++20_feature"], 315*61c4878aSAndroid Build Coastguard Worker "//conditions:default": [], 316*61c4878aSAndroid Build Coastguard Worker }) + select({ 317*61c4878aSAndroid Build Coastguard Worker ":fuzztest_enabled": [":fuzztest_feature"], 318*61c4878aSAndroid Build Coastguard Worker "//conditions:default": [], 319*61c4878aSAndroid Build Coastguard Worker }), 320*61c4878aSAndroid Build Coastguard Worker known_features = [ 321*61c4878aSAndroid Build Coastguard Worker "@rules_cc//cc/toolchains/args:experimental_replace_legacy_action_config_features", 322*61c4878aSAndroid Build Coastguard Worker ":asan_feature", 323*61c4878aSAndroid Build Coastguard Worker ":ubsan_feature", 324*61c4878aSAndroid Build Coastguard Worker ":tsan_feature", 325*61c4878aSAndroid Build Coastguard Worker ":verbose_compiler_output", 326*61c4878aSAndroid Build Coastguard Worker ":rules_rust_unsupported_feature", 327*61c4878aSAndroid Build Coastguard Worker ":supports_pic", 328*61c4878aSAndroid Build Coastguard Worker "//pw_toolchain/cc/args:c++17_feature", 329*61c4878aSAndroid Build Coastguard Worker "//pw_toolchain/cc/args:c++20_feature", 330*61c4878aSAndroid Build Coastguard Worker "//pw_toolchain/cc/capability:compiler_is_clang", 331*61c4878aSAndroid Build Coastguard Worker "//pw_toolchain/cc/capability:linker_is_clang", 332*61c4878aSAndroid Build Coastguard Worker ], 333*61c4878aSAndroid Build Coastguard Worker tool_map = "@llvm_toolchain//:all_tools", 334*61c4878aSAndroid Build Coastguard Worker) 335*61c4878aSAndroid Build Coastguard Worker 336*61c4878aSAndroid Build Coastguard Workertoolchain( 337*61c4878aSAndroid Build Coastguard Worker name = "host_cc_toolchain_linux", 338*61c4878aSAndroid Build Coastguard Worker exec_compatible_with = [ 339*61c4878aSAndroid Build Coastguard Worker "@platforms//os:linux", 340*61c4878aSAndroid Build Coastguard Worker ], 341*61c4878aSAndroid Build Coastguard Worker target_compatible_with = [ 342*61c4878aSAndroid Build Coastguard Worker "@platforms//os:linux", 343*61c4878aSAndroid Build Coastguard Worker ], 344*61c4878aSAndroid Build Coastguard Worker toolchain = ":host_toolchain", 345*61c4878aSAndroid Build Coastguard Worker toolchain_type = "@bazel_tools//tools/cpp:toolchain_type", 346*61c4878aSAndroid Build Coastguard Worker) 347*61c4878aSAndroid Build Coastguard Worker 348*61c4878aSAndroid Build Coastguard Workertoolchain( 349*61c4878aSAndroid Build Coastguard Worker name = "host_cc_toolchain_macos", 350*61c4878aSAndroid Build Coastguard Worker exec_compatible_with = [ 351*61c4878aSAndroid Build Coastguard Worker "@platforms//os:macos", 352*61c4878aSAndroid Build Coastguard Worker ], 353*61c4878aSAndroid Build Coastguard Worker target_compatible_with = [ 354*61c4878aSAndroid Build Coastguard Worker "@platforms//os:macos", 355*61c4878aSAndroid Build Coastguard Worker ], 356*61c4878aSAndroid Build Coastguard Worker toolchain = ":host_toolchain", 357*61c4878aSAndroid Build Coastguard Worker toolchain_type = "@bazel_tools//tools/cpp:toolchain_type", 358*61c4878aSAndroid Build Coastguard Worker) 359