1*c8dee2aaSAndroid Build Coastguard Worker""" 2*c8dee2aaSAndroid Build Coastguard WorkerThis file specifies a clang toolchain that can run on a Windows host. 3*c8dee2aaSAndroid Build Coastguard Worker 4*c8dee2aaSAndroid Build Coastguard WorkerSee download_windows_toolchain.bzl for more details on the creation of the toolchain. 5*c8dee2aaSAndroid Build Coastguard Worker 6*c8dee2aaSAndroid Build Coastguard WorkerIt uses the usr subfolder of the built toolchain as a sysroot 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard WorkerIt follows the example of: 9*c8dee2aaSAndroid Build Coastguard Worker - linux_amd64_toolchain_config.bzl 10*c8dee2aaSAndroid Build Coastguard Worker""" 11*c8dee2aaSAndroid Build Coastguard Worker 12*c8dee2aaSAndroid Build Coastguard Worker# https://github.com/bazelbuild/bazel/blob/master/tools/build_defs/cc/action_names.bzl 13*c8dee2aaSAndroid Build Coastguard Workerload("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES") 14*c8dee2aaSAndroid Build Coastguard Worker 15*c8dee2aaSAndroid Build Coastguard Worker# https://github.com/bazelbuild/bazel/blob/master/tools/cpp/cc_toolchain_config_lib.bzl 16*c8dee2aaSAndroid Build Coastguard Workerload( 17*c8dee2aaSAndroid Build Coastguard Worker "@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl", 18*c8dee2aaSAndroid Build Coastguard Worker "action_config", 19*c8dee2aaSAndroid Build Coastguard Worker "feature", 20*c8dee2aaSAndroid Build Coastguard Worker "flag_group", 21*c8dee2aaSAndroid Build Coastguard Worker "flag_set", 22*c8dee2aaSAndroid Build Coastguard Worker "tool", 23*c8dee2aaSAndroid Build Coastguard Worker "variable_with_value", 24*c8dee2aaSAndroid Build Coastguard Worker) 25*c8dee2aaSAndroid Build Coastguard Worker 26*c8dee2aaSAndroid Build Coastguard Worker# TODO(borenet): These variables were copied from the automatically-generated 27*c8dee2aaSAndroid Build Coastguard Worker# @clang_windows_amd64//:vars.bzl file. They are available to be directly 28*c8dee2aaSAndroid Build Coastguard Worker# used here, but in order to do so, Bazel needs access to both the Clang and 29*c8dee2aaSAndroid Build Coastguard Worker# MSVC archives, even when we aren't going to use this toolchain. Due to the 30*c8dee2aaSAndroid Build Coastguard Worker# time required to download and extract these archives, we've opted to hard-code 31*c8dee2aaSAndroid Build Coastguard Worker# the versions and paths here. 32*c8dee2aaSAndroid Build Coastguard Worker#load("@clang_windows_amd64//:vars.bzl", "MSVC_INCLUDE", "MSVC_LIB", "WIN_SDK_INCLUDE", "WIN_SDK_LIB") 33*c8dee2aaSAndroid Build Coastguard WorkerMSVC_VERSION = "14.39.33519" 34*c8dee2aaSAndroid Build Coastguard WorkerMSVC_INCLUDE = "VC/Tools/MSVC/" + MSVC_VERSION + "/include" 35*c8dee2aaSAndroid Build Coastguard WorkerMSVC_LIB = "VC/Tools/MSVC/" + MSVC_VERSION + "/lib" 36*c8dee2aaSAndroid Build Coastguard WorkerWIN_SDK_VERSION = "10.0.22621.0" 37*c8dee2aaSAndroid Build Coastguard WorkerWIN_SDK_INCLUDE = "win_sdk/Include/" + WIN_SDK_VERSION 38*c8dee2aaSAndroid Build Coastguard WorkerWIN_SDK_LIB = "win_sdk/Lib/" + WIN_SDK_VERSION 39*c8dee2aaSAndroid Build Coastguard Worker 40*c8dee2aaSAndroid Build Coastguard Worker# The location of the downloaded clang toolchain. 41*c8dee2aaSAndroid Build Coastguard WorkerCLANG_TOOLCHAIN = "external/clang_windows_amd64" 42*c8dee2aaSAndroid Build Coastguard Worker 43*c8dee2aaSAndroid Build Coastguard Worker# Paths inside the win_toolchain CIPD package. 44*c8dee2aaSAndroid Build Coastguard WorkerFULL_MSVC_INCLUDE = CLANG_TOOLCHAIN + "/" + MSVC_INCLUDE 45*c8dee2aaSAndroid Build Coastguard WorkerFULL_MSVC_LIB = CLANG_TOOLCHAIN + "/" + MSVC_LIB 46*c8dee2aaSAndroid Build Coastguard WorkerFULL_WIN_SDK_INCLUDE = CLANG_TOOLCHAIN + "/" + WIN_SDK_INCLUDE 47*c8dee2aaSAndroid Build Coastguard WorkerFULL_WIN_SDK_LIB = CLANG_TOOLCHAIN + "/" + WIN_SDK_LIB 48*c8dee2aaSAndroid Build Coastguard Worker 49*c8dee2aaSAndroid Build Coastguard Workerdef _windows_amd64_toolchain_info(ctx): 50*c8dee2aaSAndroid Build Coastguard Worker action_configs = _make_action_configs() 51*c8dee2aaSAndroid Build Coastguard Worker features = [ 52*c8dee2aaSAndroid Build Coastguard Worker feature( 53*c8dee2aaSAndroid Build Coastguard Worker name = "archive_param_file", 54*c8dee2aaSAndroid Build Coastguard Worker enabled = True, 55*c8dee2aaSAndroid Build Coastguard Worker ), 56*c8dee2aaSAndroid Build Coastguard Worker ] 57*c8dee2aaSAndroid Build Coastguard Worker features += _make_default_flags() 58*c8dee2aaSAndroid Build Coastguard Worker features += _make_diagnostic_flags() 59*c8dee2aaSAndroid Build Coastguard Worker 60*c8dee2aaSAndroid Build Coastguard Worker # https://bazel.build/rules/lib/cc_common#create_cc_toolchain_config_info 61*c8dee2aaSAndroid Build Coastguard Worker # Note, this rule is defined in Java code, not Starlark 62*c8dee2aaSAndroid Build Coastguard Worker # https://cs.opensource.google/bazel/bazel/+/master:src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcModuleApi.java 63*c8dee2aaSAndroid Build Coastguard Worker return cc_common.create_cc_toolchain_config_info( 64*c8dee2aaSAndroid Build Coastguard Worker ctx = ctx, 65*c8dee2aaSAndroid Build Coastguard Worker features = features, 66*c8dee2aaSAndroid Build Coastguard Worker action_configs = action_configs, 67*c8dee2aaSAndroid Build Coastguard Worker # These are required, but do nothing 68*c8dee2aaSAndroid Build Coastguard Worker compiler = "", 69*c8dee2aaSAndroid Build Coastguard Worker target_cpu = "", 70*c8dee2aaSAndroid Build Coastguard Worker target_libc = "", 71*c8dee2aaSAndroid Build Coastguard Worker target_system_name = "", 72*c8dee2aaSAndroid Build Coastguard Worker toolchain_identifier = "", 73*c8dee2aaSAndroid Build Coastguard Worker ) 74*c8dee2aaSAndroid Build Coastguard Worker 75*c8dee2aaSAndroid Build Coastguard Workerprovide_windows_amd64_toolchain_config = rule( 76*c8dee2aaSAndroid Build Coastguard Worker attrs = {}, 77*c8dee2aaSAndroid Build Coastguard Worker provides = [CcToolchainConfigInfo], 78*c8dee2aaSAndroid Build Coastguard Worker implementation = _windows_amd64_toolchain_info, 79*c8dee2aaSAndroid Build Coastguard Worker) 80*c8dee2aaSAndroid Build Coastguard Worker 81*c8dee2aaSAndroid Build Coastguard Workerdef _make_action_configs(): 82*c8dee2aaSAndroid Build Coastguard Worker """ 83*c8dee2aaSAndroid Build Coastguard Worker This function sets up the tools needed to perform the various compile/link actions. 84*c8dee2aaSAndroid Build Coastguard Worker 85*c8dee2aaSAndroid Build Coastguard Worker Bazel normally restricts us to referring to (and therefore running) executables/scripts 86*c8dee2aaSAndroid Build Coastguard Worker that are in this directory (That is EXEC_ROOT/toolchain). However, the executables we want 87*c8dee2aaSAndroid Build Coastguard Worker to run are brought in via WORKSPACE.bazel and are located in EXEC_ROOT/external/clang.... 88*c8dee2aaSAndroid Build Coastguard Worker Therefore, we make use of "trampoline scripts" that will call the binaries from the 89*c8dee2aaSAndroid Build Coastguard Worker toolchain directory. 90*c8dee2aaSAndroid Build Coastguard Worker 91*c8dee2aaSAndroid Build Coastguard Worker These action_configs also let us dynamically specify arguments from the Bazel 92*c8dee2aaSAndroid Build Coastguard Worker environment if necessary (see cpp_link_static_library_action). 93*c8dee2aaSAndroid Build Coastguard Worker """ 94*c8dee2aaSAndroid Build Coastguard Worker 95*c8dee2aaSAndroid Build Coastguard Worker # https://cs.opensource.google/bazel/bazel/+/master:tools/cpp/cc_toolchain_config_lib.bzl;l=435;drc=3b9e6f201a9a3465720aad8712ab7bcdeaf2e5da 96*c8dee2aaSAndroid Build Coastguard Worker clang_tool = tool(path = "windows_trampolines/clang_trampoline_windows.bat") 97*c8dee2aaSAndroid Build Coastguard Worker ar_tool = tool(path = "windows_trampolines/ar_trampoline_windows.bat") 98*c8dee2aaSAndroid Build Coastguard Worker 99*c8dee2aaSAndroid Build Coastguard Worker # https://cs.opensource.google/bazel/bazel/+/master:tools/cpp/cc_toolchain_config_lib.bzl;l=488;drc=3b9e6f201a9a3465720aad8712ab7bcdeaf2e5da 100*c8dee2aaSAndroid Build Coastguard Worker assemble_action = action_config( 101*c8dee2aaSAndroid Build Coastguard Worker action_name = ACTION_NAMES.assemble, 102*c8dee2aaSAndroid Build Coastguard Worker tools = [clang_tool], 103*c8dee2aaSAndroid Build Coastguard Worker ) 104*c8dee2aaSAndroid Build Coastguard Worker c_compile_action = action_config( 105*c8dee2aaSAndroid Build Coastguard Worker action_name = ACTION_NAMES.c_compile, 106*c8dee2aaSAndroid Build Coastguard Worker tools = [clang_tool], 107*c8dee2aaSAndroid Build Coastguard Worker ) 108*c8dee2aaSAndroid Build Coastguard Worker cpp_compile_action = action_config( 109*c8dee2aaSAndroid Build Coastguard Worker action_name = ACTION_NAMES.cpp_compile, 110*c8dee2aaSAndroid Build Coastguard Worker tools = [clang_tool], 111*c8dee2aaSAndroid Build Coastguard Worker ) 112*c8dee2aaSAndroid Build Coastguard Worker linkstamp_compile_action = action_config( 113*c8dee2aaSAndroid Build Coastguard Worker action_name = ACTION_NAMES.linkstamp_compile, 114*c8dee2aaSAndroid Build Coastguard Worker tools = [clang_tool], 115*c8dee2aaSAndroid Build Coastguard Worker ) 116*c8dee2aaSAndroid Build Coastguard Worker preprocess_assemble_action = action_config( 117*c8dee2aaSAndroid Build Coastguard Worker action_name = ACTION_NAMES.preprocess_assemble, 118*c8dee2aaSAndroid Build Coastguard Worker tools = [clang_tool], 119*c8dee2aaSAndroid Build Coastguard Worker ) 120*c8dee2aaSAndroid Build Coastguard Worker 121*c8dee2aaSAndroid Build Coastguard Worker cpp_link_dynamic_library_action = action_config( 122*c8dee2aaSAndroid Build Coastguard Worker action_name = ACTION_NAMES.cpp_link_dynamic_library, 123*c8dee2aaSAndroid Build Coastguard Worker tools = [clang_tool], 124*c8dee2aaSAndroid Build Coastguard Worker ) 125*c8dee2aaSAndroid Build Coastguard Worker cpp_link_executable_action = action_config( 126*c8dee2aaSAndroid Build Coastguard Worker action_name = ACTION_NAMES.cpp_link_executable, 127*c8dee2aaSAndroid Build Coastguard Worker # Bazel assumes it is talking to clang when building an executable. There are 128*c8dee2aaSAndroid Build Coastguard Worker # "-Wl" flags on the command: https://releases.llvm.org/6.0.1/tools/clang/docs/ClangCommandLineReference.html#cmdoption-clang-Wl 129*c8dee2aaSAndroid Build Coastguard Worker tools = [clang_tool], 130*c8dee2aaSAndroid Build Coastguard Worker ) 131*c8dee2aaSAndroid Build Coastguard Worker cpp_link_nodeps_dynamic_library_action = action_config( 132*c8dee2aaSAndroid Build Coastguard Worker action_name = ACTION_NAMES.cpp_link_nodeps_dynamic_library, 133*c8dee2aaSAndroid Build Coastguard Worker tools = [clang_tool], 134*c8dee2aaSAndroid Build Coastguard Worker ) 135*c8dee2aaSAndroid Build Coastguard Worker 136*c8dee2aaSAndroid Build Coastguard Worker # By default, there are no flags or libraries passed to the llvm-ar tool, so 137*c8dee2aaSAndroid Build Coastguard Worker # we need to specify them. The variables mentioned by expand_if_available are defined 138*c8dee2aaSAndroid Build Coastguard Worker # https://bazel.build/docs/cc-toolchain-config-reference#cctoolchainconfiginfo-build-variables 139*c8dee2aaSAndroid Build Coastguard Worker cpp_link_static_library_action = action_config( 140*c8dee2aaSAndroid Build Coastguard Worker action_name = ACTION_NAMES.cpp_link_static_library, 141*c8dee2aaSAndroid Build Coastguard Worker flag_sets = [ 142*c8dee2aaSAndroid Build Coastguard Worker flag_set( 143*c8dee2aaSAndroid Build Coastguard Worker flag_groups = [ 144*c8dee2aaSAndroid Build Coastguard Worker flag_group( 145*c8dee2aaSAndroid Build Coastguard Worker # https://llvm.org/docs/CommandGuide/llvm-ar.html 146*c8dee2aaSAndroid Build Coastguard Worker # replace existing files or insert them if they already exist, 147*c8dee2aaSAndroid Build Coastguard Worker # create the file if it doesn't already exist 148*c8dee2aaSAndroid Build Coastguard Worker # symbol table should be added 149*c8dee2aaSAndroid Build Coastguard Worker # Deterministic timestamps should be used 150*c8dee2aaSAndroid Build Coastguard Worker flags = ["rcsD", "%{output_execpath}"], 151*c8dee2aaSAndroid Build Coastguard Worker # Despite the name, output_execpath just refers to linker output, 152*c8dee2aaSAndroid Build Coastguard Worker # e.g. libFoo.a 153*c8dee2aaSAndroid Build Coastguard Worker expand_if_available = "output_execpath", 154*c8dee2aaSAndroid Build Coastguard Worker ), 155*c8dee2aaSAndroid Build Coastguard Worker ], 156*c8dee2aaSAndroid Build Coastguard Worker ), 157*c8dee2aaSAndroid Build Coastguard Worker flag_set( 158*c8dee2aaSAndroid Build Coastguard Worker flag_groups = [ 159*c8dee2aaSAndroid Build Coastguard Worker flag_group( 160*c8dee2aaSAndroid Build Coastguard Worker iterate_over = "libraries_to_link", 161*c8dee2aaSAndroid Build Coastguard Worker flag_groups = [ 162*c8dee2aaSAndroid Build Coastguard Worker flag_group( 163*c8dee2aaSAndroid Build Coastguard Worker flags = ["%{libraries_to_link.name}"], 164*c8dee2aaSAndroid Build Coastguard Worker expand_if_equal = variable_with_value( 165*c8dee2aaSAndroid Build Coastguard Worker name = "libraries_to_link.type", 166*c8dee2aaSAndroid Build Coastguard Worker value = "object_file", 167*c8dee2aaSAndroid Build Coastguard Worker ), 168*c8dee2aaSAndroid Build Coastguard Worker ), 169*c8dee2aaSAndroid Build Coastguard Worker flag_group( 170*c8dee2aaSAndroid Build Coastguard Worker flags = ["%{libraries_to_link.object_files}"], 171*c8dee2aaSAndroid Build Coastguard Worker iterate_over = "libraries_to_link.object_files", 172*c8dee2aaSAndroid Build Coastguard Worker expand_if_equal = variable_with_value( 173*c8dee2aaSAndroid Build Coastguard Worker name = "libraries_to_link.type", 174*c8dee2aaSAndroid Build Coastguard Worker value = "object_file_group", 175*c8dee2aaSAndroid Build Coastguard Worker ), 176*c8dee2aaSAndroid Build Coastguard Worker ), 177*c8dee2aaSAndroid Build Coastguard Worker ], 178*c8dee2aaSAndroid Build Coastguard Worker expand_if_available = "libraries_to_link", 179*c8dee2aaSAndroid Build Coastguard Worker ), 180*c8dee2aaSAndroid Build Coastguard Worker ], 181*c8dee2aaSAndroid Build Coastguard Worker ), 182*c8dee2aaSAndroid Build Coastguard Worker flag_set( 183*c8dee2aaSAndroid Build Coastguard Worker flag_groups = [ 184*c8dee2aaSAndroid Build Coastguard Worker flag_group( 185*c8dee2aaSAndroid Build Coastguard Worker flags = ["@%{archive_param_file}"], 186*c8dee2aaSAndroid Build Coastguard Worker expand_if_available = "archive_param_file", 187*c8dee2aaSAndroid Build Coastguard Worker ), 188*c8dee2aaSAndroid Build Coastguard Worker ], 189*c8dee2aaSAndroid Build Coastguard Worker ), 190*c8dee2aaSAndroid Build Coastguard Worker ], 191*c8dee2aaSAndroid Build Coastguard Worker tools = [ar_tool], 192*c8dee2aaSAndroid Build Coastguard Worker ) 193*c8dee2aaSAndroid Build Coastguard Worker 194*c8dee2aaSAndroid Build Coastguard Worker action_configs = [ 195*c8dee2aaSAndroid Build Coastguard Worker assemble_action, 196*c8dee2aaSAndroid Build Coastguard Worker c_compile_action, 197*c8dee2aaSAndroid Build Coastguard Worker cpp_compile_action, 198*c8dee2aaSAndroid Build Coastguard Worker cpp_link_dynamic_library_action, 199*c8dee2aaSAndroid Build Coastguard Worker cpp_link_executable_action, 200*c8dee2aaSAndroid Build Coastguard Worker cpp_link_nodeps_dynamic_library_action, 201*c8dee2aaSAndroid Build Coastguard Worker cpp_link_static_library_action, 202*c8dee2aaSAndroid Build Coastguard Worker linkstamp_compile_action, 203*c8dee2aaSAndroid Build Coastguard Worker preprocess_assemble_action, 204*c8dee2aaSAndroid Build Coastguard Worker ] 205*c8dee2aaSAndroid Build Coastguard Worker return action_configs 206*c8dee2aaSAndroid Build Coastguard Worker 207*c8dee2aaSAndroid Build Coastguard Workerdef _make_default_flags(): 208*c8dee2aaSAndroid Build Coastguard Worker """Here we define the flags for certain actions that are always applied. 209*c8dee2aaSAndroid Build Coastguard Worker 210*c8dee2aaSAndroid Build Coastguard Worker For any flag that might be conditionally applied, it should be defined in //bazel/copts.bzl. 211*c8dee2aaSAndroid Build Coastguard Worker 212*c8dee2aaSAndroid Build Coastguard Worker Flags that are set here will be unconditionally applied to everything we compile with 213*c8dee2aaSAndroid Build Coastguard Worker this toolchain, even third_party deps. 214*c8dee2aaSAndroid Build Coastguard Worker """ 215*c8dee2aaSAndroid Build Coastguard Worker 216*c8dee2aaSAndroid Build Coastguard Worker # Note: These values must be kept in sync with those defined in cmake_exporter.go. 217*c8dee2aaSAndroid Build Coastguard Worker cxx_compile_includes = flag_set( 218*c8dee2aaSAndroid Build Coastguard Worker actions = [ 219*c8dee2aaSAndroid Build Coastguard Worker ACTION_NAMES.c_compile, 220*c8dee2aaSAndroid Build Coastguard Worker ACTION_NAMES.cpp_compile, 221*c8dee2aaSAndroid Build Coastguard Worker ], 222*c8dee2aaSAndroid Build Coastguard Worker flag_groups = [ 223*c8dee2aaSAndroid Build Coastguard Worker flag_group( 224*c8dee2aaSAndroid Build Coastguard Worker flags = [ 225*c8dee2aaSAndroid Build Coastguard Worker # THIS ORDER MATTERS GREATLY. If these are in the wrong order, the 226*c8dee2aaSAndroid Build Coastguard Worker # #include_next directives will fail to find the files, causing a compilation 227*c8dee2aaSAndroid Build Coastguard Worker # error (or, without -no-canonical-prefixes, a mysterious case where files 228*c8dee2aaSAndroid Build Coastguard Worker # are included with an absolute path and fail the build). 229*c8dee2aaSAndroid Build Coastguard Worker "-isystem", 230*c8dee2aaSAndroid Build Coastguard Worker CLANG_TOOLCHAIN + "/include/clang", 231*c8dee2aaSAndroid Build Coastguard Worker "-isystem", 232*c8dee2aaSAndroid Build Coastguard Worker CLANG_TOOLCHAIN + "/include/clang-c", 233*c8dee2aaSAndroid Build Coastguard Worker "-isystem", 234*c8dee2aaSAndroid Build Coastguard Worker CLANG_TOOLCHAIN + "/include/clang-tidy", 235*c8dee2aaSAndroid Build Coastguard Worker "-isystem", 236*c8dee2aaSAndroid Build Coastguard Worker CLANG_TOOLCHAIN + "/include/lld", 237*c8dee2aaSAndroid Build Coastguard Worker "-isystem", 238*c8dee2aaSAndroid Build Coastguard Worker CLANG_TOOLCHAIN + "/include/lldb", 239*c8dee2aaSAndroid Build Coastguard Worker "-isystem", 240*c8dee2aaSAndroid Build Coastguard Worker CLANG_TOOLCHAIN + "/include/llvm", 241*c8dee2aaSAndroid Build Coastguard Worker "-isystem", 242*c8dee2aaSAndroid Build Coastguard Worker CLANG_TOOLCHAIN + "/include/llvm-c", 243*c8dee2aaSAndroid Build Coastguard Worker "-isystem", 244*c8dee2aaSAndroid Build Coastguard Worker CLANG_TOOLCHAIN + "/lib/clang/18/include", 245*c8dee2aaSAndroid Build Coastguard Worker "-isystem", 246*c8dee2aaSAndroid Build Coastguard Worker FULL_WIN_SDK_INCLUDE + "/shared", 247*c8dee2aaSAndroid Build Coastguard Worker "-isystem", 248*c8dee2aaSAndroid Build Coastguard Worker FULL_WIN_SDK_INCLUDE + "/ucrt", 249*c8dee2aaSAndroid Build Coastguard Worker "-isystem", 250*c8dee2aaSAndroid Build Coastguard Worker FULL_WIN_SDK_INCLUDE + "/um", 251*c8dee2aaSAndroid Build Coastguard Worker "-isystem", 252*c8dee2aaSAndroid Build Coastguard Worker FULL_WIN_SDK_INCLUDE + "/winrt", 253*c8dee2aaSAndroid Build Coastguard Worker "-isystem", 254*c8dee2aaSAndroid Build Coastguard Worker FULL_WIN_SDK_INCLUDE + "/cppwinrt", 255*c8dee2aaSAndroid Build Coastguard Worker "-isystem", 256*c8dee2aaSAndroid Build Coastguard Worker FULL_MSVC_INCLUDE, 257*c8dee2aaSAndroid Build Coastguard Worker # We do not want clang to search in absolute paths for files. This makes 258*c8dee2aaSAndroid Build Coastguard Worker # Bazel think we are using an outside resource and fail the compile. 259*c8dee2aaSAndroid Build Coastguard Worker "-no-canonical-prefixes", 260*c8dee2aaSAndroid Build Coastguard Worker ], 261*c8dee2aaSAndroid Build Coastguard Worker ), 262*c8dee2aaSAndroid Build Coastguard Worker ], 263*c8dee2aaSAndroid Build Coastguard Worker ) 264*c8dee2aaSAndroid Build Coastguard Worker 265*c8dee2aaSAndroid Build Coastguard Worker cpp_compile_flags = flag_set( 266*c8dee2aaSAndroid Build Coastguard Worker actions = [ 267*c8dee2aaSAndroid Build Coastguard Worker ACTION_NAMES.cpp_compile, 268*c8dee2aaSAndroid Build Coastguard Worker ], 269*c8dee2aaSAndroid Build Coastguard Worker flag_groups = [ 270*c8dee2aaSAndroid Build Coastguard Worker flag_group( 271*c8dee2aaSAndroid Build Coastguard Worker flags = [ 272*c8dee2aaSAndroid Build Coastguard Worker "-std=c++17", 273*c8dee2aaSAndroid Build Coastguard Worker ], 274*c8dee2aaSAndroid Build Coastguard Worker ), 275*c8dee2aaSAndroid Build Coastguard Worker ], 276*c8dee2aaSAndroid Build Coastguard Worker ) 277*c8dee2aaSAndroid Build Coastguard Worker 278*c8dee2aaSAndroid Build Coastguard Worker link_exe_flags = flag_set( 279*c8dee2aaSAndroid Build Coastguard Worker actions = [ 280*c8dee2aaSAndroid Build Coastguard Worker ACTION_NAMES.cpp_link_executable, 281*c8dee2aaSAndroid Build Coastguard Worker ACTION_NAMES.cpp_link_dynamic_library, 282*c8dee2aaSAndroid Build Coastguard Worker ACTION_NAMES.cpp_link_nodeps_dynamic_library, 283*c8dee2aaSAndroid Build Coastguard Worker ], 284*c8dee2aaSAndroid Build Coastguard Worker flag_groups = [ 285*c8dee2aaSAndroid Build Coastguard Worker flag_group( 286*c8dee2aaSAndroid Build Coastguard Worker flags = [ 287*c8dee2aaSAndroid Build Coastguard Worker "-fuse-ld=lld", 288*c8dee2aaSAndroid Build Coastguard Worker # We chose to use the llvm runtime, not the gcc one because it is already 289*c8dee2aaSAndroid Build Coastguard Worker # included in the clang binary 290*c8dee2aaSAndroid Build Coastguard Worker "--rtlib=compiler-rt", 291*c8dee2aaSAndroid Build Coastguard Worker "-std=c++17", 292*c8dee2aaSAndroid Build Coastguard Worker "-L" + FULL_MSVC_LIB + "/x64", 293*c8dee2aaSAndroid Build Coastguard Worker "-L" + FULL_WIN_SDK_LIB + "/ucrt/x64", 294*c8dee2aaSAndroid Build Coastguard Worker "-L" + FULL_WIN_SDK_LIB + "/um/x64", 295*c8dee2aaSAndroid Build Coastguard Worker ], 296*c8dee2aaSAndroid Build Coastguard Worker ), 297*c8dee2aaSAndroid Build Coastguard Worker ], 298*c8dee2aaSAndroid Build Coastguard Worker ) 299*c8dee2aaSAndroid Build Coastguard Worker return [feature( 300*c8dee2aaSAndroid Build Coastguard Worker "default_flags", 301*c8dee2aaSAndroid Build Coastguard Worker enabled = True, 302*c8dee2aaSAndroid Build Coastguard Worker flag_sets = [ 303*c8dee2aaSAndroid Build Coastguard Worker cxx_compile_includes, 304*c8dee2aaSAndroid Build Coastguard Worker cpp_compile_flags, 305*c8dee2aaSAndroid Build Coastguard Worker link_exe_flags, 306*c8dee2aaSAndroid Build Coastguard Worker ], 307*c8dee2aaSAndroid Build Coastguard Worker )] 308*c8dee2aaSAndroid Build Coastguard Worker 309*c8dee2aaSAndroid Build Coastguard Workerdef _make_diagnostic_flags(): 310*c8dee2aaSAndroid Build Coastguard Worker """Here we define the flags that can be turned on via features to yield debug info.""" 311*c8dee2aaSAndroid Build Coastguard Worker cxx_diagnostic = flag_set( 312*c8dee2aaSAndroid Build Coastguard Worker actions = [ 313*c8dee2aaSAndroid Build Coastguard Worker ACTION_NAMES.c_compile, 314*c8dee2aaSAndroid Build Coastguard Worker ACTION_NAMES.cpp_compile, 315*c8dee2aaSAndroid Build Coastguard Worker ], 316*c8dee2aaSAndroid Build Coastguard Worker flag_groups = [ 317*c8dee2aaSAndroid Build Coastguard Worker flag_group( 318*c8dee2aaSAndroid Build Coastguard Worker flags = [ 319*c8dee2aaSAndroid Build Coastguard Worker "--trace-includes", 320*c8dee2aaSAndroid Build Coastguard Worker "-v", 321*c8dee2aaSAndroid Build Coastguard Worker ], 322*c8dee2aaSAndroid Build Coastguard Worker ), 323*c8dee2aaSAndroid Build Coastguard Worker ], 324*c8dee2aaSAndroid Build Coastguard Worker ) 325*c8dee2aaSAndroid Build Coastguard Worker 326*c8dee2aaSAndroid Build Coastguard Worker link_diagnostic = flag_set( 327*c8dee2aaSAndroid Build Coastguard Worker actions = [ACTION_NAMES.cpp_link_executable], 328*c8dee2aaSAndroid Build Coastguard Worker flag_groups = [ 329*c8dee2aaSAndroid Build Coastguard Worker flag_group( 330*c8dee2aaSAndroid Build Coastguard Worker flags = [ 331*c8dee2aaSAndroid Build Coastguard Worker "-Wl,-verbose", 332*c8dee2aaSAndroid Build Coastguard Worker "-v", 333*c8dee2aaSAndroid Build Coastguard Worker ], 334*c8dee2aaSAndroid Build Coastguard Worker ), 335*c8dee2aaSAndroid Build Coastguard Worker ], 336*c8dee2aaSAndroid Build Coastguard Worker ) 337*c8dee2aaSAndroid Build Coastguard Worker 338*c8dee2aaSAndroid Build Coastguard Worker link_search_dirs = flag_set( 339*c8dee2aaSAndroid Build Coastguard Worker actions = [ACTION_NAMES.cpp_link_executable], 340*c8dee2aaSAndroid Build Coastguard Worker flag_groups = [ 341*c8dee2aaSAndroid Build Coastguard Worker flag_group( 342*c8dee2aaSAndroid Build Coastguard Worker flags = [ 343*c8dee2aaSAndroid Build Coastguard Worker "--print-search-dirs", 344*c8dee2aaSAndroid Build Coastguard Worker ], 345*c8dee2aaSAndroid Build Coastguard Worker ), 346*c8dee2aaSAndroid Build Coastguard Worker ], 347*c8dee2aaSAndroid Build Coastguard Worker ) 348*c8dee2aaSAndroid Build Coastguard Worker return [ 349*c8dee2aaSAndroid Build Coastguard Worker # Running a Bazel command with --features diagnostic will cause the compilation and 350*c8dee2aaSAndroid Build Coastguard Worker # link steps to be more verbose. 351*c8dee2aaSAndroid Build Coastguard Worker feature( 352*c8dee2aaSAndroid Build Coastguard Worker "diagnostic", 353*c8dee2aaSAndroid Build Coastguard Worker enabled = False, 354*c8dee2aaSAndroid Build Coastguard Worker flag_sets = [ 355*c8dee2aaSAndroid Build Coastguard Worker cxx_diagnostic, 356*c8dee2aaSAndroid Build Coastguard Worker link_diagnostic, 357*c8dee2aaSAndroid Build Coastguard Worker ], 358*c8dee2aaSAndroid Build Coastguard Worker ), 359*c8dee2aaSAndroid Build Coastguard Worker feature( 360*c8dee2aaSAndroid Build Coastguard Worker "diagnostic_link", 361*c8dee2aaSAndroid Build Coastguard Worker enabled = False, 362*c8dee2aaSAndroid Build Coastguard Worker flag_sets = [ 363*c8dee2aaSAndroid Build Coastguard Worker link_diagnostic, 364*c8dee2aaSAndroid Build Coastguard Worker ], 365*c8dee2aaSAndroid Build Coastguard Worker ), 366*c8dee2aaSAndroid Build Coastguard Worker # Running a Bazel command with --features print_search_dirs will cause the link to fail 367*c8dee2aaSAndroid Build Coastguard Worker # but directories searched for libraries, etc will be displayed. 368*c8dee2aaSAndroid Build Coastguard Worker feature( 369*c8dee2aaSAndroid Build Coastguard Worker "print_search_dirs", 370*c8dee2aaSAndroid Build Coastguard Worker enabled = False, 371*c8dee2aaSAndroid Build Coastguard Worker flag_sets = [ 372*c8dee2aaSAndroid Build Coastguard Worker link_search_dirs, 373*c8dee2aaSAndroid Build Coastguard Worker ], 374*c8dee2aaSAndroid Build Coastguard Worker ), 375*c8dee2aaSAndroid Build Coastguard Worker ] 376