# Copyright 2019 The Bazel Authors. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """A Starlark cc_toolchain configuration rule""" load( "@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl", "action_config", "artifact_name_pattern", "env_entry", "env_set", "feature", "feature_set", "flag_group", "flag_set", "make_variable", "tool", "tool_path", "variable_with_value", "with_feature_set", ) load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES") all_compile_actions = [ ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile, ACTION_NAMES.linkstamp_compile, ACTION_NAMES.assemble, ACTION_NAMES.preprocess_assemble, ACTION_NAMES.cpp_header_parsing, ACTION_NAMES.cpp_module_compile, ACTION_NAMES.cpp_module_codegen, ACTION_NAMES.clif_match, ACTION_NAMES.lto_backend, ] all_cpp_compile_actions = [ ACTION_NAMES.cpp_compile, ACTION_NAMES.linkstamp_compile, ACTION_NAMES.cpp_header_parsing, ACTION_NAMES.cpp_module_compile, ACTION_NAMES.cpp_module_codegen, ACTION_NAMES.clif_match, ] preprocessor_compile_actions = [ ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile, ACTION_NAMES.linkstamp_compile, ACTION_NAMES.preprocess_assemble, ACTION_NAMES.cpp_header_parsing, ACTION_NAMES.cpp_module_compile, ACTION_NAMES.clif_match, ] codegen_compile_actions = [ ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile, ACTION_NAMES.linkstamp_compile, ACTION_NAMES.assemble, ACTION_NAMES.preprocess_assemble, ACTION_NAMES.cpp_module_codegen, ACTION_NAMES.lto_backend, ] all_link_actions = [ ACTION_NAMES.cpp_link_executable, ACTION_NAMES.cpp_link_dynamic_library, ACTION_NAMES.cpp_link_nodeps_dynamic_library, ] def _windows_msvc_impl(ctx): toolchain_identifier = "msvc_x64" host_system_name = "local" target_system_name = "local" target_cpu = "x64_windows" target_libc = "msvcrt" compiler = "msvc-cl" abi_version = "local" abi_libc_version = "local" cc_target_os = None builtin_sysroot = None cxx_builtin_include_directories = [ # This is a workaround for https://github.com/bazelbuild/bazel/issues/5087. "C:\\botcode\\w", "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\INCLUDE", "C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.10240.0\\ucrt", "C:\\Program Files (x86)\\Windows Kits\\8.1\\include\\shared", "C:\\Program Files (x86)\\Windows Kits\\8.1\\include\\um", "C:\\Program Files (x86)\\Windows Kits\\8.1\\include\\winrt", ] cpp_link_nodeps_dynamic_library_action = action_config( action_name = ACTION_NAMES.cpp_link_nodeps_dynamic_library, implies = [ "nologo", "shared_flag", "linkstamps", "output_execpath_flags", "input_param_flags", "user_link_flags", "default_link_flags", "linker_subsystem_flag", "linker_param_file", "msvc_env", "no_stripping", "has_configured_linker_path", "def_file", ], tools = [tool(path = "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/amd64/link.exe")], ) cpp_link_static_library_action = action_config( action_name = ACTION_NAMES.cpp_link_static_library, implies = [ "nologo", "archiver_flags", "input_param_flags", "linker_param_file", "msvc_env", ], tools = [tool(path = "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/amd64/lib.exe")], ) assemble_action = action_config( action_name = ACTION_NAMES.assemble, implies = [ "compiler_input_flags", "compiler_output_flags", "nologo", "msvc_env", "sysroot", ], tools = [tool(path = "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/amd64/ml64.exe")], ) preprocess_assemble_action = action_config( action_name = ACTION_NAMES.preprocess_assemble, implies = [ "compiler_input_flags", "compiler_output_flags", "nologo", "msvc_env", "sysroot", ], tools = [tool(path = "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/amd64/ml64.exe")], ) c_compile_action = action_config( action_name = ACTION_NAMES.c_compile, implies = [ "compiler_input_flags", "compiler_output_flags", "default_compile_flags", "nologo", "msvc_env", "parse_showincludes", "user_compile_flags", "sysroot", "unfiltered_compile_flags", ], tools = [tool(path = "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/amd64/cl.exe")], ) cpp_compile_action = action_config( action_name = ACTION_NAMES.cpp_compile, implies = [ "compiler_input_flags", "compiler_output_flags", "default_compile_flags", "nologo", "msvc_env", "parse_showincludes", "user_compile_flags", "sysroot", "unfiltered_compile_flags", ], tools = [tool(path = "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/amd64/cl.exe")], ) cpp_link_executable_action = action_config( action_name = ACTION_NAMES.cpp_link_executable, implies = [ "nologo", "linkstamps", "output_execpath_flags", "input_param_flags", "user_link_flags", "default_link_flags", "linker_subsystem_flag", "linker_param_file", "msvc_env", "no_stripping", ], tools = [tool(path = "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/amd64/link.exe")], ) cpp_link_dynamic_library_action = action_config( action_name = ACTION_NAMES.cpp_link_dynamic_library, implies = [ "nologo", "shared_flag", "linkstamps", "output_execpath_flags", "input_param_flags", "user_link_flags", "default_link_flags", "linker_subsystem_flag", "linker_param_file", "msvc_env", "no_stripping", "has_configured_linker_path", "def_file", ], tools = [tool(path = "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/amd64/link.exe")], ) action_configs = [ assemble_action, preprocess_assemble_action, c_compile_action, cpp_compile_action, cpp_link_executable_action, cpp_link_dynamic_library_action, cpp_link_nodeps_dynamic_library_action, cpp_link_static_library_action, ] msvc_link_env_feature = feature( name = "msvc_link_env", env_sets = [ env_set( actions = all_link_actions + [ACTION_NAMES.cpp_link_static_library], env_entries = [env_entry(key = "LIB", value = "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\LIB\\amd64;C:\\Program Files (x86)\\Windows Kits\\10\\lib\\10.0.10240.0\\ucrt\\x64;C:\\Program Files (x86)\\Windows Kits\\8.1\\lib\\winv6.3\\um\\x64;")], ), ], ) shared_flag_feature = feature( name = "shared_flag", flag_sets = [ flag_set( actions = [ ACTION_NAMES.cpp_link_dynamic_library, ACTION_NAMES.cpp_link_nodeps_dynamic_library, ], flag_groups = [flag_group(flags = ["/DLL"])], ), ], ) determinism_feature = feature( name = "determinism", enabled = True, flag_sets = [ flag_set( actions = [ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile], flag_groups = [ flag_group( flags = [ "/wd4117", "-D__DATE__=\"redacted\"", "-D__TIMESTAMP__=\"redacted\"", "-D__TIME__=\"redacted\"", ], ), ], ), ], ) sysroot_feature = feature( name = "sysroot", flag_sets = [ flag_set( actions = [ ACTION_NAMES.assemble, ACTION_NAMES.preprocess_assemble, ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile, ACTION_NAMES.cpp_header_parsing, ACTION_NAMES.cpp_module_compile, ACTION_NAMES.cpp_module_codegen, ACTION_NAMES.cpp_link_executable, ACTION_NAMES.cpp_link_dynamic_library, ACTION_NAMES.cpp_link_nodeps_dynamic_library, ], flag_groups = [ flag_group( flags = ["--sysroot=%{sysroot}"], iterate_over = "sysroot", expand_if_available = "sysroot", ), ], ), ], ) unfiltered_compile_flags_feature = feature( name = "unfiltered_compile_flags", flag_sets = [ flag_set( actions = [ ACTION_NAMES.preprocess_assemble, ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile, ACTION_NAMES.cpp_header_parsing, ACTION_NAMES.cpp_module_compile, ACTION_NAMES.cpp_module_codegen, ], flag_groups = [ flag_group( flags = ["%{unfiltered_compile_flags}"], iterate_over = "unfiltered_compile_flags", expand_if_available = "unfiltered_compile_flags", ), ], ), ], ) compiler_param_file_feature = feature( name = "compiler_param_file", ) copy_dynamic_libraries_to_binary_feature = feature(name = "copy_dynamic_libraries_to_binary") input_param_flags_feature = feature( name = "input_param_flags", flag_sets = [ flag_set( actions = [ ACTION_NAMES.cpp_link_dynamic_library, ACTION_NAMES.cpp_link_nodeps_dynamic_library, ], flag_groups = [ flag_group( flags = ["/IMPLIB:%{interface_library_output_path}"], expand_if_available = "interface_library_output_path", ), ], ), flag_set( actions = all_link_actions, flag_groups = [ flag_group( flags = ["%{libopts}"], iterate_over = "libopts", expand_if_available = "libopts", ), ], ), flag_set( actions = all_link_actions + [ACTION_NAMES.cpp_link_static_library], flag_groups = [ flag_group( iterate_over = "libraries_to_link", flag_groups = [ flag_group( iterate_over = "libraries_to_link.object_files", flag_groups = [flag_group(flags = ["%{libraries_to_link.object_files}"])], expand_if_equal = variable_with_value( name = "libraries_to_link.type", value = "object_file_group", ), ), flag_group( flag_groups = [flag_group(flags = ["%{libraries_to_link.name}"])], expand_if_equal = variable_with_value( name = "libraries_to_link.type", value = "object_file", ), ), flag_group( flag_groups = [flag_group(flags = ["%{libraries_to_link.name}"])], expand_if_equal = variable_with_value( name = "libraries_to_link.type", value = "interface_library", ), ), flag_group( flag_groups = [ flag_group( flags = ["%{libraries_to_link.name}"], expand_if_false = "libraries_to_link.is_whole_archive", ), flag_group( flags = ["/WHOLEARCHIVE:%{libraries_to_link.name}"], expand_if_true = "libraries_to_link.is_whole_archive", ), ], expand_if_equal = variable_with_value( name = "libraries_to_link.type", value = "static_library", ), ), ], expand_if_available = "libraries_to_link", ), ], ), ], ) fastbuild_feature = feature( name = "fastbuild", flag_sets = [ flag_set( actions = [ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile], flag_groups = [flag_group(flags = ["/Od", "/Z7"])], ), flag_set( actions = all_link_actions, flag_groups = [ flag_group( flags = ["/DEBUG:FASTLINK", "/INCREMENTAL:NO"], ), ], ), ], implies = ["generate_pdb_file"], ) user_compile_flags_feature = feature( name = "user_compile_flags", flag_sets = [ flag_set( actions = [ ACTION_NAMES.preprocess_assemble, ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile, ACTION_NAMES.cpp_header_parsing, ACTION_NAMES.cpp_module_compile, ACTION_NAMES.cpp_module_codegen, ], flag_groups = [ flag_group( flags = ["%{user_compile_flags}"], iterate_over = "user_compile_flags", expand_if_available = "user_compile_flags", ), ], ), ], ) archiver_flags_feature = feature( name = "archiver_flags", flag_sets = [ flag_set( actions = [ACTION_NAMES.cpp_link_static_library], flag_groups = [ flag_group( flags = ["/OUT:%{output_execpath}"], expand_if_available = "output_execpath", ), flag_group( flags = ["/MACHINE:X64"], ), ], ), ], ) default_link_flags_feature = feature( name = "default_link_flags", enabled = True, flag_sets = [ flag_set( actions = all_link_actions, flag_groups = [flag_group(flags = ["/MACHINE:X64"])], ), ], ) static_link_msvcrt_feature = feature(name = "static_link_msvcrt") dynamic_link_msvcrt_debug_feature = feature( name = "dynamic_link_msvcrt_debug", flag_sets = [ flag_set( actions = [ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile], flag_groups = [flag_group(flags = ["/MDd"])], ), flag_set( actions = all_link_actions, flag_groups = [flag_group(flags = ["/DEFAULTLIB:msvcrtd.lib"])], ), ], requires = [feature_set(features = ["dbg"])], ) dbg_feature = feature( name = "dbg", flag_sets = [ flag_set( actions = [ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile], flag_groups = [flag_group(flags = ["/Od", "/Z7"])], ), flag_set( actions = all_link_actions, flag_groups = [ flag_group( flags = ["/DEBUG:FULL", "/INCREMENTAL:NO"], ), ], ), ], implies = ["generate_pdb_file"], ) opt_feature = feature( name = "opt", flag_sets = [ flag_set( actions = [ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile], flag_groups = [flag_group(flags = ["/O2"])], ), ], implies = ["frame_pointer"], ) supports_interface_shared_libraries_feature = feature( name = "supports_interface_shared_libraries", enabled = True, ) user_link_flags_feature = feature( name = "user_link_flags", flag_sets = [ flag_set( actions = all_link_actions, flag_groups = [ flag_group( flags = ["%{user_link_flags}"], iterate_over = "user_link_flags", expand_if_available = "user_link_flags", ), ], ), ], ) default_compile_flags_feature = feature( name = "default_compile_flags", enabled = True, flag_sets = [ flag_set( actions = [ ACTION_NAMES.assemble, ACTION_NAMES.preprocess_assemble, ACTION_NAMES.linkstamp_compile, ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile, ACTION_NAMES.cpp_header_parsing, ACTION_NAMES.cpp_module_compile, ACTION_NAMES.cpp_module_codegen, ACTION_NAMES.lto_backend, ACTION_NAMES.clif_match, ], flag_groups = [ flag_group( flags = [ "/DCOMPILER_MSVC", "/DNOMINMAX", "/D_WIN32_WINNT=0x0601", "/D_CRT_SECURE_NO_DEPRECATE", "/D_CRT_SECURE_NO_WARNINGS", "/bigobj", "/Zm500", "/EHsc", "/wd4351", "/wd4291", "/wd4250", "/wd4996", ], ), ], ), ], ) msvc_compile_env_feature = feature( name = "msvc_compile_env", env_sets = [ env_set( actions = [ ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile, ACTION_NAMES.cpp_module_compile, ACTION_NAMES.cpp_module_codegen, ACTION_NAMES.cpp_header_parsing, ACTION_NAMES.assemble, ACTION_NAMES.preprocess_assemble, ], env_entries = [env_entry(key = "INCLUDE", value = "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\INCLUDE;C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.10240.0\\ucrt;C:\\Program Files (x86)\\Windows Kits\\8.1\\include\\shared;C:\\Program Files (x86)\\Windows Kits\\8.1\\include\\um;C:\\Program Files (x86)\\Windows Kits\\8.1\\include\\winrt;")], ), ], ) preprocessor_defines_feature = feature( name = "preprocessor_defines", enabled = True, flag_sets = [ flag_set( actions = [ ACTION_NAMES.assemble, ACTION_NAMES.preprocess_assemble, ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile, ACTION_NAMES.cpp_header_parsing, ACTION_NAMES.cpp_module_compile, ], flag_groups = [ flag_group( flags = ["/D%{preprocessor_defines}"], iterate_over = "preprocessor_defines", ), ], ), ], ) generate_pdb_file_feature = feature( name = "generate_pdb_file", requires = [ feature_set(features = ["dbg"]), feature_set(features = ["fastbuild"]), ], ) output_execpath_flags_feature = feature( name = "output_execpath_flags", flag_sets = [ flag_set( actions = all_link_actions, flag_groups = [ flag_group( flags = ["/OUT:%{output_execpath}"], expand_if_available = "output_execpath", ), ], ), ], ) dynamic_link_msvcrt_no_debug_feature = feature( name = "dynamic_link_msvcrt_no_debug", flag_sets = [ flag_set( actions = [ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile], flag_groups = [flag_group(flags = ["/MD"])], ), flag_set( actions = all_link_actions, flag_groups = [flag_group(flags = ["/DEFAULTLIB:msvcrt.lib"])], ), ], requires = [ feature_set(features = ["fastbuild"]), feature_set(features = ["opt"]), ], ) disable_assertions_feature = feature( name = "disable_assertions", enabled = True, flag_sets = [ flag_set( actions = [ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile], flag_groups = [flag_group(flags = ["/DNDEBUG"])], with_features = [with_feature_set(features = ["opt"])], ), ], ) has_configured_linker_path_feature = feature(name = "has_configured_linker_path") supports_dynamic_linker_feature = feature(name = "supports_dynamic_linker", enabled = True) no_stripping_feature = feature(name = "no_stripping") linker_param_file_feature = feature( name = "linker_param_file", flag_sets = [ flag_set( actions = all_link_actions + [ACTION_NAMES.cpp_link_static_library], flag_groups = [ flag_group( flags = ["@%{linker_param_file}"], expand_if_available = "linker_param_file", ), ], ), ], ) ignore_noisy_warnings_feature = feature( name = "ignore_noisy_warnings", enabled = True, flag_sets = [ flag_set( actions = [ACTION_NAMES.cpp_link_static_library], flag_groups = [flag_group(flags = ["/ignore:4221"])], ), ], ) no_legacy_features_feature = feature(name = "no_legacy_features") parse_showincludes_feature = feature( name = "parse_showincludes", flag_sets = [ flag_set( actions = [ ACTION_NAMES.preprocess_assemble, ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile, ACTION_NAMES.cpp_module_compile, ACTION_NAMES.cpp_header_parsing, ], flag_groups = [flag_group(flags = ["/showIncludes"])], ), ], ) static_link_msvcrt_no_debug_feature = feature( name = "static_link_msvcrt_no_debug", flag_sets = [ flag_set( actions = [ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile], flag_groups = [flag_group(flags = ["/MT"])], ), flag_set( actions = all_link_actions, flag_groups = [flag_group(flags = ["/DEFAULTLIB:libcmt.lib"])], ), ], requires = [ feature_set(features = ["fastbuild"]), feature_set(features = ["opt"]), ], ) treat_warnings_as_errors_feature = feature( name = "treat_warnings_as_errors", flag_sets = [ flag_set( actions = [ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile], flag_groups = [flag_group(flags = ["/WX"])], ), ], ) windows_export_all_symbols_feature = feature(name = "windows_export_all_symbols") no_windows_export_all_symbols_feature = feature(name = "no_windows_export_all_symbols") include_paths_feature = feature( name = "include_paths", enabled = True, flag_sets = [ flag_set( actions = [ ACTION_NAMES.assemble, ACTION_NAMES.preprocess_assemble, ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile, ACTION_NAMES.cpp_header_parsing, ACTION_NAMES.cpp_module_compile, ], flag_groups = [ flag_group( flags = ["/I%{quote_include_paths}"], iterate_over = "quote_include_paths", ), flag_group( flags = ["/I%{include_paths}"], iterate_over = "include_paths", ), flag_group( flags = ["/I%{system_include_paths}"], iterate_over = "system_include_paths", ), ], ), ], ) linkstamps_feature = feature( name = "linkstamps", flag_sets = [ flag_set( actions = all_link_actions, flag_groups = [ flag_group( flags = ["%{linkstamp_paths}"], iterate_over = "linkstamp_paths", expand_if_available = "linkstamp_paths", ), ], ), ], ) targets_windows_feature = feature( name = "targets_windows", enabled = True, implies = ["copy_dynamic_libraries_to_binary"], ) linker_subsystem_flag_feature = feature( name = "linker_subsystem_flag", flag_sets = [ flag_set( actions = all_link_actions, flag_groups = [flag_group(flags = ["/SUBSYSTEM:CONSOLE"])], ), ], ) static_link_msvcrt_debug_feature = feature( name = "static_link_msvcrt_debug", flag_sets = [ flag_set( actions = [ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile], flag_groups = [flag_group(flags = ["/MTd"])], ), flag_set( actions = all_link_actions, flag_groups = [flag_group(flags = ["/DEFAULTLIB:libcmtd.lib"])], ), ], requires = [feature_set(features = ["dbg"])], ) frame_pointer_feature = feature( name = "frame_pointer", flag_sets = [ flag_set( actions = [ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile], flag_groups = [flag_group(flags = ["/Oy-"])], ), ], ) compiler_output_flags_feature = feature( name = "compiler_output_flags", flag_sets = [ flag_set( actions = [ACTION_NAMES.assemble], flag_groups = [ flag_group( flag_groups = [ flag_group( flags = ["/Fo%{output_file}", "/Zi"], expand_if_available = "output_file", expand_if_not_available = "output_assembly_file", ), ], expand_if_not_available = "output_preprocess_file", ), ], ), flag_set( actions = [ ACTION_NAMES.preprocess_assemble, ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile, ACTION_NAMES.cpp_header_parsing, ACTION_NAMES.cpp_module_compile, ACTION_NAMES.cpp_module_codegen, ], flag_groups = [ flag_group( flag_groups = [ flag_group( flags = ["/Fo%{output_file}"], expand_if_not_available = "output_preprocess_file", ), ], expand_if_available = "output_file", expand_if_not_available = "output_assembly_file", ), flag_group( flag_groups = [ flag_group( flags = ["/Fa%{output_file}"], expand_if_available = "output_assembly_file", ), ], expand_if_available = "output_file", ), flag_group( flag_groups = [ flag_group( flags = ["/P", "/Fi%{output_file}"], expand_if_available = "output_preprocess_file", ), ], expand_if_available = "output_file", ), ], ), ], ) nologo_feature = feature( name = "nologo", flag_sets = [ flag_set( actions = [ ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile, ACTION_NAMES.cpp_module_compile, ACTION_NAMES.cpp_module_codegen, ACTION_NAMES.cpp_header_parsing, ACTION_NAMES.assemble, ACTION_NAMES.preprocess_assemble, ACTION_NAMES.cpp_link_executable, ACTION_NAMES.cpp_link_dynamic_library, ACTION_NAMES.cpp_link_nodeps_dynamic_library, ACTION_NAMES.cpp_link_static_library, ], flag_groups = [flag_group(flags = ["/nologo"])], ), ], ) smaller_binary_feature = feature( name = "smaller_binary", enabled = True, flag_sets = [ flag_set( actions = [ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile], flag_groups = [flag_group(flags = ["/Gy", "/Gw"])], with_features = [with_feature_set(features = ["opt"])], ), flag_set( actions = all_link_actions, flag_groups = [flag_group(flags = ["/OPT:ICF", "/OPT:REF"])], with_features = [with_feature_set(features = ["opt"])], ), ], ) compiler_input_flags_feature = feature( name = "compiler_input_flags", flag_sets = [ flag_set( actions = [ ACTION_NAMES.assemble, ACTION_NAMES.preprocess_assemble, ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile, ACTION_NAMES.cpp_header_parsing, ACTION_NAMES.cpp_module_compile, ACTION_NAMES.cpp_module_codegen, ], flag_groups = [ flag_group( flags = ["/c", "%{source_file}"], expand_if_available = "source_file", ), ], ), ], ) def_file_feature = feature( name = "def_file", flag_sets = [ flag_set( actions = all_link_actions, flag_groups = [ flag_group( flags = ["/DEF:%{def_file_path}", "/ignore:4070"], expand_if_available = "def_file_path", ), ], ), ], ) msvc_env_feature = feature( name = "msvc_env", env_sets = [ env_set( actions = [ ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile, ACTION_NAMES.cpp_module_compile, ACTION_NAMES.cpp_module_codegen, ACTION_NAMES.cpp_header_parsing, ACTION_NAMES.assemble, ACTION_NAMES.preprocess_assemble, ACTION_NAMES.cpp_link_executable, ACTION_NAMES.cpp_link_dynamic_library, ACTION_NAMES.cpp_link_nodeps_dynamic_library, ACTION_NAMES.cpp_link_static_library, ], env_entries = [ env_entry(key = "PATH", value = "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\amd64;C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319;C:\\Windows\\Microsoft.NET\\Framework64\\;C:\\Program Files (x86)\\Windows Kits\\8.1\\bin\\x64;C:\\Program Files (x86)\\Windows Kits\\8.1\\bin\\x86;;C:\\Windows\\system32"), env_entry(key = "TMP", value = "C:\\Users\\ContainerAdministrator\\AppData\\Local\\Temp"), env_entry(key = "TEMP", value = "C:\\Users\\ContainerAdministrator\\AppData\\Local\\Temp"), ], ), ], implies = ["msvc_compile_env", "msvc_link_env"], ) features = [ no_legacy_features_feature, nologo_feature, has_configured_linker_path_feature, no_stripping_feature, targets_windows_feature, copy_dynamic_libraries_to_binary_feature, default_compile_flags_feature, msvc_env_feature, msvc_compile_env_feature, msvc_link_env_feature, include_paths_feature, preprocessor_defines_feature, parse_showincludes_feature, generate_pdb_file_feature, shared_flag_feature, linkstamps_feature, output_execpath_flags_feature, archiver_flags_feature, input_param_flags_feature, linker_subsystem_flag_feature, user_link_flags_feature, default_link_flags_feature, linker_param_file_feature, static_link_msvcrt_feature, static_link_msvcrt_no_debug_feature, dynamic_link_msvcrt_no_debug_feature, static_link_msvcrt_debug_feature, dynamic_link_msvcrt_debug_feature, dbg_feature, fastbuild_feature, opt_feature, frame_pointer_feature, disable_assertions_feature, determinism_feature, treat_warnings_as_errors_feature, smaller_binary_feature, ignore_noisy_warnings_feature, user_compile_flags_feature, sysroot_feature, unfiltered_compile_flags_feature, compiler_param_file_feature, compiler_output_flags_feature, compiler_input_flags_feature, def_file_feature, windows_export_all_symbols_feature, no_windows_export_all_symbols_feature, supports_dynamic_linker_feature, supports_interface_shared_libraries_feature, ] artifact_name_patterns = [ artifact_name_pattern( category_name = "object_file", prefix = "", extension = ".obj", ), artifact_name_pattern( category_name = "static_library", prefix = "", extension = ".lib", ), artifact_name_pattern( category_name = "alwayslink_static_library", prefix = "", extension = ".lo.lib", ), artifact_name_pattern( category_name = "executable", prefix = "", extension = ".exe", ), artifact_name_pattern( category_name = "dynamic_library", prefix = "", extension = ".dll", ), artifact_name_pattern( category_name = "interface_library", prefix = "", extension = ".if.lib", ), ] make_variables = [] tool_paths = [ tool_path(name = "ar", path = "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/amd64/lib.exe"), tool_path(name = "ml", path = "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/amd64/ml64.exe"), tool_path(name = "cpp", path = "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/amd64/cl.exe"), tool_path(name = "gcc", path = "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/amd64/cl.exe"), tool_path(name = "gcov", path = "wrapper/bin/msvc_nop.bat"), tool_path(name = "ld", path = "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/amd64/link.exe"), tool_path(name = "nm", path = "wrapper/bin/msvc_nop.bat"), tool_path( name = "objcopy", path = "wrapper/bin/msvc_nop.bat", ), tool_path( name = "objdump", path = "wrapper/bin/msvc_nop.bat", ), tool_path( name = "strip", path = "wrapper/bin/msvc_nop.bat", ), ] return cc_common.create_cc_toolchain_config_info( ctx = ctx, features = features, action_configs = action_configs, artifact_name_patterns = artifact_name_patterns, cxx_builtin_include_directories = cxx_builtin_include_directories, toolchain_identifier = toolchain_identifier, host_system_name = host_system_name, target_system_name = target_system_name, target_cpu = target_cpu, target_libc = target_libc, compiler = compiler, abi_version = abi_version, abi_libc_version = abi_libc_version, tool_paths = tool_paths, make_variables = make_variables, builtin_sysroot = builtin_sysroot, cc_target_os = None, ) def _windows_msys_mingw_impl(ctx): toolchain_identifier = "msys_x64_mingw" host_system_name = "local" target_system_name = "local" target_cpu = "x64_windows" target_libc = "mingw" compiler = "mingw-gcc" abi_version = "local" abi_libc_version = "local" cc_target_os = None builtin_sysroot = None action_configs = [] targets_windows_feature = feature( name = "targets_windows", implies = ["copy_dynamic_libraries_to_binary"], enabled = True, ) copy_dynamic_libraries_to_binary_feature = feature(name = "copy_dynamic_libraries_to_binary") gcc_env_feature = feature( name = "gcc_env", enabled = True, env_sets = [ env_set( actions = [ ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile, ACTION_NAMES.cpp_module_compile, ACTION_NAMES.cpp_module_codegen, ACTION_NAMES.cpp_header_parsing, ACTION_NAMES.assemble, ACTION_NAMES.preprocess_assemble, ACTION_NAMES.cpp_link_executable, ACTION_NAMES.cpp_link_dynamic_library, ACTION_NAMES.cpp_link_nodeps_dynamic_library, ACTION_NAMES.cpp_link_static_library, ], env_entries = [ env_entry(key = "PATH", value = "c:/tools/msys64/mingw64/bin"), ], ), ], ) msys_mingw_flags = [ "-std=gnu++0x", ] msys_mingw_link_flags = [ "-lstdc++", ] default_compile_flags_feature = feature( name = "default_compile_flags", enabled = True, flag_sets = [ flag_set( actions = [ ACTION_NAMES.assemble, ACTION_NAMES.preprocess_assemble, ACTION_NAMES.linkstamp_compile, ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile, ACTION_NAMES.cpp_header_parsing, ACTION_NAMES.cpp_module_compile, ACTION_NAMES.cpp_module_codegen, ACTION_NAMES.lto_backend, ACTION_NAMES.clif_match, ], ), flag_set( actions = [ ACTION_NAMES.linkstamp_compile, ACTION_NAMES.cpp_compile, ACTION_NAMES.cpp_header_parsing, ACTION_NAMES.cpp_module_compile, ACTION_NAMES.cpp_module_codegen, ACTION_NAMES.lto_backend, ACTION_NAMES.clif_match, ], flag_groups = ([flag_group(flags = msys_mingw_flags)] if msys_mingw_flags else []), ), ], ) compiler_param_file_feature = feature( name = "compiler_param_file", ) default_link_flags_feature = feature( name = "default_link_flags", enabled = True, flag_sets = [ flag_set( actions = all_link_actions, flag_groups = ([flag_group(flags = msys_mingw_link_flags)] if msys_mingw_link_flags else []), ), ], ) supports_dynamic_linker_feature = feature(name = "supports_dynamic_linker", enabled = True) features = [ targets_windows_feature, copy_dynamic_libraries_to_binary_feature, gcc_env_feature, default_compile_flags_feature, compiler_param_file_feature, default_link_flags_feature, supports_dynamic_linker_feature, ] cxx_builtin_include_directories = [ # This is a workaround for https://github.com/bazelbuild/bazel/issues/5087. "C:\\botcode\\w", "c:/tools/msys64/mingw64/", "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\INCLUDE", "C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.10240.0\\ucrt", "C:\\Program Files (x86)\\Windows Kits\\8.1\\include\\shared", "C:\\Program Files (x86)\\Windows Kits\\8.1\\include\\um", "C:\\Program Files (x86)\\Windows Kits\\8.1\\include\\winrt", ] artifact_name_patterns = [ artifact_name_pattern( category_name = "executable", prefix = "", extension = ".exe", ), ] make_variables = [] tool_paths = [ tool_path(name = "ar", path = "c:/tools/msys64/mingw64/bin/ar"), tool_path(name = "compat-ld", path = "c:/tools/msys64/mingw64/bin/ld"), tool_path(name = "cpp", path = "c:/tools/msys64/mingw64/bin/cpp"), tool_path(name = "dwp", path = "c:/tools/msys64/mingw64/bin/dwp"), tool_path(name = "gcc", path = "c:/tools/msys64/mingw64/bin/gcc"), tool_path(name = "gcov", path = "c:/tools/msys64/mingw64/bin/gcov"), tool_path(name = "ld", path = "c:/tools/msys64/mingw64/bin/ld"), tool_path(name = "nm", path = "c:/tools/msys64/mingw64/bin/nm"), tool_path(name = "objcopy", path = "c:/tools/msys64/mingw64/bin/objcopy"), tool_path(name = "objdump", path = "c:/tools/msys64/mingw64/bin/objdump"), tool_path(name = "strip", path = "c:/tools/msys64/mingw64/bin/strip"), ] return cc_common.create_cc_toolchain_config_info( ctx = ctx, features = features, action_configs = action_configs, artifact_name_patterns = artifact_name_patterns, cxx_builtin_include_directories = cxx_builtin_include_directories, toolchain_identifier = toolchain_identifier, host_system_name = host_system_name, target_system_name = target_system_name, target_cpu = target_cpu, target_libc = target_libc, compiler = compiler, abi_version = abi_version, abi_libc_version = abi_libc_version, tool_paths = tool_paths, make_variables = make_variables, builtin_sysroot = builtin_sysroot, cc_target_os = cc_target_os, ) def _armeabi_impl(ctx): toolchain_identifier = "stub_armeabi-v7a" host_system_name = "armeabi-v7a" target_system_name = "armeabi-v7a" target_cpu = "armeabi-v7a" target_libc = "armeabi-v7a" compiler = "compiler" abi_version = "armeabi-v7a" abi_libc_version = "armeabi-v7a" cc_target_os = None builtin_sysroot = None action_configs = [] supports_pic_feature = feature(name = "supports_pic", enabled = True) supports_dynamic_linker_feature = feature(name = "supports_dynamic_linker", enabled = True) features = [supports_dynamic_linker_feature, supports_pic_feature] cxx_builtin_include_directories = [ # This is a workaround for https://github.com/bazelbuild/bazel/issues/5087. "C:\\botcode\\w", ] artifact_name_patterns = [] make_variables = [] tool_paths = [ tool_path(name = "ar", path = "/bin/false"), tool_path(name = "compat-ld", path = "/bin/false"), tool_path(name = "cpp", path = "/bin/false"), tool_path(name = "dwp", path = "/bin/false"), tool_path(name = "gcc", path = "/bin/false"), tool_path(name = "gcov", path = "/bin/false"), tool_path(name = "ld", path = "/bin/false"), tool_path(name = "nm", path = "/bin/false"), tool_path(name = "objcopy", path = "/bin/false"), tool_path(name = "objdump", path = "/bin/false"), tool_path(name = "strip", path = "/bin/false"), ] return cc_common.create_cc_toolchain_config_info( ctx = ctx, features = features, action_configs = action_configs, artifact_name_patterns = artifact_name_patterns, cxx_builtin_include_directories = cxx_builtin_include_directories, toolchain_identifier = toolchain_identifier, host_system_name = host_system_name, target_system_name = target_system_name, target_cpu = target_cpu, target_libc = target_libc, compiler = compiler, abi_version = abi_version, abi_libc_version = abi_libc_version, tool_paths = tool_paths, make_variables = make_variables, builtin_sysroot = builtin_sysroot, cc_target_os = cc_target_os, ) def _impl(ctx): if ctx.attr.cpu == "armeabi-v7a": return _armeabi_impl(ctx) elif ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "msvc-cl": return _windows_msvc_impl(ctx) elif ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "mingw-gcc": return _windows_msys_mingw_impl(ctx) tool_paths = [ tool_path(name = "ar", path = "c:/tools/msys64/usr/bin/ar"), tool_path(name = "compat-ld", path = "c:/tools/msys64/usr/bin/ld"), tool_path(name = "cpp", path = "c:/tools/msys64/usr/bin/cpp"), tool_path(name = "dwp", path = "c:/tools/msys64/usr/bin/dwp"), tool_path(name = "gcc", path = "c:/tools/msys64/usr/bin/gcc"), tool_path(name = "gcov", path = "c:/tools/msys64/usr/bin/gcov"), tool_path(name = "ld", path = "c:/tools/msys64/usr/bin/ld"), tool_path(name = "nm", path = "c:/tools/msys64/usr/bin/nm"), tool_path(name = "objcopy", path = "c:/tools/msys64/usr/bin/objcopy"), tool_path(name = "objdump", path = "c:/tools/msys64/usr/bin/objdump"), tool_path(name = "strip", path = "c:/tools/msys64/usr/bin/strip"), ] cxx_builtin_include_directories = [ # This is a workaround for https://github.com/bazelbuild/bazel/issues/5087. "C:\\botcode\\w", "c:/tools/msys64/usr/", "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\INCLUDE", "C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.10240.0\\ucrt", "C:\\Program Files (x86)\\Windows Kits\\8.1\\include\\shared", "C:\\Program Files (x86)\\Windows Kits\\8.1\\include\\um", "C:\\Program Files (x86)\\Windows Kits\\8.1\\include\\winrt", ] action_configs = [] compile_flags = [ ] dbg_compile_flags = [ ] opt_compile_flags = [ ] cxx_flags = [ "-std=gnu++0x", ] link_flags = [ "-lstdc++", ] opt_link_flags = [ ] unfiltered_compile_flags = [ ] targets_windows_feature = feature( name = "targets_windows", implies = ["copy_dynamic_libraries_to_binary"], enabled = True, ) copy_dynamic_libraries_to_binary_feature = feature(name = "copy_dynamic_libraries_to_binary") gcc_env_feature = feature( name = "gcc_env", enabled = True, env_sets = [ env_set( actions = [ ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile, ACTION_NAMES.cpp_module_compile, ACTION_NAMES.cpp_module_codegen, ACTION_NAMES.cpp_header_parsing, ACTION_NAMES.assemble, ACTION_NAMES.preprocess_assemble, ACTION_NAMES.cpp_link_executable, ACTION_NAMES.cpp_link_dynamic_library, ACTION_NAMES.cpp_link_nodeps_dynamic_library, ACTION_NAMES.cpp_link_static_library, ], env_entries = [ env_entry(key = "PATH", value = "c:/tools/msys64/usr/bin"), ], ), ], ) windows_features = [ targets_windows_feature, copy_dynamic_libraries_to_binary_feature, gcc_env_feature, ] supports_pic_feature = feature( name = "supports_pic", enabled = True, ) supports_start_end_lib_feature = feature( name = "supports_start_end_lib", enabled = True, ) default_compile_flags_feature = feature( name = "default_compile_flags", enabled = True, flag_sets = [ flag_set( actions = [ ACTION_NAMES.assemble, ACTION_NAMES.preprocess_assemble, ACTION_NAMES.linkstamp_compile, ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile, ACTION_NAMES.cpp_header_parsing, ACTION_NAMES.cpp_module_compile, ACTION_NAMES.cpp_module_codegen, ACTION_NAMES.lto_backend, ACTION_NAMES.clif_match, ], flag_groups = ([flag_group(flags = compile_flags)] if compile_flags else []), ), flag_set( actions = [ ACTION_NAMES.assemble, ACTION_NAMES.preprocess_assemble, ACTION_NAMES.linkstamp_compile, ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile, ACTION_NAMES.cpp_header_parsing, ACTION_NAMES.cpp_module_compile, ACTION_NAMES.cpp_module_codegen, ACTION_NAMES.lto_backend, ACTION_NAMES.clif_match, ], flag_groups = ([flag_group(flags = dbg_compile_flags)] if dbg_compile_flags else []), with_features = [with_feature_set(features = ["dbg"])], ), flag_set( actions = [ ACTION_NAMES.assemble, ACTION_NAMES.preprocess_assemble, ACTION_NAMES.linkstamp_compile, ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile, ACTION_NAMES.cpp_header_parsing, ACTION_NAMES.cpp_module_compile, ACTION_NAMES.cpp_module_codegen, ACTION_NAMES.lto_backend, ACTION_NAMES.clif_match, ], flag_groups = ([flag_group(flags = opt_compile_flags)] if opt_compile_flags else []), with_features = [with_feature_set(features = ["opt"])], ), flag_set( actions = [ ACTION_NAMES.linkstamp_compile, ACTION_NAMES.cpp_compile, ACTION_NAMES.cpp_header_parsing, ACTION_NAMES.cpp_module_compile, ACTION_NAMES.cpp_module_codegen, ACTION_NAMES.lto_backend, ACTION_NAMES.clif_match, ], flag_groups = ([flag_group(flags = cxx_flags)] if cxx_flags else []), ), ], ) default_link_flags_feature = feature( name = "default_link_flags", enabled = True, flag_sets = [ flag_set( actions = all_link_actions, flag_groups = ([flag_group(flags = link_flags)] if link_flags else []), ), flag_set( actions = all_link_actions, flag_groups = ([flag_group(flags = opt_link_flags)] if opt_link_flags else []), with_features = [with_feature_set(features = ["opt"])], ), ], ) dbg_feature = feature(name = "dbg") opt_feature = feature(name = "opt") sysroot_feature = feature( name = "sysroot", enabled = True, flag_sets = [ flag_set( actions = [ ACTION_NAMES.preprocess_assemble, ACTION_NAMES.linkstamp_compile, ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile, ACTION_NAMES.cpp_header_parsing, ACTION_NAMES.cpp_module_compile, ACTION_NAMES.cpp_module_codegen, ACTION_NAMES.lto_backend, ACTION_NAMES.clif_match, ACTION_NAMES.cpp_link_executable, ACTION_NAMES.cpp_link_dynamic_library, ACTION_NAMES.cpp_link_nodeps_dynamic_library, ], flag_groups = [ flag_group( flags = ["--sysroot=%{sysroot}"], expand_if_available = "sysroot", ), ], ), ], ) fdo_optimize_feature = feature( name = "fdo_optimize", flag_sets = [ flag_set( actions = [ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile], flag_groups = [ flag_group( flags = [ "-fprofile-use=%{fdo_profile_path}", "-fprofile-correction", ], expand_if_available = "fdo_profile_path", ), ], ), ], provides = ["profile"], ) supports_dynamic_linker_feature = feature(name = "supports_dynamic_linker", enabled = True) user_compile_flags_feature = feature( name = "user_compile_flags", enabled = True, flag_sets = [ flag_set( actions = [ ACTION_NAMES.assemble, ACTION_NAMES.preprocess_assemble, ACTION_NAMES.linkstamp_compile, ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile, ACTION_NAMES.cpp_header_parsing, ACTION_NAMES.cpp_module_compile, ACTION_NAMES.cpp_module_codegen, ACTION_NAMES.lto_backend, ACTION_NAMES.clif_match, ], flag_groups = [ flag_group( flags = ["%{user_compile_flags}"], iterate_over = "user_compile_flags", expand_if_available = "user_compile_flags", ), ], ), ], ) unfiltered_compile_flags_feature = feature( name = "unfiltered_compile_flags", enabled = True, flag_sets = [ flag_set( actions = [ ACTION_NAMES.assemble, ACTION_NAMES.preprocess_assemble, ACTION_NAMES.linkstamp_compile, ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile, ACTION_NAMES.cpp_header_parsing, ACTION_NAMES.cpp_module_compile, ACTION_NAMES.cpp_module_codegen, ACTION_NAMES.lto_backend, ACTION_NAMES.clif_match, ], flag_groups = ([flag_group(flags = unfiltered_compile_flags)] if unfiltered_compile_flags else []), ), ], ) features = windows_features + [ supports_pic_feature, default_compile_flags_feature, default_link_flags_feature, fdo_optimize_feature, supports_dynamic_linker_feature, dbg_feature, opt_feature, user_compile_flags_feature, sysroot_feature, unfiltered_compile_flags_feature, ] artifact_name_patterns = [ artifact_name_pattern(category_name = "executable", prefix = "", extension = ".exe"), ] make_variables = [] return cc_common.create_cc_toolchain_config_info( ctx = ctx, features = features, action_configs = action_configs, artifact_name_patterns = artifact_name_patterns, cxx_builtin_include_directories = cxx_builtin_include_directories, toolchain_identifier = "msys_x64", host_system_name = "local", target_system_name = "local", target_cpu = "x64_windows", target_libc = "msys", compiler = "msys-gcc", abi_version = "local", abi_libc_version = "local", tool_paths = tool_paths, make_variables = make_variables, builtin_sysroot = "", cc_target_os = None, ) cc_toolchain_config = rule( implementation = _impl, attrs = { "cpu": attr.string(mandatory = True), "compiler": attr.string(), }, provides = [CcToolchainConfigInfo], )