Extract Windows logic for c++ autoconfiguration into a separate Starlark rule
This cl redirects windows_cc_configure to use a templated BUILD file and its own cc_toolchain_config implementation. It also extracts the logic that creates CcToolchainConfig info for armeabi-v7a into a separate rule.
RELNOTES: None.
PiperOrigin-RevId: 249011904
diff --git a/tools/cpp/BUILD.tpl b/tools/cpp/BUILD.tpl
index d32f3e1..be1fbf5 100644
--- a/tools/cpp/BUILD.tpl
+++ b/tools/cpp/BUILD.tpl
@@ -17,6 +17,7 @@
package(default_visibility = ["//visibility:public"])
load(":cc_toolchain_config.bzl", "cc_toolchain_config")
+load(":armeabi_cc_toolchain_config.bzl", "armeabi_cc_toolchain_config")
load("@local_config_platform//:constraints.bzl", "HOST_CONSTRAINTS")
licenses(["notice"]) # Apache 2.0
@@ -98,11 +99,7 @@
supports_param_files = 1,
)
-cc_toolchain_config(
- name = "stub_armeabi-v7a",
- cpu = "armeabi-v7a",
- compiler = "compiler",
-)
+armeabi_cc_toolchain_config(name = "stub_armeabi-v7a")
toolchain(
name = "cc-toolchain-armeabi-v7a",
diff --git a/tools/cpp/BUILD.static.windows b/tools/cpp/BUILD.windows.tpl
similarity index 69%
rename from tools/cpp/BUILD.static.windows
rename to tools/cpp/BUILD.windows.tpl
index 749e2fb..bd45b58 100644
--- a/tools/cpp/BUILD.static.windows
+++ b/tools/cpp/BUILD.windows.tpl
@@ -16,8 +16,8 @@
package(default_visibility = ["//visibility:public"])
-load(":cc_toolchain_config.bzl", "cc_toolchain_config")
-
+load(":windows_cc_toolchain_config.bzl", "cc_toolchain_config")
+load(":armeabi_cc_toolchain_config.bzl", "armeabi_cc_toolchain_config")
cc_library(
name = "malloc",
)
@@ -60,6 +60,16 @@
name = "msys_x64",
cpu = "x64_windows",
compiler = "msys-gcc",
+ host_system_name = "local",
+ target_system_name = "local",
+ target_libc = "msys",
+ abi_version = "local",
+ abi_libc_version = "local",
+ cxx_builtin_include_directories = [%{cxx_builtin_include_directories}],
+ tool_paths = {%{tool_paths}},
+ tool_bin_path = "%{tool_bin_path}",
+ dbg_mode_debug_flag = "%{dbg_mode_debug_flag}",
+ fastbuild_mode_debug_flag = "%{fastbuild_mode_debug_flag}",
)
toolchain(
@@ -96,6 +106,16 @@
name = "msys_x64_mingw",
cpu = "x64_windows",
compiler = "mingw-gcc",
+ host_system_name = "local",
+ target_system_name = "local",
+ target_libc = "mingw",
+ abi_version = "local",
+ abi_libc_version = "local",
+ tool_bin_path = "%{mingw_tool_bin_path}",
+ cxx_builtin_include_directories = [%{mingw_cxx_builtin_include_directories}],
+ tool_paths = {%{mingw_tool_paths}},
+ dbg_mode_debug_flag = "%{dbg_mode_debug_flag}",
+ fastbuild_mode_debug_flag = "%{fastbuild_mode_debug_flag}",
)
toolchain(
@@ -132,6 +152,35 @@
name = "msvc_x64",
cpu = "x64_windows",
compiler = "msvc-cl",
+ host_system_name = "local",
+ target_system_name = "local",
+ target_libc = "msvcrt",
+ abi_version = "local",
+ abi_libc_version = "local",
+ toolchain_identifier = "msvc_x64",
+ msvc_env_tmp = "%{msvc_env_tmp}",
+ msvc_env_path = "%{msvc_env_path}",
+ msvc_env_include = "%{msvc_env_include}",
+ msvc_env_lib = "%{msvc_env_lib}",
+ msvc_cl_path = "%{msvc_cl_path}",
+ msvc_ml_path = "%{msvc_ml_path}",
+ msvc_link_path = "%{msvc_link_path}",
+ msvc_lib_path = "%{msvc_lib_path}",
+ cxx_builtin_include_directories = [%{msvc_cxx_builtin_include_directories}],
+ tool_paths = {
+ "ar": "%{msvc_lib_path}",
+ "ml": "%{msvc_ml_path}",
+ "cpp": "%{msvc_cl_path}",
+ "gcc": "%{msvc_cl_path}",
+ "gcov": "wrapper/bin/msvc_nop.bat",
+ "ld": "%{msvc_link_path}",
+ "nm": "wrapper/bin/msvc_nop.bat",
+ "objcopy": "wrapper/bin/msvc_nop.bat",
+ "objdump": "wrapper/bin/msvc_nop.bat",
+ "strip": "wrapper/bin/msvc_nop.bat",
+ },
+ dbg_mode_debug_flag = "%{dbg_mode_debug_flag}",
+ fastbuild_mode_debug_flag = "%{fastbuild_mode_debug_flag}",
)
toolchain(
@@ -163,11 +212,7 @@
supports_param_files = 1,
)
-cc_toolchain_config(
- name = "stub_armeabi-v7a",
- cpu = "armeabi-v7a",
- compiler = "compiler",
-)
+armeabi_cc_toolchain_config(name = "stub_armeabi-v7a")
toolchain(
name = "cc-toolchain-armeabi-v7a",
diff --git a/tools/cpp/armeabi_cc_toolchain_config.bzl b/tools/cpp/armeabi_cc_toolchain_config.bzl
new file mode 100644
index 0000000..94e0720
--- /dev/null
+++ b/tools/cpp/armeabi_cc_toolchain_config.bzl
@@ -0,0 +1,82 @@
+# 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",
+ "feature",
+ "tool_path",
+)
+
+def _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 = []
+ 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,
+ )
+
+armeabi_cc_toolchain_config = rule(
+ implementation = _impl,
+ attrs = {},
+ provides = [CcToolchainConfigInfo],
+)
diff --git a/tools/cpp/cc_toolchain_config.bzl.tpl b/tools/cpp/cc_toolchain_config.bzl.tpl
index ee8a4bc..25daec6 100644
--- a/tools/cpp/cc_toolchain_config.bzl.tpl
+++ b/tools/cpp/cc_toolchain_config.bzl.tpl
@@ -79,1285 +79,7 @@
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 = [
-%{msvc_cxx_builtin_include_directories}
- ]
-
- 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 = "%{msvc_link_path}")],
- )
-
- 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 = "%{msvc_lib_path}")],
- )
-
- assemble_action = action_config(
- action_name = ACTION_NAMES.assemble,
- implies = [
- "compiler_input_flags",
- "compiler_output_flags",
- "nologo",
- "msvc_env",
- "sysroot",
- ],
- tools = [tool(path = "%{msvc_ml_path}")],
- )
-
- 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 = "%{msvc_ml_path}")],
- )
-
- 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 = "%{msvc_cl_path}")],
- )
-
- 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 = "%{msvc_cl_path}")],
- )
-
- 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 = "%{msvc_link_path}")],
- )
-
- 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 = "%{msvc_link_path}")],
- )
-
- 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 = "%{msvc_env_lib}")],
- ),
- ],
- )
-
- 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 = ["%{fastbuild_mode_debug}", "/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 = ["%{dbg_mode_debug}", "/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 = "%{msvc_env_include}")],
- ),
- ],
- )
-
- 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 = "%{msvc_env_path}"),
- env_entry(key = "TMP", value = "%{msvc_env_tmp}"),
- env_entry(key = "TEMP", value = "%{msvc_env_tmp}"),
- ],
- ),
- ],
- 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 = "%{msvc_lib_path}"),
- tool_path(name = "ml", path = "%{msvc_ml_path}"),
- tool_path(name = "cpp", path = "%{msvc_cl_path}"),
- tool_path(name = "gcc", path = "%{msvc_cl_path}"),
- tool_path(name = "gcov", path = "wrapper/bin/msvc_nop.bat"),
- tool_path(name = "ld", path = "%{msvc_link_path}"),
- 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 = "%{mingw_tool_bin_path}")
- ],
- ),
- ],
- )
-
- msys_mingw_flags = [
- %{msys_x64_mingw_cxx_content}
- ]
- msys_mingw_link_flags = [
- %{msys_x64_mingw_link_content}
- ]
-
- 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 = [
-%{mingw_cxx_builtin_include_directories}
- ]
-
- artifact_name_patterns = [
- artifact_name_pattern(
- category_name = "executable",
- prefix = "",
- extension = ".exe",
- ),
- ]
-
- make_variables = []
- tool_paths = [
-%{mingw_tool_paths}
- ]
-
- 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 = []
- 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_paths}
]
@@ -1396,45 +118,6 @@
%{unfiltered_content}
]
- 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 = "%{tool_bin_path}")
- ],
- ),
- ],
- )
-
- windows_features = [
- targets_windows_feature,
- copy_dynamic_libraries_to_binary_feature,
- gcc_env_feature,
- ]
-
%{coverage_feature}
supports_pic_feature = feature(
@@ -2387,9 +1070,7 @@
],
)
- is_mac = "%{target_libc}" == "macosx"
- is_windows = "%{use_windows_features}" != ""
- is_linux = not (is_mac or is_windows)
+ is_linux = "%{target_libc}" != "macosx"
# TODO(#8303): Windows and Mac crosstools should also declare every feature.
if is_linux:
@@ -2443,7 +1124,7 @@
unfiltered_compile_flags_feature,
])
else:
- features = %{use_windows_features}[
+ features = [
supports_pic_feature,
%{supports_start_end_lib}
%{use_coverage_feature}
@@ -2458,17 +1139,10 @@
unfiltered_compile_flags_feature,
]
- artifact_name_patterns = [
-%{artifact_name_patterns}
- ]
-
- 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 = "%{toolchain_identifier}",
host_system_name = "%{host_system_name}",
@@ -2479,7 +1153,6 @@
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,
)
diff --git a/tools/cpp/unix_cc_configure.bzl b/tools/cpp/unix_cc_configure.bzl
index 50f2595..2eeca8e 100644
--- a/tools/cpp/unix_cc_configure.bzl
+++ b/tools/cpp/unix_cc_configure.bzl
@@ -321,11 +321,17 @@
"""Configure C++ toolchain on Unix platforms."""
paths = resolve_labels(repository_ctx, [
"@bazel_tools//tools/cpp:BUILD.tpl",
+ "@bazel_tools//tools/cpp:armeabi_cc_toolchain_config.bzl",
"@bazel_tools//tools/cpp:cc_toolchain_config.bzl.tpl",
"@bazel_tools//tools/cpp:linux_cc_wrapper.sh.tpl",
"@bazel_tools//tools/cpp:osx_cc_wrapper.sh.tpl",
])
+ repository_ctx.symlink(
+ paths["@bazel_tools//tools/cpp:armeabi_cc_toolchain_config.bzl"],
+ "armeabi_cc_toolchain_config.bzl",
+ )
+
repository_ctx.file("tools/cpp/empty.cc", "int main() {}")
darwin = cpu_value == "darwin"
@@ -518,27 +524,8 @@
],
),
"%{dbg_compile_content}": get_starlark_list(["-g"]),
- "%{msvc_env_tmp}": "",
- "%{msvc_env_path}": "",
- "%{msvc_env_include}": "",
- "%{msvc_env_lib}": "",
- "%{msvc_cl_path}": "",
- "%{msvc_ml_path}": "",
- "%{msvc_link_path}": "",
- "%{msvc_lib_path}": "",
- "%{msvc_cxx_builtin_include_directories}": "",
- "%{msys_x64_mingw_cxx_content}": "",
- "%{msys_x64_mingw_link_content}": "",
- "%{dbg_mode_debug}": "",
- "%{fastbuild_mode_debug}": "",
"%{coverage_feature}": _coverage_feature(repository_ctx, darwin),
"%{use_coverage_feature}": "coverage_feature,",
"%{supports_start_end_lib}": "supports_start_end_lib_feature," if supports_gold_linker else "",
- "%{use_windows_features}": "",
- "%{mingw_tool_paths}": "",
- "%{mingw_cxx_builtin_include_directories}": "",
- "%{artifact_name_patterns}": "",
- "%{tool_bin_path}": "NOT_USED",
- "%{mingw_tool_bin_path}": "NOT_USED",
},
)
diff --git a/tools/cpp/windows_cc_configure.bzl b/tools/cpp/windows_cc_configure.bzl
index 35d0d66..aeda5e9 100644
--- a/tools/cpp/windows_cc_configure.bzl
+++ b/tools/cpp/windows_cc_configure.bzl
@@ -20,8 +20,6 @@
"auto_configure_warning",
"escape_string",
"execute",
- "get_env_var",
- "get_starlark_list",
"is_cc_configure_debug",
"resolve_labels",
)
@@ -83,22 +81,9 @@
tool_path[tool] = tool_bin_path + "/" + tool
else:
tool_path[tool] = "msys_gcc_installation_error.bat"
- tool_paths = (
- ' tool_path (name= "ar", path= "%s"),\n' % tool_path["ar"] +
- ' tool_path (name= "compat-ld", path= "%s"),\n' % tool_path["ld"] +
- ' tool_path (name= "cpp", path= "%s"),\n' % tool_path["cpp"] +
- ' tool_path (name= "dwp", path= "%s"),\n' % tool_path["dwp"] +
- ' tool_path (name= "gcc", path= "%s"),\n' % tool_path["gcc"] +
- ' tool_path (name= "gcov", path= "%s"),\n' % tool_path["gcov"] +
- ' tool_path (name= "ld", path= "%s"),\n' % tool_path["ld"] +
- ' tool_path (name= "nm", path= "%s"),\n' % tool_path["nm"] +
- ' tool_path (name= "objcopy", path= "%s"),\n' % tool_path["objcopy"] +
- ' tool_path (name= "objdump", path= "%s"),\n' % tool_path["objdump"] +
- ' tool_path (name= "strip", path= "%s"),\n' % tool_path["strip"]
- )
+ tool_paths = ",\n ".join(['"%s": "%s"' % (k, v) for k, v in tool_path.items()])
include_directories = (' "%s/",\n ' % tool_path_prefix) if msys_root else ""
- artifact_name_patterns = ' artifact_name_pattern(category_name="executable", prefix="", extension=".exe"),'
- return tool_paths, tool_bin_path, include_directories, artifact_name_patterns
+ return tool_paths, tool_bin_path, include_directories
def _get_system_root(repository_ctx):
"""Get System root path on Windows, default is C:\\\Windows. Doesn't %-escape the result."""
@@ -400,13 +385,21 @@
def configure_windows_toolchain(repository_ctx):
"""Configure C++ toolchain on Windows."""
paths = resolve_labels(repository_ctx, [
- "@bazel_tools//tools/cpp:BUILD.static.windows",
- "@bazel_tools//tools/cpp:cc_toolchain_config.bzl.tpl",
+ "@bazel_tools//tools/cpp:BUILD.windows.tpl",
+ "@bazel_tools//tools/cpp:windows_cc_toolchain_config.bzl",
+ "@bazel_tools//tools/cpp:armeabi_cc_toolchain_config.bzl",
"@bazel_tools//tools/cpp:vc_installation_error.bat.tpl",
"@bazel_tools//tools/cpp:msys_gcc_installation_error.bat",
])
- repository_ctx.symlink(paths["@bazel_tools//tools/cpp:BUILD.static.windows"], "BUILD")
+ repository_ctx.symlink(
+ paths["@bazel_tools//tools/cpp:windows_cc_toolchain_config.bzl"],
+ "windows_cc_toolchain_config.bzl",
+ )
+ repository_ctx.symlink(
+ paths["@bazel_tools//tools/cpp:armeabi_cc_toolchain_config.bzl"],
+ "armeabi_cc_toolchain_config.bzl",
+ )
repository_ctx.symlink(
paths["@bazel_tools//tools/cpp:msys_gcc_installation_error.bat"],
"msys_gcc_installation_error.bat",
@@ -436,14 +429,13 @@
{"%{vc_error_message}": message},
)
- tool_paths_mingw, tool_bin_path_mingw, inc_dir_mingw, _ = _get_escaped_windows_msys_starlark_content(repository_ctx, use_mingw = True)
- tool_paths, tool_bin_path, inc_dir_msys, artifact_patterns = _get_escaped_windows_msys_starlark_content(repository_ctx)
+ tool_paths_mingw, tool_bin_path_mingw, inc_dir_mingw = _get_escaped_windows_msys_starlark_content(repository_ctx, use_mingw = True)
+ tool_paths, tool_bin_path, inc_dir_msys = _get_escaped_windows_msys_starlark_content(repository_ctx)
if not vc_path or missing_tools:
repository_ctx.template(
- "cc_toolchain_config.bzl",
- paths["@bazel_tools//tools/cpp:cc_toolchain_config.bzl.tpl"],
+ "BUILD",
+ paths["@bazel_tools//tools/cpp:BUILD.windows.tpl"],
{
- "%{toolchain_identifier}": "msys_x64",
"%{msvc_env_tmp}": "msvc_not_found",
"%{msvc_env_path}": "msvc_not_found",
"%{msvc_env_include}": "msvc_not_found",
@@ -452,35 +444,13 @@
"%{msvc_ml_path}": "vc_installation_error.bat",
"%{msvc_link_path}": "vc_installation_error.bat",
"%{msvc_lib_path}": "vc_installation_error.bat",
- "%{msvc_cxx_builtin_include_directories}": "",
- "%{msys_x64_mingw_cxx_content}": get_starlark_list(["-std=gnu++0x"]),
- "%{msys_x64_mingw_link_content}": get_starlark_list(["-lstdc++"]),
- "%{dbg_mode_debug}": "/DEBUG",
- "%{fastbuild_mode_debug}": "/DEBUG",
- "%{compile_content}": "",
- "%{cxx_content}": get_starlark_list(["-std=gnu++0x"]),
- "%{link_content}": get_starlark_list(["-lstdc++"]),
- "%{opt_compile_content}": "",
- "%{opt_link_content}": "",
- "%{unfiltered_content}": "",
- "%{dbg_compile_content}": "",
+ "%{dbg_mode_debug_flag}": "/DEBUG",
+ "%{fastbuild_mode_debug_flag}": "/DEBUG",
"%{cxx_builtin_include_directories}": inc_dir_msys,
"%{mingw_cxx_builtin_include_directories}": inc_dir_mingw,
- "%{coverage_feature}": "",
- "%{use_coverage_feature}": "",
- "%{supports_start_end_lib}": "",
- "%{use_windows_features}": "windows_features + ",
- "%{abi_version}": "local",
- "%{abi_libc_version}": "local",
- "%{builtin_sysroot}": "",
- "%{compiler}": "msys-gcc",
- "%{host_system_name}": "local",
- "%{target_libc}": "msys",
- "%{target_cpu}": "x64_windows",
- "%{target_system_name}": "local",
+ "%{msvc_cxx_builtin_include_directories}": "",
"%{tool_paths}": tool_paths,
"%{mingw_tool_paths}": tool_paths_mingw,
- "%{artifact_name_patterns}": artifact_patterns,
"%{tool_bin_path}": tool_bin_path,
"%{mingw_tool_bin_path}": tool_bin_path_mingw,
},
@@ -528,10 +498,9 @@
support_debug_fastlink = _is_support_debug_fastlink(repository_ctx, link_path)
repository_ctx.template(
- "cc_toolchain_config.bzl",
- paths["@bazel_tools//tools/cpp:cc_toolchain_config.bzl.tpl"],
+ "BUILD",
+ paths["@bazel_tools//tools/cpp:BUILD.windows.tpl"],
{
- "%{toolchain_identifier}": "msys_x64",
"%{msvc_env_tmp}": escaped_tmp_dir,
"%{msvc_env_path}": escaped_paths,
"%{msvc_env_include}": escaped_include_paths,
@@ -540,35 +509,13 @@
"%{msvc_ml_path}": msvc_ml_path,
"%{msvc_link_path}": link_path,
"%{msvc_lib_path}": lib_path,
- "%{dbg_mode_debug}": "/DEBUG:FULL" if support_debug_fastlink else "/DEBUG",
- "%{fastbuild_mode_debug}": "/DEBUG:FASTLINK" if support_debug_fastlink else "/DEBUG",
- "%{msys_x64_mingw_cxx_content}": get_starlark_list(["-std=gnu++0x"]),
- "%{msys_x64_mingw_link_content}": get_starlark_list(["-lstdc++"]),
- "%{compile_content}": "",
- "%{cxx_content}": get_starlark_list(["-std=gnu++0x"]),
- "%{link_content}": get_starlark_list(["-lstdc++"]),
- "%{opt_compile_content}": "",
- "%{opt_link_content}": "",
- "%{unfiltered_content}": "",
- "%{dbg_compile_content}": "",
+ "%{dbg_mode_debug_flag}": "/DEBUG:FULL" if support_debug_fastlink else "/DEBUG",
+ "%{fastbuild_mode_debug_flag}": "/DEBUG:FASTLINK" if support_debug_fastlink else "/DEBUG",
"%{cxx_builtin_include_directories}": inc_dir_msys + ",\n ".join(escaped_cxx_include_directories),
"%{msvc_cxx_builtin_include_directories}": " " + ",\n ".join(escaped_cxx_include_directories),
"%{mingw_cxx_builtin_include_directories}": inc_dir_mingw + ",\n ".join(escaped_cxx_include_directories),
- "%{coverage_feature}": "",
- "%{use_coverage_feature}": "",
- "%{supports_start_end_lib}": "",
- "%{use_windows_features}": "windows_features + ",
- "%{abi_version}": "local",
- "%{abi_libc_version}": "local",
- "%{builtin_sysroot}": "",
- "%{compiler}": "msys-gcc",
- "%{host_system_name}": "local",
- "%{target_libc}": "msys",
- "%{target_cpu}": "x64_windows",
- "%{target_system_name}": "local",
"%{tool_paths}": tool_paths,
"%{mingw_tool_paths}": tool_paths_mingw,
- "%{artifact_name_patterns}": artifact_patterns,
"%{tool_bin_path}": tool_bin_path,
"%{mingw_tool_bin_path}": tool_bin_path_mingw,
},
diff --git a/tools/cpp/windows_cc_toolchain_config.bzl b/tools/cpp/windows_cc_toolchain_config.bzl
new file mode 100644
index 0000000..e2aa853
--- /dev/null
+++ b/tools/cpp/windows_cc_toolchain_config.bzl
@@ -0,0 +1,1338 @@
+# 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 for Windows"""
+
+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",
+ "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 _impl(ctx):
+ if ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "msvc-cl":
+ 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",
+ ),
+ ]
+ else:
+ artifact_name_patterns = [
+ artifact_name_pattern(
+ category_name = "executable",
+ prefix = "",
+ extension = ".exe",
+ ),
+ ]
+
+ if ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "msvc-cl":
+ 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 = ctx.attr.msvc_link_path)],
+ )
+
+ 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 = ctx.attr.msvc_lib_path)],
+ )
+
+ assemble_action = action_config(
+ action_name = ACTION_NAMES.assemble,
+ implies = [
+ "compiler_input_flags",
+ "compiler_output_flags",
+ "nologo",
+ "msvc_env",
+ "sysroot",
+ ],
+ tools = [tool(path = ctx.attr.msvc_ml_path)],
+ )
+
+ 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 = ctx.attr.msvc_ml_path)],
+ )
+
+ 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 = ctx.attr.msvc_cl_path)],
+ )
+
+ 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 = ctx.attr.msvc_cl_path)],
+ )
+
+ 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 = ctx.attr.msvc_link_path)],
+ )
+
+ 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 = ctx.attr.msvc_link_path)],
+ )
+
+ 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,
+ ]
+ else:
+ action_configs = []
+
+ if ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "msvc-cl":
+ 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 = ctx.attr.msvc_env_lib)],
+ ),
+ ],
+ )
+
+ 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 = [ctx.attr.fastbuild_mode_debug_flag, "/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 = [ctx.attr.dbg_mode_debug_flag, "/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 = ctx.attr.msvc_env_include)],
+ ),
+ ],
+ )
+
+ 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 = ctx.attr.msvc_env_path),
+ env_entry(key = "TMP", value = ctx.attr.msvc_env_tmp),
+ env_entry(key = "TEMP", value = ctx.attr.msvc_env_tmp),
+ ],
+ ),
+ ],
+ 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,
+ ]
+ else:
+ 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 = ctx.attr.tool_bin_path),
+ ],
+ ),
+ ],
+ )
+
+ default_compile_flags_feature = feature(
+ name = "default_compile_flags",
+ enabled = True,
+ flag_sets = [
+ 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 = ["-std=gnu++0x"])],
+ ),
+ ],
+ )
+
+ default_link_flags_feature = feature(
+ name = "default_link_flags",
+ enabled = True,
+ flag_sets = [
+ flag_set(
+ actions = all_link_actions,
+ flag_groups = [flag_group(flags = ["-lstdc++"])],
+ ),
+ ],
+ )
+
+ supports_dynamic_linker_feature = feature(
+ name = "supports_dynamic_linker",
+ enabled = True,
+ )
+
+ if ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "mingw-gcc":
+ compiler_param_file_feature = feature(
+ name = "compiler_param_file",
+ )
+
+ 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,
+ ]
+ else:
+ supports_pic_feature = feature(
+ name = "supports_pic",
+ enabled = True,
+ )
+ supports_start_end_lib_feature = feature(
+ name = "supports_start_end_lib",
+ enabled = True,
+ )
+
+ 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"],
+ )
+
+ 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",
+ ),
+ ],
+ ),
+ ],
+ )
+
+ features = [
+ targets_windows_feature,
+ copy_dynamic_libraries_to_binary_feature,
+ gcc_env_feature,
+ 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,
+ ]
+
+ tool_paths = [
+ tool_path(name = name, path = path)
+ for name, path in ctx.attr.tool_paths.items()
+ ]
+
+ 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 = ctx.attr.cxx_builtin_include_directories,
+ toolchain_identifier = ctx.attr.toolchain_identifier,
+ host_system_name = ctx.attr.host_system_name,
+ target_system_name = ctx.attr.target_system_name,
+ target_cpu = ctx.attr.cpu,
+ target_libc = ctx.attr.target_libc,
+ compiler = ctx.attr.compiler,
+ abi_version = ctx.attr.abi_version,
+ abi_libc_version = ctx.attr.abi_libc_version,
+ tool_paths = tool_paths,
+ )
+
+cc_toolchain_config = rule(
+ implementation = _impl,
+ attrs = {
+ "cpu": attr.string(mandatory = True),
+ "compiler": attr.string(),
+ "toolchain_identifier": attr.string(),
+ "host_system_name": attr.string(),
+ "target_system_name": attr.string(),
+ "target_libc": attr.string(),
+ "abi_version": attr.string(),
+ "abi_libc_version": attr.string(),
+ "tool_paths": attr.string_dict(),
+ "cxx_builtin_include_directories": attr.string_list(),
+ "msvc_env_tmp": attr.string(default = "msvc_not_found"),
+ "msvc_env_path": attr.string(default = "msvc_not_found"),
+ "msvc_env_include": attr.string(default = "msvc_not_found"),
+ "msvc_env_lib": attr.string(default = "msvc_not_found"),
+ "msvc_cl_path": attr.string(default = "vc_installation_error.bat"),
+ "msvc_ml_path": attr.string(default = "vc_installation_error.bat"),
+ "msvc_link_path": attr.string(default = "vc_installation_error.bat"),
+ "msvc_lib_path": attr.string(default = "vc_installation_error.bat"),
+ "dbg_mode_debug_flag": attr.string(),
+ "fastbuild_mode_debug_flag": attr.string(),
+ "tool_bin_path": attr.string(default = "not_found"),
+ },
+ provides = [CcToolchainConfigInfo],
+)