Automated rollback of commit a34fafd5f5e44a7a0992ef8c01415e766552ae90.
*** Reason for rollback ***
Rolling back. No time before 1.0.
*** Original change description ***
C++: Move tools/cpp from bazel_tools to rules_cc
Here we are duplicating bazel_tools/tools/cpp. The goal is for the BUILD files in bazel_tools/tools/cpp to have an alias that point to rules_cc. Then later on with the incompatible flag these aliases will no longer be valid.
Working towards #8743
RELNOTES:none
PiperOrigin-RevId: 258756552
Change-Id: Ia44c0b5084ed9b28efbf9058e3dc29696db86fac
diff --git a/WORKSPACE b/WORKSPACE
index fe05b45..4641008 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -2,13 +2,13 @@
http_archive(
name = "six_archive",
- build_file = "@//third_party:six.BUILD",
- sha256 = "105f8d68616f8248e24bf0e9372ef04d3cc10104f1980f54d57b2ce73a5ad56a",
- strip_prefix = "six-1.10.0",
urls = [
"https://mirror.bazel.build/pypi.python.org/packages/source/s/six/six-1.10.0.tar.gz",
"https://pypi.python.org/packages/source/s/six/six-1.10.0.tar.gz",
],
+ sha256 = "105f8d68616f8248e24bf0e9372ef04d3cc10104f1980f54d57b2ce73a5ad56a",
+ strip_prefix = "six-1.10.0",
+ build_file = "@//third_party:six.BUILD",
)
bind(
@@ -38,6 +38,12 @@
http_archive(
name = "py_mock",
+ sha256 = "b839dd2d9c117c701430c149956918a423a9863b48b09c90e30a6013e7d2f44f",
+ urls = [
+ "https://mirror.bazel.build/pypi.python.org/packages/source/m/mock/mock-1.0.1.tar.gz",
+ "https://pypi.python.org/packages/source/m/mock/mock-1.0.1.tar.gz",
+ ],
+ strip_prefix = "mock-1.0.1",
patch_cmds = [
"mkdir -p py/mock",
"mv mock.py py/mock/__init__.py",
@@ -45,12 +51,6 @@
"touch py/BUILD",
"""echo 'py_library(name = "mock", srcs = ["__init__.py"], visibility = ["//visibility:public"],)' > py/mock/BUILD""",
],
- sha256 = "b839dd2d9c117c701430c149956918a423a9863b48b09c90e30a6013e7d2f44f",
- strip_prefix = "mock-1.0.1",
- urls = [
- "https://mirror.bazel.build/pypi.python.org/packages/source/m/mock/mock-1.0.1.tar.gz",
- "https://pypi.python.org/packages/source/m/mock/mock-1.0.1.tar.gz",
- ],
)
# TODO(https://github.com/protocolbuffers/protobuf/issues/5918: Remove when protobuf releases protobuf_deps.bzl)
@@ -64,37 +64,22 @@
bind(
name = "zlib",
- actual = "@net_zlib//:zlib",
+ actual = "@net_zlib//:zlib"
)
# Go rules and proto support
http_archive(
name = "io_bazel_rules_go",
- sha256 = "f04d2373bcaf8aa09bccb08a98a57e721306c8f6043a2a0ee610fd6853dcde3d",
urls = [
"https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/0.18.6/rules_go-0.18.6.tar.gz",
"https://github.com/bazelbuild/rules_go/releases/download/0.18.6/rules_go-0.18.6.tar.gz",
],
-)
-
-# We're pinning to a commit because this project does not have a recent release.
-# Nothing special about this commit, though.
-http_archive(
- name = "com_google_googletest",
- sha256 = "0fb00ff413f6b9b80ccee44a374ca7a18af7315aea72a43c62f2acd1ca74e9b5",
- strip_prefix = "googletest-f13bbe2992d188e834339abe6f715b2b2f840a77",
- urls = [
- "https://mirror.bazel.build/github.com/google/googletest/archive/f13bbe2992d188e834339abe6f715b2b2f840a77.tar.gz",
- "https://github.com/google/googletest/archive/f13bbe2992d188e834339abe6f715b2b2f840a77.tar.gz",
- ],
+ sha256 = "f04d2373bcaf8aa09bccb08a98a57e721306c8f6043a2a0ee610fd6853dcde3d",
)
load("@io_bazel_rules_go//go:deps.bzl", "go_rules_dependencies", "go_register_toolchains")
-
go_rules_dependencies()
-
go_register_toolchains()
load("//cc:repositories.bzl", "rules_cc_dependencies")
-
rules_cc_dependencies()
diff --git a/cc/BUILD b/cc/BUILD
index 13e1353..145d2f9 100644
--- a/cc/BUILD
+++ b/cc/BUILD
@@ -1,38 +1,8 @@
-# Copyright 2018 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.
-
-package(default_visibility = ["//visibility:public"])
-
licenses(["notice"]) # Apache 2.0
-exports_files([
- "defs.bzl",
- "action_names.bzl",
-])
-
-# The toolchain type used to distinguish cc toolchains.
alias(
name = "toolchain_type",
actual = "@bazel_tools//tools/cpp:toolchain_type",
)
-filegroup(
- name = "action_names_test_files",
- testonly = True,
- srcs = [
- "BUILD",
- "action_names.bzl",
- ],
- visibility = ["//visibility:public"],
-)
+exports_files(["defs.bzl"])
diff --git a/cc/action_names.bzl b/cc/action_names.bzl
deleted file mode 100644
index 60e8a5f..0000000
--- a/cc/action_names.bzl
+++ /dev/null
@@ -1,122 +0,0 @@
-# Copyright 2018 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.
-"""Constants for action names used for C++ rules."""
-
-# Name for the C compilation action.
-C_COMPILE_ACTION_NAME = "c-compile"
-
-# Name of the C++ compilation action.
-CPP_COMPILE_ACTION_NAME = "c++-compile"
-
-# Name of the linkstamp-compile action.
-LINKSTAMP_COMPILE_ACTION_NAME = "linkstamp-compile"
-
-# Name of the action used to compute CC_FLAGS make variable.
-CC_FLAGS_MAKE_VARIABLE_ACTION_NAME = "cc-flags-make-variable"
-
-# Name of the C++ module codegen action.
-CPP_MODULE_CODEGEN_ACTION_NAME = "c++-module-codegen"
-
-# Name of the C++ header parsing action.
-CPP_HEADER_PARSING_ACTION_NAME = "c++-header-parsing"
-
-# Name of the C++ module compile action.
-CPP_MODULE_COMPILE_ACTION_NAME = "c++-module-compile"
-
-# Name of the assembler action.
-ASSEMBLE_ACTION_NAME = "assemble"
-
-# Name of the assembly preprocessing action.
-PREPROCESS_ASSEMBLE_ACTION_NAME = "preprocess-assemble"
-
-# Name of the action producing ThinLto index.
-LTO_INDEXING_ACTION_NAME = "lto-indexing"
-
-# Name of the action producing ThinLto index for executable.
-LTO_INDEX_FOR_EXECUTABLE_ACTION_NAME = "lto-index-for-executable"
-
-# Name of the action producing ThinLto index for dynamic library.
-LTO_INDEX_FOR_DYNAMIC_LIBRARY_ACTION_NAME = "lto-index-for-dynamic-library"
-
-# Name of the action producing ThinLto index for nodeps dynamic library.
-LTO_INDEX_FOR_NODEPS_DYNAMIC_LIBRARY_ACTION_NAME = "lto-index-for-nodeps-dynamic-library"
-
-# Name of the action compiling lto bitcodes into native objects.
-LTO_BACKEND_ACTION_NAME = "lto-backend"
-
-# Name of the link action producing executable binary.
-CPP_LINK_EXECUTABLE_ACTION_NAME = "c++-link-executable"
-
-# Name of the link action producing dynamic library.
-CPP_LINK_DYNAMIC_LIBRARY_ACTION_NAME = "c++-link-dynamic-library"
-
-# Name of the link action producing dynamic library that doesn't include it's
-# transitive dependencies.
-CPP_LINK_NODEPS_DYNAMIC_LIBRARY_ACTION_NAME = "c++-link-nodeps-dynamic-library"
-
-# Name of the archiving action producing static library.
-CPP_LINK_STATIC_LIBRARY_ACTION_NAME = "c++-link-static-library"
-
-# Name of the action stripping the binary.
-STRIP_ACTION_NAME = "strip"
-
-# A string constant for the objc archive action.
-OBJC_ARCHIVE_ACTION_NAME = "objc-archive"
-
-# A string constant for the objc compilation action.
-OBJC_COMPILE_ACTION_NAME = "objc-compile"
-
-# A string constant for the objc++ compile action.
-OBJCPP_COMPILE_ACTION_NAME = "objc++-compile"
-
-# A string constant for the objc executable link action.
-OBJC_EXECUTABLE_ACTION_NAME = "objc-executable"
-
-# A string constant for the objc++ executable link action.
-OBJCPP_EXECUTABLE_ACTION_NAME = "objc++-executable"
-
-# A string constant for the objc fully-link link action.
-OBJC_FULLY_LINK_ACTION_NAME = "objc-fully-link"
-
-# A string constant for the clif actions.
-CLIF_MATCH_ACTION_NAME = "clif-match"
-
-ACTION_NAMES = struct(
- c_compile = C_COMPILE_ACTION_NAME,
- cpp_compile = CPP_COMPILE_ACTION_NAME,
- linkstamp_compile = LINKSTAMP_COMPILE_ACTION_NAME,
- cc_flags_make_variable = CC_FLAGS_MAKE_VARIABLE_ACTION_NAME,
- cpp_module_codegen = CPP_MODULE_CODEGEN_ACTION_NAME,
- cpp_header_parsing = CPP_HEADER_PARSING_ACTION_NAME,
- cpp_module_compile = CPP_MODULE_COMPILE_ACTION_NAME,
- assemble = ASSEMBLE_ACTION_NAME,
- preprocess_assemble = PREPROCESS_ASSEMBLE_ACTION_NAME,
- lto_indexing = LTO_INDEXING_ACTION_NAME,
- lto_backend = LTO_BACKEND_ACTION_NAME,
- lto_index_for_executable = LTO_INDEX_FOR_EXECUTABLE_ACTION_NAME,
- lto_index_for_dynamic_library = LTO_INDEX_FOR_DYNAMIC_LIBRARY_ACTION_NAME,
- lto_index_for_nodeps_dynamic_library = LTO_INDEX_FOR_NODEPS_DYNAMIC_LIBRARY_ACTION_NAME,
- cpp_link_executable = CPP_LINK_EXECUTABLE_ACTION_NAME,
- cpp_link_dynamic_library = CPP_LINK_DYNAMIC_LIBRARY_ACTION_NAME,
- cpp_link_nodeps_dynamic_library = CPP_LINK_NODEPS_DYNAMIC_LIBRARY_ACTION_NAME,
- cpp_link_static_library = CPP_LINK_STATIC_LIBRARY_ACTION_NAME,
- strip = STRIP_ACTION_NAME,
- objc_archive = OBJC_ARCHIVE_ACTION_NAME,
- objc_compile = OBJC_COMPILE_ACTION_NAME,
- objc_executable = OBJC_EXECUTABLE_ACTION_NAME,
- objc_fully_link = OBJC_FULLY_LINK_ACTION_NAME,
- objcpp_compile = OBJCPP_COMPILE_ACTION_NAME,
- objcpp_executable = OBJCPP_EXECUTABLE_ACTION_NAME,
- clif_match = CLIF_MATCH_ACTION_NAME,
-)
diff --git a/cc/defs.bzl b/cc/defs.bzl
index 9c587b9..01378c5 100644
--- a/cc/defs.bzl
+++ b/cc/defs.bzl
@@ -14,9 +14,6 @@
"""Starlark rules for building C++ projects."""
-load("//cc/private/rules_impl:cc_flags_supplier.bzl", _cc_flags_supplier = "cc_flags_supplier")
-load("//cc/private/rules_impl:compiler_flag.bzl", _compiler_flag = "compiler_flag")
-
_MIGRATION_TAG = "__CC_RULES_MIGRATION_DO_NOT_USE_WILL_BREAK__"
def _add_tags(attrs):
@@ -135,19 +132,3 @@
**attrs: Rule attributes
"""
native.objc_import(**_add_tags(attrs))
-
-def cc_flags_supplier(**attrs):
- """Bazel cc_flags_supplier rule.
-
- Args:
- **attrs: Rule attributes
- """
- _cc_flags_supplier(**_add_tags(attrs))
-
-def compiler_flag(**attrs):
- """Bazel compiler_flag rule.
-
- Args:
- **attrs: Rule attributes
- """
- _compiler_flag(**_add_tags(attrs))
diff --git a/cc/find_cc_toolchain.bzl b/cc/find_cc_toolchain.bzl
index b7ec757..47940a2 100644
--- a/cc/find_cc_toolchain.bzl
+++ b/cc/find_cc_toolchain.bzl
@@ -24,8 +24,7 @@
foo = rule(
implementation = _foo_impl,
attrs = {
- "_cc_toolchain": attr.label(
- default = Label("@rules_cc//cc/private/toolchain:current_cc_toolchain")),
+ "_cc_toolchain": attr.label(default = Label("@bazel_tools//tools/cpp:current_cc_toolchain")),
},
)
* When https://github.com/bazelbuild/bazel/issues/7260 **is** flipped, current
diff --git a/cc/private/rules_impl/BUILD b/cc/private/rules_impl/BUILD
deleted file mode 100644
index e69de29..0000000
--- a/cc/private/rules_impl/BUILD
+++ /dev/null
diff --git a/cc/private/rules_impl/cc_flags_supplier.bzl b/cc/private/rules_impl/cc_flags_supplier.bzl
deleted file mode 100644
index 7daadfb..0000000
--- a/cc/private/rules_impl/cc_flags_supplier.bzl
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright 2018 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.
-"""Rule that provides the CC_FLAGS Make variable."""
-
-load("//cc:action_names.bzl", "CC_FLAGS_MAKE_VARIABLE_ACTION_NAME")
-load("//cc/private/rules_impl:cc_flags_supplier_lib.bzl", "build_cc_flags")
-load("//cc:toolchain_utils.bzl", "find_cpp_toolchain")
-
-def _cc_flags_supplier_impl(ctx):
- cc_toolchain = find_cpp_toolchain(ctx)
- cc_flags = build_cc_flags(ctx, cc_toolchain, CC_FLAGS_MAKE_VARIABLE_ACTION_NAME)
- variables = platform_common.TemplateVariableInfo({
- "CC_FLAGS": cc_flags,
- })
- return [variables]
-
-cc_flags_supplier = rule(
- implementation = _cc_flags_supplier_impl,
- attrs = {
- "_cc_toolchain": attr.label(default = Label("//cc/private/toolchain:current_cc_toolchain")),
- },
- toolchains = ["//cc:toolchain_type"],
- fragments = ["cpp"],
-)
diff --git a/cc/private/rules_impl/cc_flags_supplier_lib.bzl b/cc/private/rules_impl/cc_flags_supplier_lib.bzl
deleted file mode 100644
index 042ecef..0000000
--- a/cc/private/rules_impl/cc_flags_supplier_lib.bzl
+++ /dev/null
@@ -1,71 +0,0 @@
-# Copyright 2018 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.
-"""Library of functions that provide the CC_FLAGS Make variable."""
-
-# This should match the logic in CcCommon.computeCcFlags:
-def build_cc_flags(ctx, cc_toolchain, action_name):
- """Determine the value for CC_FLAGS based on the given toolchain."""
-
- # Get default cc flags from toolchain's make_variables.
- legacy_cc_flags = cc_common.legacy_cc_flags_make_variable_do_not_use(
- cc_toolchain = cc_toolchain,
- )
-
- # Determine the sysroot flag.
- sysroot_cc_flags = _from_sysroot(cc_toolchain)
-
- # Flags from feature config.
- feature_config_cc_flags = _from_features(ctx, cc_toolchain, action_name)
-
- # Combine the different sources, but only add the sysroot flag if nothing
- # else adds sysroot.
- # If added, it must appear before the feature config flags.
- cc_flags = []
- if legacy_cc_flags:
- cc_flags.append(legacy_cc_flags)
- if sysroot_cc_flags and not _contains_sysroot(feature_config_cc_flags):
- cc_flags.append(sysroot_cc_flags)
- cc_flags.extend(feature_config_cc_flags)
-
- return " ".join(cc_flags)
-
-def _contains_sysroot(flags):
- for flag in flags:
- if "--sysroot=" in flag:
- return True
- return False
-
-def _from_sysroot(cc_toolchain):
- sysroot = cc_toolchain.sysroot
- if sysroot:
- return "--sysroot=%s" % sysroot
- else:
- return None
-
-def _from_features(ctx, cc_toolchain, action_name):
- feature_configuration = cc_common.configure_features(
- ctx = ctx,
- cc_toolchain = cc_toolchain,
- requested_features = ctx.features,
- unsupported_features = ctx.disabled_features,
- )
-
- variables = cc_common.empty_variables()
-
- cc_flags = cc_common.get_memory_inefficient_command_line(
- feature_configuration = feature_configuration,
- action_name = action_name,
- variables = variables,
- )
- return cc_flags
diff --git a/cc/private/rules_impl/compiler_flag.bzl b/cc/private/rules_impl/compiler_flag.bzl
deleted file mode 100644
index 1b838b7..0000000
--- a/cc/private/rules_impl/compiler_flag.bzl
+++ /dev/null
@@ -1,29 +0,0 @@
-# Copyright 2018 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.
-
-"""Rule that allows select() to differentiate between compilers."""
-
-load("//cc:toolchain_utils.bzl", "find_cpp_toolchain")
-
-def _compiler_flag_impl(ctx):
- toolchain = find_cpp_toolchain(ctx)
- return [config_common.FeatureFlagInfo(value = toolchain.compiler)]
-
-compiler_flag = rule(
- implementation = _compiler_flag_impl,
- attrs = {
- "_cc_toolchain": attr.label(default = Label("//cc/private/toolchain:current_cc_toolchain")),
- },
- toolchains = ["//cc:toolchain_type"],
-)
diff --git a/cc/private/toolchain/BUILD b/cc/private/toolchain/BUILD
deleted file mode 100644
index 0715cba..0000000
--- a/cc/private/toolchain/BUILD
+++ /dev/null
@@ -1,455 +0,0 @@
-# Copyright 2018 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.
-#
-package(default_visibility = ["//visibility:public"])
-
-licenses(["notice"]) # Apache 2.0
-
-load(":cc_toolchain_config.bzl", "cc_toolchain_config")
-load("//cc:defs.bzl", "cc_flags_supplier", "cc_library", "cc_toolchain", "cc_toolchain_suite", "compiler_flag")
-
-# It is frequently necessary to constrain platforms based on the cc compiler type.
-constraint_setting(name = "cc_compiler")
-
-constraint_value(
- name = "clang",
- constraint_setting = ":cc_compiler",
-)
-
-constraint_value(
- name = "gcc",
- constraint_setting = ":cc_compiler",
-)
-
-constraint_value(
- name = "msvc",
- constraint_setting = ":cc_compiler",
-)
-
-constraint_value(
- name = "mingw",
- constraint_setting = ":cc_compiler",
-)
-
-constraint_value(
- name = "msys",
- constraint_setting = ":cc_compiler",
-)
-
-cc_toolchain_alias(name = "current_cc_toolchain")
-
-cc_host_toolchain_alias(name = "current_cc_host_toolchain")
-
-cc_libc_top_alias(name = "current_libc_top")
-
-cc_library(
- name = "malloc",
-)
-
-filegroup(
- name = "grep-includes",
- srcs = ["grep-includes.sh"],
-)
-
-filegroup(
- name = "empty",
- srcs = [],
-)
-
-config_setting(
- name = "disable_static_cc_toolchains",
- values = {
- "incompatible_disable_static_cc_toolchains": "true",
- },
-)
-
-# This is the entry point for --crosstool_top. Toolchains are found
-# by lopping off the name of --crosstool_top and searching for
-# "cc-compiler-${CPU}" in this BUILD file, where CPU is the target CPU
-# specified in --cpu.
-#
-# This file group should include
-# * all cc_toolchain targets supported
-# * all file groups that said cc_toolchain might refer to
-alias(
- name = "toolchain",
- actual = "//external:cc_toolchain",
-)
-
-# Hardcoded toolchain, legacy behaviour.
-cc_toolchain_suite(
- name = "default-toolchain",
- toolchains = {
- "armeabi-v7a|compiler": ":cc-compiler-armeabi-v7a",
- "darwin|compiler": ":cc-compiler-darwin",
- "freebsd|compiler": ":cc-compiler-freebsd",
- "local|compiler": ":cc-compiler-local",
- "x64_windows|compiler": ":cc-compiler-x64_windows",
- "x64_windows_msvc|compiler": ":cc-compiler-x64_windows_msvc",
- "s390x|compiler": ":cc-compiler-s390x",
- "ppc|compiler": ":cc-compiler-ppc",
- "k8": ":cc-compiler-local",
- "piii": ":cc-compiler-local",
- "arm": ":cc-compiler-local",
- "aarch64": ":cc-compiler-local",
- "s390x": ":cc-compiler-local",
- "ppc": ":cc-compiler-local",
- "ppc64": ":cc-compiler-local",
- "darwin": ":cc-compiler-darwin",
- "freebsd": ":cc-compiler-freebsd",
- "armeabi-v7a": ":cc-compiler-armeabi-v7a",
- "x64_windows": ":cc-compiler-x64_windows",
- "x64_windows_msvc": ":cc-compiler-x64_windows_msvc",
- },
-)
-
-cc_toolchain(
- name = "cc-compiler-local",
- all_files = ":empty",
- ar_files = ":empty",
- as_files = ":empty",
- compiler_files = ":empty",
- dwp_files = ":empty",
- linker_files = ":empty",
- objcopy_files = ":empty",
- strip_files = ":empty",
- supports_param_files = 1,
- toolchain_config = ":local_linux",
- toolchain_identifier = "local_linux",
-)
-
-cc_toolchain_config(
- name = "local_linux",
- compiler = "compiler",
- cpu = "local",
- disable_static_cc_toolchains = select({
- ":disable_static_cc_toolchains": True,
- "//conditions:default": False,
- }),
-)
-
-toolchain(
- name = "cc-toolchain-local",
- exec_compatible_with = [
- ],
- target_compatible_with = [
- ],
- toolchain = ":cc-compiler-local",
- toolchain_type = "//cc:toolchain_type",
-)
-
-cc_toolchain(
- name = "cc-compiler-ppc",
- all_files = ":empty",
- ar_files = ":empty",
- as_files = ":empty",
- compiler_files = ":empty",
- dwp_files = ":empty",
- linker_files = ":empty",
- objcopy_files = ":empty",
- strip_files = ":empty",
- supports_param_files = 1,
- toolchain_config = ":local_linux",
- toolchain_identifier = "local_linux",
-)
-
-toolchain(
- name = "cc-toolchain-ppc",
- exec_compatible_with = [
- "@platforms//cpu:ppc",
- ],
- target_compatible_with = [
- "@platforms//cpu:ppc",
- ],
- toolchain = ":cc-compiler-ppc",
- toolchain_type = "//cc:toolchain_type",
-)
-
-cc_toolchain(
- name = "cc-compiler-s390x",
- all_files = ":empty",
- ar_files = ":empty",
- as_files = ":empty",
- compiler_files = ":empty",
- dwp_files = ":empty",
- linker_files = ":empty",
- objcopy_files = ":empty",
- strip_files = ":empty",
- supports_param_files = 1,
- toolchain_config = ":local_linux",
- toolchain_identifier = "local_linux",
-)
-
-toolchain(
- name = "cc-toolchain-s390x",
- exec_compatible_with = [
- "@platforms//cpu:s390x",
- ],
- target_compatible_with = [
- "@platforms//cpu:s390x",
- ],
- toolchain = ":cc-compiler-s390x",
- toolchain_type = "//cc:toolchain_type",
-)
-
-cc_toolchain(
- name = "cc-compiler-armeabi-v7a",
- all_files = ":empty",
- ar_files = ":empty",
- as_files = ":empty",
- compiler_files = ":empty",
- dwp_files = ":empty",
- linker_files = ":empty",
- objcopy_files = ":empty",
- strip_files = ":empty",
- supports_param_files = 1,
- toolchain_config = ":local_linux",
- toolchain_identifier = "local_linux",
-)
-
-toolchain(
- name = "cc-toolchain-armeabi-v7a",
- exec_compatible_with = [
- ],
- target_compatible_with = [
- "@platforms//cpu:arm",
- "@platforms//os:android",
- ],
- toolchain = ":cc-compiler-armeabi-v7a",
- toolchain_type = "//cc:toolchain_type",
-)
-
-cc_toolchain(
- name = "cc-compiler-k8",
- all_files = ":empty",
- ar_files = ":empty",
- as_files = ":empty",
- compiler_files = ":empty",
- dwp_files = ":empty",
- linker_files = ":empty",
- objcopy_files = ":empty",
- strip_files = ":empty",
- supports_param_files = 1,
- toolchain_config = ":local_linux",
- toolchain_identifier = "local_linux",
-)
-
-toolchain(
- name = "cc-toolchain-k8",
- exec_compatible_with = [
- "@platforms//cpu:x86_64",
- "@platforms//os:linux",
- ],
- target_compatible_with = [
- "@platforms//cpu:x86_64",
- "@platforms//os:linux",
- ],
- toolchain = ":cc-compiler-k8",
- toolchain_type = "//cc:toolchain_type",
-)
-
-cc_toolchain(
- name = "cc-compiler-darwin",
- all_files = ":osx_wrapper",
- ar_files = ":empty",
- as_files = ":osx_wrapper",
- compiler_files = ":osx_wrapper",
- dwp_files = ":empty",
- linker_files = ":osx_wrapper",
- objcopy_files = ":empty",
- strip_files = ":empty",
- supports_param_files = 0,
- toolchain_config = ":local_darwin",
- toolchain_identifier = "local_darwin",
-)
-
-cc_toolchain_config(
- name = "local_darwin",
- compiler = "compiler",
- cpu = "darwin",
- disable_static_cc_toolchains = select({
- ":disable_static_cc_toolchains": True,
- "//conditions:default": False,
- }),
-)
-
-toolchain(
- name = "cc-toolchain-darwin",
- exec_compatible_with = [
- "@platforms//cpu:x86_64",
- "@platforms//os:osx",
- ],
- target_compatible_with = [
- "@platforms//cpu:x86_64",
- "@platforms//os:osx",
- ],
- toolchain = ":cc-compiler-darwin",
- toolchain_type = "//cc:toolchain_type",
-)
-
-cc_toolchain(
- name = "cc-compiler-freebsd",
- all_files = ":empty",
- ar_files = ":empty",
- as_files = ":empty",
- compiler_files = ":empty",
- dwp_files = ":empty",
- linker_files = ":empty",
- objcopy_files = ":empty",
- strip_files = ":empty",
- supports_param_files = 0,
- toolchain_config = ":local_freebsd",
- toolchain_identifier = "local_freebsd",
-)
-
-cc_toolchain_config(
- name = "local_freebsd",
- compiler = "compiler",
- cpu = "freebsd",
- disable_static_cc_toolchains = select({
- ":disable_static_cc_toolchains": True,
- "//conditions:default": False,
- }),
-)
-
-toolchain(
- name = "cc-toolchain-freebsd",
- exec_compatible_with = [
- "@platforms//cpu:x86_64",
- "@platforms//os:freebsd",
- ],
- target_compatible_with = [
- "@platforms//cpu:x86_64",
- "@platforms//os:freebsd",
- ],
- toolchain = ":cc-compiler-freebsd",
- toolchain_type = "//cc:toolchain_type",
-)
-
-cc_toolchain(
- name = "cc-compiler-x64_windows",
- all_files = ":empty",
- ar_files = ":empty",
- as_files = ":empty",
- compiler_files = ":empty",
- dwp_files = ":empty",
- linker_files = ":empty",
- objcopy_files = ":empty",
- strip_files = ":empty",
- supports_param_files = 0,
- toolchain_config = ":local_windows_msys64",
- toolchain_identifier = "local_windows_msys64",
-)
-
-cc_toolchain_config(
- name = "local_windows_msys64",
- compiler = "windows_msys64",
- cpu = "x64_windows",
- disable_static_cc_toolchains = select({
- ":disable_static_cc_toolchains": True,
- "//conditions:default": False,
- }),
-)
-
-toolchain(
- name = "cc-toolchain-x64_windows",
- exec_compatible_with = [
- "@platforms//cpu:x86_64",
- "@platforms//os:windows",
- ],
- target_compatible_with = [
- "@platforms//cpu:x86_64",
- "@platforms//os:windows",
- ],
- toolchain = ":cc-compiler-x64_windows",
- toolchain_type = "//cc:toolchain_type",
-)
-
-cc_toolchain(
- name = "cc-compiler-x64_windows_msvc",
- all_files = ":empty",
- ar_files = ":empty",
- as_files = ":empty",
- compiler_files = ":empty",
- dwp_files = ":empty",
- linker_files = ":empty",
- objcopy_files = ":empty",
- strip_files = ":empty",
- supports_param_files = 1,
- toolchain_config = ":vc_14_0_x64",
- toolchain_identifier = "vc_14_0_x64",
-)
-
-cc_toolchain_config(
- name = "vc_14_0_x64",
- compiler = "cl",
- cpu = "x64_windows_msvc",
- disable_static_cc_toolchains = select({
- ":disable_static_cc_toolchains": True,
- "//conditions:default": False,
- }),
-)
-
-toolchain(
- name = "cc-toolchain-x64_windows_msvc",
- exec_compatible_with = [
- "@platforms//cpu:x86_64",
- "@platforms//os:windows",
- ":msvc",
- ],
- target_compatible_with = [
- "@platforms//cpu:x86_64",
- "@platforms//os:windows",
- ],
- toolchain = ":cc-compiler-x64_windows_msvc",
- toolchain_type = "//cc:toolchain_type",
-)
-
-filegroup(
- name = "srcs",
- srcs = glob(["**"]) + [
- "//cc/private/toolchain/runfiles:srcs",
- ],
-)
-
-filegroup(
- name = "embedded_tools",
- srcs = glob(["**"]) + [
- "//cc/private/toolchain/runfiles:embedded_tools",
- ],
-)
-
-filegroup(
- name = "interface_library_builder",
- srcs = ["build_interface_so"],
-)
-
-filegroup(
- name = "osx_wrapper",
- srcs = ["osx_cc_wrapper.sh"],
-)
-
-filegroup(
- name = "link_dynamic_library",
- srcs = ["link_dynamic_library.sh"],
-)
-
-filegroup(
- name = "lib_cc_configure",
- srcs = ["lib_cc_configure.bzl"],
-)
-
-compiler_flag(name = "compiler")
-
-cc_flags_supplier(name = "cc_flags")
diff --git a/cc/private/toolchain/BUILD.empty b/cc/private/toolchain/BUILD.empty
deleted file mode 100644
index be3c9f8..0000000
--- a/cc/private/toolchain/BUILD.empty
+++ /dev/null
@@ -1,54 +0,0 @@
-# Copyright 2018 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.
-
-package(default_visibility = ["//visibility:public"])
-
-load("@rules_cc//cc/private/toolchain:cc_toolchain_config.bzl", "cc_toolchain_config")
-
-cc_library(
- name = "malloc",
-)
-
-filegroup(
- name = "empty",
- srcs = [],
-)
-
-cc_toolchain_suite(
- name = "toolchain",
- toolchains = {
- "local|local": ":local",
- "local": ":local",
- },
-)
-
-cc_toolchain(
- name = "local",
- toolchain_identifier = "local",
- toolchain_config = ":local_config",
- all_files = ":empty",
- ar_files = ":empty",
- as_files = ":empty",
- compiler_files = ":empty",
- dwp_files = ":empty",
- linker_files = ":empty",
- objcopy_files = ":empty",
- strip_files = ":empty",
-)
-
-cc_toolchain_config(
- name = "local_config",
- cpu = "local",
- compiler = "compiler",
-)
diff --git a/cc/private/toolchain/BUILD.static.freebsd b/cc/private/toolchain/BUILD.static.freebsd
deleted file mode 100644
index a3efada..0000000
--- a/cc/private/toolchain/BUILD.static.freebsd
+++ /dev/null
@@ -1,113 +0,0 @@
-# Copyright 2018 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.
-
-# This becomes the BUILD file for @local_config_cc// under FreeBSD.
-
-package(default_visibility = ["//visibility:public"])
-
-load("@rules_cc//cc/private/toolchain:cc_toolchain_config.bzl", "cc_toolchain_config")
-
-cc_library(
- name = "malloc",
-)
-
-filegroup(
- name = "empty",
- srcs = [],
-)
-
-# Hardcoded toolchain, legacy behaviour.
-cc_toolchain_suite(
- name = "toolchain",
- toolchains = {
- "armeabi-v7a|compiler": ":cc-compiler-armeabi-v7a",
- "freebsd|compiler": ":cc-compiler-freebsd",
- "armeabi-v7a": ":cc-compiler-armeabi-v7a",
- "freebsd": ":cc-compiler-freebsd",
- },
-)
-
-cc_toolchain(
- name = "cc-compiler-freebsd",
- toolchain_identifier = "local_freebsd",
- toolchain_config = ":local_freebsd",
- all_files = ":empty",
- ar_files = ":empty",
- as_files = ":empty",
- compiler_files = ":empty",
- dwp_files = ":empty",
- linker_files = ":empty",
- objcopy_files = ":empty",
- strip_files = ":empty",
- supports_param_files = 0,
-)
-
-cc_toolchain_config(
- name = "local_freebsd",
- cpu = "freebsd",
- compiler = "compiler",
-)
-
-toolchain(
- name = "cc-toolchain-freebsd",
- exec_compatible_with = [
- "@platforms//cpu:x86_64",
- "@platforms//os:freebsd",
- ],
- target_compatible_with = [
- "@platforms//cpu:x86_64",
- "@platforms//os:freebsd",
- ],
- toolchain = ":cc-compiler-freebsd",
- toolchain_type = "@rules_cc//cc:toolchain_type",
-)
-
-cc_toolchain(
- name = "cc-compiler-armeabi-v7a",
- toolchain_identifier = "stub_armeabi-v7a",
- toolchain_config = ":stub_armeabi-v7a",
- all_files = ":empty",
- ar_files = ":empty",
- as_files = ":empty",
- compiler_files = ":empty",
- dwp_files = ":empty",
- linker_files = ":empty",
- objcopy_files = ":empty",
- strip_files = ":empty",
- supports_param_files = 0,
-)
-
-cc_toolchain_config(
- name = "stub_armeabi-v7a",
- cpu = "armeabi-v7a",
- compiler = "compiler",
-)
-
-toolchain(
- name = "cc-toolchain-armeabi-v7a",
- exec_compatible_with = [
- "@platforms//cpu:arm",
- ],
- target_compatible_with = [
- "@platforms//cpu:arm",
- "@platforms//os:android",
- ],
- toolchain = ":cc-compiler-armeabi-v7a",
- toolchain_type = "@rules_cc//cc:toolchain_type",
-)
-
-filegroup(
- name = "link_dynamic_library",
- srcs = ["link_dynamic_library.sh"],
-)
diff --git a/cc/private/toolchain/BUILD.toolchains.tpl b/cc/private/toolchain/BUILD.toolchains.tpl
deleted file mode 100644
index e007309..0000000
--- a/cc/private/toolchain/BUILD.toolchains.tpl
+++ /dev/null
@@ -1,20 +0,0 @@
-load("@local_config_platform//:constraints.bzl", "HOST_CONSTRAINTS")
-toolchain(
- name = "cc-toolchain-%{name}",
- exec_compatible_with = HOST_CONSTRAINTS,
- target_compatible_with = HOST_CONSTRAINTS,
- toolchain = "@local_config_cc//:cc-compiler-%{name}",
- toolchain_type = "@rules_cc//cc:toolchain_type",
-)
-
-toolchain(
- name = "cc-toolchain-armeabi-v7a",
- exec_compatible_with = HOST_CONSTRAINTS,
- target_compatible_with = [
- "@platforms//cpu:arm",
- "@platforms//os:android",
- ],
- toolchain = "@local_config_cc//:cc-compiler-armabi-v7a",
- toolchain_type = "@rules_cc//cc:toolchain_type",
-)
-
diff --git a/cc/private/toolchain/BUILD.tpl b/cc/private/toolchain/BUILD.tpl
deleted file mode 100644
index d40f7f5..0000000
--- a/cc/private/toolchain/BUILD.tpl
+++ /dev/null
@@ -1,113 +0,0 @@
-# Copyright 2016 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.
-
-# This becomes the BUILD file for @local_config_cc// under non-FreeBSD unixes.
-
-package(default_visibility = ["//visibility:public"])
-
-load(":cc_toolchain_config.bzl", "cc_toolchain_config")
-load(":armeabi_cc_toolchain_config.bzl", "armeabi_cc_toolchain_config")
-load("@rules_cc//cc:defs.bzl", "cc_toolchain", "cc_toolchain_suite")
-
-licenses(["notice"]) # Apache 2.0
-
-cc_library(
- name = "malloc",
-)
-
-filegroup(
- name = "empty",
- srcs = [],
-)
-
-filegroup(
- name = "cc_wrapper",
- srcs = ["cc_wrapper.sh"],
-)
-
-filegroup(
- name = "compiler_deps",
- srcs = glob(["extra_tools/**"], allow_empty = True) + ["%{cc_compiler_deps}"],
-)
-
-# This is the entry point for --crosstool_top. Toolchains are found
-# by lopping off the name of --crosstool_top and searching for
-# the "${CPU}" entry in the toolchains attribute.
-cc_toolchain_suite(
- name = "toolchain",
- toolchains = {
- "%{name}|%{compiler}": ":cc-compiler-%{name}",
- "%{name}": ":cc-compiler-%{name}",
- "armeabi-v7a|compiler": ":cc-compiler-armeabi-v7a",
- "armeabi-v7a": ":cc-compiler-armeabi-v7a",
- },
-)
-
-cc_toolchain(
- name = "cc-compiler-%{name}",
- toolchain_identifier = "%{cc_toolchain_identifier}",
- toolchain_config = ":%{cc_toolchain_identifier}",
- all_files = ":compiler_deps",
- ar_files = ":compiler_deps",
- as_files = ":compiler_deps",
- compiler_files = ":compiler_deps",
- dwp_files = ":empty",
- linker_files = ":compiler_deps",
- objcopy_files = ":empty",
- strip_files = ":empty",
- supports_param_files = %{supports_param_files},
-)
-
-cc_toolchain_config(
- name = "%{cc_toolchain_identifier}",
- cpu = "%{target_cpu}",
- compiler = "%{compiler}",
- toolchain_identifier = "%{cc_toolchain_identifier}",
- host_system_name = "%{host_system_name}",
- target_system_name = "%{target_system_name}",
- target_libc = "%{target_libc}",
- abi_version = "%{abi_version}",
- abi_libc_version = "%{abi_libc_version}",
- cxx_builtin_include_directories = [%{cxx_builtin_include_directories}],
- tool_paths = {%{tool_paths}},
- compile_flags = [%{compile_flags}],
- opt_compile_flags = [%{opt_compile_flags}],
- dbg_compile_flags = [%{dbg_compile_flags}],
- cxx_flags = [%{cxx_flags}],
- link_flags = [%{link_flags}],
- link_libs = [%{link_libs}],
- opt_link_flags = [%{opt_link_flags}],
- unfiltered_compile_flags = [%{unfiltered_compile_flags}],
- coverage_compile_flags = [%{coverage_compile_flags}],
- coverage_link_flags = [%{coverage_link_flags}],
- supports_start_end_lib = %{supports_start_end_lib},
-)
-
-# Android tooling requires a default toolchain for the armeabi-v7a cpu.
-cc_toolchain(
- name = "cc-compiler-armeabi-v7a",
- toolchain_identifier = "stub_armeabi-v7a",
- toolchain_config = ":stub_armeabi-v7a",
- all_files = ":empty",
- ar_files = ":empty",
- as_files = ":empty",
- compiler_files = ":empty",
- dwp_files = ":empty",
- linker_files = ":empty",
- objcopy_files = ":empty",
- strip_files = ":empty",
- supports_param_files = 1,
-)
-
-armeabi_cc_toolchain_config(name = "stub_armeabi-v7a")
diff --git a/cc/private/toolchain/BUILD.windows.tpl b/cc/private/toolchain/BUILD.windows.tpl
deleted file mode 100644
index 53076da..0000000
--- a/cc/private/toolchain/BUILD.windows.tpl
+++ /dev/null
@@ -1,232 +0,0 @@
-# Copyright 2018 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.
-
-# This becomes the BUILD file for @local_config_cc// under Windows.
-
-package(default_visibility = ["//visibility:public"])
-
-load(":windows_cc_toolchain_config.bzl", "cc_toolchain_config")
-load(":armeabi_cc_toolchain_config.bzl", "armeabi_cc_toolchain_config")
-cc_library(
- name = "malloc",
-)
-
-filegroup(
- name = "empty",
- srcs = [],
-)
-
-# Hardcoded toolchain, legacy behaviour.
-cc_toolchain_suite(
- name = "toolchain",
- toolchains = {
- "armeabi-v7a|compiler": ":cc-compiler-armeabi-v7a",
- "x64_windows|msvc-cl": ":cc-compiler-x64_windows",
- "x64_windows|msys-gcc": ":cc-compiler-x64_windows_msys",
- "x64_windows|mingw-gcc": ":cc-compiler-x64_windows_mingw",
- "x64_windows_msys": ":cc-compiler-x64_windows_msys",
- "x64_windows": ":cc-compiler-x64_windows",
- "armeabi-v7a": ":cc-compiler-armeabi-v7a",
- },
-)
-
-cc_toolchain(
- name = "cc-compiler-x64_windows_msys",
- toolchain_identifier = "msys_x64",
- toolchain_config = ":msys_x64",
- all_files = ":empty",
- ar_files = ":empty",
- as_files = ":empty",
- compiler_files = ":empty",
- dwp_files = ":empty",
- linker_files = ":empty",
- objcopy_files = ":empty",
- strip_files = ":empty",
- supports_param_files = 1,
-)
-
-cc_toolchain_config(
- 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(
- name = "cc-toolchain-x64_windows_msys",
- exec_compatible_with = [
- "@platforms//cpu:x86_64",
- "@platforms//os:windows",
- "@rules_cc//cc/private/toolchain:msys",
- ],
- target_compatible_with = [
- "@platforms//cpu:x86_64",
- "@platforms//os:windows",
- ],
- toolchain = ":cc-compiler-x64_windows_msys",
- toolchain_type = "@rules_cc//cc:toolchain_type",
-)
-
-cc_toolchain(
- name = "cc-compiler-x64_windows_mingw",
- toolchain_identifier = "msys_x64_mingw",
- toolchain_config = ":msys_x64_mingw",
- all_files = ":empty",
- ar_files = ":empty",
- as_files = ":empty",
- compiler_files = ":empty",
- dwp_files = ":empty",
- linker_files = ":empty",
- objcopy_files = ":empty",
- strip_files = ":empty",
- supports_param_files = 0,
-)
-
-cc_toolchain_config(
- 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(
- name = "cc-toolchain-x64_windows_mingw",
- exec_compatible_with = [
- "@platforms//cpu:x86_64",
- "@platforms//os:windows",
- "@rules_cc//cc/private/toolchain:mingw",
- ],
- target_compatible_with = [
- "@platforms//cpu:x86_64",
- "@platforms//os:windows",
- ],
- toolchain = ":cc-compiler-x64_windows_mingw",
- toolchain_type = "@rules_cc//cc:toolchain_type",
-)
-
-cc_toolchain(
- name = "cc-compiler-x64_windows",
- toolchain_identifier = "msvc_x64",
- toolchain_config = ":msvc_x64",
- all_files = ":empty",
- ar_files = ":empty",
- as_files = ":empty",
- compiler_files = ":empty",
- dwp_files = ":empty",
- linker_files = ":empty",
- objcopy_files = ":empty",
- strip_files = ":empty",
- supports_param_files = 1,
-)
-
-cc_toolchain_config(
- 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(
- name = "cc-toolchain-x64_windows",
- exec_compatible_with = [
- "@platforms//cpu:x86_64",
- "@platforms//os:windows",
- ],
- target_compatible_with = [
- "@platforms//cpu:x86_64",
- "@platforms//os:windows",
- ],
- toolchain = ":cc-compiler-x64_windows",
- toolchain_type = "@rules_cc//cc:toolchain_type",
-)
-
-cc_toolchain(
- name = "cc-compiler-armeabi-v7a",
- toolchain_identifier = "stub_armeabi-v7a",
- toolchain_config = ":stub_armeabi-v7a",
- all_files = ":empty",
- ar_files = ":empty",
- as_files = ":empty",
- compiler_files = ":empty",
- dwp_files = ":empty",
- linker_files = ":empty",
- objcopy_files = ":empty",
- strip_files = ":empty",
- supports_param_files = 1,
-)
-
-armeabi_cc_toolchain_config(name = "stub_armeabi-v7a")
-
-toolchain(
- name = "cc-toolchain-armeabi-v7a",
- exec_compatible_with = [
- ],
- target_compatible_with = [
- "@platforms//cpu:arm",
- "@platforms//os:android",
- ],
- toolchain = ":cc-compiler-armeabi-v7a",
- toolchain_type = "@rules_cc//cc:toolchain_type",
-)
-
-filegroup(
- name = "link_dynamic_library",
- srcs = ["link_dynamic_library.sh"],
-)
diff --git a/cc/private/toolchain/armeabi_cc_toolchain_config.bzl b/cc/private/toolchain/armeabi_cc_toolchain_config.bzl
deleted file mode 100644
index c517c5d..0000000
--- a/cc/private/toolchain/armeabi_cc_toolchain_config.bzl
+++ /dev/null
@@ -1,82 +0,0 @@
-# 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(
- "//cc/private/toolchain: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/cc/private/toolchain/build_interface_so b/cc/private/toolchain/build_interface_so
deleted file mode 100644
index 626e707..0000000
--- a/cc/private/toolchain/build_interface_so
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/bash
-
-if [[ $# != 2 ]]; then
- echo "Usage: $0 <so> <interface so>" 1>&2
- exit 1
-fi
-
-exec cp $1 $2
diff --git a/cc/private/toolchain/cc_configure.bzl b/cc/private/toolchain/cc_configure.bzl
deleted file mode 100644
index eb9c5a1..0000000
--- a/cc/private/toolchain/cc_configure.bzl
+++ /dev/null
@@ -1,173 +0,0 @@
-# Copyright 2016 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.
-"""Rules for configuring the C++ toolchain (experimental)."""
-
-load("//cc/private/toolchain:windows_cc_configure.bzl", "configure_windows_toolchain")
-load("//cc/private/toolchain:osx_cc_configure.bzl", "configure_osx_toolchain")
-load("//cc/private/toolchain:unix_cc_configure.bzl", "configure_unix_toolchain")
-load(
- "//cc/private/toolchain:lib_cc_configure.bzl",
- "get_cpu_value",
- "resolve_labels",
-)
-load("@bazel_tools//tools/osx:xcode_configure.bzl", "run_xcode_locator")
-
-def _generate_cpp_only_build_file(repository_ctx, cpu_value, paths):
- repository_ctx.template(
- "BUILD",
- paths["//cc/private/toolchain:BUILD.toolchains.tpl"],
- {"%{name}": cpu_value},
- )
-
-def cc_autoconf_toolchains_impl(repository_ctx):
- """Generate BUILD file with 'toolchain' targets for the local host C++ toolchain.
-
- Args:
- repository_ctx: repository context
- """
- paths = resolve_labels(repository_ctx, [
- "//cc/private/toolchain:BUILD.toolchains.tpl",
- "@bazel_tools//tools/osx/crosstool:BUILD.toolchains",
- "@bazel_tools//tools/osx/crosstool:osx_archs.bzl",
- "@bazel_tools//tools/osx:xcode_locator.m",
- ])
- env = repository_ctx.os.environ
- cpu_value = get_cpu_value(repository_ctx)
-
- # Should we try to find C++ toolchain at all? If not, we don't have to generate toolchains for C++ at all.
- should_detect_cpp_toolchain = "BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN" not in env or env["BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN"] != "1"
-
- # Should we unconditionally *not* use xcode? If so, we don't have to run Xcode locator ever.
- should_use_cpp_only_toolchain = "BAZEL_USE_CPP_ONLY_TOOLCHAIN" in env and env["BAZEL_USE_CPP_ONLY_TOOLCHAIN"] == "1"
-
- # Should we unconditionally use xcode? If so, we don't have to run Xcode locator now.
- should_use_xcode = "BAZEL_USE_XCODE_TOOLCHAIN" in env and env["BAZEL_USE_XCODE_TOOLCHAIN"] == "1"
-
- if not should_detect_cpp_toolchain:
- repository_ctx.file("BUILD", "# C++ toolchain autoconfiguration was disabled by BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN env variable.")
- elif cpu_value == "darwin" and not should_use_cpp_only_toolchain:
- xcode_toolchains = []
-
- # Only detect xcode if the user didn't tell us it will be there.
- if not should_use_xcode:
- # TODO(#6926): Unify C++ and ObjC toolchains so we don't have to run xcode locator to generate toolchain targets.
- # And also so we don't have to keep this code in sync with //cc/private/toolchain:osx_cc_configure.bzl.
- (xcode_toolchains, _xcodeloc_err) = run_xcode_locator(
- repository_ctx,
- paths["@bazel_tools//tools/osx:xcode_locator.m"],
- )
-
- if should_use_xcode or xcode_toolchains:
- repository_ctx.symlink(paths["@bazel_tools//tools/osx/crosstool:BUILD.toolchains"], "BUILD")
- repository_ctx.symlink(paths["@bazel_tools//tools/osx/crosstool:osx_archs.bzl"], "osx_archs.bzl")
- else:
- _generate_cpp_only_build_file(repository_ctx, cpu_value, paths)
- else:
- _generate_cpp_only_build_file(repository_ctx, cpu_value, paths)
-
-cc_autoconf_toolchains = repository_rule(
- environ = [
- "BAZEL_USE_CPP_ONLY_TOOLCHAIN",
- "BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN",
- ],
- implementation = cc_autoconf_toolchains_impl,
-)
-
-def cc_autoconf_impl(repository_ctx, overriden_tools = dict()):
- """Generate BUILD file with 'cc_toolchain' targets for the local host C++ toolchain.
-
- Args:
- repository_ctx: repository context
- overriden_tools: dict of tool paths to use instead of autoconfigured tools
- """
- paths = resolve_labels(repository_ctx, [
- "//cc/private/toolchain:BUILD.static.freebsd",
- "//cc/private/toolchain:cc_toolchain_config.bzl",
- ])
-
- env = repository_ctx.os.environ
- cpu_value = get_cpu_value(repository_ctx)
- if "BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN" in env and env["BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN"] == "1":
- repository_ctx.symlink(paths["//cc/private/toolchain:cc_toolchain_config.bzl"], "cc_toolchain_config.bzl")
- repository_ctx.symlink(Label("//cc/private/toolchain:BUILD.empty"), "BUILD")
- elif cpu_value == "freebsd":
- # This is defaulting to the static crosstool, we should eventually
- # autoconfigure this platform too. Theorically, FreeBSD should be
- # straightforward to add but we cannot run it in a docker container so
- # skipping until we have proper tests for FreeBSD.
- repository_ctx.symlink(paths["//cc/private/toolchain:cc_toolchain_config.bzl"], "cc_toolchain_config.bzl")
- repository_ctx.symlink(paths["//cc/private/toolchain:BUILD.static.freebsd"], "BUILD")
- elif cpu_value == "x64_windows":
- # TODO(ibiryukov): overriden_tools are only supported in configure_unix_toolchain.
- # We might want to add that to Windows too(at least for msys toolchain).
- configure_windows_toolchain(repository_ctx)
- elif (cpu_value == "darwin" and
- ("BAZEL_USE_CPP_ONLY_TOOLCHAIN" not in env or env["BAZEL_USE_CPP_ONLY_TOOLCHAIN"] != "1")):
- configure_osx_toolchain(repository_ctx, overriden_tools)
- else:
- configure_unix_toolchain(repository_ctx, cpu_value, overriden_tools)
-
-cc_autoconf = repository_rule(
- environ = [
- "ABI_LIBC_VERSION",
- "ABI_VERSION",
- "BAZEL_COMPILER",
- "BAZEL_HOST_SYSTEM",
- "BAZEL_CXXOPTS",
- "BAZEL_LINKOPTS",
- "BAZEL_LINKLIBS",
- "BAZEL_PYTHON",
- "BAZEL_SH",
- "BAZEL_TARGET_CPU",
- "BAZEL_TARGET_LIBC",
- "BAZEL_TARGET_SYSTEM",
- "BAZEL_USE_CPP_ONLY_TOOLCHAIN",
- "BAZEL_USE_XCODE_TOOLCHAIN",
- "BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN",
- "BAZEL_USE_LLVM_NATIVE_COVERAGE",
- "BAZEL_VC",
- "BAZEL_VC_FULL_VERSION",
- "BAZEL_VS",
- "BAZEL_WINSDK_FULL_VERSION",
- "BAZEL_LLVM",
- "USE_CLANG_CL",
- "CC",
- "CC_CONFIGURE_DEBUG",
- "CC_TOOLCHAIN_NAME",
- "CPLUS_INCLUDE_PATH",
- "GCOV",
- "HOMEBREW_RUBY_PATH",
- "SYSTEMROOT",
- "VS90COMNTOOLS",
- "VS100COMNTOOLS",
- "VS110COMNTOOLS",
- "VS120COMNTOOLS",
- "VS140COMNTOOLS",
- "VS150COMNTOOLS",
- "VS160COMNTOOLS",
- "TMP",
- "TEMP",
- ],
- implementation = cc_autoconf_impl,
-)
-
-def cc_configure():
- """A C++ configuration rules that generate the crosstool file."""
- cc_autoconf_toolchains(name = "local_config_cc_toolchains")
- cc_autoconf(name = "local_config_cc")
- native.bind(name = "cc_toolchain", actual = "@local_config_cc//:toolchain")
- native.register_toolchains(
- # Use register_toolchain's target pattern expansion to register all toolchains in the package.
- "@local_config_cc_toolchains//:all",
- )
diff --git a/cc/private/toolchain/cc_toolchain_config.bzl b/cc/private/toolchain/cc_toolchain_config.bzl
deleted file mode 100644
index f0a1fae..0000000
--- a/cc/private/toolchain/cc_toolchain_config.bzl
+++ /dev/null
@@ -1,1493 +0,0 @@
-# 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(
- "//cc/private/toolchain: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(
- "//cc:action_names.bzl",
- _ASSEMBLE_ACTION_NAME = "ASSEMBLE_ACTION_NAME",
- _CLIF_MATCH_ACTION_NAME = "CLIF_MATCH_ACTION_NAME",
- _CPP_COMPILE_ACTION_NAME = "CPP_COMPILE_ACTION_NAME",
- _CPP_HEADER_PARSING_ACTION_NAME = "CPP_HEADER_PARSING_ACTION_NAME",
- _CPP_LINK_DYNAMIC_LIBRARY_ACTION_NAME = "CPP_LINK_DYNAMIC_LIBRARY_ACTION_NAME",
- _CPP_LINK_EXECUTABLE_ACTION_NAME = "CPP_LINK_EXECUTABLE_ACTION_NAME",
- _CPP_LINK_NODEPS_DYNAMIC_LIBRARY_ACTION_NAME = "CPP_LINK_NODEPS_DYNAMIC_LIBRARY_ACTION_NAME",
- _CPP_LINK_STATIC_LIBRARY_ACTION_NAME = "CPP_LINK_STATIC_LIBRARY_ACTION_NAME",
- _CPP_MODULE_CODEGEN_ACTION_NAME = "CPP_MODULE_CODEGEN_ACTION_NAME",
- _CPP_MODULE_COMPILE_ACTION_NAME = "CPP_MODULE_COMPILE_ACTION_NAME",
- _C_COMPILE_ACTION_NAME = "C_COMPILE_ACTION_NAME",
- _LINKSTAMP_COMPILE_ACTION_NAME = "LINKSTAMP_COMPILE_ACTION_NAME",
- _LTO_BACKEND_ACTION_NAME = "LTO_BACKEND_ACTION_NAME",
- _LTO_INDEXING_ACTION_NAME = "LTO_INDEXING_ACTION_NAME",
- _PREPROCESS_ASSEMBLE_ACTION_NAME = "PREPROCESS_ASSEMBLE_ACTION_NAME",
- _STRIP_ACTION_NAME = "STRIP_ACTION_NAME",
-)
-
-all_compile_actions = [
- _C_COMPILE_ACTION_NAME,
- _CPP_COMPILE_ACTION_NAME,
- _LINKSTAMP_COMPILE_ACTION_NAME,
- _ASSEMBLE_ACTION_NAME,
- _PREPROCESS_ASSEMBLE_ACTION_NAME,
- _CPP_HEADER_PARSING_ACTION_NAME,
- _CPP_MODULE_COMPILE_ACTION_NAME,
- _CPP_MODULE_CODEGEN_ACTION_NAME,
- _CLIF_MATCH_ACTION_NAME,
- _LTO_BACKEND_ACTION_NAME,
-]
-
-all_cpp_compile_actions = [
- _CPP_COMPILE_ACTION_NAME,
- _LINKSTAMP_COMPILE_ACTION_NAME,
- _CPP_HEADER_PARSING_ACTION_NAME,
- _CPP_MODULE_COMPILE_ACTION_NAME,
- _CPP_MODULE_CODEGEN_ACTION_NAME,
- _CLIF_MATCH_ACTION_NAME,
-]
-
-preprocessor_compile_actions = [
- _C_COMPILE_ACTION_NAME,
- _CPP_COMPILE_ACTION_NAME,
- _LINKSTAMP_COMPILE_ACTION_NAME,
- _PREPROCESS_ASSEMBLE_ACTION_NAME,
- _CPP_HEADER_PARSING_ACTION_NAME,
- _CPP_MODULE_COMPILE_ACTION_NAME,
- _CLIF_MATCH_ACTION_NAME,
-]
-
-codegen_compile_actions = [
- _C_COMPILE_ACTION_NAME,
- _CPP_COMPILE_ACTION_NAME,
- _LINKSTAMP_COMPILE_ACTION_NAME,
- _ASSEMBLE_ACTION_NAME,
- _PREPROCESS_ASSEMBLE_ACTION_NAME,
- _CPP_MODULE_CODEGEN_ACTION_NAME,
- _LTO_BACKEND_ACTION_NAME,
-]
-
-all_link_actions = [
- _CPP_LINK_EXECUTABLE_ACTION_NAME,
- _CPP_LINK_DYNAMIC_LIBRARY_ACTION_NAME,
- _CPP_LINK_NODEPS_DYNAMIC_LIBRARY_ACTION_NAME,
-]
-
-def _impl(ctx):
- if ctx.attr.disable_static_cc_toolchains:
- fail("@rules_cc//cc/private/toolchain:default-toolchain, as well as the cc_toolchains it " +
- "points to have been removed. See https://github.com/bazelbuild/bazel/issues/8546.")
-
- if (ctx.attr.cpu == "darwin"):
- toolchain_identifier = "local_darwin"
- elif (ctx.attr.cpu == "freebsd"):
- toolchain_identifier = "local_freebsd"
- elif (ctx.attr.cpu == "local"):
- toolchain_identifier = "local_linux"
- elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_clang"):
- toolchain_identifier = "local_windows_clang"
- elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_mingw"):
- toolchain_identifier = "local_windows_mingw"
- elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_msys64"):
- toolchain_identifier = "local_windows_msys64"
- elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_msys64_mingw64"):
- toolchain_identifier = "local_windows_msys64_mingw64"
- elif (ctx.attr.cpu == "armeabi-v7a"):
- toolchain_identifier = "stub_armeabi-v7a"
- elif (ctx.attr.cpu == "x64_windows_msvc"):
- toolchain_identifier = "vc_14_0_x64"
- else:
- fail("Unreachable")
-
- if (ctx.attr.cpu == "armeabi-v7a"):
- host_system_name = "armeabi-v7a"
- elif (ctx.attr.cpu == "darwin" or
- ctx.attr.cpu == "freebsd" or
- ctx.attr.cpu == "local" or
- ctx.attr.cpu == "x64_windows" or
- ctx.attr.cpu == "x64_windows_msvc"):
- host_system_name = "local"
- else:
- fail("Unreachable")
-
- if (ctx.attr.cpu == "armeabi-v7a"):
- target_system_name = "armeabi-v7a"
- elif (ctx.attr.cpu == "darwin" or
- ctx.attr.cpu == "freebsd" or
- ctx.attr.cpu == "local" or
- ctx.attr.cpu == "x64_windows" or
- ctx.attr.cpu == "x64_windows_msvc"):
- target_system_name = "local"
- else:
- fail("Unreachable")
-
- if (ctx.attr.cpu == "armeabi-v7a"):
- target_cpu = "armeabi-v7a"
- elif (ctx.attr.cpu == "darwin"):
- target_cpu = "darwin"
- elif (ctx.attr.cpu == "freebsd"):
- target_cpu = "freebsd"
- elif (ctx.attr.cpu == "local"):
- target_cpu = "local"
- elif (ctx.attr.cpu == "x64_windows"):
- target_cpu = "x64_windows"
- elif (ctx.attr.cpu == "x64_windows_msvc"):
- target_cpu = "x64_windows_msvc"
- else:
- fail("Unreachable")
-
- if (ctx.attr.cpu == "armeabi-v7a"):
- target_libc = "armeabi-v7a"
- elif (ctx.attr.cpu == "freebsd" or
- ctx.attr.cpu == "local" or
- ctx.attr.cpu == "x64_windows"):
- target_libc = "local"
- elif (ctx.attr.cpu == "darwin"):
- target_libc = "macosx"
- elif (ctx.attr.cpu == "x64_windows_msvc"):
- target_libc = "msvcrt140"
- else:
- fail("Unreachable")
-
- if (ctx.attr.cpu == "x64_windows_msvc"):
- compiler = "cl"
- elif (ctx.attr.cpu == "armeabi-v7a" or
- ctx.attr.cpu == "darwin" or
- ctx.attr.cpu == "freebsd" or
- ctx.attr.cpu == "local"):
- compiler = "compiler"
- elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_clang"):
- compiler = "windows_clang"
- elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_mingw"):
- compiler = "windows_mingw"
- elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_msys64"):
- compiler = "windows_msys64"
- elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_msys64_mingw64"):
- compiler = "windows_msys64_mingw64"
- else:
- fail("Unreachable")
-
- if (ctx.attr.cpu == "armeabi-v7a"):
- abi_version = "armeabi-v7a"
- elif (ctx.attr.cpu == "darwin" or
- ctx.attr.cpu == "freebsd" or
- ctx.attr.cpu == "local" or
- ctx.attr.cpu == "x64_windows" or
- ctx.attr.cpu == "x64_windows_msvc"):
- abi_version = "local"
- else:
- fail("Unreachable")
-
- if (ctx.attr.cpu == "armeabi-v7a"):
- abi_libc_version = "armeabi-v7a"
- elif (ctx.attr.cpu == "darwin" or
- ctx.attr.cpu == "freebsd" or
- ctx.attr.cpu == "local" or
- ctx.attr.cpu == "x64_windows" or
- ctx.attr.cpu == "x64_windows_msvc"):
- abi_libc_version = "local"
- else:
- fail("Unreachable")
-
- cc_target_os = None
-
- builtin_sysroot = None
-
- if (ctx.attr.cpu == "darwin" or
- ctx.attr.cpu == "freebsd" or
- ctx.attr.cpu == "local"):
- objcopy_embed_data_action = action_config(
- action_name = "objcopy_embed_data",
- enabled = True,
- tools = [tool(path = "/usr/bin/objcopy")],
- )
- elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_clang"):
- objcopy_embed_data_action = action_config(
- action_name = "objcopy_embed_data",
- enabled = True,
- tools = [tool(path = "C:/Program Files (x86)/LLVM/bin/objcopy")],
- )
- elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_mingw"):
- objcopy_embed_data_action = action_config(
- action_name = "objcopy_embed_data",
- enabled = True,
- tools = [tool(path = "C:/mingw/bin/objcopy")],
- )
- elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_msys64_mingw64"):
- objcopy_embed_data_action = action_config(
- action_name = "objcopy_embed_data",
- enabled = True,
- tools = [tool(path = "C:/tools/msys64/mingw64/bin/objcopy")],
- )
- elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_msys64"):
- objcopy_embed_data_action = action_config(
- action_name = "objcopy_embed_data",
- enabled = True,
- tools = [tool(path = "C:/tools/msys64/usr/bin/objcopy")],
- )
-
- c_compile_action = action_config(
- action_name = _C_COMPILE_ACTION_NAME,
- implies = [
- "compiler_input_flags",
- "compiler_output_flags",
- "default_compile_flags",
- "user_compile_flags",
- "sysroot",
- "unfiltered_compile_flags",
- ],
- tools = [tool(path = "wrapper/bin/msvc_cl.bat")],
- )
-
- cpp_compile_action = action_config(
- action_name = _CPP_COMPILE_ACTION_NAME,
- implies = [
- "compiler_input_flags",
- "compiler_output_flags",
- "default_compile_flags",
- "user_compile_flags",
- "sysroot",
- "unfiltered_compile_flags",
- ],
- tools = [tool(path = "wrapper/bin/msvc_cl.bat")],
- )
-
- if (ctx.attr.cpu == "armeabi-v7a"):
- action_configs = []
- elif (ctx.attr.cpu == "x64_windows_msvc"):
- action_configs = [c_compile_action, cpp_compile_action]
- elif (ctx.attr.cpu == "darwin" or
- ctx.attr.cpu == "freebsd" or
- ctx.attr.cpu == "local" or
- ctx.attr.cpu == "x64_windows"):
- action_configs = [objcopy_embed_data_action]
- else:
- fail("Unreachable")
-
- random_seed_feature = feature(name = "random_seed", enabled = True)
-
- compiler_output_flags_feature = feature(
- name = "compiler_output_flags",
- flag_sets = [
- flag_set(
- actions = [_ASSEMBLE_ACTION_NAME],
- flag_groups = [
- flag_group(
- flags = ["/Fo%{output_file}", "/Zi"],
- expand_if_available = "output_file",
- expand_if_not_available = "output_assembly_file",
- ),
- ],
- ),
- flag_set(
- actions = [
- _PREPROCESS_ASSEMBLE_ACTION_NAME,
- _C_COMPILE_ACTION_NAME,
- _CPP_COMPILE_ACTION_NAME,
- _CPP_HEADER_PARSING_ACTION_NAME,
- _CPP_MODULE_COMPILE_ACTION_NAME,
- _CPP_MODULE_CODEGEN_ACTION_NAME,
- ],
- flag_groups = [
- flag_group(
- flags = ["/Fo%{output_file}"],
- expand_if_available = "output_file",
- expand_if_not_available = "output_assembly_file",
- ),
- flag_group(
- flags = ["/Fa%{output_file}"],
- expand_if_available = "output_file",
- ),
- flag_group(
- flags = ["/P", "/Fi%{output_file}"],
- expand_if_available = "output_file",
- ),
- ],
- ),
- ],
- )
-
- if (ctx.attr.cpu == "local"):
- 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++",
- "-Wl,-z,relro,-z,now",
- "-no-canonical-prefixes",
- "-pass-exit-codes",
- ],
- ),
- ],
- ),
- flag_set(
- actions = all_link_actions,
- flag_groups = [flag_group(flags = ["-Wl,--gc-sections"])],
- with_features = [with_feature_set(features = ["opt"])],
- ),
- ],
- )
- elif (ctx.attr.cpu == "freebsd"):
- 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++",
- "-Wl,-z,relro,-z,now",
- "-no-canonical-prefixes",
- ],
- ),
- ],
- ),
- flag_set(
- actions = all_link_actions,
- flag_groups = [flag_group(flags = ["-Wl,--gc-sections"])],
- with_features = [with_feature_set(features = ["opt"])],
- ),
- ],
- )
- elif (ctx.attr.cpu == "darwin"):
- 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++",
- "-undefined",
- "dynamic_lookup",
- "-headerpad_max_install_names",
- "-no-canonical-prefixes",
- ],
- ),
- ],
- ),
- ],
- )
- elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_msys64"):
- 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++"])],
- ),
- ],
- )
- elif (ctx.attr.cpu == "x64_windows_msvc"):
- default_link_flags_feature = feature(
- name = "default_link_flags",
- enabled = True,
- flag_sets = [
- flag_set(
- actions = all_link_actions,
- flag_groups = [flag_group(flags = ["-m64"])],
- ),
- ],
- )
-
- if (ctx.attr.cpu == "darwin" or
- ctx.attr.cpu == "freebsd"):
- unfiltered_compile_flags_feature = feature(
- name = "unfiltered_compile_flags",
- enabled = True,
- flag_sets = [
- flag_set(
- actions = [
- _ASSEMBLE_ACTION_NAME,
- _PREPROCESS_ASSEMBLE_ACTION_NAME,
- _LINKSTAMP_COMPILE_ACTION_NAME,
- _C_COMPILE_ACTION_NAME,
- _CPP_COMPILE_ACTION_NAME,
- _CPP_HEADER_PARSING_ACTION_NAME,
- _CPP_MODULE_COMPILE_ACTION_NAME,
- _CPP_MODULE_CODEGEN_ACTION_NAME,
- _LTO_BACKEND_ACTION_NAME,
- _CLIF_MATCH_ACTION_NAME,
- ],
- flag_groups = [
- flag_group(
- flags = [
- "-no-canonical-prefixes",
- "-Wno-builtin-macro-redefined",
- "-D__DATE__=\"redacted\"",
- "-D__TIMESTAMP__=\"redacted\"",
- "-D__TIME__=\"redacted\"",
- ],
- ),
- ],
- ),
- ],
- )
- elif (ctx.attr.cpu == "local"):
- unfiltered_compile_flags_feature = feature(
- name = "unfiltered_compile_flags",
- enabled = True,
- flag_sets = [
- flag_set(
- actions = [
- _ASSEMBLE_ACTION_NAME,
- _PREPROCESS_ASSEMBLE_ACTION_NAME,
- _LINKSTAMP_COMPILE_ACTION_NAME,
- _C_COMPILE_ACTION_NAME,
- _CPP_COMPILE_ACTION_NAME,
- _CPP_HEADER_PARSING_ACTION_NAME,
- _CPP_MODULE_COMPILE_ACTION_NAME,
- _CPP_MODULE_CODEGEN_ACTION_NAME,
- _LTO_BACKEND_ACTION_NAME,
- _CLIF_MATCH_ACTION_NAME,
- ],
- flag_groups = [
- flag_group(
- flags = [
- "-no-canonical-prefixes",
- "-fno-canonical-system-headers",
- "-Wno-builtin-macro-redefined",
- "-D__DATE__=\"redacted\"",
- "-D__TIMESTAMP__=\"redacted\"",
- "-D__TIME__=\"redacted\"",
- ],
- ),
- ],
- ),
- ],
- )
- elif (ctx.attr.cpu == "x64_windows_msvc"):
- unfiltered_compile_flags_feature = feature(
- name = "unfiltered_compile_flags",
- flag_sets = [
- flag_set(
- actions = [
- _ASSEMBLE_ACTION_NAME,
- _PREPROCESS_ASSEMBLE_ACTION_NAME,
- _C_COMPILE_ACTION_NAME,
- _CPP_COMPILE_ACTION_NAME,
- _CPP_HEADER_PARSING_ACTION_NAME,
- _CPP_MODULE_COMPILE_ACTION_NAME,
- _CPP_MODULE_CODEGEN_ACTION_NAME,
- ],
- flag_groups = [
- flag_group(
- flags = ["%{unfiltered_compile_flags}"],
- iterate_over = "unfiltered_compile_flags",
- expand_if_available = "unfiltered_compile_flags",
- ),
- ],
- ),
- ],
- )
-
- supports_pic_feature = feature(name = "supports_pic", enabled = True)
-
- if (ctx.attr.cpu == "darwin"):
- default_compile_flags_feature = feature(
- name = "default_compile_flags",
- enabled = True,
- flag_sets = [
- flag_set(
- actions = [
- _ASSEMBLE_ACTION_NAME,
- _PREPROCESS_ASSEMBLE_ACTION_NAME,
- _LINKSTAMP_COMPILE_ACTION_NAME,
- _C_COMPILE_ACTION_NAME,
- _CPP_COMPILE_ACTION_NAME,
- _CPP_HEADER_PARSING_ACTION_NAME,
- _CPP_MODULE_COMPILE_ACTION_NAME,
- _CPP_MODULE_CODEGEN_ACTION_NAME,
- _LTO_BACKEND_ACTION_NAME,
- _CLIF_MATCH_ACTION_NAME,
- ],
- flag_groups = [
- flag_group(
- flags = [
- "-D_FORTIFY_SOURCE=1",
- "-fstack-protector",
- "-fcolor-diagnostics",
- "-Wall",
- "-Wthread-safety",
- "-Wself-assign",
- "-fno-omit-frame-pointer",
- ],
- ),
- ],
- ),
- flag_set(
- actions = [
- _ASSEMBLE_ACTION_NAME,
- _PREPROCESS_ASSEMBLE_ACTION_NAME,
- _LINKSTAMP_COMPILE_ACTION_NAME,
- _C_COMPILE_ACTION_NAME,
- _CPP_COMPILE_ACTION_NAME,
- _CPP_HEADER_PARSING_ACTION_NAME,
- _CPP_MODULE_COMPILE_ACTION_NAME,
- _CPP_MODULE_CODEGEN_ACTION_NAME,
- _LTO_BACKEND_ACTION_NAME,
- _CLIF_MATCH_ACTION_NAME,
- ],
- flag_groups = [flag_group(flags = ["-g"])],
- with_features = [with_feature_set(features = ["dbg"])],
- ),
- flag_set(
- actions = [
- _ASSEMBLE_ACTION_NAME,
- _PREPROCESS_ASSEMBLE_ACTION_NAME,
- _LINKSTAMP_COMPILE_ACTION_NAME,
- _C_COMPILE_ACTION_NAME,
- _CPP_COMPILE_ACTION_NAME,
- _CPP_HEADER_PARSING_ACTION_NAME,
- _CPP_MODULE_COMPILE_ACTION_NAME,
- _CPP_MODULE_CODEGEN_ACTION_NAME,
- _LTO_BACKEND_ACTION_NAME,
- _CLIF_MATCH_ACTION_NAME,
- ],
- flag_groups = [
- flag_group(
- flags = [
- "-g0",
- "-O2",
- "-DNDEBUG",
- "-ffunction-sections",
- "-fdata-sections",
- ],
- ),
- ],
- with_features = [with_feature_set(features = ["opt"])],
- ),
- flag_set(
- actions = [
- _LINKSTAMP_COMPILE_ACTION_NAME,
- _CPP_COMPILE_ACTION_NAME,
- _CPP_HEADER_PARSING_ACTION_NAME,
- _CPP_MODULE_COMPILE_ACTION_NAME,
- _CPP_MODULE_CODEGEN_ACTION_NAME,
- _LTO_BACKEND_ACTION_NAME,
- _CLIF_MATCH_ACTION_NAME,
- ],
- flag_groups = [flag_group(flags = ["-std=c++0x"])],
- ),
- ],
- )
- elif (ctx.attr.cpu == "local"):
- default_compile_flags_feature = feature(
- name = "default_compile_flags",
- enabled = True,
- flag_sets = [
- flag_set(
- actions = [
- _ASSEMBLE_ACTION_NAME,
- _PREPROCESS_ASSEMBLE_ACTION_NAME,
- _LINKSTAMP_COMPILE_ACTION_NAME,
- _C_COMPILE_ACTION_NAME,
- _CPP_COMPILE_ACTION_NAME,
- _CPP_HEADER_PARSING_ACTION_NAME,
- _CPP_MODULE_COMPILE_ACTION_NAME,
- _CPP_MODULE_CODEGEN_ACTION_NAME,
- _LTO_BACKEND_ACTION_NAME,
- _CLIF_MATCH_ACTION_NAME,
- ],
- flag_groups = [
- flag_group(
- flags = [
- "-U_FORTIFY_SOURCE",
- "-D_FORTIFY_SOURCE=1",
- "-fstack-protector",
- "-Wall",
- "-Wunused-but-set-parameter",
- "-Wno-free-nonheap-object",
- "-fno-omit-frame-pointer",
- ],
- ),
- ],
- ),
- flag_set(
- actions = [
- _ASSEMBLE_ACTION_NAME,
- _PREPROCESS_ASSEMBLE_ACTION_NAME,
- _LINKSTAMP_COMPILE_ACTION_NAME,
- _C_COMPILE_ACTION_NAME,
- _CPP_COMPILE_ACTION_NAME,
- _CPP_HEADER_PARSING_ACTION_NAME,
- _CPP_MODULE_COMPILE_ACTION_NAME,
- _CPP_MODULE_CODEGEN_ACTION_NAME,
- _LTO_BACKEND_ACTION_NAME,
- _CLIF_MATCH_ACTION_NAME,
- ],
- flag_groups = [flag_group(flags = ["-g"])],
- with_features = [with_feature_set(features = ["dbg"])],
- ),
- flag_set(
- actions = [
- _ASSEMBLE_ACTION_NAME,
- _PREPROCESS_ASSEMBLE_ACTION_NAME,
- _LINKSTAMP_COMPILE_ACTION_NAME,
- _C_COMPILE_ACTION_NAME,
- _CPP_COMPILE_ACTION_NAME,
- _CPP_HEADER_PARSING_ACTION_NAME,
- _CPP_MODULE_COMPILE_ACTION_NAME,
- _CPP_MODULE_CODEGEN_ACTION_NAME,
- _LTO_BACKEND_ACTION_NAME,
- _CLIF_MATCH_ACTION_NAME,
- ],
- flag_groups = [
- flag_group(
- flags = [
- "-g0",
- "-O2",
- "-DNDEBUG",
- "-ffunction-sections",
- "-fdata-sections",
- ],
- ),
- ],
- with_features = [with_feature_set(features = ["opt"])],
- ),
- flag_set(
- actions = [
- _LINKSTAMP_COMPILE_ACTION_NAME,
- _CPP_COMPILE_ACTION_NAME,
- _CPP_HEADER_PARSING_ACTION_NAME,
- _CPP_MODULE_COMPILE_ACTION_NAME,
- _CPP_MODULE_CODEGEN_ACTION_NAME,
- _LTO_BACKEND_ACTION_NAME,
- _CLIF_MATCH_ACTION_NAME,
- ],
- flag_groups = [flag_group(flags = ["-std=c++0x"])],
- ),
- ],
- )
- elif (ctx.attr.cpu == "freebsd"):
- default_compile_flags_feature = feature(
- name = "default_compile_flags",
- enabled = True,
- flag_sets = [
- flag_set(
- actions = [
- _ASSEMBLE_ACTION_NAME,
- _PREPROCESS_ASSEMBLE_ACTION_NAME,
- _LINKSTAMP_COMPILE_ACTION_NAME,
- _C_COMPILE_ACTION_NAME,
- _CPP_COMPILE_ACTION_NAME,
- _CPP_HEADER_PARSING_ACTION_NAME,
- _CPP_MODULE_COMPILE_ACTION_NAME,
- _CPP_MODULE_CODEGEN_ACTION_NAME,
- _LTO_BACKEND_ACTION_NAME,
- _CLIF_MATCH_ACTION_NAME,
- ],
- flag_groups = [
- flag_group(
- flags = [
- "-U_FORTIFY_SOURCE",
- "-D_FORTIFY_SOURCE=1",
- "-fstack-protector",
- "-Wall",
- "-fno-omit-frame-pointer",
- ],
- ),
- ],
- ),
- flag_set(
- actions = [
- _ASSEMBLE_ACTION_NAME,
- _PREPROCESS_ASSEMBLE_ACTION_NAME,
- _LINKSTAMP_COMPILE_ACTION_NAME,
- _C_COMPILE_ACTION_NAME,
- _CPP_COMPILE_ACTION_NAME,
- _CPP_HEADER_PARSING_ACTION_NAME,
- _CPP_MODULE_COMPILE_ACTION_NAME,
- _CPP_MODULE_CODEGEN_ACTION_NAME,
- _LTO_BACKEND_ACTION_NAME,
- _CLIF_MATCH_ACTION_NAME,
- ],
- flag_groups = [flag_group(flags = ["-g"])],
- with_features = [with_feature_set(features = ["dbg"])],
- ),
- flag_set(
- actions = [
- _ASSEMBLE_ACTION_NAME,
- _PREPROCESS_ASSEMBLE_ACTION_NAME,
- _LINKSTAMP_COMPILE_ACTION_NAME,
- _C_COMPILE_ACTION_NAME,
- _CPP_COMPILE_ACTION_NAME,
- _CPP_HEADER_PARSING_ACTION_NAME,
- _CPP_MODULE_COMPILE_ACTION_NAME,
- _CPP_MODULE_CODEGEN_ACTION_NAME,
- _LTO_BACKEND_ACTION_NAME,
- _CLIF_MATCH_ACTION_NAME,
- ],
- flag_groups = [
- flag_group(
- flags = [
- "-g0",
- "-O2",
- "-DNDEBUG",
- "-ffunction-sections",
- "-fdata-sections",
- ],
- ),
- ],
- with_features = [with_feature_set(features = ["opt"])],
- ),
- flag_set(
- actions = [
- _LINKSTAMP_COMPILE_ACTION_NAME,
- _CPP_COMPILE_ACTION_NAME,
- _CPP_HEADER_PARSING_ACTION_NAME,
- _CPP_MODULE_COMPILE_ACTION_NAME,
- _CPP_MODULE_CODEGEN_ACTION_NAME,
- _LTO_BACKEND_ACTION_NAME,
- _CLIF_MATCH_ACTION_NAME,
- ],
- flag_groups = [flag_group(flags = ["-std=c++0x"])],
- ),
- ],
- )
- elif (ctx.attr.cpu == "x64_windows_msvc"):
- default_compile_flags_feature = feature(
- name = "default_compile_flags",
- enabled = True,
- flag_sets = [
- flag_set(
- actions = [
- _ASSEMBLE_ACTION_NAME,
- _PREPROCESS_ASSEMBLE_ACTION_NAME,
- _LINKSTAMP_COMPILE_ACTION_NAME,
- _C_COMPILE_ACTION_NAME,
- _CPP_COMPILE_ACTION_NAME,
- _CPP_HEADER_PARSING_ACTION_NAME,
- _CPP_MODULE_COMPILE_ACTION_NAME,
- _CPP_MODULE_CODEGEN_ACTION_NAME,
- _LTO_BACKEND_ACTION_NAME,
- _CLIF_MATCH_ACTION_NAME,
- ],
- flag_groups = [
- flag_group(
- flags = [
- "-m64",
- "/D__inline__=__inline",
- "/DCOMPILER_MSVC",
- "/DNOGDI",
- "/DNOMINMAX",
- "/DPRAGMA_SUPPORTED",
- "/D_WIN32_WINNT=0x0601",
- "/D_CRT_SECURE_NO_DEPRECATE",
- "/D_CRT_SECURE_NO_WARNINGS",
- "/D_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS",
- "/D_USE_MATH_DEFINES",
- "/nologo",
- "/bigobj",
- "/Zm500",
- "/J",
- "/Gy",
- "/GF",
- "/W3",
- "/EHsc",
- "/wd4351",
- "/wd4291",
- "/wd4250",
- "/wd4996",
- ],
- ),
- ],
- ),
- flag_set(
- actions = [
- _ASSEMBLE_ACTION_NAME,
- _PREPROCESS_ASSEMBLE_ACTION_NAME,
- _LINKSTAMP_COMPILE_ACTION_NAME,
- _C_COMPILE_ACTION_NAME,
- _CPP_COMPILE_ACTION_NAME,
- _CPP_HEADER_PARSING_ACTION_NAME,
- _CPP_MODULE_COMPILE_ACTION_NAME,
- _CPP_MODULE_CODEGEN_ACTION_NAME,
- _LTO_BACKEND_ACTION_NAME,
- _CLIF_MATCH_ACTION_NAME,
- ],
- flag_groups = [
- flag_group(
- flags = ["/DDEBUG=1", "-g", "/Od", "-Xcompilation-mode=dbg"],
- ),
- ],
- with_features = [with_feature_set(features = ["dbg"])],
- ),
- flag_set(
- actions = [
- _ASSEMBLE_ACTION_NAME,
- _PREPROCESS_ASSEMBLE_ACTION_NAME,
- _LINKSTAMP_COMPILE_ACTION_NAME,
- _C_COMPILE_ACTION_NAME,
- _CPP_COMPILE_ACTION_NAME,
- _CPP_HEADER_PARSING_ACTION_NAME,
- _CPP_MODULE_COMPILE_ACTION_NAME,
- _CPP_MODULE_CODEGEN_ACTION_NAME,
- _LTO_BACKEND_ACTION_NAME,
- _CLIF_MATCH_ACTION_NAME,
- ],
- flag_groups = [
- flag_group(
- flags = ["/DNDEBUG", "/Od", "-Xcompilation-mode=fastbuild"],
- ),
- ],
- with_features = [with_feature_set(features = ["fastbuild"])],
- ),
- flag_set(
- actions = [
- _ASSEMBLE_ACTION_NAME,
- _PREPROCESS_ASSEMBLE_ACTION_NAME,
- _LINKSTAMP_COMPILE_ACTION_NAME,
- _C_COMPILE_ACTION_NAME,
- _CPP_COMPILE_ACTION_NAME,
- _CPP_HEADER_PARSING_ACTION_NAME,
- _CPP_MODULE_COMPILE_ACTION_NAME,
- _CPP_MODULE_CODEGEN_ACTION_NAME,
- _LTO_BACKEND_ACTION_NAME,
- _CLIF_MATCH_ACTION_NAME,
- ],
- flag_groups = [
- flag_group(
- flags = ["/DNDEBUG", "/O2", "-Xcompilation-mode=opt"],
- ),
- ],
- with_features = [with_feature_set(features = ["opt"])],
- ),
- ],
- )
- elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_clang" or
- ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_mingw" or
- ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_msys64_mingw64"):
- default_compile_flags_feature = feature(
- name = "default_compile_flags",
- enabled = True,
- flag_sets = [
- flag_set(
- actions = [
- _LINKSTAMP_COMPILE_ACTION_NAME,
- _CPP_COMPILE_ACTION_NAME,
- _CPP_HEADER_PARSING_ACTION_NAME,
- _CPP_MODULE_COMPILE_ACTION_NAME,
- _CPP_MODULE_CODEGEN_ACTION_NAME,
- _LTO_BACKEND_ACTION_NAME,
- _CLIF_MATCH_ACTION_NAME,
- ],
- flag_groups = [flag_group(flags = ["-std=c++0x"])],
- ),
- ],
- )
- elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_msys64"):
- default_compile_flags_feature = feature(
- name = "default_compile_flags",
- enabled = True,
- flag_sets = [
- flag_set(
- actions = [
- _LINKSTAMP_COMPILE_ACTION_NAME,
- _CPP_COMPILE_ACTION_NAME,
- _CPP_HEADER_PARSING_ACTION_NAME,
- _CPP_MODULE_COMPILE_ACTION_NAME,
- _CPP_MODULE_CODEGEN_ACTION_NAME,
- _LTO_BACKEND_ACTION_NAME,
- _CLIF_MATCH_ACTION_NAME,
- ],
- flag_groups = [flag_group(flags = ["-std=gnu++0x"])],
- ),
- ],
- )
-
- opt_feature = feature(name = "opt")
-
- supports_dynamic_linker_feature = feature(name = "supports_dynamic_linker", enabled = True)
-
- objcopy_embed_flags_feature = feature(
- name = "objcopy_embed_flags",
- enabled = True,
- flag_sets = [
- flag_set(
- actions = ["objcopy_embed_data"],
- flag_groups = [flag_group(flags = ["-I", "binary"])],
- ),
- ],
- )
-
- dbg_feature = feature(name = "dbg")
-
- if (ctx.attr.cpu == "darwin" or
- ctx.attr.cpu == "freebsd" or
- ctx.attr.cpu == "local"):
- user_compile_flags_feature = feature(
- name = "user_compile_flags",
- enabled = True,
- flag_sets = [
- flag_set(
- actions = [
- _ASSEMBLE_ACTION_NAME,
- _PREPROCESS_ASSEMBLE_ACTION_NAME,
- _LINKSTAMP_COMPILE_ACTION_NAME,
- _C_COMPILE_ACTION_NAME,
- _CPP_COMPILE_ACTION_NAME,
- _CPP_HEADER_PARSING_ACTION_NAME,
- _CPP_MODULE_COMPILE_ACTION_NAME,
- _CPP_MODULE_CODEGEN_ACTION_NAME,
- _LTO_BACKEND_ACTION_NAME,
- _CLIF_MATCH_ACTION_NAME,
- ],
- flag_groups = [
- flag_group(
- flags = ["%{user_compile_flags}"],
- iterate_over = "user_compile_flags",
- expand_if_available = "user_compile_flags",
- ),
- ],
- ),
- ],
- )
- elif (ctx.attr.cpu == "x64_windows_msvc"):
- user_compile_flags_feature = feature(
- name = "user_compile_flags",
- flag_sets = [
- flag_set(
- actions = [
- _ASSEMBLE_ACTION_NAME,
- _PREPROCESS_ASSEMBLE_ACTION_NAME,
- _C_COMPILE_ACTION_NAME,
- _CPP_COMPILE_ACTION_NAME,
- _CPP_HEADER_PARSING_ACTION_NAME,
- _CPP_MODULE_COMPILE_ACTION_NAME,
- _CPP_MODULE_CODEGEN_ACTION_NAME,
- ],
- flag_groups = [
- flag_group(
- flags = ["%{user_compile_flags}"],
- iterate_over = "user_compile_flags",
- expand_if_available = "user_compile_flags",
- ),
- ],
- ),
- ],
- )
-
- if (ctx.attr.cpu == "darwin" or
- ctx.attr.cpu == "freebsd" or
- ctx.attr.cpu == "local"):
- sysroot_feature = feature(
- name = "sysroot",
- enabled = True,
- flag_sets = [
- flag_set(
- actions = [
- _PREPROCESS_ASSEMBLE_ACTION_NAME,
- _LINKSTAMP_COMPILE_ACTION_NAME,
- _C_COMPILE_ACTION_NAME,
- _CPP_COMPILE_ACTION_NAME,
- _CPP_HEADER_PARSING_ACTION_NAME,
- _CPP_MODULE_COMPILE_ACTION_NAME,
- _CPP_MODULE_CODEGEN_ACTION_NAME,
- _LTO_BACKEND_ACTION_NAME,
- _CLIF_MATCH_ACTION_NAME,
- _CPP_LINK_EXECUTABLE_ACTION_NAME,
- _CPP_LINK_DYNAMIC_LIBRARY_ACTION_NAME,
- _CPP_LINK_NODEPS_DYNAMIC_LIBRARY_ACTION_NAME,
- ],
- flag_groups = [
- flag_group(
- flags = ["--sysroot=%{sysroot}"],
- expand_if_available = "sysroot",
- ),
- ],
- ),
- ],
- )
- elif (ctx.attr.cpu == "x64_windows_msvc"):
- sysroot_feature = feature(
- name = "sysroot",
- flag_sets = [
- flag_set(
- actions = [
- _ASSEMBLE_ACTION_NAME,
- _PREPROCESS_ASSEMBLE_ACTION_NAME,
- _C_COMPILE_ACTION_NAME,
- _CPP_COMPILE_ACTION_NAME,
- _CPP_HEADER_PARSING_ACTION_NAME,
- _CPP_MODULE_COMPILE_ACTION_NAME,
- _CPP_MODULE_CODEGEN_ACTION_NAME,
- _CPP_LINK_EXECUTABLE_ACTION_NAME,
- _CPP_LINK_DYNAMIC_LIBRARY_ACTION_NAME,
- _CPP_LINK_NODEPS_DYNAMIC_LIBRARY_ACTION_NAME,
- ],
- flag_groups = [
- flag_group(
- flags = ["--sysroot=%{sysroot}"],
- iterate_over = "sysroot",
- expand_if_available = "sysroot",
- ),
- ],
- ),
- ],
- )
-
- include_paths_feature = feature(
- name = "include_paths",
- enabled = True,
- flag_sets = [
- flag_set(
- actions = [
- _PREPROCESS_ASSEMBLE_ACTION_NAME,
- _C_COMPILE_ACTION_NAME,
- _CPP_COMPILE_ACTION_NAME,
- _CPP_HEADER_PARSING_ACTION_NAME,
- _CPP_MODULE_COMPILE_ACTION_NAME,
- ],
- 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",
- ),
- ],
- ),
- ],
- )
-
- dependency_file_feature = feature(
- name = "dependency_file",
- enabled = True,
- flag_sets = [
- flag_set(
- actions = [
- _ASSEMBLE_ACTION_NAME,
- _PREPROCESS_ASSEMBLE_ACTION_NAME,
- _C_COMPILE_ACTION_NAME,
- _CPP_COMPILE_ACTION_NAME,
- _CPP_MODULE_COMPILE_ACTION_NAME,
- _CPP_HEADER_PARSING_ACTION_NAME,
- ],
- flag_groups = [
- flag_group(
- flags = ["/DEPENDENCY_FILE", "%{dependency_file}"],
- expand_if_available = "dependency_file",
- ),
- ],
- ),
- ],
- )
-
- compiler_input_flags_feature = feature(
- name = "compiler_input_flags",
- flag_sets = [
- flag_set(
- actions = [
- _ASSEMBLE_ACTION_NAME,
- _PREPROCESS_ASSEMBLE_ACTION_NAME,
- _C_COMPILE_ACTION_NAME,
- _CPP_COMPILE_ACTION_NAME,
- _CPP_HEADER_PARSING_ACTION_NAME,
- _CPP_MODULE_COMPILE_ACTION_NAME,
- _CPP_MODULE_CODEGEN_ACTION_NAME,
- ],
- flag_groups = [
- flag_group(
- flags = ["/c", "%{source_file}"],
- expand_if_available = "source_file",
- ),
- ],
- ),
- ],
- )
-
- fastbuild_feature = feature(name = "fastbuild")
-
- if (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_msys64"):
- features = [
- default_compile_flags_feature,
- default_link_flags_feature,
- supports_dynamic_linker_feature,
- objcopy_embed_flags_feature,
- ]
- elif (ctx.attr.cpu == "darwin"):
- features = [
- default_compile_flags_feature,
- default_link_flags_feature,
- supports_dynamic_linker_feature,
- supports_pic_feature,
- objcopy_embed_flags_feature,
- dbg_feature,
- opt_feature,
- user_compile_flags_feature,
- sysroot_feature,
- unfiltered_compile_flags_feature,
- ]
- elif (ctx.attr.cpu == "freebsd" or
- ctx.attr.cpu == "local"):
- features = [
- default_compile_flags_feature,
- default_link_flags_feature,
- supports_dynamic_linker_feature,
- supports_pic_feature,
- objcopy_embed_flags_feature,
- opt_feature,
- dbg_feature,
- user_compile_flags_feature,
- sysroot_feature,
- unfiltered_compile_flags_feature,
- ]
- elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_clang" or
- ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_mingw" or
- ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_msys64_mingw64"):
- features = [
- default_compile_flags_feature,
- supports_dynamic_linker_feature,
- objcopy_embed_flags_feature,
- ]
- elif (ctx.attr.cpu == "x64_windows_msvc"):
- features = [
- default_link_flags_feature,
- random_seed_feature,
- default_compile_flags_feature,
- include_paths_feature,
- dependency_file_feature,
- user_compile_flags_feature,
- sysroot_feature,
- unfiltered_compile_flags_feature,
- compiler_output_flags_feature,
- compiler_input_flags_feature,
- dbg_feature,
- fastbuild_feature,
- opt_feature,
- ]
- elif (ctx.attr.cpu == "armeabi-v7a"):
- features = [supports_dynamic_linker_feature, supports_pic_feature]
-
- if (ctx.attr.cpu == "armeabi-v7a"):
- cxx_builtin_include_directories = []
- elif (ctx.attr.cpu == "darwin"):
- cxx_builtin_include_directories = ["/"]
- elif (ctx.attr.cpu == "freebsd"):
- cxx_builtin_include_directories = ["/usr/lib/clang", "/usr/local/include", "/usr/include"]
- elif (ctx.attr.cpu == "local" or
- ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_clang"):
- cxx_builtin_include_directories = ["/usr/lib/gcc/", "/usr/local/include", "/usr/include"]
- elif (ctx.attr.cpu == "x64_windows_msvc"):
- cxx_builtin_include_directories = [
- "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/INCLUDE",
- "C:/Program Files (x86)/Windows Kits/10/include/",
- "C:/Program Files (x86)/Windows Kits/8.1/include/",
- "C:/Program Files (x86)/GnuWin32/include/",
- "C:/python_27_amd64/files/include",
- ]
- elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_mingw"):
- cxx_builtin_include_directories = ["C:/mingw/include", "C:/mingw/lib/gcc"]
- elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_msys64_mingw64"):
- cxx_builtin_include_directories = ["C:/tools/msys64/mingw64/x86_64-w64-mingw32/include"]
- elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_msys64"):
- cxx_builtin_include_directories = ["C:/tools/msys64/", "/usr/"]
- else:
- fail("Unreachable")
-
- artifact_name_patterns = []
-
- make_variables = []
-
- if (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_msys64_mingw64"):
- 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",
- ),
- ]
- elif (ctx.attr.cpu == "armeabi-v7a"):
- 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"),
- ]
- elif (ctx.attr.cpu == "freebsd"):
- tool_paths = [
- tool_path(name = "ar", path = "/usr/bin/ar"),
- tool_path(name = "compat-ld", path = "/usr/bin/ld"),
- tool_path(name = "cpp", path = "/usr/bin/cpp"),
- tool_path(name = "dwp", path = "/usr/bin/dwp"),
- tool_path(name = "gcc", path = "/usr/bin/clang"),
- tool_path(name = "gcov", path = "/usr/bin/gcov"),
- tool_path(name = "ld", path = "/usr/bin/ld"),
- tool_path(name = "nm", path = "/usr/bin/nm"),
- tool_path(name = "objcopy", path = "/usr/bin/objcopy"),
- tool_path(name = "objdump", path = "/usr/bin/objdump"),
- tool_path(name = "strip", path = "/usr/bin/strip"),
- ]
- elif (ctx.attr.cpu == "local"):
- tool_paths = [
- tool_path(name = "ar", path = "/usr/bin/ar"),
- tool_path(name = "compat-ld", path = "/usr/bin/ld"),
- tool_path(name = "cpp", path = "/usr/bin/cpp"),
- tool_path(name = "dwp", path = "/usr/bin/dwp"),
- tool_path(name = "gcc", path = "/usr/bin/gcc"),
- tool_path(name = "gcov", path = "/usr/bin/gcov"),
- tool_path(name = "ld", path = "/usr/bin/ld"),
- tool_path(name = "nm", path = "/usr/bin/nm"),
- tool_path(name = "objcopy", path = "/usr/bin/objcopy"),
- tool_path(name = "objdump", path = "/usr/bin/objdump"),
- tool_path(name = "strip", path = "/usr/bin/strip"),
- ]
- elif (ctx.attr.cpu == "darwin"):
- tool_paths = [
- tool_path(name = "ar", path = "/usr/bin/libtool"),
- tool_path(name = "compat-ld", path = "/usr/bin/ld"),
- tool_path(name = "cpp", path = "/usr/bin/cpp"),
- tool_path(name = "dwp", path = "/usr/bin/dwp"),
- tool_path(name = "gcc", path = "osx_cc_wrapper.sh"),
- tool_path(name = "gcov", path = "/usr/bin/gcov"),
- tool_path(name = "ld", path = "/usr/bin/ld"),
- tool_path(name = "nm", path = "/usr/bin/nm"),
- tool_path(name = "objcopy", path = "/usr/bin/objcopy"),
- tool_path(name = "objdump", path = "/usr/bin/objdump"),
- tool_path(name = "strip", path = "/usr/bin/strip"),
- ]
- elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_clang"):
- tool_paths = [
- tool_path(name = "ar", path = "C:/mingw/bin/ar"),
- tool_path(
- name = "compat-ld",
- path = "C:/Program Files (x86)/LLVM/bin/ld",
- ),
- tool_path(
- name = "cpp",
- path = "C:/Program Files (x86)/LLVM/bin/cpp",
- ),
- tool_path(
- name = "dwp",
- path = "C:/Program Files (x86)/LLVM/bin/dwp",
- ),
- tool_path(
- name = "gcc",
- path = "C:/Program Files (x86)/LLVM/bin/clang",
- ),
- tool_path(
- name = "gcov",
- path = "C:/Program Files (x86)/LLVM/bin/gcov",
- ),
- tool_path(
- name = "ld",
- path = "C:/Program Files (x86)/LLVM/bin/ld",
- ),
- tool_path(
- name = "nm",
- path = "C:/Program Files (x86)/LLVM/bin/nm",
- ),
- tool_path(
- name = "objcopy",
- path = "C:/Program Files (x86)/LLVM/bin/objcopy",
- ),
- tool_path(
- name = "objdump",
- path = "C:/Program Files (x86)/LLVM/bin/objdump",
- ),
- tool_path(
- name = "strip",
- path = "C:/Program Files (x86)/LLVM/bin/strip",
- ),
- ]
- elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_mingw"):
- tool_paths = [
- tool_path(name = "ar", path = "C:/mingw/bin/ar"),
- tool_path(name = "compat-ld", path = "C:/mingw/bin/ld"),
- tool_path(name = "cpp", path = "C:/mingw/bin/cpp"),
- tool_path(name = "dwp", path = "C:/mingw/bin/dwp"),
- tool_path(name = "gcc", path = "C:/mingw/bin/gcc"),
- tool_path(name = "gcov", path = "C:/mingw/bin/gcov"),
- tool_path(name = "ld", path = "C:/mingw/bin/ld"),
- tool_path(name = "nm", path = "C:/mingw/bin/nm"),
- tool_path(name = "objcopy", path = "C:/mingw/bin/objcopy"),
- tool_path(name = "objdump", path = "C:/mingw/bin/objdump"),
- tool_path(name = "strip", path = "C:/mingw/bin/strip"),
- ]
- elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_msys64"):
- 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",
- ),
- ]
- elif (ctx.attr.cpu == "x64_windows_msvc"):
- tool_paths = [
- tool_path(name = "ar", path = "wrapper/bin/msvc_link.bat"),
- tool_path(name = "cpp", path = "wrapper/bin/msvc_cl.bat"),
- tool_path(name = "gcc", path = "wrapper/bin/msvc_cl.bat"),
- tool_path(name = "gcov", path = "wrapper/bin/msvc_nop.bat"),
- tool_path(name = "ld", path = "wrapper/bin/msvc_link.bat"),
- 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",
- ),
- ]
- else:
- fail("Unreachable")
-
- out = ctx.actions.declare_file(ctx.label.name)
- ctx.actions.write(out, "Fake executable")
- 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,
- ),
- DefaultInfo(
- executable = out,
- ),
- ]
-
-cc_toolchain_config = rule(
- implementation = _impl,
- attrs = {
- "cpu": attr.string(mandatory = True),
- "compiler": attr.string(),
- "disable_static_cc_toolchains": attr.bool(),
- },
- provides = [CcToolchainConfigInfo],
- executable = True,
-)
diff --git a/cc/private/toolchain/cc_toolchain_config_lib.bzl b/cc/private/toolchain/cc_toolchain_config_lib.bzl
deleted file mode 100644
index 48a855b..0000000
--- a/cc/private/toolchain/cc_toolchain_config_lib.bzl
+++ /dev/null
@@ -1,542 +0,0 @@
-# Copyright 2018 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 library of functions creating structs for CcToolchainConfigInfo."""
-
-def _check_is_none_or_right_type(obj, obj_of_right_type, parameter_name, method_name):
- if obj != None:
- _check_right_type(obj, obj_of_right_type, parameter_name, method_name)
-
-def _check_right_type(obj, obj_of_right_type, parameter_name, method_name):
- if type(obj) != type(obj_of_right_type):
- fail("{} parameter of {} should be a {}, found {}."
- .format(parameter_name, method_name, type(obj_of_right_type), type(obj)))
-
-def _check_is_nonempty_string(obj, parameter_name, method_name):
- _check_right_type(obj, "", parameter_name, method_name)
- if obj == "":
- fail("{} parameter of {} must be a nonempty string."
- .format(parameter_name, method_name))
-
-def _check_is_nonempty_list(obj, parameter_name, method_name):
- _check_right_type(obj, [], parameter_name, method_name)
- if len(obj) == 0:
- fail("{} parameter of {} must be a nonempty list."
- .format(parameter_name, method_name))
-
-EnvEntryInfo = provider(fields = ["key", "value", "type_name"])
-
-def env_entry(key, value):
- """ A key/value pair to be added as an environment variable.
-
- The returned EnvEntry provider finds its use in EnvSet creation through
- the env_entries parameter of env_set(); EnvSet groups environment variables
- that need to be expanded for specific actions.
- The value of this pair is expanded in the same way as is described in
- flag_group. The key remains an unexpanded string literal.
-
- Args:
- key: a string literal representing the name of the variable.
- value: the value to be expanded.
-
- Returns:
- An EnvEntryInfo provider.
- """
- _check_is_nonempty_string(key, "key", "env_entry")
- _check_is_nonempty_string(value, "value", "env_entry")
- return EnvEntryInfo(key = key, value = value, type_name = "env_entry")
-
-VariableWithValueInfo = provider(fields = ["name", "value", "type_name"])
-
-def variable_with_value(name, value):
- """ Represents equality check between a variable and a certain value.
-
- The returned provider finds its use through flag_group.expand_if_equal,
- making the expansion of the flag_group conditional on the value of the
- variable.
-
- Args:
- name: name of the variable.
- value: the value the variable should be compared against.
-
- Returns:
- A VariableWithValueInfo provider.
- """
- _check_is_nonempty_string(name, "name", "variable_with_value")
- _check_is_nonempty_string(value, "value", "variable_with_value")
- return VariableWithValueInfo(
- name = name,
- value = value,
- type_name = "variable_with_value",
- )
-
-MakeVariableInfo = provider(fields = ["name", "value", "type_name"])
-
-def make_variable(name, value):
- """ A make variable that is made accessible to rules."""
- _check_is_nonempty_string(name, "name", "make_variable")
- _check_is_nonempty_string(value, "value", "make_variable")
- return MakeVariableInfo(
- name = name,
- value = value,
- type_name = "make_variable",
- )
-
-FeatureSetInfo = provider(fields = ["features", "type_name"])
-
-def feature_set(features = []):
- """ A set of features.
-
- Used to support logical 'and' when specifying feature requirements in a
- feature.
-
- Args:
- features: A list of unordered feature names.
-
- Returns:
- A FeatureSetInfo provider.
- """
- _check_right_type(features, [], "features", "feature_set")
- return FeatureSetInfo(features = features, type_name = "feature_set")
-
-WithFeatureSetInfo = provider(fields = ["features", "not_features", "type_name"])
-
-def with_feature_set(features = [], not_features = []):
- """ A set of positive and negative features.
-
- This stanza will evaluate to true when every 'feature' is enabled, and
- every 'not_feature' is not enabled.
-
- Args:
- features: A list of feature names that need to be enabled.
- not_features: A list of feature names that need to not be enabled.
-
- Returns:
- A WithFeatureSetInfo provider.
- """
- _check_right_type(features, [], "features", "with_feature_set")
- _check_right_type(not_features, [], "not_features", "with_feature_set")
- return WithFeatureSetInfo(
- features = features,
- not_features = not_features,
- type_name = "with_feature_set",
- )
-
-EnvSetInfo = provider(fields = ["actions", "env_entries", "with_features", "type_name"])
-
-def env_set(actions, env_entries = [], with_features = []):
- """ Groups a set of environment variables to apply for certain actions.
-
- EnvSet providers are passed to feature() and action_config(), to be applied to
- the actions they are specified for.
-
- Args:
- actions: A list of actions this env set applies to; each env set must
- specify at least one action.
- env_entries: A list of EnvEntry - the environment variables applied
- via this env set.
- with_features: A list of feature sets defining when this env set gets
- applied. The env set will be applied when any one of the feature
- sets evaluate to true. (That is, when when every 'feature' is
- enabled, and every 'not_feature' is not enabled.)
- If 'with_features' is omitted, the env set will be applied
- unconditionally for every action specified.
-
- Returns:
- An EnvSetInfo provider.
- """
- _check_is_nonempty_list(actions, "actions", "env_set")
- _check_right_type(env_entries, [], "env_entries", "env_set")
- _check_right_type(with_features, [], "with_features", "env_set")
- return EnvSetInfo(
- actions = actions,
- env_entries = env_entries,
- with_features = with_features,
- type_name = "env_set",
- )
-
-FlagGroupInfo = provider(fields = [
- "flags",
- "flag_groups",
- "iterate_over",
- "expand_if_available",
- "expand_if_not_available",
- "expand_if_true",
- "expand_if_false",
- "expand_if_equal",
- "type_name",
-])
-
-def flag_group(
- flags = [],
- flag_groups = [],
- iterate_over = None,
- expand_if_available = None,
- expand_if_not_available = None,
- expand_if_true = None,
- expand_if_false = None,
- expand_if_equal = None):
- """ A group of flags. Supports parametrization via variable expansion.
-
- To expand a variable of list type, flag_group has to be annotated with
- `iterate_over` message. Then all nested flags or flag_groups will be
- expanded repeatedly for each element of the list.
- For example:
- flag_group(
- iterate_over = 'include_path',
- flags = ['-I', '%{include_path}'],
- )
- ... will get expanded to -I /to/path1 -I /to/path2 ... for each
- include_path /to/pathN.
-
- To expand a variable of structure type, use dot-notation, e.g.:
- flag_group(
- iterate_over = "libraries_to_link",
- flag_groups = [
- flag_group(
- iterate_over = "libraries_to_link.libraries",
- flags = ["-L%{libraries_to_link.libraries.directory}"],
- )
- ]
- )
-
- Flag groups can be nested; if they are, the flag group must only contain
- other flag groups (no flags) so the order is unambiguously specified.
- In order to expand a variable of nested lists, 'iterate_over' can be used.
- For example:
- flag_group (
- iterate_over = 'object_files',
- flag_groups = [
- flag_group (
- flags = ['--start-lib'],
- ),
- flag_group (
- iterate_over = 'object_files',
- flags = ['%{object_files}'],
- ),
- flag_group (
- flags = ['--end-lib'],
- )
- ]
- )
- ... will get expanded to
- --start-lib a1.o a2.o ... --end-lib --start-lib b1.o b2.o .. --end-lib
- with %{object_files} being a variable of nested list type
- [['a1.o', 'a2.o', ...], ['b1.o', 'b2.o', ...], ...].
-
- Args:
- flags: a string list, representing flags. Only one of flags and
- flag_groups can be set, as to avoid ambiguity.
- flag_groups: a list of FlagGroup entries. Only one of flags and
- flag_groups can be set, as to avoid ambiguity.
- iterate_over: a string, representing a variable of list type.
- expand_if_available: A build variable that needs to be available
- in order to expand the flag_group.
- expand_if_not_available: A build variable that needs to be
- unavailable in order for this flag_group to be expanded.
- expand_if_true: if set, this variable needs to evaluate to True in
- order for the flag_group to be expanded.
- expand_if_false: if set, this variable needs to evalate to False in
- order for the flag_group to be expanded.
- expand_if_equal: a VariableWithValue, the flag_group is expanded in
- case of equality.
-
- Returns:
- A FlagGroupInfo provider.
- """
-
- _check_right_type(flags, [], "flags", "flag_group")
- _check_right_type(flag_groups, [], "flag_groups", "flag_group")
- if len(flags) > 0 and len(flag_groups) > 0:
- fail("flag_group must not contain both a flag and another flag_group.")
- if len(flags) == 0 and len(flag_groups) == 0:
- fail("flag_group must contain either a list of flags or a list of flag_groups.")
- _check_is_none_or_right_type(expand_if_true, "string", "expand_if_true", "flag_group")
- _check_is_none_or_right_type(expand_if_false, "string", "expand_if_false", "flag_group")
- _check_is_none_or_right_type(expand_if_available, "string", "expand_if_available", "flag_group")
- _check_is_none_or_right_type(
- expand_if_not_available,
- "string",
- "expand_if_not_available",
- "flag_group",
- )
- _check_is_none_or_right_type(iterate_over, "string", "iterate_over", "flag_group")
-
- return FlagGroupInfo(
- flags = flags,
- flag_groups = flag_groups,
- iterate_over = iterate_over,
- expand_if_available = expand_if_available,
- expand_if_not_available = expand_if_not_available,
- expand_if_true = expand_if_true,
- expand_if_false = expand_if_false,
- expand_if_equal = expand_if_equal,
- type_name = "flag_group",
- )
-
-FlagSetInfo = provider(fields = [
- "actions",
- "with_features",
- "flag_groups",
- "type_name",
-])
-
-def flag_set(
- actions = [],
- with_features = [],
- flag_groups = []):
- """ A set of flags to be expanded in the command line for specific actions.
-
- Args:
- actions: The actions this flag set applies to; each flag set must
- specify at least one action.
- with_features: A list of feature sets defining when this flag set gets
- applied. The flag set will be applied when any one of the feature
- sets evaluate to true. (That is, when when every 'feature' is
- enabled, and every 'not_feature' is not enabled.)
- If 'with_feature' is omitted, the flag set will be applied
- unconditionally for every action specified.
- flag_groups: A FlagGroup list - the flags applied via this flag set.
-
- Returns:
- A FlagSetInfo provider.
- """
- _check_right_type(actions, [], "actions", "flag_set")
- _check_right_type(with_features, [], "with_features", "flag_set")
- _check_right_type(flag_groups, [], "flag_groups", "flag_set")
- return FlagSetInfo(
- actions = actions,
- with_features = with_features,
- flag_groups = flag_groups,
- type_name = "flag_set",
- )
-
-FeatureInfo = provider(fields = [
- "name",
- "enabled",
- "flag_sets",
- "env_sets",
- "requires",
- "implies",
- "provides",
- "type_name",
-])
-
-def feature(
- name,
- enabled = False,
- flag_sets = [],
- env_sets = [],
- requires = [],
- implies = [],
- provides = []):
- """ Contains all flag specifications for one feature.
-
- Args:
- name: The feature's name. It is possible to introduce a feature without
- a change to Bazel by adding a 'feature' section to the toolchain
- and adding the corresponding string as feature in the BUILD file.
- enabled: If 'True', this feature is enabled unless a rule type
- explicitly marks it as unsupported.
- flag_sets: A FlagSet list - If the given feature is enabled, the flag
- sets will be applied for the actions are specified for.
- env_sets: an EnvSet list - If the given feature is enabled, the env
- sets will be applied for the actions they are specified for.
- requires: A list of feature sets defining when this feature is
- supported by the toolchain. The feature is supported if any of the
- feature sets fully apply, that is, when all features of a feature
- set are enabled.
- If 'requires' is omitted, the feature is supported independently of
- which other features are enabled.
- Use this for example to filter flags depending on the build mode
- enabled (opt / fastbuild / dbg).
- implies: A string list of features or action configs that are
- automatically enabled when this feature is enabled. If any of the
- implied features or action configs cannot be enabled, this feature
- will (silently) not be enabled either.
- provides: A list of names this feature conflicts with.
- A feature cannot be enabled if:
- - 'provides' contains the name of a different feature or action
- config that we want to enable.
- - 'provides' contains the same value as a 'provides' in a
- different feature or action config that we want to enable.
- Use this in order to ensure that incompatible features cannot be
- accidentally activated at the same time, leading to hard to
- diagnose compiler errors.
-
- Returns:
- A FeatureInfo provider.
- """
- _check_right_type(enabled, True, "enabled", "feature")
- _check_right_type(flag_sets, [], "flag_sets", "feature")
- _check_right_type(env_sets, [], "env_sets", "feature")
- _check_right_type(requires, [], "requires", "feature")
- _check_right_type(provides, [], "provides", "feature")
- _check_right_type(implies, [], "implies", "feature")
- return FeatureInfo(
- name = name,
- enabled = enabled,
- flag_sets = flag_sets,
- env_sets = env_sets,
- requires = requires,
- implies = implies,
- provides = provides,
- type_name = "feature",
- )
-
-ToolPathInfo = provider(fields = ["name", "path", "type_name"])
-
-def tool_path(name, path):
- """ Tool locations.
-
- Args:
- name: Name of the tool.
- path: Location of the tool; Can be absolute path (in case of non hermetic
- toolchain), or path relative to the cc_toolchain's package.
-
- Returns:
- A ToolPathInfo provider.
-
- Deprecated:
- Prefer specifying an ActionConfig for the action that needs the tool.
- TODO(b/27903698) migrate to ActionConfig.
- """
- _check_is_nonempty_string(name, "name", "tool_path")
- _check_is_nonempty_string(path, "path", "tool_path")
- return ToolPathInfo(name = name, path = path, type_name = "tool_path")
-
-ToolInfo = provider(fields = ["path", "with_features", "execution_requirements", "type_name"])
-
-def tool(path, with_features = [], execution_requirements = []):
- """ Describes a tool associated with a crosstool action config.
-
- Args:
- path: Location of the tool; Can be absolute path (in case of non hermetic
- toolchain), or path relative to the cc_toolchain's package.
- with_features: A list of feature sets defining when this tool is
- applicable. The tool will used when any one of the feature sets
- evaluate to true. (That is, when when every 'feature' is enabled,
- and every 'not_feature' is not enabled.)
- If 'with_feature' is omitted, the tool will apply for any feature
- configuration.
- execution_requirements: Requirements on the execution environment for
- the execution of this tool, to be passed as out-of-band "hints" to
- the execution backend.
- Ex. "requires-darwin"
-
- Returns:
- A ToolInfo provider.
- """
- _check_is_nonempty_string(path, "path", "tool")
- _check_right_type(with_features, [], "with_features", "tool")
- _check_right_type(execution_requirements, [], "execution_requirements", "tool")
- return ToolInfo(
- path = path,
- with_features = with_features,
- execution_requirements = execution_requirements,
- type_name = "tool",
- )
-
-ActionConfigInfo = provider(fields = [
- "config_name",
- "action_name",
- "enabled",
- "tools",
- "flag_sets",
- "implies",
- "type_name",
-])
-
-def action_config(
- action_name,
- enabled = False,
- tools = [],
- flag_sets = [],
- implies = []):
- """ Configuration of a Bazel action.
-
- An action config corresponds to a Bazel action, and allows selection of
- a tool based on activated features.
- Action config activation occurs by the same semantics as features: a
- feature can 'require' or 'imply' an action config in the same way that it
- would another feature.
-
- Args:
- action_name: The name of the Bazel action that this config applies to,
- ex. 'c-compile' or 'c-module-compile'.
- enabled: If 'True', this action is enabled unless a rule type
- explicitly marks it as unsupported.
- tools: The tool applied to the action will be the first Tool with a
- feature set that matches the feature configuration. An error will
- be thrown if no tool matches a provided feature configuration - for
- that reason, it's a good idea to provide a default tool with an
- empty feature set.
- flag_sets: If the given action config is enabled, the flag sets will be
- applied to the corresponding action.
- implies: A list of features or action configs that are automatically
- enabled when this action config is enabled. If any of the implied
- features or action configs cannot be enabled, this action config
- will (silently) not be enabled either.
-
- Returns:
- An ActionConfigInfo provider.
- """
- _check_is_nonempty_string(action_name, "name", "action_config")
- _check_right_type(enabled, True, "enabled", "action_config")
- _check_right_type(tools, [], "tools", "action_config")
- _check_right_type(flag_sets, [], "flag_sets", "action_config")
- _check_right_type(implies, [], "implies", "action_config")
- return ActionConfigInfo(
- action_name = action_name,
- enabled = enabled,
- tools = tools,
- flag_sets = flag_sets,
- implies = implies,
- type_name = "action_config",
- )
-
-ArtifactNamePatternInfo = provider(fields = [
- "category_name",
- "prefix",
- "extension",
- "type_name",
-])
-
-def artifact_name_pattern(category_name, prefix, extension):
- """ The name for an artifact of a given category of input or output artifacts to an action.
-
- Args:
- category_name: The category of artifacts that this selection applies
- to. This field is compared against a list of categories defined
- in bazel. Example categories include "linked_output" or
- "debug_symbols". An error is thrown if no category is matched.
- prefix: The prefix for creating the artifact for this selection.
- Together with the extension it is used to create an artifact name
- based on the target name.
- extension: The extension for creating the artifact for this selection.
- Together with the prefix it is used to create an artifact name
- based on the target name.
-
- Returns:
- An ArtifactNamePatternInfo provider
- """
- _check_is_nonempty_string(category_name, "category_name", "artifact_name_pattern")
- _check_is_none_or_right_type(prefix, "", "prefix", "artifact_name_pattern")
- _check_is_none_or_right_type(extension, "", "extension", "artifact_name_pattern")
- return ArtifactNamePatternInfo(
- category_name = category_name,
- prefix = prefix,
- extension = extension,
- type_name = "artifact_name_pattern",
- )
diff --git a/cc/private/toolchain/empty.cc b/cc/private/toolchain/empty.cc
deleted file mode 100644
index 4cda5c6..0000000
--- a/cc/private/toolchain/empty.cc
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright 2017 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.
-
-int main() {}
diff --git a/cc/private/toolchain/grep-includes.sh b/cc/private/toolchain/grep-includes.sh
deleted file mode 100755
index ee51361..0000000
--- a/cc/private/toolchain/grep-includes.sh
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2018 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.
-#
-# TODO(bazel-team): Support include scanning and grep-includes in Bazel
-echo "grep-includes is not supported by Bazel"
-exit 1
diff --git a/cc/private/toolchain/lib_cc_configure.bzl b/cc/private/toolchain/lib_cc_configure.bzl
deleted file mode 100644
index 789018f..0000000
--- a/cc/private/toolchain/lib_cc_configure.bzl
+++ /dev/null
@@ -1,219 +0,0 @@
-# pylint: disable=g-bad-file-header
-# Copyright 2016 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.
-"""Base library for configuring the C++ toolchain."""
-
-def resolve_labels(repository_ctx, labels):
- """Resolves a collection of labels to their paths.
-
- Label resolution can cause the evaluation of Skylark functions to restart.
- For functions with side-effects (like the auto-configuration functions, which
- inspect the system and touch the file system), such restarts are costly.
- We cannot avoid the restarts, but we can minimize their penalty by resolving
- all labels upfront.
-
- Among other things, doing less work on restarts can cut analysis times by
- several seconds and may also prevent tickling kernel conditions that cause
- build failures. See https://github.com/bazelbuild/bazel/issues/5196 for
- more details.
-
- Args:
- repository_ctx: The context with which to resolve the labels.
- labels: Labels to be resolved expressed as a list of strings.
-
- Returns:
- A dictionary with the labels as keys and their paths as values.
- """
- return dict([(label, repository_ctx.path(Label(label))) for label in labels])
-
-def escape_string(arg):
- """Escape percent sign (%) in the string so it can appear in the Crosstool."""
- if arg != None:
- return str(arg).replace("%", "%%")
- else:
- return None
-
-def split_escaped(string, delimiter):
- """Split string on the delimiter unless %-escaped.
-
- Examples:
- Basic usage:
- split_escaped("a:b:c", ":") -> [ "a", "b", "c" ]
-
- Delimeter that is not supposed to be splitten on has to be %-escaped:
- split_escaped("a%:b", ":") -> [ "a:b" ]
-
- Literal % can be represented by escaping it as %%:
- split_escaped("a%%b", ":") -> [ "a%b" ]
-
- Consecutive delimiters produce empty strings:
- split_escaped("a::b", ":") -> [ "a", "", "", "b" ]
-
- Args:
- string: The string to be split.
- delimiter: Non-empty string not containing %-sign to be used as a
- delimiter.
-
- Returns:
- A list of substrings.
- """
- if delimiter == "":
- fail("Delimiter cannot be empty")
- if delimiter.find("%") != -1:
- fail("Delimiter cannot contain %-sign")
-
- i = 0
- result = []
- accumulator = []
- length = len(string)
- delimiter_length = len(delimiter)
-
- if not string:
- return []
-
- # Iterate over the length of string since Skylark doesn't have while loops
- for _ in range(length):
- if i >= length:
- break
- if i + 2 <= length and string[i:i + 2] == "%%":
- accumulator.append("%")
- i += 2
- elif (i + 1 + delimiter_length <= length and
- string[i:i + 1 + delimiter_length] == "%" + delimiter):
- accumulator.append(delimiter)
- i += 1 + delimiter_length
- elif i + delimiter_length <= length and string[i:i + delimiter_length] == delimiter:
- result.append("".join(accumulator))
- accumulator = []
- i += delimiter_length
- else:
- accumulator.append(string[i])
- i += 1
-
- # Append the last group still in accumulator
- result.append("".join(accumulator))
- return result
-
-def auto_configure_fail(msg):
- """Output failure message when auto configuration fails."""
- red = "\033[0;31m"
- no_color = "\033[0m"
- fail("\n%sAuto-Configuration Error:%s %s\n" % (red, no_color, msg))
-
-def auto_configure_warning(msg):
- """Output warning message during auto configuration."""
- yellow = "\033[1;33m"
- no_color = "\033[0m"
- print("\n%sAuto-Configuration Warning:%s %s\n" % (yellow, no_color, msg))
-
-def get_env_var(repository_ctx, name, default = None, enable_warning = True):
- """Find an environment variable in system path. Doesn't %-escape the value!"""
- if name in repository_ctx.os.environ:
- return repository_ctx.os.environ[name]
- if default != None:
- if enable_warning:
- auto_configure_warning("'%s' environment variable is not set, using '%s' as default" % (name, default))
- return default
- auto_configure_fail("'%s' environment variable is not set" % name)
-
-def which(repository_ctx, cmd, default = None):
- """A wrapper around repository_ctx.which() to provide a fallback value. Doesn't %-escape the value!"""
- result = repository_ctx.which(cmd)
- return default if result == None else str(result)
-
-def which_cmd(repository_ctx, cmd, default = None):
- """Find cmd in PATH using repository_ctx.which() and fail if cannot find it. Doesn't %-escape the cmd!"""
- result = repository_ctx.which(cmd)
- if result != None:
- return str(result)
- path = get_env_var(repository_ctx, "PATH")
- if default != None:
- auto_configure_warning("Cannot find %s in PATH, using '%s' as default.\nPATH=%s" % (cmd, default, path))
- return default
- auto_configure_fail("Cannot find %s in PATH, please make sure %s is installed and add its directory in PATH.\nPATH=%s" % (cmd, cmd, path))
- return str(result)
-
-def execute(
- repository_ctx,
- command,
- environment = None,
- expect_failure = False):
- """Execute a command, return stdout if succeed and throw an error if it fails. Doesn't %-escape the result!"""
- if environment:
- result = repository_ctx.execute(command, environment = environment)
- else:
- result = repository_ctx.execute(command)
- if expect_failure != (result.return_code != 0):
- if expect_failure:
- auto_configure_fail(
- "expected failure, command %s, stderr: (%s)" % (
- command,
- result.stderr,
- ),
- )
- else:
- auto_configure_fail(
- "non-zero exit code: %d, command %s, stderr: (%s)" % (
- result.return_code,
- command,
- result.stderr,
- ),
- )
- stripped_stdout = result.stdout.strip()
- if not stripped_stdout:
- auto_configure_fail(
- "empty output from command %s, stderr: (%s)" % (command, result.stderr),
- )
- return stripped_stdout
-
-def get_cpu_value(repository_ctx):
- """Compute the cpu_value based on the OS name. Doesn't %-escape the result!"""
- os_name = repository_ctx.os.name.lower()
- if os_name.startswith("mac os"):
- return "darwin"
- if os_name.find("freebsd") != -1:
- return "freebsd"
- if os_name.find("windows") != -1:
- return "x64_windows"
-
- # Use uname to figure out whether we are on x86_32 or x86_64
- result = repository_ctx.execute(["uname", "-m"])
- if result.stdout.strip() in ["power", "ppc64le", "ppc", "ppc64"]:
- return "ppc"
- if result.stdout.strip() in ["s390x"]:
- return "s390x"
- if result.stdout.strip() in ["arm", "armv7l"]:
- return "arm"
- if result.stdout.strip() in ["aarch64"]:
- return "aarch64"
- return "k8" if result.stdout.strip() in ["amd64", "x86_64", "x64"] else "piii"
-
-def is_cc_configure_debug(repository_ctx):
- """Returns True if CC_CONFIGURE_DEBUG is set to 1."""
- env = repository_ctx.os.environ
- return "CC_CONFIGURE_DEBUG" in env and env["CC_CONFIGURE_DEBUG"] == "1"
-
-def build_flags(flags):
- """Convert `flags` to a string of flag fields."""
- return "\n".join([" flag: '" + flag + "'" for flag in flags])
-
-def get_starlark_list(values):
- if not values:
- return ""
- return "\"" + "\",\n \"".join(values) + "\""
-
-def auto_configure_warning_maybe(repository_ctx, msg):
- """Output warning message when CC_CONFIGURE_DEBUG is enabled."""
- if is_cc_configure_debug(repository_ctx):
- auto_configure_warning(msg)
diff --git a/cc/private/toolchain/link_dynamic_library.sh b/cc/private/toolchain/link_dynamic_library.sh
deleted file mode 100755
index c71d498..0000000
--- a/cc/private/toolchain/link_dynamic_library.sh
+++ /dev/null
@@ -1,113 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2016 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.
-
-# This script handles interface library generation for dynamic library
-# link action.
-#
-# Bazel can be configured to generate external interface library script
-# to generate interface libraries in CppLinkAction for dynamic libraries.
-# This is not needed on Windows (as the "interface" libraries are
-# generated by default). This script therefore handles the cases when
-# external script is provided, or when no script should be used.
-
-set -eu
-
-E_LINKER_COMMAND_NOT_FOUND=12
-E_INTERFACE_BUILDER_NOT_FOUND=13
-
-
-SUFFIX=".rewritten"
-
-other_args=""
-
-if [[ "$#" -eq 1 ]]; then
- if [[ "$1" != @* ]]; then
- echo "Parameter file must start with @" 1>&2;
- exit "$E_LINKER_COMMAND_NOT_FOUND"
- fi
-
- filename=$(echo "$1" | cut -c2-)
- first_five_lines=$(head -n 5 $filename)
-
- # Should generate interface library switch (<yes|no>); if the value is "no",
- # following 3 args are ignored (but must be present)
- GENERATE_INTERFACE_LIBRARY=$(echo "$first_five_lines" | head -n1 | tail -n1)
- # Tool which can generate interface library from dynamic library file
- INTERFACE_LIBRARY_BUILDER=$(echo "$first_five_lines" | head -n2 | tail -n1)
- # Dynamic library from which we want to generate interface library
- DYNAMIC_LIBRARY=$(echo "$first_five_lines" | head -n3 | tail -n1)
- # Resulting interface library
- INTERFACE_LIBRARY=$(echo "$first_five_lines" | head -n4 | tail -n1)
- # The command used to generate the dynamic library
- LINKER_COMMAND=$(echo "$first_five_lines" | head -n5 | tail -n1)
-
- rest_of_lines=$(tail -n +6 $filename)
- new_param_file="${filename}${SUFFIX}"
- echo "$rest_of_lines" > $new_param_file
- other_args="@$new_param_file"
-
- if [[ ! -e "$LINKER_COMMAND" ]]; then
- echo "Linker command ($LINKER_COMMAND) not found." 1>&2;
- exit "$E_LINKER_COMMAND_NOT_FOUND"
- fi
-
- if [[ "no" == "$GENERATE_INTERFACE_LIBRARY" ]]; then
- INTERFACE_GENERATION=:
- else
- if [[ ! -e "$INTERFACE_LIBRARY_BUILDER" ]]; then
- echo "Interface library builder ($INTERFACE_LIBRARY_BUILDER)
- not found." 1>&2;
- exit "$E_INTERFACE_BUILDER_NOT_FOUND"
- fi
- INTERFACE_GENERATION="${INTERFACE_LIBRARY_BUILDER} ${DYNAMIC_LIBRARY}
- ${INTERFACE_LIBRARY}"
- fi
-
- ${LINKER_COMMAND} "$other_args" && ${INTERFACE_GENERATION}
-else
- # TODO(b/113358321): Remove this branch once projects are migrated to not
- # splitting the linking command line.
- # Should generate interface library switch (<yes|no>); if the value is "no",
- # following 3 args are ignored (but must be present)
- GENERATE_INTERFACE_LIBRARY="$1"
- # Tool which can generate interface library from dynamic library file
- INTERFACE_LIBRARY_BUILDER="$2"
- # Dynamic library from which we want to generate interface library
- DYNAMIC_LIBRARY="$3"
- # Resulting interface library
- INTERFACE_LIBRARY="$4"
- # The command used to generate the dynamic library
- LINKER_COMMAND="$5"
- shift 5
- if [[ ! -e "$LINKER_COMMAND" ]]; then
- echo "Linker command ($LINKER_COMMAND) not found." 1>&2;
- exit "$E_LINKER_COMMAND_NOT_FOUND"
- fi
-
- if [[ "no" == "$GENERATE_INTERFACE_LIBRARY" ]]; then
- INTERFACE_GENERATION=:
- else
- if [[ ! -e "$INTERFACE_LIBRARY_BUILDER" ]]; then
- echo "Interface library builder ($INTERFACE_LIBRARY_BUILDER)
- not found." 1>&2;
- exit "$E_INTERFACE_BUILDER_NOT_FOUND"
- fi
- INTERFACE_GENERATION="${INTERFACE_LIBRARY_BUILDER} ${DYNAMIC_LIBRARY}
- ${INTERFACE_LIBRARY}"
- fi
-
- ${LINKER_COMMAND} "$@" && ${INTERFACE_GENERATION}
-fi
diff --git a/cc/private/toolchain/linux_cc_wrapper.sh.tpl b/cc/private/toolchain/linux_cc_wrapper.sh.tpl
deleted file mode 100644
index a83be50..0000000
--- a/cc/private/toolchain/linux_cc_wrapper.sh.tpl
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2015 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.
-#
-# Ship the environment to the C++ action
-#
-set -eu
-
-# Set-up the environment
-%{env}
-
-# Call the C++ compiler
-%{cc} "$@"
diff --git a/cc/private/toolchain/msys_gcc_installation_error.bat b/cc/private/toolchain/msys_gcc_installation_error.bat
deleted file mode 100644
index 25c3553..0000000
--- a/cc/private/toolchain/msys_gcc_installation_error.bat
+++ /dev/null
@@ -1,23 +0,0 @@
-:: Copyright 2018 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.
-
-@echo OFF
-
-echo. 1>&2
-echo The target you are compiling requires MSYS gcc / MINGW gcc. 1>&2
-echo Bazel couldn't find gcc installation on your machine. 1>&2
-echo Please install MSYS gcc / MINGW gcc and set BAZEL_SH environment variable 1>&2
-echo. 1>&2
-
-exit /b 1
diff --git a/cc/private/toolchain/osx_cc_configure.bzl b/cc/private/toolchain/osx_cc_configure.bzl
deleted file mode 100644
index 12ee3b1..0000000
--- a/cc/private/toolchain/osx_cc_configure.bzl
+++ /dev/null
@@ -1,148 +0,0 @@
-# pylint: disable=g-bad-file-header
-# Copyright 2016 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.
-"""Configuring the C++ toolchain on macOS."""
-
-load("@bazel_tools//tools/osx:xcode_configure.bzl", "run_xcode_locator")
-load(
- "//cc/private/toolchain:lib_cc_configure.bzl",
- "escape_string",
- "resolve_labels",
-)
-load(
- "//cc/private/toolchain:unix_cc_configure.bzl",
- "configure_unix_toolchain",
- "find_cc",
- "get_env",
- "get_escaped_cxx_inc_directories",
-)
-
-def _get_escaped_xcode_cxx_inc_directories(repository_ctx, cc, xcode_toolchains):
- """Compute the list of default C++ include paths on Xcode-enabled darwin.
-
- Args:
- repository_ctx: The repository context.
- cc: The default C++ compiler on the local system.
- xcode_toolchains: A list containing the xcode toolchains available
- Returns:
- include_paths: A list of builtin include paths.
- """
-
- # TODO(cparsons): Falling back to the default C++ compiler builtin include
- # paths shouldn't be unnecessary once all actions are using xcrun.
- include_dirs = get_escaped_cxx_inc_directories(repository_ctx, cc, "-xc++")
- for toolchain in xcode_toolchains:
- include_dirs.append(escape_string(toolchain.developer_dir))
-
- # Assume that all paths that point to /Applications/ are built in include paths
- include_dirs.append("/Applications/")
- return include_dirs
-
-def configure_osx_toolchain(repository_ctx, overriden_tools):
- """Configure C++ toolchain on macOS."""
- paths = resolve_labels(repository_ctx, [
- "//cc/private/toolchain:osx_cc_wrapper.sh.tpl",
- "@bazel_tools//tools/objc:libtool.sh",
- "@bazel_tools//tools/objc:make_hashed_objlist.py",
- "@bazel_tools//tools/objc:xcrunwrapper.sh",
- "@bazel_tools//tools/osx/crosstool:BUILD.tpl",
- "@bazel_tools//tools/osx/crosstool:cc_toolchain_config.bzl",
- "@bazel_tools//tools/osx/crosstool:wrapped_ar.tpl",
- "@bazel_tools//tools/osx/crosstool:wrapped_clang.cc",
- "@bazel_tools//tools/osx:xcode_locator.m",
- ])
-
- env = repository_ctx.os.environ
- should_use_xcode = "BAZEL_USE_XCODE_TOOLCHAIN" in env and env["BAZEL_USE_XCODE_TOOLCHAIN"] == "1"
- xcode_toolchains = []
-
- # Make the following logic in sync with //cc/private/toolchain:cc_configure.bzl#cc_autoconf_toolchains_impl
- (xcode_toolchains, xcodeloc_err) = run_xcode_locator(
- repository_ctx,
- paths["@bazel_tools//tools/osx:xcode_locator.m"],
- )
- if should_use_xcode and not xcode_toolchains:
- fail("BAZEL_USE_XCODE_TOOLCHAIN is set to 1 but Bazel couldn't find Xcode installed on the " +
- "system. Verify that 'xcode-select -p' is correct.")
- if xcode_toolchains:
- cc = find_cc(repository_ctx, overriden_tools = {})
- repository_ctx.template(
- "cc_wrapper.sh",
- paths["//cc/private/toolchain:osx_cc_wrapper.sh.tpl"],
- {
- "%{cc}": escape_string(str(cc)),
- "%{env}": escape_string(get_env(repository_ctx)),
- },
- )
- repository_ctx.symlink(
- paths["@bazel_tools//tools/objc:xcrunwrapper.sh"],
- "xcrunwrapper.sh",
- )
- repository_ctx.symlink(
- paths["@bazel_tools//tools/objc:libtool.sh"],
- "libtool",
- )
- repository_ctx.symlink(
- paths["@bazel_tools//tools/objc:make_hashed_objlist.py"],
- "make_hashed_objlist.py",
- )
- repository_ctx.symlink(
- paths["@bazel_tools//tools/osx/crosstool:wrapped_ar.tpl"],
- "wrapped_ar",
- )
- repository_ctx.symlink(
- paths["@bazel_tools//tools/osx/crosstool:cc_toolchain_config.bzl"],
- "cc_toolchain_config.bzl",
- )
- wrapped_clang_src_path = str(repository_ctx.path(
- paths["@bazel_tools//tools/osx/crosstool:wrapped_clang.cc"],
- ))
- xcrun_result = repository_ctx.execute([
- "env",
- "-i",
- "xcrun",
- "clang",
- "-std=c++11",
- "-lc++",
- "-o",
- "wrapped_clang",
- wrapped_clang_src_path,
- ], 30)
- if (xcrun_result.return_code == 0):
- repository_ctx.symlink("wrapped_clang", "wrapped_clang_pp")
- else:
- error_msg = (
- "return code {code}, stderr: {err}, stdout: {out}"
- ).format(
- code = xcrun_result.return_code,
- err = xcrun_result.stderr,
- out = xcrun_result.stdout,
- )
- fail("wrapped_clang failed to generate. Please file an issue at " +
- "https://github.com/bazelbuild/bazel/issues with the following:\n" +
- error_msg)
-
- escaped_include_paths = _get_escaped_xcode_cxx_inc_directories(repository_ctx, cc, xcode_toolchains)
- escaped_cxx_include_directories = []
- for path in escaped_include_paths:
- escaped_cxx_include_directories.append((" \"%s\"," % path))
- if xcodeloc_err:
- escaped_cxx_include_directories.append("# Error: " + xcodeloc_err + "\n")
- repository_ctx.template(
- "BUILD",
- paths["@bazel_tools//tools/osx/crosstool:BUILD.tpl"],
- {"%{cxx_builtin_include_directories}": "\n".join(escaped_cxx_include_directories)},
- )
- else:
- configure_unix_toolchain(repository_ctx, cpu_value = "darwin", overriden_tools = overriden_tools)
diff --git a/cc/private/toolchain/osx_cc_wrapper.sh b/cc/private/toolchain/osx_cc_wrapper.sh
deleted file mode 100755
index 207bcef..0000000
--- a/cc/private/toolchain/osx_cc_wrapper.sh
+++ /dev/null
@@ -1,104 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2015 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.
-#
-# OS X relpath is not really working. This is a wrapper script around gcc
-# to simulate relpath behavior.
-#
-# This wrapper uses install_name_tool to replace all paths in the binary
-# (bazel-out/.../path/to/original/library.so) by the paths relative to
-# the binary. It parses the command line to behave as rpath is supposed
-# to work.
-#
-# See https://blogs.oracle.com/dipol/entry/dynamic_libraries_rpath_and_mac
-# on how to set those paths for Mach-O binaries.
-#
-set -eu
-
-GCC=/usr/bin/gcc
-INSTALL_NAME_TOOL="/usr/bin/install_name_tool"
-
-LIBS=
-LIB_DIRS=
-RPATHS=
-OUTPUT=
-# let parse the option list
-for i in "$@"; do
- if [[ "${OUTPUT}" = "1" ]]; then
- OUTPUT=$i
- elif [[ "$i" =~ ^-l(.*)$ ]]; then
- LIBS="${BASH_REMATCH[1]} $LIBS"
- elif [[ "$i" =~ ^-L(.*)$ ]]; then
- LIB_DIRS="${BASH_REMATCH[1]} $LIB_DIRS"
- elif [[ "$i" =~ ^-Wl,-rpath,\@loader_path/(.*)$ ]]; then
- RPATHS="${BASH_REMATCH[1]} ${RPATHS}"
- elif [[ "$i" = "-o" ]]; then
- # output is coming
- OUTPUT=1
- fi
-done
-
-# Call gcc
-${GCC} "$@"
-
-function get_library_path() {
- for libdir in ${LIB_DIRS}; do
- if [ -f ${libdir}/lib$1.so ]; then
- echo "${libdir}/lib$1.so"
- elif [ -f ${libdir}/lib$1.dylib ]; then
- echo "${libdir}/lib$1.dylib"
- fi
- done
-}
-
-# A convenient method to return the actual path even for non symlinks
-# and multi-level symlinks.
-function get_realpath() {
- local previous="$1"
- local next=$(readlink "${previous}")
- while [ -n "${next}" ]; do
- previous="${next}"
- next=$(readlink "${previous}")
- done
- echo "${previous}"
-}
-
-# Get the path of a lib inside a tool
-function get_otool_path() {
- # the lib path is the path of the original lib relative to the workspace
- get_realpath $1 | sed 's|^.*/bazel-out/|bazel-out/|'
-}
-
-# Do replacements in the output
-for rpath in ${RPATHS}; do
- for lib in ${LIBS}; do
- unset libname
- if [ -f "$(dirname ${OUTPUT})/${rpath}/lib${lib}.so" ]; then
- libname="lib${lib}.so"
- elif [ -f "$(dirname ${OUTPUT})/${rpath}/lib${lib}.dylib" ]; then
- libname="lib${lib}.dylib"
- fi
- # ${libname-} --> return $libname if defined, or undefined otherwise. This is to make
- # this set -e friendly
- if [[ -n "${libname-}" ]]; then
- libpath=$(get_library_path ${lib})
- if [ -n "${libpath}" ]; then
- ${INSTALL_NAME_TOOL} -change $(get_otool_path "${libpath}") \
- "@loader_path/${rpath}/${libname}" "${OUTPUT}"
- fi
- fi
- done
-done
-
diff --git a/cc/private/toolchain/osx_cc_wrapper.sh.tpl b/cc/private/toolchain/osx_cc_wrapper.sh.tpl
deleted file mode 100644
index 4c85cd9..0000000
--- a/cc/private/toolchain/osx_cc_wrapper.sh.tpl
+++ /dev/null
@@ -1,106 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2015 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.
-#
-# OS X relpath is not really working. This is a wrapper script around gcc
-# to simulate relpath behavior.
-#
-# This wrapper uses install_name_tool to replace all paths in the binary
-# (bazel-out/.../path/to/original/library.so) by the paths relative to
-# the binary. It parses the command line to behave as rpath is supposed
-# to work.
-#
-# See https://blogs.oracle.com/dipol/entry/dynamic_libraries_rpath_and_mac
-# on how to set those paths for Mach-O binaries.
-#
-set -eu
-
-INSTALL_NAME_TOOL="/usr/bin/install_name_tool"
-
-LIBS=
-LIB_DIRS=
-RPATHS=
-OUTPUT=
-# let parse the option list
-for i in "$@"; do
- if [[ "${OUTPUT}" = "1" ]]; then
- OUTPUT=$i
- elif [[ "$i" =~ ^-l(.*)$ ]]; then
- LIBS="${BASH_REMATCH[1]} $LIBS"
- elif [[ "$i" =~ ^-L(.*)$ ]]; then
- LIB_DIRS="${BASH_REMATCH[1]} $LIB_DIRS"
- elif [[ "$i" =~ ^-Wl,-rpath,\@loader_path/(.*)$ ]]; then
- RPATHS="${BASH_REMATCH[1]} ${RPATHS}"
- elif [[ "$i" = "-o" ]]; then
- # output is coming
- OUTPUT=1
- fi
-done
-
-# Set-up the environment
-%{env}
-
-# Call the C++ compiler
-%{cc} "$@"
-
-function get_library_path() {
- for libdir in ${LIB_DIRS}; do
- if [ -f ${libdir}/lib$1.so ]; then
- echo "${libdir}/lib$1.so"
- elif [ -f ${libdir}/lib$1.dylib ]; then
- echo "${libdir}/lib$1.dylib"
- fi
- done
-}
-
-# A convenient method to return the actual path even for non symlinks
-# and multi-level symlinks.
-function get_realpath() {
- local previous="$1"
- local next=$(readlink "${previous}")
- while [ -n "${next}" ]; do
- previous="${next}"
- next=$(readlink "${previous}")
- done
- echo "${previous}"
-}
-
-# Get the path of a lib inside a tool
-function get_otool_path() {
- # the lib path is the path of the original lib relative to the workspace
- get_realpath $1 | sed 's|^.*/bazel-out/|bazel-out/|'
-}
-
-# Do replacements in the output
-for rpath in ${RPATHS}; do
- for lib in ${LIBS}; do
- unset libname
- if [ -f "$(dirname ${OUTPUT})/${rpath}/lib${lib}.so" ]; then
- libname="lib${lib}.so"
- elif [ -f "$(dirname ${OUTPUT})/${rpath}/lib${lib}.dylib" ]; then
- libname="lib${lib}.dylib"
- fi
- # ${libname-} --> return $libname if defined, or undefined otherwise. This is to make
- # this set -e friendly
- if [[ -n "${libname-}" ]]; then
- libpath=$(get_library_path ${lib})
- if [ -n "${libpath}" ]; then
- ${INSTALL_NAME_TOOL} -change $(get_otool_path "${libpath}") \
- "@loader_path/${rpath}/${libname}" "${OUTPUT}"
- fi
- fi
- done
-done
-
diff --git a/cc/private/toolchain/runfiles/BUILD b/cc/private/toolchain/runfiles/BUILD
deleted file mode 100644
index 924322e..0000000
--- a/cc/private/toolchain/runfiles/BUILD
+++ /dev/null
@@ -1,94 +0,0 @@
-package(default_visibility = ["//visibility:private"])
-
-load("//cc:defs.bzl", "cc_library", "cc_test")
-
-filegroup(
- name = "srcs",
- srcs = glob(
- ["**"],
- exclude = [
- ".*",
- "*~",
- ],
- ),
- visibility = ["//cc/private/toolchain:__pkg__"],
-)
-
-filegroup(
- name = "embedded_tools",
- srcs = [
- "BUILD.tools",
- ":srcs_for_embedded_tools",
- ],
- visibility = ["//cc/private/toolchain:__pkg__"],
-)
-
-# Rewrite the include path for runfiles.h in runfiles_src.cc, and create
-# "generated_runfiles.{h,cc}". These files are renamed to "runfiles.{h,cc}" as
-# part of creating the embedded tools of Bazel.
-#
-# We cannot just check in runfiles_src.{h,cc} as runfiles.{h,cc}, because it'd
-# cause a header check failure on Windows when building targets in the Bazel
-# source tree, if those targets depend on //cc/private/toolchain/runfiles,
-# because due to lack of sandboxing they would accidentally pick up runfiles.h
-# from //cc/private/toolchain/runfiles.
-genrule(
- name = "srcs_for_embedded_tools",
- srcs = [
- "runfiles_src.cc",
- "runfiles_src.h",
- ],
- outs = [
- "runfiles.cc",
- "runfiles.h",
- ],
- # Keep this transformation logic in sync with the
- # //scripts/bootstrap/compile.sh
- cmd = ("sed " +
- " 's|^#include.*/runfiles_src.h.*|#include \"cc/private/toolchain" +
- "/runfiles/runfiles.h\"|' " +
- " $(location runfiles_src.cc) > $(location runfiles.cc) && " +
- "cp $(location runfiles_src.h) $(location runfiles.h)"),
-)
-
-cc_library(
- name = "runfiles",
- testonly = 1,
- srcs = ["runfiles_src.cc"],
- hdrs = ["runfiles_src.h"],
-)
-
-cc_test(
- name = "runfiles_test",
- srcs = ["runfiles_test.cc"],
- visibility = ["//visibility:public"],
- deps = [
- ":runfiles",
- "@com_google_googletest//:gtest_main",
- ],
-)
-
-test_suite(
- name = "windows_tests",
- tags = [
- "-no_windows",
- "-slow",
- ],
-)
-
-test_suite(
- name = "all_windows_tests",
- tests = [
- ":windows_tests",
- ],
- visibility = ["//tools:__pkg__"],
-)
-
-# This package will host the C++ runfiles library when it's finally released.
-
-cc_library(
- name = "runfiles_release",
- srcs = ["runfiles.cc"],
- hdrs = ["runfiles.h"],
- visibility = ["//visibility:public"],
-)
diff --git a/cc/private/toolchain/runfiles/BUILD.tools b/cc/private/toolchain/runfiles/BUILD.tools
deleted file mode 100644
index 0ba99f0..0000000
--- a/cc/private/toolchain/runfiles/BUILD.tools
+++ /dev/null
@@ -1,6 +0,0 @@
-cc_library(
- name = "runfiles",
- srcs = ["runfiles.cc"],
- hdrs = ["runfiles.h"],
- visibility = ["//visibility:public"],
-)
diff --git a/cc/private/toolchain/runfiles/runfiles_src.cc b/cc/private/toolchain/runfiles/runfiles_src.cc
deleted file mode 100644
index e1fb7f4..0000000
--- a/cc/private/toolchain/runfiles/runfiles_src.cc
+++ /dev/null
@@ -1,318 +0,0 @@
-// Copyright 2018 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.
-
-// The "srcs_for_embedded_tools" rule in the same package sets the line below to
-// include runfiles.h from the correct path. Do not modify the line below.
-#include "cc/private/toolchain/runfiles/runfiles_src.h"
-
-#ifdef _WIN32
-#include <windows.h>
-#else // not _WIN32
-#include <stdlib.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <unistd.h>
-#endif // _WIN32
-
-#include <fstream>
-#include <functional>
-#include <map>
-#include <sstream>
-#include <vector>
-
-#ifdef _WIN32
-#include <memory>
-#endif // _WIN32
-
-namespace bazel {
-namespace tools {
-namespace cpp {
-namespace runfiles {
-
-using std::function;
-using std::map;
-using std::pair;
-using std::string;
-using std::vector;
-
-namespace {
-
-bool starts_with(const string& s, const char* prefix) {
- if (!prefix || !*prefix) {
- return true;
- }
- if (s.empty()) {
- return false;
- }
- return s.find(prefix) == 0;
-}
-
-bool contains(const string& s, const char* substr) {
- if (!substr || !*substr) {
- return true;
- }
- if (s.empty()) {
- return false;
- }
- return s.find(substr) != string::npos;
-}
-
-bool ends_with(const string& s, const string& suffix) {
- if (suffix.empty()) {
- return true;
- }
- if (s.empty()) {
- return false;
- }
- return s.rfind(suffix) == s.size() - suffix.size();
-}
-
-bool IsReadableFile(const string& path) {
- return std::ifstream(path).is_open();
-}
-
-bool IsDirectory(const string& path) {
-#ifdef _WIN32
- DWORD attrs = GetFileAttributesA(path.c_str());
- return (attrs != INVALID_FILE_ATTRIBUTES) &&
- (attrs & FILE_ATTRIBUTE_DIRECTORY);
-#else
- struct stat buf;
- return stat(path.c_str(), &buf) == 0 && S_ISDIR(buf.st_mode);
-#endif
-}
-
-bool PathsFrom(const std::string& argv0, std::string runfiles_manifest_file,
- std::string runfiles_dir, std::string* out_manifest,
- std::string* out_directory);
-
-bool PathsFrom(const std::string& argv0, std::string runfiles_manifest_file,
- std::string runfiles_dir,
- std::function<bool(const std::string&)> is_runfiles_manifest,
- std::function<bool(const std::string&)> is_runfiles_directory,
- std::string* out_manifest, std::string* out_directory);
-
-bool ParseManifest(const string& path, map<string, string>* result,
- string* error);
-
-} // namespace
-
-Runfiles* Runfiles::Create(const string& argv0,
- const string& runfiles_manifest_file,
- const string& runfiles_dir, string* error) {
- string manifest, directory;
- if (!PathsFrom(argv0, runfiles_manifest_file, runfiles_dir, &manifest,
- &directory)) {
- if (error) {
- std::ostringstream err;
- err << "ERROR: " << __FILE__ << "(" << __LINE__
- << "): cannot find runfiles (argv0=\"" << argv0 << "\")";
- *error = err.str();
- }
- return nullptr;
- }
-
- const vector<pair<string, string> > envvars = {
- {"RUNFILES_MANIFEST_FILE", manifest},
- {"RUNFILES_DIR", directory},
- // TODO(laszlocsomor): remove JAVA_RUNFILES once the Java launcher can
- // pick up RUNFILES_DIR.
- {"JAVA_RUNFILES", directory}};
-
- map<string, string> runfiles;
- if (!manifest.empty()) {
- if (!ParseManifest(manifest, &runfiles, error)) {
- return nullptr;
- }
- }
-
- return new Runfiles(std::move(runfiles), std::move(directory),
- std::move(envvars));
-}
-
-bool IsAbsolute(const string& path) {
- if (path.empty()) {
- return false;
- }
- char c = path.front();
- return (c == '/' && (path.size() < 2 || path[1] != '/')) ||
- (path.size() >= 3 &&
- ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) &&
- path[1] == ':' && (path[2] == '\\' || path[2] == '/'));
-}
-
-string GetEnv(const string& key) {
-#ifdef _WIN32
- DWORD size = ::GetEnvironmentVariableA(key.c_str(), NULL, 0);
- if (size == 0) {
- return string(); // unset or empty envvar
- }
- std::unique_ptr<char[]> value(new char[size]);
- ::GetEnvironmentVariableA(key.c_str(), value.get(), size);
- return value.get();
-#else
- char* result = getenv(key.c_str());
- return (result == NULL) ? string() : string(result);
-#endif
-}
-
-string Runfiles::Rlocation(const string& path) const {
- if (path.empty() || starts_with(path, "../") || contains(path, "/..") ||
- starts_with(path, "./") || contains(path, "/./") ||
- ends_with(path, "/.") || contains(path, "//")) {
- return string();
- }
- if (IsAbsolute(path)) {
- return path;
- }
- const auto value = runfiles_map_.find(path);
- if (value != runfiles_map_.end()) {
- return value->second;
- }
- if (!directory_.empty()) {
- return directory_ + "/" + path;
- }
- return "";
-}
-
-namespace {
-
-bool ParseManifest(const string& path, map<string, string>* result,
- string* error) {
- std::ifstream stm(path);
- if (!stm.is_open()) {
- if (error) {
- std::ostringstream err;
- err << "ERROR: " << __FILE__ << "(" << __LINE__
- << "): cannot open runfiles manifest \"" << path << "\"";
- *error = err.str();
- }
- return false;
- }
- string line;
- std::getline(stm, line);
- size_t line_count = 1;
- while (!line.empty()) {
- string::size_type idx = line.find_first_of(' ');
- if (idx == string::npos) {
- if (error) {
- std::ostringstream err;
- err << "ERROR: " << __FILE__ << "(" << __LINE__
- << "): bad runfiles manifest entry in \"" << path << "\" line #"
- << line_count << ": \"" << line << "\"";
- *error = err.str();
- }
- return false;
- }
- (*result)[line.substr(0, idx)] = line.substr(idx + 1);
- std::getline(stm, line);
- ++line_count;
- }
- return true;
-}
-
-} // namespace
-
-namespace testing {
-
-bool TestOnly_PathsFrom(const string& argv0, string mf, string dir,
- function<bool(const string&)> is_runfiles_manifest,
- function<bool(const string&)> is_runfiles_directory,
- string* out_manifest, string* out_directory) {
- return PathsFrom(argv0, mf, dir, is_runfiles_manifest, is_runfiles_directory,
- out_manifest, out_directory);
-}
-
-bool TestOnly_IsAbsolute(const string& path) { return IsAbsolute(path); }
-
-} // namespace testing
-
-Runfiles* Runfiles::Create(const string& argv0, string* error) {
- return Runfiles::Create(argv0, GetEnv("RUNFILES_MANIFEST_FILE"),
- GetEnv("RUNFILES_DIR"), error);
-}
-
-Runfiles* Runfiles::CreateForTest(std::string* error) {
- return Runfiles::Create(std::string(), GetEnv("RUNFILES_MANIFEST_FILE"),
- GetEnv("TEST_SRCDIR"), error);
-}
-
-namespace {
-
-bool PathsFrom(const string& argv0, string mf, string dir, string* out_manifest,
- string* out_directory) {
- return PathsFrom(
- argv0, mf, dir, [](const string& path) { return IsReadableFile(path); },
- [](const string& path) { return IsDirectory(path); }, out_manifest,
- out_directory);
-}
-
-bool PathsFrom(const string& argv0, string mf, string dir,
- function<bool(const string&)> is_runfiles_manifest,
- function<bool(const string&)> is_runfiles_directory,
- string* out_manifest, string* out_directory) {
- out_manifest->clear();
- out_directory->clear();
-
- bool mfValid = is_runfiles_manifest(mf);
- bool dirValid = is_runfiles_directory(dir);
-
- if (!argv0.empty() && !mfValid && !dirValid) {
- mf = argv0 + ".runfiles/MANIFEST";
- dir = argv0 + ".runfiles";
- mfValid = is_runfiles_manifest(mf);
- dirValid = is_runfiles_directory(dir);
- if (!mfValid) {
- mf = argv0 + ".runfiles_manifest";
- mfValid = is_runfiles_manifest(mf);
- }
- }
-
- if (!mfValid && !dirValid) {
- return false;
- }
-
- if (!mfValid) {
- mf = dir + "/MANIFEST";
- mfValid = is_runfiles_manifest(mf);
- if (!mfValid) {
- mf = dir + "_manifest";
- mfValid = is_runfiles_manifest(mf);
- }
- }
-
- if (!dirValid &&
- (ends_with(mf, ".runfiles_manifest") || ends_with(mf, "/MANIFEST"))) {
- static const size_t kSubstrLen = 9; // "_manifest" or "/MANIFEST"
- dir = mf.substr(0, mf.size() - kSubstrLen);
- dirValid = is_runfiles_directory(dir);
- }
-
- if (mfValid) {
- *out_manifest = mf;
- }
-
- if (dirValid) {
- *out_directory = dir;
- }
-
- return true;
-}
-
-} // namespace
-
-} // namespace runfiles
-} // namespace cpp
-} // namespace tools
-} // namespace bazel
diff --git a/cc/private/toolchain/runfiles/runfiles_src.h b/cc/private/toolchain/runfiles/runfiles_src.h
deleted file mode 100644
index c561cf9..0000000
--- a/cc/private/toolchain/runfiles/runfiles_src.h
+++ /dev/null
@@ -1,222 +0,0 @@
-// Copyright 2018 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.
-
-// Runfiles lookup library for Bazel-built C++ binaries and tests.
-//
-// USAGE:
-// 1. Depend on this runfiles library from your build rule:
-//
-// cc_binary(
-// name = "my_binary",
-// ...
-// deps = ["@rules_cc//cc/private/toolchain/runfiles"],
-// )
-//
-// 2. Include the runfiles library.
-//
-// #include "cc/private/toolchain/runfiles/runfiles.h"
-//
-// using bazel::tools::cpp::runfiles::Runfiles;
-//
-// 3. Create a Runfiles object and use rlocation to look up runfile paths:
-//
-// int main(int argc, char** argv) {
-// std::string error;
-// std::unique_ptr<Runfiles> runfiles(
-// Runfiles::Create(argv[0], &error));
-//
-// // Important:
-// // If this is a test, use Runfiles::CreateForTest(&error).
-// // Otherwise, if you don't have the value for argv[0] for whatever
-// // reason, then use Runfiles::Create(&error).
-//
-// if (runfiles == nullptr) {
-// ... // error handling
-// }
-// std::string path =
-// runfiles->Rlocation("my_workspace/path/to/my/data.txt");
-// ...
-//
-// The code above creates a Runfiles object and retrieves a runfile path.
-//
-// The Runfiles::Create function uses the runfiles manifest and the
-// runfiles directory from the RUNFILES_MANIFEST_FILE and RUNFILES_DIR
-// environment variables. If not present, the function looks for the
-// manifest and directory near argv[0], the path of the main program.
-//
-// To start child processes that also need runfiles, you need to set the right
-// environment variables for them:
-//
-// std::unique_ptr<Runfiles> runfiles(Runfiles::Create(argv[0], &error));
-//
-// std::string path = runfiles->Rlocation("path/to/binary"));
-// if (!path.empty()) {
-// ... // create "args" argument vector for execv
-// const auto envvars = runfiles->EnvVars();
-// pid_t child = fork();
-// if (child) {
-// int status;
-// waitpid(child, &status, 0);
-// } else {
-// for (const auto i : envvars) {
-// setenv(i.first.c_str(), i.second.c_str(), 1);
-// }
-// execv(args[0], args);
-// }
-
-#ifndef TOOLS_CPP_RUNFILES_RUNFILES_H_
-#define TOOLS_CPP_RUNFILES_RUNFILES_H_ 1
-
-#include <functional>
-#include <map>
-#include <memory>
-#include <string>
-#include <vector>
-
-namespace bazel {
-namespace tools {
-namespace cpp {
-namespace runfiles {
-
-class Runfiles {
- public:
- virtual ~Runfiles() {}
-
- // Returns a new `Runfiles` instance.
- //
- // Use this from within `cc_test` rules.
- //
- // Returns nullptr on error. If `error` is provided, the method prints an
- // error message into it.
- //
- // This method looks at the RUNFILES_MANIFEST_FILE and TEST_SRCDIR
- // environment variables.
- static Runfiles* CreateForTest(std::string* error = nullptr);
-
- // Returns a new `Runfiles` instance.
- //
- // Use this from `cc_binary` or `cc_library` rules. You may pass an empty
- // `argv0` if `argv[0]` from the `main` method is unknown.
- //
- // Returns nullptr on error. If `error` is provided, the method prints an
- // error message into it.
- //
- // This method looks at the RUNFILES_MANIFEST_FILE and RUNFILES_DIR
- // environment variables. If either is empty, the method looks for the
- // manifest or directory using the other environment variable, or using argv0
- // (unless it's empty).
- static Runfiles* Create(const std::string& argv0,
- std::string* error = nullptr);
-
- // Returns a new `Runfiles` instance.
- //
- // Use this from any `cc_*` rule if you want to manually specify the paths to
- // the runfiles manifest and/or runfiles directory. You may pass an empty
- // `argv0` if `argv[0]` from the `main` method is unknown.
- //
- // This method is the same as `Create(argv0, error)`, except it uses
- // `runfiles_manifest_file` and `runfiles_dir` as the corresponding
- // environment variable values, instead of looking up the actual environment
- // variables.
- static Runfiles* Create(const std::string& argv0,
- const std::string& runfiles_manifest_file,
- const std::string& runfiles_dir,
- std::string* error = nullptr);
-
- // Returns the runtime path of a runfile.
- //
- // Runfiles are data-dependencies of Bazel-built binaries and tests.
- //
- // The returned path may not exist. The caller should verify the path's
- // existence.
- //
- // The function may return an empty string if it cannot find a runfile.
- //
- // Args:
- // path: runfiles-root-relative path of the runfile; must not be empty and
- // must not contain uplevel references.
- // Returns:
- // the path to the runfile, which the caller should check for existence, or
- // an empty string if the method doesn't know about this runfile
- std::string Rlocation(const std::string& path) const;
-
- // Returns environment variables for subprocesses.
- //
- // The caller should set the returned key-value pairs in the environment of
- // subprocesses, so that those subprocesses can also access runfiles (in case
- // they are also Bazel-built binaries).
- const std::vector<std::pair<std::string, std::string> >& EnvVars() const {
- return envvars_;
- }
-
- private:
- Runfiles(const std::map<std::string, std::string>&& runfiles_map,
- const std::string&& directory,
- const std::vector<std::pair<std::string, std::string> >&& envvars)
- : runfiles_map_(std::move(runfiles_map)),
- directory_(std::move(directory)),
- envvars_(std::move(envvars)) {}
- Runfiles(const Runfiles&) = delete;
- Runfiles(Runfiles&&) = delete;
- Runfiles& operator=(const Runfiles&) = delete;
- Runfiles& operator=(Runfiles&&) = delete;
-
- const std::map<std::string, std::string> runfiles_map_;
- const std::string directory_;
- const std::vector<std::pair<std::string, std::string> > envvars_;
-};
-
-// The "testing" namespace contains functions that allow unit testing the code.
-// Do not use these outside of runfiles_test.cc, they are only part of the
-// public API for the benefit of the tests.
-// These functions and their interface may change without notice.
-namespace testing {
-
-// For testing only.
-//
-// Computes the path of the runfiles manifest and the runfiles directory.
-//
-// If the method finds both a valid manifest and valid directory according to
-// `is_runfiles_manifest` and `is_runfiles_directory`, then the method sets
-// the corresponding values to `out_manifest` and `out_directory` and returns
-// true.
-//
-// If the method only finds a valid manifest or a valid directory, but not
-// both, then it sets the corresponding output variable (`out_manifest` or
-// `out_directory`) to the value while clearing the other output variable. The
-// method still returns true in this case.
-//
-// If the method cannot find either a valid manifest or valid directory, it
-// clears both output variables and returns false.
-bool TestOnly_PathsFrom(
- const std::string& argv0, std::string runfiles_manifest_file,
- std::string runfiles_dir,
- std::function<bool(const std::string&)> is_runfiles_manifest,
- std::function<bool(const std::string&)> is_runfiles_directory,
- std::string* out_manifest, std::string* out_directory);
-
-// For testing only.
-// Returns true if `path` is an absolute Unix or Windows path.
-// For Windows paths, this function does not regard drive-less absolute paths
-// (i.e. absolute-on-current-drive, e.g. "\foo\bar") as absolute and returns
-// false for these.
-bool TestOnly_IsAbsolute(const std::string& path);
-
-} // namespace testing
-} // namespace runfiles
-} // namespace cpp
-} // namespace tools
-} // namespace bazel
-
-#endif // TOOLS_CPP_RUNFILES_RUNFILES_H_
diff --git a/cc/private/toolchain/runfiles/runfiles_test.cc b/cc/private/toolchain/runfiles/runfiles_test.cc
deleted file mode 100644
index fa85331..0000000
--- a/cc/private/toolchain/runfiles/runfiles_test.cc
+++ /dev/null
@@ -1,583 +0,0 @@
-// Copyright 2018 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.
-
-#include "cc/private/toolchain/runfiles/runfiles_src.h"
-
-#ifdef _WIN32
-#include <windows.h>
-#endif // _WIN32
-
-#include <fstream>
-#include <memory>
-#include <string>
-#include <vector>
-
-#include "gtest/gtest.h"
-
-#define RUNFILES_TEST_TOSTRING_HELPER(x) #x
-#define RUNFILES_TEST_TOSTRING(x) RUNFILES_TEST_TOSTRING_HELPER(x)
-#define LINE_AS_STRING() RUNFILES_TEST_TOSTRING(__LINE__)
-
-namespace bazel {
-namespace tools {
-namespace cpp {
-namespace runfiles {
-namespace {
-
-using bazel::tools::cpp::runfiles::testing::TestOnly_IsAbsolute;
-using bazel::tools::cpp::runfiles::testing::TestOnly_PathsFrom;
-using std::cerr;
-using std::endl;
-using std::function;
-using std::pair;
-using std::string;
-using std::unique_ptr;
-using std::vector;
-
-class RunfilesTest : public ::testing::Test {
- protected:
- // Create a temporary file that is deleted with the destructor.
- class MockFile {
- public:
- // Create an empty file with the given name under $TEST_TMPDIR.
- static MockFile* Create(const string& name);
-
- // Create a file with the given name and contents under $TEST_TMPDIR.
- // The method ensures to create all parent directories, so `name` is allowed
- // to contain directory components.
- static MockFile* Create(const string& name, const vector<string>& lines);
-
- ~MockFile();
- const string& Path() const { return path_; }
-
- string DirName() const {
- string::size_type pos = path_.find_last_of('/');
- return pos == string::npos ? "" : path_.substr(0, pos);
- }
-
- private:
- MockFile(const string& path) : path_(path) {}
- MockFile(const MockFile&) = delete;
- MockFile(MockFile&&) = delete;
- MockFile& operator=(const MockFile&) = delete;
- MockFile& operator=(MockFile&&) = delete;
-
- const string path_;
- };
-
- void AssertEnvvars(const Runfiles& runfiles,
- const string& expected_manifest_file,
- const string& expected_directory);
-
- static string GetTemp();
-};
-
-void RunfilesTest::AssertEnvvars(const Runfiles& runfiles,
- const string& expected_manifest_file,
- const string& expected_directory) {
- vector<pair<string, string> > expected = {
- {"RUNFILES_MANIFEST_FILE", expected_manifest_file},
- {"RUNFILES_DIR", expected_directory},
- {"JAVA_RUNFILES", expected_directory}};
- ASSERT_EQ(runfiles.EnvVars(), expected);
-}
-
-string RunfilesTest::GetTemp() {
-#ifdef _WIN32
- DWORD size = ::GetEnvironmentVariableA("TEST_TMPDIR", NULL, 0);
- if (size == 0) {
- return string(); // unset or empty envvar
- }
- unique_ptr<char[]> value(new char[size]);
- ::GetEnvironmentVariableA("TEST_TMPDIR", value.get(), size);
- return value.get();
-#else
- char* result = getenv("TEST_TMPDIR");
- return result != NULL ? string(result) : string();
-#endif
-}
-
-RunfilesTest::MockFile* RunfilesTest::MockFile::Create(const string& name) {
- return Create(name, vector<string>());
-}
-
-RunfilesTest::MockFile* RunfilesTest::MockFile::Create(
- const string& name, const vector<string>& lines) {
- if (name.find("..") != string::npos || TestOnly_IsAbsolute(name)) {
- cerr << "WARNING: " << __FILE__ << "(" << __LINE__ << "): bad name: \""
- << name << "\"" << endl;
- return nullptr;
- }
-
- string tmp(RunfilesTest::GetTemp());
- if (tmp.empty()) {
- cerr << "WARNING: " << __FILE__ << "(" << __LINE__
- << "): $TEST_TMPDIR is empty" << endl;
- return nullptr;
- }
- string path(tmp + "/" + name);
-
- string::size_type i = 0;
-#ifdef _WIN32
- while ((i = name.find_first_of("/\\", i + 1)) != string::npos) {
- string d = tmp + "\\" + name.substr(0, i);
- if (!CreateDirectoryA(d.c_str(), NULL)) {
- cerr << "ERROR: " << __FILE__ << "(" << __LINE__
- << "): failed to create directory \"" << d << "\"" << endl;
- return nullptr;
- }
- }
-#else
- while ((i = name.find_first_of('/', i + 1)) != string::npos) {
- string d = tmp + "/" + name.substr(0, i);
- if (mkdir(d.c_str(), 0777)) {
- cerr << "ERROR: " << __FILE__ << "(" << __LINE__
- << "): failed to create directory \"" << d << "\"" << endl;
- return nullptr;
- }
- }
-#endif
-
- auto stm = std::ofstream(path);
- for (auto i : lines) {
- stm << i << std::endl;
- }
- return new MockFile(path);
-}
-
-RunfilesTest::MockFile::~MockFile() { std::remove(path_.c_str()); }
-
-TEST_F(RunfilesTest, CreatesManifestBasedRunfilesFromManifestNextToBinary) {
- unique_ptr<MockFile> mf(MockFile::Create(
- "foo" LINE_AS_STRING() ".runfiles_manifest", {"a/b c/d"}));
- EXPECT_TRUE(mf != nullptr);
- string argv0(mf->Path().substr(
- 0, mf->Path().size() - string(".runfiles_manifest").size()));
-
- string error;
- unique_ptr<Runfiles> r(Runfiles::Create(argv0, "", "", &error));
- ASSERT_NE(r, nullptr);
- EXPECT_TRUE(error.empty());
- EXPECT_EQ(r->Rlocation("a/b"), "c/d");
- // We know it's manifest-based because it returns empty string for unknown
- // paths.
- EXPECT_EQ(r->Rlocation("unknown"), "");
- AssertEnvvars(*r, mf->Path(), "");
-}
-
-TEST_F(RunfilesTest,
- CreatesManifestBasedRunfilesFromManifestInRunfilesDirectory) {
- unique_ptr<MockFile> mf(MockFile::Create(
- "foo" LINE_AS_STRING() ".runfiles/MANIFEST", {"a/b c/d"}));
- EXPECT_TRUE(mf != nullptr);
- string argv0(mf->Path().substr(
- 0, mf->Path().size() - string(".runfiles/MANIFEST").size()));
-
- string error;
- unique_ptr<Runfiles> r(Runfiles::Create(argv0, "", "", &error));
- ASSERT_NE(r, nullptr);
- EXPECT_TRUE(error.empty());
- EXPECT_EQ(r->Rlocation("a/b"), "c/d");
- EXPECT_EQ(r->Rlocation("foo"), argv0 + ".runfiles/foo");
- AssertEnvvars(*r, mf->Path(), argv0 + ".runfiles");
-}
-
-TEST_F(RunfilesTest, CreatesManifestBasedRunfilesFromEnvvar) {
- unique_ptr<MockFile> mf(MockFile::Create(
- "foo" LINE_AS_STRING() ".runfiles_manifest", {"a/b c/d"}));
- EXPECT_TRUE(mf != nullptr);
-
- string error;
- unique_ptr<Runfiles> r(Runfiles::Create("ignore-argv0", mf->Path(),
- "non-existent-runfiles_dir", &error));
- ASSERT_NE(r, nullptr);
- EXPECT_TRUE(error.empty());
- EXPECT_EQ(r->Rlocation("a/b"), "c/d");
- // We know it's manifest-based because it returns empty string for unknown
- // paths.
- EXPECT_EQ(r->Rlocation("unknown"), "");
- AssertEnvvars(*r, mf->Path(), "");
-}
-
-TEST_F(RunfilesTest, CannotCreateManifestBasedRunfilesDueToBadManifest) {
- unique_ptr<MockFile> mf(MockFile::Create(
- "foo" LINE_AS_STRING() ".runfiles_manifest", {"a b", "nospace"}));
- EXPECT_TRUE(mf != nullptr);
-
- string error;
- unique_ptr<Runfiles> r(
- Runfiles::Create("ignore-argv0", mf->Path(), "", &error));
- ASSERT_EQ(r, nullptr);
- EXPECT_NE(error.find("bad runfiles manifest entry"), string::npos);
- EXPECT_NE(error.find("line #2: \"nospace\""), string::npos);
-}
-
-TEST_F(RunfilesTest, ManifestBasedRunfilesRlocationAndEnvVars) {
- unique_ptr<MockFile> mf(MockFile::Create(
- "foo" LINE_AS_STRING() ".runfiles_manifest", {"a/b c/d"}));
- EXPECT_TRUE(mf != nullptr);
-
- string error;
- unique_ptr<Runfiles> r(
- Runfiles::Create("ignore-argv0", mf->Path(), "", &error));
-
- ASSERT_NE(r, nullptr);
- EXPECT_TRUE(error.empty());
- EXPECT_EQ(r->Rlocation("a/b"), "c/d");
- EXPECT_EQ(r->Rlocation("c/d"), "");
- EXPECT_EQ(r->Rlocation(""), "");
- EXPECT_EQ(r->Rlocation("foo"), "");
- EXPECT_EQ(r->Rlocation("foo/"), "");
- EXPECT_EQ(r->Rlocation("foo/bar"), "");
- EXPECT_EQ(r->Rlocation("../foo"), "");
- EXPECT_EQ(r->Rlocation("foo/.."), "");
- EXPECT_EQ(r->Rlocation("foo/../bar"), "");
- EXPECT_EQ(r->Rlocation("./foo"), "");
- EXPECT_EQ(r->Rlocation("foo/."), "");
- EXPECT_EQ(r->Rlocation("foo/./bar"), "");
- EXPECT_EQ(r->Rlocation("//foo"), "");
- EXPECT_EQ(r->Rlocation("foo//"), "");
- EXPECT_EQ(r->Rlocation("foo//bar"), "");
- EXPECT_EQ(r->Rlocation("/Foo"), "/Foo");
- EXPECT_EQ(r->Rlocation("c:/Foo"), "c:/Foo");
- EXPECT_EQ(r->Rlocation("c:\\Foo"), "c:\\Foo");
-}
-
-TEST_F(RunfilesTest, DirectoryBasedRunfilesRlocationAndEnvVars) {
- unique_ptr<MockFile> dummy(
- MockFile::Create("foo" LINE_AS_STRING() ".runfiles/dummy", {"a/b c/d"}));
- EXPECT_TRUE(dummy != nullptr);
- string dir = dummy->DirName();
-
- string error;
- unique_ptr<Runfiles> r(Runfiles::Create("ignore-argv0", "", dir, &error));
- ASSERT_NE(r, nullptr);
- EXPECT_TRUE(error.empty());
-
- EXPECT_EQ(r->Rlocation("a/b"), dir + "/a/b");
- EXPECT_EQ(r->Rlocation("c/d"), dir + "/c/d");
- EXPECT_EQ(r->Rlocation(""), "");
- EXPECT_EQ(r->Rlocation("foo"), dir + "/foo");
- EXPECT_EQ(r->Rlocation("foo/"), dir + "/foo/");
- EXPECT_EQ(r->Rlocation("foo/bar"), dir + "/foo/bar");
- EXPECT_EQ(r->Rlocation("../foo"), "");
- EXPECT_EQ(r->Rlocation("foo/.."), "");
- EXPECT_EQ(r->Rlocation("foo/../bar"), "");
- EXPECT_EQ(r->Rlocation("./foo"), "");
- EXPECT_EQ(r->Rlocation("foo/."), "");
- EXPECT_EQ(r->Rlocation("foo/./bar"), "");
- EXPECT_EQ(r->Rlocation("//foo"), "");
- EXPECT_EQ(r->Rlocation("foo//"), "");
- EXPECT_EQ(r->Rlocation("foo//bar"), "");
- EXPECT_EQ(r->Rlocation("/Foo"), "/Foo");
- EXPECT_EQ(r->Rlocation("c:/Foo"), "c:/Foo");
- EXPECT_EQ(r->Rlocation("c:\\Foo"), "c:\\Foo");
- AssertEnvvars(*r, "", dir);
-}
-
-TEST_F(RunfilesTest, ManifestAndDirectoryBasedRunfilesRlocationAndEnvVars) {
- unique_ptr<MockFile> mf(MockFile::Create(
- "foo" LINE_AS_STRING() ".runfiles/MANIFEST", {"a/b c/d"}));
- EXPECT_TRUE(mf != nullptr);
- string dir = mf->DirName();
-
- string error;
- unique_ptr<Runfiles> r(
- Runfiles::Create("ignore-argv0", mf->Path(), "", &error));
-
- ASSERT_NE(r, nullptr);
- EXPECT_TRUE(error.empty());
- EXPECT_EQ(r->Rlocation("a/b"), "c/d");
- EXPECT_EQ(r->Rlocation("c/d"), dir + "/c/d");
- EXPECT_EQ(r->Rlocation(""), "");
- EXPECT_EQ(r->Rlocation("foo"), dir + "/foo");
- EXPECT_EQ(r->Rlocation("foo/"), dir + "/foo/");
- EXPECT_EQ(r->Rlocation("foo/bar"), dir + "/foo/bar");
- EXPECT_EQ(r->Rlocation("../foo"), "");
- EXPECT_EQ(r->Rlocation("foo/.."), "");
- EXPECT_EQ(r->Rlocation("foo/../bar"), "");
- EXPECT_EQ(r->Rlocation("./foo"), "");
- EXPECT_EQ(r->Rlocation("foo/."), "");
- EXPECT_EQ(r->Rlocation("foo/./bar"), "");
- EXPECT_EQ(r->Rlocation("//foo"), "");
- EXPECT_EQ(r->Rlocation("foo//"), "");
- EXPECT_EQ(r->Rlocation("foo//bar"), "");
- EXPECT_EQ(r->Rlocation("/Foo"), "/Foo");
- EXPECT_EQ(r->Rlocation("c:/Foo"), "c:/Foo");
- EXPECT_EQ(r->Rlocation("c:\\Foo"), "c:\\Foo");
- AssertEnvvars(*r, mf->Path(), dir);
-}
-
-TEST_F(RunfilesTest, ManifestBasedRunfilesEnvVars) {
- unique_ptr<MockFile> mf(
- MockFile::Create(string("foo" LINE_AS_STRING() ".runfiles_manifest")));
- EXPECT_TRUE(mf != nullptr);
-
- string error;
- unique_ptr<Runfiles> r(
- Runfiles::Create("ignore-argv0", mf->Path(), "", &error));
- ASSERT_NE(r, nullptr);
- EXPECT_TRUE(error.empty());
-
- AssertEnvvars(*r, mf->Path(), "");
-}
-
-TEST_F(RunfilesTest, CreatesDirectoryBasedRunfilesFromDirectoryNextToBinary) {
- // We create a directory as a side-effect of creating a mock file.
- unique_ptr<MockFile> mf(
- MockFile::Create(string("foo" LINE_AS_STRING() ".runfiles/dummy")));
- string argv0(mf->Path().substr(
- 0, mf->Path().size() - string(".runfiles/dummy").size()));
-
- string error;
- unique_ptr<Runfiles> r(Runfiles::Create(argv0, "", "", &error));
- ASSERT_NE(r, nullptr);
- EXPECT_TRUE(error.empty());
-
- EXPECT_EQ(r->Rlocation("a/b"), argv0 + ".runfiles/a/b");
- // We know it's directory-based because it returns some result for unknown
- // paths.
- EXPECT_EQ(r->Rlocation("unknown"), argv0 + ".runfiles/unknown");
- AssertEnvvars(*r, "", argv0 + ".runfiles");
-}
-
-TEST_F(RunfilesTest, CreatesDirectoryBasedRunfilesFromEnvvar) {
- // We create a directory as a side-effect of creating a mock file.
- unique_ptr<MockFile> mf(
- MockFile::Create(string("foo" LINE_AS_STRING() ".runfiles/dummy")));
- string dir = mf->DirName();
-
- string error;
- unique_ptr<Runfiles> r(Runfiles::Create("ignore-argv0", "", dir, &error));
- ASSERT_NE(r, nullptr);
- EXPECT_TRUE(error.empty());
-
- EXPECT_EQ(r->Rlocation("a/b"), dir + "/a/b");
- EXPECT_EQ(r->Rlocation("foo"), dir + "/foo");
- EXPECT_EQ(r->Rlocation("/Foo"), "/Foo");
- EXPECT_EQ(r->Rlocation("c:/Foo"), "c:/Foo");
- EXPECT_EQ(r->Rlocation("c:\\Foo"), "c:\\Foo");
- AssertEnvvars(*r, "", dir);
-}
-
-TEST_F(RunfilesTest, FailsToCreateAnyRunfilesBecauseEnvvarsAreNotDefined) {
- unique_ptr<MockFile> mf(
- MockFile::Create(string("foo" LINE_AS_STRING() ".runfiles/MANIFEST")));
- EXPECT_TRUE(mf != nullptr);
-
- string error;
- unique_ptr<Runfiles> r(
- Runfiles::Create("ignore-argv0", mf->Path(), "whatever", &error));
- ASSERT_NE(r, nullptr);
- EXPECT_TRUE(error.empty());
-
- // We create a directory as a side-effect of creating a mock file.
- mf.reset(MockFile::Create(string("foo" LINE_AS_STRING() ".runfiles/dummy")));
- r.reset(Runfiles::Create("ignore-argv0", "", mf->DirName(), &error));
- ASSERT_NE(r, nullptr);
- EXPECT_TRUE(error.empty());
-
- r.reset(Runfiles::Create("ignore-argv0", "", "", &error));
- ASSERT_EQ(r, nullptr);
- EXPECT_NE(error.find("cannot find runfiles"), string::npos);
-}
-
-TEST_F(RunfilesTest, MockFileTest) {
- {
- unique_ptr<MockFile> mf(
- MockFile::Create(string("foo" LINE_AS_STRING() "/..")));
- EXPECT_TRUE(mf == nullptr);
- }
-
- {
- unique_ptr<MockFile> mf(MockFile::Create(string("/Foo" LINE_AS_STRING())));
- EXPECT_TRUE(mf == nullptr);
- }
-
- {
- unique_ptr<MockFile> mf(
- MockFile::Create(string("C:/Foo" LINE_AS_STRING())));
- EXPECT_TRUE(mf == nullptr);
- }
-
- string path;
- {
- unique_ptr<MockFile> mf(
- MockFile::Create(string("foo" LINE_AS_STRING() "/bar1/qux")));
- EXPECT_TRUE(mf != nullptr);
- path = mf->Path();
-
- std::ifstream stm(path);
- EXPECT_TRUE(stm.good());
- string actual;
- stm >> actual;
- EXPECT_TRUE(actual.empty());
- }
- {
- std::ifstream stm(path);
- EXPECT_FALSE(stm.good());
- }
-
- {
- unique_ptr<MockFile> mf(MockFile::Create(
- string("foo" LINE_AS_STRING() "/bar2/qux"), vector<string>()));
- EXPECT_TRUE(mf != nullptr);
- path = mf->Path();
-
- std::ifstream stm(path);
- EXPECT_TRUE(stm.good());
- string actual;
- stm >> actual;
- EXPECT_TRUE(actual.empty());
- }
- {
- std::ifstream stm(path);
- EXPECT_FALSE(stm.good());
- }
-
- {
- unique_ptr<MockFile> mf(
- MockFile::Create(string("foo" LINE_AS_STRING() "/bar3/qux"),
- {"hello world", "you are beautiful"}));
- EXPECT_TRUE(mf != nullptr);
- path = mf->Path();
-
- std::ifstream stm(path);
- EXPECT_TRUE(stm.good());
- string actual;
- std::getline(stm, actual);
- EXPECT_EQ("hello world", actual);
- std::getline(stm, actual);
- EXPECT_EQ("you are beautiful", actual);
- std::getline(stm, actual);
- EXPECT_EQ("", actual);
- }
- {
- std::ifstream stm(path);
- EXPECT_FALSE(stm.good());
- }
-}
-
-TEST_F(RunfilesTest, IsAbsolute) {
- EXPECT_FALSE(TestOnly_IsAbsolute("foo"));
- EXPECT_FALSE(TestOnly_IsAbsolute("foo/bar"));
- EXPECT_FALSE(TestOnly_IsAbsolute("\\foo"));
- EXPECT_TRUE(TestOnly_IsAbsolute("c:\\foo"));
- EXPECT_TRUE(TestOnly_IsAbsolute("c:/foo"));
- EXPECT_TRUE(TestOnly_IsAbsolute("/foo"));
- EXPECT_TRUE(TestOnly_IsAbsolute("x:\\foo"));
- EXPECT_FALSE(TestOnly_IsAbsolute("::\\foo"));
- EXPECT_FALSE(TestOnly_IsAbsolute("x\\foo"));
- EXPECT_FALSE(TestOnly_IsAbsolute("x:"));
- EXPECT_TRUE(TestOnly_IsAbsolute("x:\\"));
-}
-
-TEST_F(RunfilesTest, PathsFromEnvVars) {
- string mf, dir;
-
- // Both envvars have a valid value.
- EXPECT_TRUE(TestOnly_PathsFrom(
- "argv0", "mock1/MANIFEST", "mock2",
- [](const string& path) { return path == "mock1/MANIFEST"; },
- [](const string& path) { return path == "mock2"; }, &mf, &dir));
- EXPECT_EQ(mf, "mock1/MANIFEST");
- EXPECT_EQ(dir, "mock2");
-
- // RUNFILES_MANIFEST_FILE is invalid but RUNFILES_DIR is good and there's a
- // runfiles manifest in the runfiles directory.
- EXPECT_TRUE(TestOnly_PathsFrom(
- "argv0", "mock1/MANIFEST", "mock2",
- [](const string& path) { return path == "mock2/MANIFEST"; },
- [](const string& path) { return path == "mock2"; }, &mf, &dir));
- EXPECT_EQ(mf, "mock2/MANIFEST");
- EXPECT_EQ(dir, "mock2");
-
- // RUNFILES_MANIFEST_FILE is invalid but RUNFILES_DIR is good, but there's no
- // runfiles manifest in the runfiles directory.
- EXPECT_TRUE(TestOnly_PathsFrom(
- "argv0", "mock1/MANIFEST", "mock2",
- [](const string& path) { return false; },
- [](const string& path) { return path == "mock2"; }, &mf, &dir));
- EXPECT_EQ(mf, "");
- EXPECT_EQ(dir, "mock2");
-
- // RUNFILES_DIR is invalid but RUNFILES_MANIFEST_FILE is good, and it is in
- // a valid-looking runfiles directory.
- EXPECT_TRUE(TestOnly_PathsFrom(
- "argv0", "mock1/MANIFEST", "mock2",
- [](const string& path) { return path == "mock1/MANIFEST"; },
- [](const string& path) { return path == "mock1"; }, &mf, &dir));
- EXPECT_EQ(mf, "mock1/MANIFEST");
- EXPECT_EQ(dir, "mock1");
-
- // RUNFILES_DIR is invalid but RUNFILES_MANIFEST_FILE is good, but it is not
- // in any valid-looking runfiles directory.
- EXPECT_TRUE(TestOnly_PathsFrom(
- "argv0", "mock1/MANIFEST", "mock2",
- [](const string& path) { return path == "mock1/MANIFEST"; },
- [](const string& path) { return false; }, &mf, &dir));
- EXPECT_EQ(mf, "mock1/MANIFEST");
- EXPECT_EQ(dir, "");
-
- // Both envvars are invalid, but there's a manifest in a runfiles directory
- // next to argv0, however there's no other content in the runfiles directory.
- EXPECT_TRUE(TestOnly_PathsFrom(
- "argv0", "mock1/MANIFEST", "mock2",
- [](const string& path) { return path == "argv0.runfiles/MANIFEST"; },
- [](const string& path) { return false; }, &mf, &dir));
- EXPECT_EQ(mf, "argv0.runfiles/MANIFEST");
- EXPECT_EQ(dir, "");
-
- // Both envvars are invalid, but there's a manifest next to argv0. There's
- // no runfiles tree anywhere.
- EXPECT_TRUE(TestOnly_PathsFrom(
- "argv0", "mock1/MANIFEST", "mock2",
- [](const string& path) { return path == "argv0.runfiles_manifest"; },
- [](const string& path) { return false; }, &mf, &dir));
- EXPECT_EQ(mf, "argv0.runfiles_manifest");
- EXPECT_EQ(dir, "");
-
- // Both envvars are invalid, but there's a valid manifest next to argv0, and a
- // valid runfiles directory (without a manifest in it).
- EXPECT_TRUE(TestOnly_PathsFrom(
- "argv0", "mock1/MANIFEST", "mock2",
- [](const string& path) { return path == "argv0.runfiles_manifest"; },
- [](const string& path) { return path == "argv0.runfiles"; }, &mf, &dir));
- EXPECT_EQ(mf, "argv0.runfiles_manifest");
- EXPECT_EQ(dir, "argv0.runfiles");
-
- // Both envvars are invalid, but there's a valid runfiles directory next to
- // argv0, though no manifest in it.
- EXPECT_TRUE(TestOnly_PathsFrom(
- "argv0", "mock1/MANIFEST", "mock2",
- [](const string& path) { return false; },
- [](const string& path) { return path == "argv0.runfiles"; }, &mf, &dir));
- EXPECT_EQ(mf, "");
- EXPECT_EQ(dir, "argv0.runfiles");
-
- // Both envvars are invalid, but there's a valid runfiles directory next to
- // argv0 with a valid manifest in it.
- EXPECT_TRUE(TestOnly_PathsFrom(
- "argv0", "mock1/MANIFEST", "mock2",
- [](const string& path) { return path == "argv0.runfiles/MANIFEST"; },
- [](const string& path) { return path == "argv0.runfiles"; }, &mf, &dir));
- EXPECT_EQ(mf, "argv0.runfiles/MANIFEST");
- EXPECT_EQ(dir, "argv0.runfiles");
-}
-
-} // namespace
-} // namespace runfiles
-} // namespace cpp
-} // namespace tools
-} // namespace bazel
diff --git a/cc/private/toolchain/unix_cc_configure.bzl b/cc/private/toolchain/unix_cc_configure.bzl
deleted file mode 100644
index a7e4d7e..0000000
--- a/cc/private/toolchain/unix_cc_configure.bzl
+++ /dev/null
@@ -1,567 +0,0 @@
-# pylint: disable=g-bad-file-header
-# Copyright 2016 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.
-"""Configuring the C++ toolchain on Unix platforms."""
-
-load(
- "//cc/private/toolchain:lib_cc_configure.bzl",
- "auto_configure_fail",
- "auto_configure_warning",
- "auto_configure_warning_maybe",
- "escape_string",
- "get_env_var",
- "get_starlark_list",
- "resolve_labels",
- "split_escaped",
- "which",
-)
-
-def _field(name, value):
- """Returns properly indented top level crosstool field."""
- if type(value) == "list":
- return "\n".join([" " + name + ": '" + v + "'" for v in value])
- elif type(value) == "string":
- return " " + name + ": '" + value + "'"
- else:
- auto_configure_fail("Unexpected field type: " + type(value))
- return ""
-
-def _uniq(iterable):
- """Remove duplicates from a list."""
-
- unique_elements = {element: None for element in iterable}
- return unique_elements.keys()
-
-def _prepare_include_path(repo_ctx, path):
- """Resolve and sanitize include path before outputting it into the crosstool.
-
- Args:
- repo_ctx: repository_ctx object.
- path: an include path to be sanitized.
-
- Returns:
- Sanitized include path that can be written to the crosstoot. Resulting path
- is absolute if it is outside the repository and relative otherwise.
- """
-
- repo_root = str(repo_ctx.path("."))
-
- # We're on UNIX, so the path delimiter is '/'.
- repo_root += "/"
- path = str(repo_ctx.path(path))
- if path.startswith(repo_root):
- return escape_string(path[len(repo_root):])
- return escape_string(path)
-
-def _get_value(it):
- """Convert `it` in serialized protobuf format."""
- if type(it) == "int":
- return str(it)
- elif type(it) == "bool":
- return "true" if it else "false"
- else:
- return "\"%s\"" % it
-
-def _find_tool(repository_ctx, tool, overriden_tools):
- """Find a tool for repository, taking overriden tools into account."""
- if tool in overriden_tools:
- return overriden_tools[tool]
- return which(repository_ctx, tool, "/usr/bin/" + tool)
-
-def _get_tool_paths(repository_ctx, overriden_tools):
- """Compute the %-escaped path to the various tools"""
- return dict({
- k: escape_string(_find_tool(repository_ctx, k, overriden_tools))
- for k in [
- "ar",
- "ld",
- "cpp",
- "gcc",
- "dwp",
- "gcov",
- "nm",
- "objcopy",
- "objdump",
- "strip",
- ]
- }.items())
-
-def _escaped_cplus_include_paths(repository_ctx):
- """Use ${CPLUS_INCLUDE_PATH} to compute the %-escaped list of flags for cxxflag."""
- if "CPLUS_INCLUDE_PATH" in repository_ctx.os.environ:
- result = []
- for p in repository_ctx.os.environ["CPLUS_INCLUDE_PATH"].split(":"):
- p = escape_string(str(repository_ctx.path(p))) # Normalize the path
- result.append("-I" + p)
- return result
- else:
- return []
-
-_INC_DIR_MARKER_BEGIN = "#include <...>"
-
-# OSX add " (framework directory)" at the end of line, strip it.
-_OSX_FRAMEWORK_SUFFIX = " (framework directory)"
-_OSX_FRAMEWORK_SUFFIX_LEN = len(_OSX_FRAMEWORK_SUFFIX)
-
-def _cxx_inc_convert(path):
- """Convert path returned by cc -E xc++ in a complete path. Doesn't %-escape the path!"""
- path = path.strip()
- if path.endswith(_OSX_FRAMEWORK_SUFFIX):
- path = path[:-_OSX_FRAMEWORK_SUFFIX_LEN].strip()
- return path
-
-def get_escaped_cxx_inc_directories(repository_ctx, cc, lang_flag, additional_flags = []):
- """Compute the list of default %-escaped C++ include directories."""
- result = repository_ctx.execute([cc, "-E", lang_flag, "-", "-v"] + additional_flags)
- index1 = result.stderr.find(_INC_DIR_MARKER_BEGIN)
- if index1 == -1:
- return []
- index1 = result.stderr.find("\n", index1)
- if index1 == -1:
- return []
- index2 = result.stderr.rfind("\n ")
- if index2 == -1 or index2 < index1:
- return []
- index2 = result.stderr.find("\n", index2 + 1)
- if index2 == -1:
- inc_dirs = result.stderr[index1 + 1:]
- else:
- inc_dirs = result.stderr[index1 + 1:index2].strip()
-
- return [
- _prepare_include_path(repository_ctx, _cxx_inc_convert(p))
- for p in inc_dirs.split("\n")
- ]
-
-def _is_compiler_option_supported(repository_ctx, cc, option):
- """Checks that `option` is supported by the C compiler. Doesn't %-escape the option."""
- result = repository_ctx.execute([
- cc,
- option,
- "-o",
- "/dev/null",
- "-c",
- str(repository_ctx.path("cc/private/toolchain/empty.cc")),
- ])
- return result.stderr.find(option) == -1
-
-def _is_linker_option_supported(repository_ctx, cc, option, pattern):
- """Checks that `option` is supported by the C linker. Doesn't %-escape the option."""
- result = repository_ctx.execute([
- cc,
- option,
- "-o",
- "/dev/null",
- str(repository_ctx.path("cc/private/toolchain/empty.cc")),
- ])
- return result.stderr.find(pattern) == -1
-
-def _find_gold_linker_path(repository_ctx, cc):
- """Checks if `gold` is supported by the C compiler.
-
- Args:
- repository_ctx: repository_ctx.
- cc: path to the C compiler.
-
- Returns:
- String to put as value to -fuse-ld= flag, or None if gold couldn't be found.
- """
- result = repository_ctx.execute([
- cc,
- str(repository_ctx.path("cc/private/toolchain/empty.cc")),
- "-o",
- "/dev/null",
- # Some macos clang versions don't fail when setting -fuse-ld=gold, adding
- # these lines to force it to. This also means that we will not detect
- # gold when only a very old (year 2010 and older) is present.
- "-Wl,--start-lib",
- "-Wl,--end-lib",
- "-fuse-ld=gold",
- "-v",
- ])
- if result.return_code != 0:
- return None
-
- for line in result.stderr.splitlines():
- if line.find("gold") == -1:
- continue
- for flag in line.split(" "):
- if flag.find("gold") == -1:
- continue
-
- # flag is '-fuse-ld=gold' for GCC or "/usr/lib/ld.gold" for Clang
- # strip space, single quote, and double quotes
- flag = flag.strip(" \"'")
-
- # remove -fuse-ld= from GCC output so we have only the flag value part
- flag = flag.replace("-fuse-ld=", "")
- return flag
- auto_configure_warning(
- "CC with -fuse-ld=gold returned 0, but its -v output " +
- "didn't contain 'gold', falling back to the default linker.",
- )
- return None
-
-def _add_compiler_option_if_supported(repository_ctx, cc, option):
- """Returns `[option]` if supported, `[]` otherwise. Doesn't %-escape the option."""
- return [option] if _is_compiler_option_supported(repository_ctx, cc, option) else []
-
-def _add_linker_option_if_supported(repository_ctx, cc, option, pattern):
- """Returns `[option]` if supported, `[]` otherwise. Doesn't %-escape the option."""
- return [option] if _is_linker_option_supported(repository_ctx, cc, option, pattern) else []
-
-def _get_no_canonical_prefixes_opt(repository_ctx, cc):
- # If the compiler sometimes rewrites paths in the .d files without symlinks
- # (ie when they're shorter), it confuses Bazel's logic for verifying all
- # #included header files are listed as inputs to the action.
-
- # The '-fno-canonical-system-headers' should be enough, but clang does not
- # support it, so we also try '-no-canonical-prefixes' if first option does
- # not work.
- opt = _add_compiler_option_if_supported(
- repository_ctx,
- cc,
- "-fno-canonical-system-headers",
- )
- if len(opt) == 0:
- return _add_compiler_option_if_supported(
- repository_ctx,
- cc,
- "-no-canonical-prefixes",
- )
- return opt
-
-def get_env(repository_ctx):
- """Convert the environment in a list of export if in Homebrew. Doesn't %-escape the result!"""
- env = repository_ctx.os.environ
- if "HOMEBREW_RUBY_PATH" in env:
- return "\n".join([
- "export %s='%s'" % (k, env[k].replace("'", "'\\''"))
- for k in env
- if k != "_" and k.find(".") == -1
- ])
- else:
- return ""
-
-def _coverage_flags(repository_ctx, darwin):
- use_llvm_cov = "1" == get_env_var(
- repository_ctx,
- "BAZEL_USE_LLVM_NATIVE_COVERAGE",
- default = "0",
- enable_warning = False,
- )
- if darwin or use_llvm_cov:
- compile_flags = '"-fprofile-instr-generate", "-fcoverage-mapping"'
- link_flags = '"-fprofile-instr-generate"'
- else:
- # gcc requires --coverage being passed for compilation and linking
- # https://gcc.gnu.org/onlinedocs/gcc/Instrumentation-Options.html#Instrumentation-Options
- compile_flags = '"--coverage"'
- link_flags = '"--coverage"'
- return compile_flags, link_flags
-
-def _find_generic(repository_ctx, name, env_name, overriden_tools, warn = False, silent = False):
- """Find a generic C++ toolchain tool. Doesn't %-escape the result."""
-
- if name in overriden_tools:
- return overriden_tools[name]
-
- result = name
- env_value = repository_ctx.os.environ.get(env_name)
- env_value_with_paren = ""
- if env_value != None:
- env_value = env_value.strip()
- if env_value:
- result = env_value
- env_value_with_paren = " (%s)" % env_value
- if result.startswith("/"):
- # Absolute path, maybe we should make this suported by our which function.
- return result
- result = repository_ctx.which(result)
- if result == None:
- msg = ("Cannot find %s or %s%s; either correct your path or set the %s" +
- " environment variable") % (name, env_name, env_value_with_paren, env_name)
- if warn:
- if not silent:
- auto_configure_warning(msg)
- else:
- auto_configure_fail(msg)
- return result
-
-def find_cc(repository_ctx, overriden_tools):
- return _find_generic(repository_ctx, "gcc", "CC", overriden_tools)
-
-def configure_unix_toolchain(repository_ctx, cpu_value, overriden_tools):
- """Configure C++ toolchain on Unix platforms."""
- paths = resolve_labels(repository_ctx, [
- "//cc/private/toolchain:BUILD.tpl",
- "//cc/private/toolchain:armeabi_cc_toolchain_config.bzl",
- "//cc/private/toolchain:unix_cc_toolchain_config.bzl",
- "//cc/private/toolchain:linux_cc_wrapper.sh.tpl",
- "//cc/private/toolchain:osx_cc_wrapper.sh.tpl",
- ])
-
- repository_ctx.symlink(
- paths["//cc/private/toolchain:unix_cc_toolchain_config.bzl"],
- "cc_toolchain_config.bzl",
- )
-
- repository_ctx.symlink(
- paths["//cc/private/toolchain:armeabi_cc_toolchain_config.bzl"],
- "armeabi_cc_toolchain_config.bzl",
- )
-
- repository_ctx.file("cc/private/toolchain/empty.cc", "int main() {}")
- darwin = cpu_value == "darwin"
-
- cc = _find_generic(repository_ctx, "gcc", "CC", overriden_tools)
- overriden_tools = dict(overriden_tools)
- overriden_tools["gcc"] = cc
- overriden_tools["gcov"] = _find_generic(
- repository_ctx,
- "gcov",
- "GCOV",
- overriden_tools,
- warn = True,
- silent = True,
- )
- if darwin:
- overriden_tools["gcc"] = "cc_wrapper.sh"
- overriden_tools["ar"] = "/usr/bin/libtool"
- auto_configure_warning_maybe(repository_ctx, "CC used: " + str(cc))
- tool_paths = _get_tool_paths(repository_ctx, overriden_tools)
- cc_toolchain_identifier = escape_string(get_env_var(
- repository_ctx,
- "CC_TOOLCHAIN_NAME",
- "local",
- False,
- ))
-
- cc_wrapper_src = (
- "//cc/private/toolchain:osx_cc_wrapper.sh.tpl" if darwin else "//cc/private/toolchain:linux_cc_wrapper.sh.tpl"
- )
- repository_ctx.template(
- "cc_wrapper.sh",
- paths[cc_wrapper_src],
- {
- "%{cc}": escape_string(str(cc)),
- "%{env}": escape_string(get_env(repository_ctx)),
- },
- )
-
- cxx_opts = split_escaped(get_env_var(
- repository_ctx,
- "BAZEL_CXXOPTS",
- "-std=c++0x",
- False,
- ), ":")
- link_opts = split_escaped(get_env_var(
- repository_ctx,
- "BAZEL_LINKOPTS",
- "-lstdc++:-lm",
- False,
- ), ":")
- link_libs = split_escaped(get_env_var(
- repository_ctx,
- "BAZEL_LINKLIBS",
- "",
- False,
- ), ":")
- gold_linker_path = _find_gold_linker_path(repository_ctx, cc)
- cc_path = repository_ctx.path(cc)
- if not str(cc_path).startswith(str(repository_ctx.path(".")) + "/"):
- # cc is outside the repository, set -B
- bin_search_flag = ["-B" + escape_string(str(cc_path.dirname))]
- else:
- # cc is inside the repository, don't set -B.
- bin_search_flag = []
-
- coverage_compile_flags, coverage_link_flags = _coverage_flags(repository_ctx, darwin)
-
- repository_ctx.template(
- "BUILD",
- paths["//cc/private/toolchain:BUILD.tpl"],
- {
- "%{cc_toolchain_identifier}": cc_toolchain_identifier,
- "%{name}": cpu_value,
- "%{supports_param_files}": "0" if darwin else "1",
- "%{cc_compiler_deps}": ":cc_wrapper" if darwin else ":empty",
- "%{compiler}": escape_string(get_env_var(
- repository_ctx,
- "BAZEL_COMPILER",
- "compiler",
- False,
- )),
- "%{abi_version}": escape_string(get_env_var(
- repository_ctx,
- "ABI_VERSION",
- "local",
- False,
- )),
- "%{abi_libc_version}": escape_string(get_env_var(
- repository_ctx,
- "ABI_LIBC_VERSION",
- "local",
- False,
- )),
- "%{host_system_name}": escape_string(get_env_var(
- repository_ctx,
- "BAZEL_HOST_SYSTEM",
- "local",
- False,
- )),
- "%{target_libc}": "macosx" if darwin else escape_string(get_env_var(
- repository_ctx,
- "BAZEL_TARGET_LIBC",
- "local",
- False,
- )),
- "%{target_cpu}": escape_string(get_env_var(
- repository_ctx,
- "BAZEL_TARGET_CPU",
- cpu_value,
- False,
- )),
- "%{target_system_name}": escape_string(get_env_var(
- repository_ctx,
- "BAZEL_TARGET_SYSTEM",
- "local",
- False,
- )),
- "%{tool_paths}": ",\n ".join(
- ['"%s": "%s"' % (k, v) for k, v in tool_paths.items()],
- ),
- "%{cxx_builtin_include_directories}": get_starlark_list(
- _uniq(
- get_escaped_cxx_inc_directories(repository_ctx, cc, "-xc") +
- get_escaped_cxx_inc_directories(repository_ctx, cc, "-xc++", cxx_opts) +
- get_escaped_cxx_inc_directories(
- repository_ctx,
- cc,
- "-xc",
- _get_no_canonical_prefixes_opt(repository_ctx, cc),
- ) +
- get_escaped_cxx_inc_directories(
- repository_ctx,
- cc,
- "-xc++",
- cxx_opts + _get_no_canonical_prefixes_opt(repository_ctx, cc),
- ),
- ),
- ),
- "%{compile_flags}": get_starlark_list(
- [
- # Security hardening requires optimization.
- # We need to undef it as some distributions now have it enabled by default.
- "-U_FORTIFY_SOURCE",
- "-fstack-protector",
- # All warnings are enabled. Maybe enable -Werror as well?
- "-Wall",
- # Enable a few more warnings that aren't part of -Wall.
- ] + ((
- _add_compiler_option_if_supported(repository_ctx, cc, "-Wthread-safety") +
- _add_compiler_option_if_supported(repository_ctx, cc, "-Wself-assign")
- )) + (
- # Disable problematic warnings.
- _add_compiler_option_if_supported(repository_ctx, cc, "-Wunused-but-set-parameter") +
- # has false positives
- _add_compiler_option_if_supported(repository_ctx, cc, "-Wno-free-nonheap-object") +
- # Enable coloring even if there's no attached terminal. Bazel removes the
- # escape sequences if --nocolor is specified.
- _add_compiler_option_if_supported(repository_ctx, cc, "-fcolor-diagnostics")
- ) + [
- # Keep stack frames for debugging, even in opt mode.
- "-fno-omit-frame-pointer",
- ],
- ),
- "%{cxx_flags}": get_starlark_list(cxx_opts + _escaped_cplus_include_paths(repository_ctx)),
- "%{link_flags}": get_starlark_list((
- ["-fuse-ld=" + gold_linker_path] if gold_linker_path else []
- ) + _add_linker_option_if_supported(
- repository_ctx,
- cc,
- "-Wl,-no-as-needed",
- "-no-as-needed",
- ) + _add_linker_option_if_supported(
- repository_ctx,
- cc,
- "-Wl,-z,relro,-z,now",
- "-z",
- ) + (
- [
- "-undefined",
- "dynamic_lookup",
- "-headerpad_max_install_names",
- ] if darwin else bin_search_flag + [
- # Gold linker only? Can we enable this by default?
- # "-Wl,--warn-execstack",
- # "-Wl,--detect-odr-violations"
- ] + _add_compiler_option_if_supported(
- # Have gcc return the exit code from ld.
- repository_ctx,
- cc,
- "-pass-exit-codes",
- )
- ) + link_opts),
- "%{link_libs}": get_starlark_list(link_libs),
- "%{opt_compile_flags}": get_starlark_list(
- [
- # No debug symbols.
- # Maybe we should enable https://gcc.gnu.org/wiki/DebugFission for opt or
- # even generally? However, that can't happen here, as it requires special
- # handling in Bazel.
- "-g0",
-
- # Conservative choice for -O
- # -O3 can increase binary size and even slow down the resulting binaries.
- # Profile first and / or use FDO if you need better performance than this.
- "-O2",
-
- # Security hardening on by default.
- # Conservative choice; -D_FORTIFY_SOURCE=2 may be unsafe in some cases.
- "-D_FORTIFY_SOURCE=1",
-
- # Disable assertions
- "-DNDEBUG",
-
- # Removal of unused code and data at link time (can this increase binary
- # size in some cases?).
- "-ffunction-sections",
- "-fdata-sections",
- ],
- ),
- "%{opt_link_flags}": get_starlark_list(
- [] if darwin else _add_linker_option_if_supported(
- repository_ctx,
- cc,
- "-Wl,--gc-sections",
- "-gc-sections",
- ),
- ),
- "%{unfiltered_compile_flags}": get_starlark_list(
- _get_no_canonical_prefixes_opt(repository_ctx, cc) + [
- # Make C++ compilation deterministic. Use linkstamping instead of these
- # compiler symbols.
- "-Wno-builtin-macro-redefined",
- "-D__DATE__=\\\"redacted\\\"",
- "-D__TIMESTAMP__=\\\"redacted\\\"",
- "-D__TIME__=\\\"redacted\\\"",
- ],
- ),
- "%{dbg_compile_flags}": get_starlark_list(["-g"]),
- "%{coverage_compile_flags}": coverage_compile_flags,
- "%{coverage_link_flags}": coverage_link_flags,
- "%{supports_start_end_lib}": "True" if gold_linker_path else "False",
- },
- )
diff --git a/cc/private/toolchain/unix_cc_toolchain_config.bzl b/cc/private/toolchain/unix_cc_toolchain_config.bzl
deleted file mode 100644
index 1c7cd6b..0000000
--- a/cc/private/toolchain/unix_cc_toolchain_config.bzl
+++ /dev/null
@@ -1,1133 +0,0 @@
-# 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(
- "//cc/private/toolchain:cc_toolchain_config_lib.bzl",
- "feature",
- "feature_set",
- "flag_group",
- "flag_set",
- "tool_path",
- "variable_with_value",
- "with_feature_set",
-)
-load("//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,
-]
-
-lto_index_actions = [
- ACTION_NAMES.lto_index_for_executable,
- ACTION_NAMES.lto_index_for_dynamic_library,
- ACTION_NAMES.lto_index_for_nodeps_dynamic_library,
-]
-
-def _impl(ctx):
- tool_paths = [
- tool_path(name = name, path = path)
- for name, path in ctx.attr.tool_paths.items()
- ]
- action_configs = []
-
- 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 = all_compile_actions,
- flag_groups = ([
- flag_group(
- flags = ctx.attr.compile_flags,
- ),
- ] if ctx.attr.compile_flags else []),
- ),
- flag_set(
- actions = all_compile_actions,
- flag_groups = ([
- flag_group(
- flags = ctx.attr.dbg_compile_flags,
- ),
- ] if ctx.attr.dbg_compile_flags else []),
- with_features = [with_feature_set(features = ["dbg"])],
- ),
- flag_set(
- actions = all_compile_actions,
- flag_groups = ([
- flag_group(
- flags = ctx.attr.opt_compile_flags,
- ),
- ] if ctx.attr.opt_compile_flags else []),
- with_features = [with_feature_set(features = ["opt"])],
- ),
- flag_set(
- actions = all_cpp_compile_actions + [ACTION_NAMES.lto_backend],
- flag_groups = ([
- flag_group(
- flags = ctx.attr.cxx_flags,
- ),
- ] if ctx.attr.cxx_flags else []),
- ),
- ],
- )
-
- default_link_flags_feature = feature(
- name = "default_link_flags",
- enabled = True,
- flag_sets = [
- flag_set(
- actions = all_link_actions + lto_index_actions,
- flag_groups = ([
- flag_group(
- flags = ctx.attr.link_flags,
- ),
- ] if ctx.attr.link_flags else []),
- ),
- flag_set(
- actions = all_link_actions + lto_index_actions,
- flag_groups = ([
- flag_group(
- flags = ctx.attr.opt_link_flags,
- ),
- ] if ctx.attr.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,
- ] + all_link_actions + lto_index_actions,
- 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 = all_compile_actions,
- 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 = all_compile_actions,
- flag_groups = ([
- flag_group(
- flags = ctx.attr.unfiltered_compile_flags,
- ),
- ] if ctx.attr.unfiltered_compile_flags else []),
- ),
- ],
- )
-
- library_search_directories_feature = feature(
- name = "library_search_directories",
- flag_sets = [
- flag_set(
- actions = all_link_actions + lto_index_actions,
- flag_groups = [
- flag_group(
- flags = ["-L%{library_search_directories}"],
- iterate_over = "library_search_directories",
- expand_if_available = "library_search_directories",
- ),
- ],
- ),
- ],
- )
-
- static_libgcc_feature = feature(
- name = "static_libgcc",
- enabled = True,
- flag_sets = [
- flag_set(
- actions = [
- ACTION_NAMES.cpp_link_executable,
- ACTION_NAMES.cpp_link_dynamic_library,
- ACTION_NAMES.lto_index_for_executable,
- ACTION_NAMES.lto_index_for_dynamic_library,
- ],
- flag_groups = [flag_group(flags = ["-static-libgcc"])],
- with_features = [
- with_feature_set(features = ["static_link_cpp_runtimes"]),
- ],
- ),
- ],
- )
-
- pic_feature = feature(
- name = "pic",
- 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_module_codegen,
- ACTION_NAMES.cpp_module_compile,
- ],
- flag_groups = [
- flag_group(flags = ["-fPIC"], expand_if_available = "pic"),
- ],
- ),
- ],
- )
-
- per_object_debug_info_feature = feature(
- name = "per_object_debug_info",
- flag_sets = [
- flag_set(
- actions = [
- ACTION_NAMES.assemble,
- ACTION_NAMES.preprocess_assemble,
- ACTION_NAMES.c_compile,
- ACTION_NAMES.cpp_compile,
- ACTION_NAMES.cpp_module_codegen,
- ],
- flag_groups = [
- flag_group(
- flags = ["-gsplit-dwarf"],
- expand_if_available = "per_object_debug_info_file",
- ),
- ],
- ),
- ],
- )
-
- preprocessor_defines_feature = feature(
- name = "preprocessor_defines",
- 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.clif_match,
- ],
- flag_groups = [
- flag_group(
- flags = ["-D%{preprocessor_defines}"],
- iterate_over = "preprocessor_defines",
- ),
- ],
- ),
- ],
- )
-
- cs_fdo_optimize_feature = feature(
- name = "cs_fdo_optimize",
- flag_sets = [
- flag_set(
- actions = [ACTION_NAMES.lto_backend],
- flag_groups = [
- flag_group(
- flags = [
- "-fprofile-use=%{fdo_profile_path}",
- "-Xclang-only=-Wno-profile-instr-unprofiled",
- "-Xclang-only=-Wno-profile-instr-out-of-date",
- "-fprofile-correction",
- ],
- expand_if_available = "fdo_profile_path",
- ),
- ],
- ),
- ],
- provides = ["csprofile"],
- )
-
- autofdo_feature = feature(
- name = "autofdo",
- flag_sets = [
- flag_set(
- actions = [ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile],
- flag_groups = [
- flag_group(
- flags = [
- "-fauto-profile=%{fdo_profile_path}",
- "-fprofile-correction",
- ],
- expand_if_available = "fdo_profile_path",
- ),
- ],
- ),
- ],
- provides = ["profile"],
- )
-
- runtime_library_search_directories_feature = feature(
- name = "runtime_library_search_directories",
- flag_sets = [
- flag_set(
- actions = all_link_actions + lto_index_actions,
- flag_groups = [
- flag_group(
- iterate_over = "runtime_library_search_directories",
- flag_groups = [
- flag_group(
- flags = [
- "-Wl,-rpath,$EXEC_ORIGIN/%{runtime_library_search_directories}",
- ],
- expand_if_true = "is_cc_test",
- ),
- flag_group(
- flags = [
- "-Wl,-rpath,$ORIGIN/%{runtime_library_search_directories}",
- ],
- expand_if_false = "is_cc_test",
- ),
- ],
- expand_if_available =
- "runtime_library_search_directories",
- ),
- ],
- with_features = [
- with_feature_set(features = ["static_link_cpp_runtimes"]),
- ],
- ),
- flag_set(
- actions = all_link_actions + lto_index_actions,
- flag_groups = [
- flag_group(
- iterate_over = "runtime_library_search_directories",
- flag_groups = [
- flag_group(
- flags = [
- "-Wl,-rpath,$ORIGIN/%{runtime_library_search_directories}",
- ],
- ),
- ],
- expand_if_available =
- "runtime_library_search_directories",
- ),
- ],
- with_features = [
- with_feature_set(
- not_features = ["static_link_cpp_runtimes"],
- ),
- ],
- ),
- ],
- )
-
- fission_support_feature = feature(
- name = "fission_support",
- flag_sets = [
- flag_set(
- actions = all_link_actions + lto_index_actions,
- flag_groups = [
- flag_group(
- flags = ["-Wl,--gdb-index"],
- expand_if_available = "is_using_fission",
- ),
- ],
- ),
- ],
- )
-
- 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,
- ACTION_NAMES.lto_index_for_dynamic_library,
- ACTION_NAMES.lto_index_for_nodeps_dynamic_library,
- ],
- flag_groups = [flag_group(flags = ["-shared"])],
- ),
- ],
- )
-
- random_seed_feature = feature(
- name = "random_seed",
- enabled = True,
- flag_sets = [
- flag_set(
- actions = [
- ACTION_NAMES.c_compile,
- ACTION_NAMES.cpp_compile,
- ACTION_NAMES.cpp_module_codegen,
- ACTION_NAMES.cpp_module_compile,
- ],
- flag_groups = [
- flag_group(
- flags = ["-frandom-seed=%{output_file}"],
- expand_if_available = "output_file",
- ),
- ],
- ),
- ],
- )
-
- includes_feature = feature(
- name = "includes",
- 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.clif_match,
- ACTION_NAMES.objc_compile,
- ACTION_NAMES.objcpp_compile,
- ],
- flag_groups = [
- flag_group(
- flags = ["-include", "%{includes}"],
- iterate_over = "includes",
- expand_if_available = "includes",
- ),
- ],
- ),
- ],
- )
-
- fdo_instrument_feature = feature(
- name = "fdo_instrument",
- flag_sets = [
- flag_set(
- actions = [
- ACTION_NAMES.c_compile,
- ACTION_NAMES.cpp_compile,
- ] + all_link_actions + lto_index_actions,
- flag_groups = [
- flag_group(
- flags = [
- "-fprofile-generate=%{fdo_instrument_path}",
- "-fno-data-sections",
- ],
- expand_if_available = "fdo_instrument_path",
- ),
- ],
- ),
- ],
- provides = ["profile"],
- )
-
- cs_fdo_instrument_feature = feature(
- name = "cs_fdo_instrument",
- flag_sets = [
- flag_set(
- actions = [
- ACTION_NAMES.c_compile,
- ACTION_NAMES.cpp_compile,
- ACTION_NAMES.lto_backend,
- ] + all_link_actions + lto_index_actions,
- flag_groups = [
- flag_group(
- flags = [
- "-fcs-profile-generate=%{cs_fdo_instrument_path}",
- ],
- expand_if_available = "cs_fdo_instrument_path",
- ),
- ],
- ),
- ],
- provides = ["csprofile"],
- )
-
- include_paths_feature = feature(
- name = "include_paths",
- 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.clif_match,
- ACTION_NAMES.objc_compile,
- ACTION_NAMES.objcpp_compile,
- ],
- flag_groups = [
- flag_group(
- flags = ["-iquote", "%{quote_include_paths}"],
- iterate_over = "quote_include_paths",
- ),
- flag_group(
- flags = ["-I%{include_paths}"],
- iterate_over = "include_paths",
- ),
- flag_group(
- flags = ["-isystem", "%{system_include_paths}"],
- iterate_over = "system_include_paths",
- ),
- ],
- ),
- ],
- )
-
- symbol_counts_feature = feature(
- name = "symbol_counts",
- flag_sets = [
- flag_set(
- actions = all_link_actions + lto_index_actions,
- flag_groups = [
- flag_group(
- flags = [
- "-Wl,--print-symbol-counts=%{symbol_counts_output}",
- ],
- expand_if_available = "symbol_counts_output",
- ),
- ],
- ),
- ],
- )
-
- llvm_coverage_map_format_feature = feature(
- name = "llvm_coverage_map_format",
- flag_sets = [
- flag_set(
- actions = [
- ACTION_NAMES.preprocess_assemble,
- ACTION_NAMES.c_compile,
- ACTION_NAMES.cpp_compile,
- ACTION_NAMES.cpp_module_compile,
- ACTION_NAMES.objc_compile,
- ACTION_NAMES.objcpp_compile,
- ],
- flag_groups = [
- flag_group(
- flags = [
- "-fprofile-instr-generate",
- "-fcoverage-mapping",
- ],
- ),
- ],
- ),
- flag_set(
- actions = all_link_actions + lto_index_actions + [
- "objc-executable",
- "objc++-executable",
- ],
- flag_groups = [
- flag_group(flags = ["-fprofile-instr-generate"]),
- ],
- ),
- ],
- requires = [feature_set(features = ["coverage"])],
- provides = ["profile"],
- )
-
- strip_debug_symbols_feature = feature(
- name = "strip_debug_symbols",
- flag_sets = [
- flag_set(
- actions = all_link_actions + lto_index_actions,
- flag_groups = [
- flag_group(
- flags = ["-Wl,-S"],
- expand_if_available = "strip_debug_symbols",
- ),
- ],
- ),
- ],
- )
-
- build_interface_libraries_feature = feature(
- name = "build_interface_libraries",
- flag_sets = [
- flag_set(
- actions = [
- ACTION_NAMES.cpp_link_dynamic_library,
- ACTION_NAMES.cpp_link_nodeps_dynamic_library,
- ACTION_NAMES.lto_index_for_dynamic_library,
- ACTION_NAMES.lto_index_for_nodeps_dynamic_library,
- ],
- flag_groups = [
- flag_group(
- flags = [
- "%{generate_interface_library}",
- "%{interface_library_builder_path}",
- "%{interface_library_input_path}",
- "%{interface_library_output_path}",
- ],
- expand_if_available = "generate_interface_library",
- ),
- ],
- with_features = [
- with_feature_set(
- features = ["supports_interface_shared_libraries"],
- ),
- ],
- ),
- ],
- )
-
- libraries_to_link_feature = feature(
- name = "libraries_to_link",
- flag_sets = [
- flag_set(
- actions = all_link_actions + lto_index_actions,
- flag_groups = [
- flag_group(
- iterate_over = "libraries_to_link",
- flag_groups = [
- flag_group(
- flags = ["-Wl,--start-lib"],
- expand_if_equal = variable_with_value(
- name = "libraries_to_link.type",
- value = "object_file_group",
- ),
- ),
- flag_group(
- flags = ["-Wl,-whole-archive"],
- expand_if_true =
- "libraries_to_link.is_whole_archive",
- ),
- flag_group(
- flags = ["%{libraries_to_link.object_files}"],
- iterate_over = "libraries_to_link.object_files",
- expand_if_equal = variable_with_value(
- name = "libraries_to_link.type",
- value = "object_file_group",
- ),
- ),
- flag_group(
- flags = ["%{libraries_to_link.name}"],
- expand_if_equal = variable_with_value(
- name = "libraries_to_link.type",
- value = "object_file",
- ),
- ),
- flag_group(
- flags = ["%{libraries_to_link.name}"],
- expand_if_equal = variable_with_value(
- name = "libraries_to_link.type",
- value = "interface_library",
- ),
- ),
- flag_group(
- flags = ["%{libraries_to_link.name}"],
- expand_if_equal = variable_with_value(
- name = "libraries_to_link.type",
- value = "static_library",
- ),
- ),
- flag_group(
- flags = ["-l%{libraries_to_link.name}"],
- expand_if_equal = variable_with_value(
- name = "libraries_to_link.type",
- value = "dynamic_library",
- ),
- ),
- flag_group(
- flags = ["-l:%{libraries_to_link.name}"],
- expand_if_equal = variable_with_value(
- name = "libraries_to_link.type",
- value = "versioned_dynamic_library",
- ),
- ),
- flag_group(
- flags = ["-Wl,-no-whole-archive"],
- expand_if_true = "libraries_to_link.is_whole_archive",
- ),
- flag_group(
- flags = ["-Wl,--end-lib"],
- expand_if_equal = variable_with_value(
- name = "libraries_to_link.type",
- value = "object_file_group",
- ),
- ),
- ],
- expand_if_available = "libraries_to_link",
- ),
- flag_group(
- flags = ["-Wl,@%{thinlto_param_file}"],
- expand_if_true = "thinlto_param_file",
- ),
- ],
- ),
- ],
- )
-
- user_link_flags_feature = feature(
- name = "user_link_flags",
- flag_sets = [
- flag_set(
- actions = all_link_actions + lto_index_actions,
- flag_groups = [
- flag_group(
- flags = ["%{user_link_flags}"],
- iterate_over = "user_link_flags",
- expand_if_available = "user_link_flags",
- ),
- ] + ([flag_group(flags = ctx.attr.link_libs)] if ctx.attr.link_libs else []),
- ),
- ],
- )
-
- fdo_prefetch_hints_feature = feature(
- name = "fdo_prefetch_hints",
- flag_sets = [
- flag_set(
- actions = [
- ACTION_NAMES.c_compile,
- ACTION_NAMES.cpp_compile,
- ACTION_NAMES.lto_backend,
- ],
- flag_groups = [
- flag_group(
- flags = [
- "-Xclang-only=-mllvm",
- "-Xclang-only=-prefetch-hints-file=%{fdo_prefetch_hints_path}",
- ],
- expand_if_available = "fdo_prefetch_hints_path",
- ),
- ],
- ),
- ],
- )
-
- linkstamps_feature = feature(
- name = "linkstamps",
- flag_sets = [
- flag_set(
- actions = all_link_actions + lto_index_actions,
- flag_groups = [
- flag_group(
- flags = ["%{linkstamp_paths}"],
- iterate_over = "linkstamp_paths",
- expand_if_available = "linkstamp_paths",
- ),
- ],
- ),
- ],
- )
-
- gcc_coverage_map_format_feature = feature(
- name = "gcc_coverage_map_format",
- flag_sets = [
- flag_set(
- actions = [
- ACTION_NAMES.preprocess_assemble,
- ACTION_NAMES.c_compile,
- ACTION_NAMES.cpp_compile,
- ACTION_NAMES.cpp_module_compile,
- ACTION_NAMES.objc_compile,
- ACTION_NAMES.objcpp_compile,
- "objc-executable",
- "objc++-executable",
- ],
- flag_groups = [
- flag_group(
- flags = ["-fprofile-arcs", "-ftest-coverage"],
- expand_if_available = "gcov_gcno_file",
- ),
- ],
- ),
- flag_set(
- actions = all_link_actions + lto_index_actions,
- flag_groups = [flag_group(flags = ["--coverage"])],
- ),
- ],
- requires = [feature_set(features = ["coverage"])],
- provides = ["profile"],
- )
-
- archiver_flags_feature = feature(
- name = "archiver_flags",
- flag_sets = [
- flag_set(
- actions = [ACTION_NAMES.cpp_link_static_library],
- flag_groups = [
- flag_group(flags = ["rcsD"]),
- flag_group(
- flags = ["%{output_execpath}"],
- expand_if_available = "output_execpath",
- ),
- ],
- ),
- flag_set(
- actions = [ACTION_NAMES.cpp_link_static_library],
- flag_groups = [
- flag_group(
- iterate_over = "libraries_to_link",
- 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(
- flags = ["%{libraries_to_link.object_files}"],
- iterate_over = "libraries_to_link.object_files",
- expand_if_equal = variable_with_value(
- name = "libraries_to_link.type",
- value = "object_file_group",
- ),
- ),
- ],
- expand_if_available = "libraries_to_link",
- ),
- ],
- ),
- ],
- )
-
- force_pic_flags_feature = feature(
- name = "force_pic_flags",
- flag_sets = [
- flag_set(
- actions = [
- ACTION_NAMES.cpp_link_executable,
- ACTION_NAMES.lto_index_for_executable,
- ],
- flag_groups = [
- flag_group(
- flags = ["-pie"],
- expand_if_available = "force_pic",
- ),
- ],
- ),
- ],
- )
-
- dependency_file_feature = feature(
- name = "dependency_file",
- 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_module_compile,
- ACTION_NAMES.objc_compile,
- ACTION_NAMES.objcpp_compile,
- ACTION_NAMES.cpp_header_parsing,
- ACTION_NAMES.clif_match,
- ],
- flag_groups = [
- flag_group(
- flags = ["-MD", "-MF", "%{dependency_file}"],
- expand_if_available = "dependency_file",
- ),
- ],
- ),
- ],
- )
-
- dynamic_library_linker_tool_path = tool_paths
- dynamic_library_linker_tool_feature = feature(
- name = "dynamic_library_linker_tool",
- flag_sets = [
- flag_set(
- actions = [
- ACTION_NAMES.cpp_link_dynamic_library,
- ACTION_NAMES.cpp_link_nodeps_dynamic_library,
- ACTION_NAMES.lto_index_for_dynamic_library,
- ACTION_NAMES.lto_index_for_nodeps_dynamic_library,
- ],
- flag_groups = [
- flag_group(
- flags = [" + cppLinkDynamicLibraryToolPath + "],
- expand_if_available = "generate_interface_library",
- ),
- ],
- with_features = [
- with_feature_set(
- features = ["supports_interface_shared_libraries"],
- ),
- ],
- ),
- ],
- )
-
- output_execpath_flags_feature = feature(
- name = "output_execpath_flags",
- flag_sets = [
- flag_set(
- actions = all_link_actions + lto_index_actions,
- flag_groups = [
- flag_group(
- flags = ["-o", "%{output_execpath}"],
- expand_if_available = "output_execpath",
- ),
- ],
- ),
- ],
- )
-
- # Note that we also set --coverage for c++-link-nodeps-dynamic-library. The
- # generated code contains references to gcov symbols, and the dynamic linker
- # can't resolve them unless the library is linked against gcov.
- coverage_feature = feature(
- name = "coverage",
- provides = ["profile"],
- 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,
- ],
- flag_groups = ([
- flag_group(flags = ctx.attr.coverage_compile_flags),
- ] if ctx.attr.coverage_compile_flags else []),
- ),
- flag_set(
- actions = all_link_actions + lto_index_actions,
- flag_groups = ([
- flag_group(flags = ctx.attr.coverage_link_flags),
- ] if ctx.attr.coverage_link_flags else []),
- ),
- ],
- )
-
- is_linux = ctx.attr.target_libc != "macosx"
-
- # TODO(#8303): Mac crosstool should also declare every feature.
- if is_linux:
- features = [
- dependency_file_feature,
- random_seed_feature,
- pic_feature,
- per_object_debug_info_feature,
- preprocessor_defines_feature,
- includes_feature,
- include_paths_feature,
- fdo_instrument_feature,
- cs_fdo_instrument_feature,
- cs_fdo_optimize_feature,
- fdo_prefetch_hints_feature,
- autofdo_feature,
- build_interface_libraries_feature,
- dynamic_library_linker_tool_feature,
- symbol_counts_feature,
- shared_flag_feature,
- linkstamps_feature,
- output_execpath_flags_feature,
- runtime_library_search_directories_feature,
- library_search_directories_feature,
- archiver_flags_feature,
- force_pic_flags_feature,
- fission_support_feature,
- strip_debug_symbols_feature,
- coverage_feature,
- supports_pic_feature,
- ] + (
- [
- supports_start_end_lib_feature,
- ] if ctx.attr.supports_start_end_lib else []
- ) + [
- default_compile_flags_feature,
- default_link_flags_feature,
- libraries_to_link_feature,
- user_link_flags_feature,
- static_libgcc_feature,
- fdo_optimize_feature,
- supports_dynamic_linker_feature,
- dbg_feature,
- opt_feature,
- user_compile_flags_feature,
- sysroot_feature,
- unfiltered_compile_flags_feature,
- ]
- else:
- features = [
- supports_pic_feature,
- ] + (
- [
- supports_start_end_lib_feature,
- ] if ctx.attr.supports_start_end_lib else []
- ) + [
- coverage_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,
- ]
-
- return cc_common.create_cc_toolchain_config_info(
- ctx = ctx,
- features = features,
- action_configs = action_configs,
- 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(mandatory = True),
- "toolchain_identifier": attr.string(mandatory = True),
- "host_system_name": attr.string(mandatory = True),
- "target_system_name": attr.string(mandatory = True),
- "target_libc": attr.string(mandatory = True),
- "abi_version": attr.string(mandatory = True),
- "abi_libc_version": attr.string(mandatory = True),
- "cxx_builtin_include_directories": attr.string_list(),
- "tool_paths": attr.string_dict(),
- "compile_flags": attr.string_list(),
- "dbg_compile_flags": attr.string_list(),
- "opt_compile_flags": attr.string_list(),
- "cxx_flags": attr.string_list(),
- "link_flags": attr.string_list(),
- "link_libs": attr.string_list(),
- "opt_link_flags": attr.string_list(),
- "unfiltered_compile_flags": attr.string_list(),
- "coverage_compile_flags": attr.string_list(),
- "coverage_link_flags": attr.string_list(),
- "supports_start_end_lib": attr.bool(),
- },
- provides = [CcToolchainConfigInfo],
-)
diff --git a/cc/private/toolchain/vc_installation_error.bat.tpl b/cc/private/toolchain/vc_installation_error.bat.tpl
deleted file mode 100644
index b796585..0000000
--- a/cc/private/toolchain/vc_installation_error.bat.tpl
+++ /dev/null
@@ -1,24 +0,0 @@
-:: Copyright 2017 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.
-
-@echo OFF
-
-echo. 1>&2
-echo The target you are compiling requires Visual C++ build tools. 1>&2
-echo Bazel couldn't find a valid Visual C++ build tools installation on your machine. 1>&2
-%{vc_error_message}
-echo Please check your installation following https://docs.bazel.build/versions/master/windows.html#using 1>&2
-echo. 1>&2
-
-exit /b 1
diff --git a/cc/private/toolchain/windows_cc_configure.bzl b/cc/private/toolchain/windows_cc_configure.bzl
deleted file mode 100644
index fc3c015..0000000
--- a/cc/private/toolchain/windows_cc_configure.bzl
+++ /dev/null
@@ -1,583 +0,0 @@
-# pylint: disable=g-bad-file-header
-# Copyright 2016 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.
-"""Configuring the C++ toolchain on Windows."""
-
-load(
- "//cc/private/toolchain:lib_cc_configure.bzl",
- "auto_configure_fail",
- "auto_configure_warning",
- "auto_configure_warning_maybe",
- "escape_string",
- "execute",
- "resolve_labels",
-)
-
-def _get_path_env_var(repository_ctx, name):
- """Returns a path from an environment variable.
-
- Removes quotes, replaces '/' with '\', and strips trailing '\'s."""
- if name in repository_ctx.os.environ:
- value = repository_ctx.os.environ[name]
- if value[0] == "\"":
- if len(value) == 1 or value[-1] != "\"":
- auto_configure_fail("'%s' environment variable has no trailing quote" % name)
- value = value[1:-1]
- if "/" in value:
- value = value.replace("/", "\\")
- if value[-1] == "\\":
- value = value.rstrip("\\")
- return value
- else:
- return None
-
-def _get_temp_env(repository_ctx):
- """Returns the value of TMP, or TEMP, or if both undefined then C:\\Windows."""
- tmp = _get_path_env_var(repository_ctx, "TMP")
- if not tmp:
- tmp = _get_path_env_var(repository_ctx, "TEMP")
- if not tmp:
- tmp = "C:\\Windows\\Temp"
- auto_configure_warning(
- "neither 'TMP' nor 'TEMP' environment variables are set, using '%s' as default" % tmp,
- )
- return tmp
-
-def _get_escaped_windows_msys_starlark_content(repository_ctx, use_mingw = False):
- """Return the content of msys cc toolchain rule."""
- msys_root = ""
- bazel_sh = _get_path_env_var(repository_ctx, "BAZEL_SH")
- if bazel_sh:
- bazel_sh = bazel_sh.replace("\\", "/").lower()
- tokens = bazel_sh.rsplit("/", 1)
- if tokens[0].endswith("/usr/bin"):
- msys_root = tokens[0][:len(tokens[0]) - len("usr/bin")]
- elif tokens[0].endswith("/bin"):
- msys_root = tokens[0][:len(tokens[0]) - len("bin")]
-
- prefix = "mingw64" if use_mingw else "usr"
- tool_path_prefix = escape_string(msys_root) + prefix
- tool_bin_path = tool_path_prefix + "/bin"
- tool_path = {}
-
- for tool in ["ar", "compat-ld", "cpp", "dwp", "gcc", "gcov", "ld", "nm", "objcopy", "objdump", "strip"]:
- if msys_root:
- tool_path[tool] = tool_bin_path + "/" + tool
- else:
- tool_path[tool] = "msys_gcc_installation_error.bat"
- 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 ""
- 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."""
- systemroot = _get_path_env_var(repository_ctx, "SYSTEMROOT")
- if not systemroot:
- systemroot = "C:\\Windows"
- auto_configure_warning_maybe(
- repository_ctx,
- "SYSTEMROOT is not set, using default SYSTEMROOT=C:\\Windows",
- )
- return escape_string(systemroot)
-
-def _add_system_root(repository_ctx, env):
- """Running VCVARSALL.BAT and VCVARSQUERYREGISTRY.BAT need %SYSTEMROOT%\\\\system32 in PATH."""
- if "PATH" not in env:
- env["PATH"] = ""
- env["PATH"] = env["PATH"] + ";" + _get_system_root(repository_ctx) + "\\system32"
- return env
-
-def find_vc_path(repository_ctx):
- """Find Visual C++ build tools install path. Doesn't %-escape the result."""
-
- # 1. Check if BAZEL_VC or BAZEL_VS is already set by user.
- bazel_vc = _get_path_env_var(repository_ctx, "BAZEL_VC")
- if bazel_vc:
- if repository_ctx.path(bazel_vc).exists:
- return bazel_vc
- else:
- auto_configure_warning_maybe(
- repository_ctx,
- "%BAZEL_VC% is set to non-existent path, ignoring.",
- )
-
- bazel_vs = _get_path_env_var(repository_ctx, "BAZEL_VS")
- if bazel_vs:
- if repository_ctx.path(bazel_vs).exists:
- bazel_vc = bazel_vs + "\\VC"
- if repository_ctx.path(bazel_vc).exists:
- return bazel_vc
- else:
- auto_configure_warning_maybe(
- repository_ctx,
- "No 'VC' directory found under %BAZEL_VS%, ignoring.",
- )
- else:
- auto_configure_warning_maybe(
- repository_ctx,
- "%BAZEL_VS% is set to non-existent path, ignoring.",
- )
-
- auto_configure_warning_maybe(
- repository_ctx,
- "Neither %BAZEL_VC% nor %BAZEL_VS% are set, start looking for the latest Visual C++" +
- " installed.",
- )
-
- # 2. Check if VS%VS_VERSION%COMNTOOLS is set, if true then try to find and use
- # vcvarsqueryregistry.bat / VsDevCmd.bat to detect VC++.
- auto_configure_warning_maybe(repository_ctx, "Looking for VS%VERSION%COMNTOOLS environment variables, " +
- "eg. VS140COMNTOOLS")
- for vscommontools_env, script in [
- ("VS160COMNTOOLS", "VsDevCmd.bat"),
- ("VS150COMNTOOLS", "VsDevCmd.bat"),
- ("VS140COMNTOOLS", "vcvarsqueryregistry.bat"),
- ("VS120COMNTOOLS", "vcvarsqueryregistry.bat"),
- ("VS110COMNTOOLS", "vcvarsqueryregistry.bat"),
- ("VS100COMNTOOLS", "vcvarsqueryregistry.bat"),
- ("VS90COMNTOOLS", "vcvarsqueryregistry.bat"),
- ]:
- if vscommontools_env not in repository_ctx.os.environ:
- continue
- script = _get_path_env_var(repository_ctx, vscommontools_env) + "\\" + script
- if not repository_ctx.path(script).exists:
- continue
- repository_ctx.file(
- "get_vc_dir.bat",
- "@echo off\n" +
- "call \"" + script + "\"\n" +
- "echo %VCINSTALLDIR%",
- True,
- )
- env = _add_system_root(repository_ctx, repository_ctx.os.environ)
- vc_dir = execute(repository_ctx, ["./get_vc_dir.bat"], environment = env)
-
- auto_configure_warning_maybe(repository_ctx, "Visual C++ build tools found at %s" % vc_dir)
- return vc_dir
-
- # 3. User might have purged all environment variables. If so, look for Visual C++ in registry.
- # Works for Visual Studio 2017 and older. (Does not work for Visual Studio 2019 Preview.)
- # TODO(laszlocsomor): check if "16.0" also has this registry key, after VS 2019 is released.
- auto_configure_warning_maybe(repository_ctx, "Looking for Visual C++ through registry")
- reg_binary = _get_system_root(repository_ctx) + "\\system32\\reg.exe"
- vc_dir = None
- for key, suffix in (("VC7", ""), ("VS7", "\\VC")):
- for version in ["15.0", "14.0", "12.0", "11.0", "10.0", "9.0", "8.0"]:
- if vc_dir:
- break
- result = repository_ctx.execute([reg_binary, "query", "HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\VisualStudio\\SxS\\" + key, "/v", version])
- auto_configure_warning_maybe(repository_ctx, "registry query result for VC %s:\n\nSTDOUT(start)\n%s\nSTDOUT(end)\nSTDERR(start):\n%s\nSTDERR(end)\n" %
- (version, result.stdout, result.stderr))
- if not result.stderr:
- for line in result.stdout.split("\n"):
- line = line.strip()
- if line.startswith(version) and line.find("REG_SZ") != -1:
- vc_dir = line[line.find("REG_SZ") + len("REG_SZ"):].strip() + suffix
- if vc_dir:
- auto_configure_warning_maybe(repository_ctx, "Visual C++ build tools found at %s" % vc_dir)
- return vc_dir
-
- # 4. Check default directories for VC installation
- auto_configure_warning_maybe(repository_ctx, "Looking for default Visual C++ installation directory")
- program_files_dir = _get_path_env_var(repository_ctx, "PROGRAMFILES(X86)")
- if not program_files_dir:
- program_files_dir = "C:\\Program Files (x86)"
- auto_configure_warning_maybe(
- repository_ctx,
- "'PROGRAMFILES(X86)' environment variable is not set, using '%s' as default" % program_files_dir,
- )
- for path in [
- "Microsoft Visual Studio\\2019\\Preview\\VC",
- "Microsoft Visual Studio\\2019\\BuildTools\\VC",
- "Microsoft Visual Studio\\2019\\Community\\VC",
- "Microsoft Visual Studio\\2019\\Professional\\VC",
- "Microsoft Visual Studio\\2019\\Enterprise\\VC",
- "Microsoft Visual Studio\\2017\\BuildTools\\VC",
- "Microsoft Visual Studio\\2017\\Community\\VC",
- "Microsoft Visual Studio\\2017\\Professional\\VC",
- "Microsoft Visual Studio\\2017\\Enterprise\\VC",
- "Microsoft Visual Studio 14.0\\VC",
- ]:
- path = program_files_dir + "\\" + path
- if repository_ctx.path(path).exists:
- vc_dir = path
- break
-
- if not vc_dir:
- auto_configure_warning_maybe(repository_ctx, "Visual C++ build tools not found.")
- return None
- auto_configure_warning_maybe(repository_ctx, "Visual C++ build tools found at %s" % vc_dir)
- return vc_dir
-
-def _is_vs_2017_or_2019(vc_path):
- """Check if the installed VS version is Visual Studio 2017."""
-
- # In VS 2017 and 2019, the location of VC is like:
- # C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\
- # In VS 2015 or older version, it is like:
- # C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\
- return vc_path.find("2017") != -1 or vc_path.find("2019") != -1
-
-def _find_vcvars_bat_script(repository_ctx, vc_path):
- """Find batch script to set up environment variables for VC. Doesn't %-escape the result."""
- if _is_vs_2017_or_2019(vc_path):
- vcvars_script = vc_path + "\\Auxiliary\\Build\\VCVARSALL.BAT"
- else:
- vcvars_script = vc_path + "\\VCVARSALL.BAT"
-
- if not repository_ctx.path(vcvars_script).exists:
- return None
-
- return vcvars_script
-
-def _is_support_winsdk_selection(repository_ctx, vc_path):
- """Windows SDK selection is supported with VC 2017 / 2019 or with full VS 2015 installation."""
- if _is_vs_2017_or_2019(vc_path):
- return True
-
- # By checking the source code of VCVARSALL.BAT in VC 2015, we know that
- # when devenv.exe or wdexpress.exe exists, VCVARSALL.BAT supports Windows SDK selection.
- vc_common_ide = repository_ctx.path(vc_path).dirname.get_child("Common7").get_child("IDE")
- for tool in ["devenv.exe", "wdexpress.exe"]:
- if vc_common_ide.get_child(tool).exists:
- return True
- return False
-
-def setup_vc_env_vars(repository_ctx, vc_path):
- """Get environment variables set by VCVARSALL.BAT script. Doesn't %-escape the result!"""
- vcvars_script = _find_vcvars_bat_script(repository_ctx, vc_path)
- if not vcvars_script:
- auto_configure_fail("Cannot find VCVARSALL.BAT script under %s" % vc_path)
-
- # Getting Windows SDK version set by user.
- # Only supports VC 2017 & 2019 and VC 2015 with full VS installation.
- winsdk_version = _get_winsdk_full_version(repository_ctx)
- if winsdk_version and not _is_support_winsdk_selection(repository_ctx, vc_path):
- auto_configure_warning(("BAZEL_WINSDK_FULL_VERSION=%s is ignored, " +
- "because standalone Visual C++ Build Tools 2015 doesn't support specifying Windows " +
- "SDK version, please install the full VS 2015 or use VC 2017/2019.") % winsdk_version)
- winsdk_version = ""
-
- # Get VC version set by user. Only supports VC 2017 & 2019.
- vcvars_ver = ""
- if _is_vs_2017_or_2019(vc_path):
- full_version = _get_vc_full_version(repository_ctx, vc_path)
- if full_version:
- vcvars_ver = "-vcvars_ver=" + full_version
-
- cmd = "\"%s\" amd64 %s %s" % (vcvars_script, winsdk_version, vcvars_ver)
- repository_ctx.file(
- "get_env.bat",
- "@echo off\n" +
- ("call %s > NUL \n" % cmd) +
- "echo PATH=%PATH%,INCLUDE=%INCLUDE%,LIB=%LIB%,WINDOWSSDKDIR=%WINDOWSSDKDIR% \n",
- True,
- )
- env = _add_system_root(
- repository_ctx,
- {"PATH": "", "INCLUDE": "", "LIB": "", "WINDOWSSDKDIR": ""},
- )
- envs = execute(repository_ctx, ["./get_env.bat"], environment = env).split(",")
- env_map = {}
- for env in envs:
- key, value = env.split("=", 1)
- env_map[key] = escape_string(value.replace("\\", "\\\\"))
- _check_env_vars(env_map, cmd)
- return env_map
-
-def _check_env_vars(env_map, cmd):
- envs = ["PATH", "INCLUDE", "LIB", "WINDOWSSDKDIR"]
- for env in envs:
- if not env_map.get(env):
- auto_configure_fail(
- "Setting up VC environment variables failed, %s is not set by the following command:\n %s" % (env, cmd),
- )
-
-def _get_latest_subversion(repository_ctx, vc_path):
- """Get the latest subversion of a VS 2017/2019 installation.
-
- For VS 2017 & 2019, there could be multiple versions of VC build tools.
- The directories are like:
- <vc_path>\\Tools\\MSVC\\14.10.24930\\bin\\HostX64\\x64
- <vc_path>\\Tools\\MSVC\\14.16.27023\\bin\\HostX64\\x64
- This function should return 14.16.27023 in this case."""
- versions = [path.basename for path in repository_ctx.path(vc_path + "\\Tools\\MSVC").readdir()]
- if len(versions) < 1:
- auto_configure_warning_maybe(repository_ctx, "Cannot find any VC installation under BAZEL_VC(%s)" % vc_path)
- return None
-
- # Parse the version string into integers, then sort the integers to prevent textual sorting.
- version_list = []
- for version in versions:
- parts = [int(i) for i in version.split(".")]
- version_list.append((parts, version))
-
- version_list = sorted(version_list)
- latest_version = version_list[-1][1]
-
- auto_configure_warning_maybe(repository_ctx, "Found the following VC verisons:\n%s\n\nChoosing the latest version = %s" % ("\n".join(versions), latest_version))
- return latest_version
-
-def _get_vc_full_version(repository_ctx, vc_path):
- """Return the value of BAZEL_VC_FULL_VERSION if defined, otherwise the latest version."""
- if "BAZEL_VC_FULL_VERSION" in repository_ctx.os.environ:
- return repository_ctx.os.environ["BAZEL_VC_FULL_VERSION"]
- return _get_latest_subversion(repository_ctx, vc_path)
-
-def _get_winsdk_full_version(repository_ctx):
- """Return the value of BAZEL_WINSDK_FULL_VERSION if defined, otherwise an empty string."""
- return repository_ctx.os.environ.get("BAZEL_WINSDK_FULL_VERSION", default = "")
-
-def find_msvc_tool(repository_ctx, vc_path, tool):
- """Find the exact path of a specific build tool in MSVC. Doesn't %-escape the result."""
- tool_path = None
- if _is_vs_2017_or_2019(vc_path):
- full_version = _get_vc_full_version(repository_ctx, vc_path)
- if full_version:
- tool_path = "%s\\Tools\\MSVC\\%s\\bin\\HostX64\\x64\\%s" % (vc_path, full_version, tool)
- else:
- # For VS 2015 and older version, the tools are under:
- # C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64
- tool_path = vc_path + "\\bin\\amd64\\" + tool
-
- if not tool_path or not repository_ctx.path(tool_path).exists:
- return None
-
- return tool_path.replace("\\", "/")
-
-def _find_missing_vc_tools(repository_ctx, vc_path):
- """Check if any required tool is missing under given VC path."""
- missing_tools = []
- if not _find_vcvars_bat_script(repository_ctx, vc_path):
- missing_tools.append("VCVARSALL.BAT")
-
- for tool in ["cl.exe", "link.exe", "lib.exe", "ml64.exe"]:
- if not find_msvc_tool(repository_ctx, vc_path, tool):
- missing_tools.append(tool)
-
- return missing_tools
-
-def _is_support_debug_fastlink(repository_ctx, linker):
- """Run linker alone to see if it supports /DEBUG:FASTLINK."""
- if _use_clang_cl(repository_ctx):
- # LLVM's lld-link.exe doesn't support /DEBUG:FASTLINK.
- return False
- result = execute(repository_ctx, [linker], expect_failure = True)
- return result.find("/DEBUG[:{FASTLINK|FULL|NONE}]") != -1
-
-def find_llvm_path(repository_ctx):
- """Find LLVM install path."""
-
- # 1. Check if BAZEL_LLVM is already set by user.
- bazel_llvm = _get_path_env_var(repository_ctx, "BAZEL_LLVM")
- if bazel_llvm:
- return bazel_llvm
-
- auto_configure_warning_maybe(repository_ctx, "'BAZEL_LLVM' is not set, " +
- "start looking for LLVM installation on machine.")
-
- # 2. Look for LLVM installation through registry.
- auto_configure_warning_maybe(repository_ctx, "Looking for LLVM installation through registry")
- reg_binary = _get_system_root(repository_ctx) + "\\system32\\reg.exe"
- llvm_dir = None
- result = repository_ctx.execute([reg_binary, "query", "HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\LLVM\\LLVM"])
- auto_configure_warning_maybe(repository_ctx, "registry query result for LLVM:\n\nSTDOUT(start)\n%s\nSTDOUT(end)\nSTDERR(start):\n%s\nSTDERR(end)\n" %
- (result.stdout, result.stderr))
- if not result.stderr:
- for line in result.stdout.split("\n"):
- line = line.strip()
- if line.startswith("(Default)") and line.find("REG_SZ") != -1:
- llvm_dir = line[line.find("REG_SZ") + len("REG_SZ"):].strip()
- if llvm_dir:
- auto_configure_warning_maybe(repository_ctx, "LLVM installation found at %s" % llvm_dir)
- return llvm_dir
-
- # 3. Check default directories for LLVM installation
- auto_configure_warning_maybe(repository_ctx, "Looking for default LLVM installation directory")
- program_files_dir = _get_path_env_var(repository_ctx, "PROGRAMFILES")
- if not program_files_dir:
- program_files_dir = "C:\\Program Files"
- auto_configure_warning_maybe(
- repository_ctx,
- "'PROGRAMFILES' environment variable is not set, using '%s' as default" % program_files_dir,
- )
- path = program_files_dir + "\\LLVM"
- if repository_ctx.path(path).exists:
- llvm_dir = path
-
- if not llvm_dir:
- auto_configure_warning_maybe(repository_ctx, "LLVM installation not found.")
- return None
- auto_configure_warning_maybe(repository_ctx, "LLVM installation found at %s" % llvm_dir)
- return llvm_dir
-
-def find_llvm_tool(repository_ctx, llvm_path, tool):
- """Find the exact path of a specific build tool in LLVM. Doesn't %-escape the result."""
- tool_path = llvm_path + "\\bin\\" + tool
-
- if not repository_ctx.path(tool_path).exists:
- return None
-
- return tool_path.replace("\\", "/")
-
-def _use_clang_cl(repository_ctx):
- """Returns True if USE_CLANG_CL is set to 1."""
- return repository_ctx.os.environ.get("USE_CLANG_CL", default = "0") == "1"
-
-def _get_clang_version(repository_ctx, clang_cl):
- result = repository_ctx.execute([clang_cl, "-v"])
- if result.return_code != 0:
- auto_configure_fail("Failed to get clang version by running \"%s -v\"" % clang_cl)
-
- # Stderr should look like "clang version X.X.X ..."
- return result.stderr.strip().split(" ")[2]
-
-def configure_windows_toolchain(repository_ctx):
- """Configure C++ toolchain on Windows."""
- paths = resolve_labels(repository_ctx, [
- "//cc/private/toolchain:BUILD.windows.tpl",
- "//cc/private/toolchain:windows_cc_toolchain_config.bzl",
- "//cc/private/toolchain:armeabi_cc_toolchain_config.bzl",
- "//cc/private/toolchain:vc_installation_error.bat.tpl",
- "//cc/private/toolchain:msys_gcc_installation_error.bat",
- ])
-
- repository_ctx.symlink(
- paths["//cc/private/toolchain:windows_cc_toolchain_config.bzl"],
- "windows_cc_toolchain_config.bzl",
- )
- repository_ctx.symlink(
- paths["//cc/private/toolchain:armeabi_cc_toolchain_config.bzl"],
- "armeabi_cc_toolchain_config.bzl",
- )
- repository_ctx.symlink(
- paths["//cc/private/toolchain:msys_gcc_installation_error.bat"],
- "msys_gcc_installation_error.bat",
- )
-
- vc_path = find_vc_path(repository_ctx)
- missing_tools = None
- if not vc_path:
- repository_ctx.template(
- "vc_installation_error.bat",
- paths["//cc/private/toolchain:vc_installation_error.bat.tpl"],
- {"%{vc_error_message}": ""},
- )
- else:
- missing_tools = _find_missing_vc_tools(repository_ctx, vc_path)
- if missing_tools:
- message = "\r\n".join([
- "echo. 1>&2",
- "echo Visual C++ build tools seems to be installed at %s 1>&2" % vc_path,
- "echo But Bazel can't find the following tools: 1>&2",
- "echo %s 1>&2" % ", ".join(missing_tools),
- "echo. 1>&2",
- ])
- repository_ctx.template(
- "vc_installation_error.bat",
- paths["//cc/private/toolchain:vc_installation_error.bat.tpl"],
- {"%{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 = _get_escaped_windows_msys_starlark_content(repository_ctx)
- if not vc_path or missing_tools:
- repository_ctx.template(
- "BUILD",
- paths["//cc/private/toolchain:BUILD.windows.tpl"],
- {
- "%{msvc_env_tmp}": "msvc_not_found",
- "%{msvc_env_path}": "msvc_not_found",
- "%{msvc_env_include}": "msvc_not_found",
- "%{msvc_env_lib}": "msvc_not_found",
- "%{msvc_cl_path}": "vc_installation_error.bat",
- "%{msvc_ml_path}": "vc_installation_error.bat",
- "%{msvc_link_path}": "vc_installation_error.bat",
- "%{msvc_lib_path}": "vc_installation_error.bat",
- "%{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,
- "%{msvc_cxx_builtin_include_directories}": "",
- "%{tool_paths}": tool_paths,
- "%{mingw_tool_paths}": tool_paths_mingw,
- "%{tool_bin_path}": tool_bin_path,
- "%{mingw_tool_bin_path}": tool_bin_path_mingw,
- },
- )
- return
-
- env = setup_vc_env_vars(repository_ctx, vc_path)
- escaped_paths = escape_string(env["PATH"])
- escaped_include_paths = escape_string(env["INCLUDE"])
- escaped_lib_paths = escape_string(env["LIB"])
- escaped_tmp_dir = escape_string(_get_temp_env(repository_ctx).replace("\\", "\\\\"))
-
- llvm_path = ""
- if _use_clang_cl(repository_ctx):
- llvm_path = find_llvm_path(repository_ctx)
- if not llvm_path:
- auto_configure_fail("\nUSE_CLANG_CL is set to 1, but Bazel cannot find Clang installation on your system.\n" +
- "Please install Clang via http://releases.llvm.org/download.html\n")
- cl_path = find_llvm_tool(repository_ctx, llvm_path, "clang-cl.exe")
- link_path = find_llvm_tool(repository_ctx, llvm_path, "lld-link.exe")
- if not link_path:
- link_path = find_msvc_tool(repository_ctx, vc_path, "link.exe")
- lib_path = find_llvm_tool(repository_ctx, llvm_path, "llvm-lib.exe")
- if not lib_path:
- lib_path = find_msvc_tool(repository_ctx, vc_path, "lib.exe")
- else:
- cl_path = find_msvc_tool(repository_ctx, vc_path, "cl.exe")
- link_path = find_msvc_tool(repository_ctx, vc_path, "link.exe")
- lib_path = find_msvc_tool(repository_ctx, vc_path, "lib.exe")
-
- msvc_ml_path = find_msvc_tool(repository_ctx, vc_path, "ml64.exe")
- escaped_cxx_include_directories = []
-
- for path in escaped_include_paths.split(";"):
- if path:
- escaped_cxx_include_directories.append("\"%s\"" % path)
- if llvm_path:
- clang_version = _get_clang_version(repository_ctx, cl_path)
- clang_dir = llvm_path + "\\lib\\clang\\" + clang_version
- clang_include_path = (clang_dir + "\\include").replace("\\", "\\\\")
- escaped_cxx_include_directories.append("\"%s\"" % clang_include_path)
- clang_lib_path = (clang_dir + "\\lib\\windows").replace("\\", "\\\\")
- escaped_lib_paths = escaped_lib_paths + ";" + clang_lib_path
-
- support_debug_fastlink = _is_support_debug_fastlink(repository_ctx, link_path)
-
- repository_ctx.template(
- "BUILD",
- paths["//cc/private/toolchain:BUILD.windows.tpl"],
- {
- "%{msvc_env_tmp}": escaped_tmp_dir,
- "%{msvc_env_path}": escaped_paths,
- "%{msvc_env_include}": escaped_include_paths,
- "%{msvc_env_lib}": escaped_lib_paths,
- "%{msvc_cl_path}": cl_path,
- "%{msvc_ml_path}": msvc_ml_path,
- "%{msvc_link_path}": link_path,
- "%{msvc_lib_path}": lib_path,
- "%{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),
- "%{tool_paths}": tool_paths,
- "%{mingw_tool_paths}": tool_paths_mingw,
- "%{tool_bin_path}": tool_bin_path,
- "%{mingw_tool_bin_path}": tool_bin_path_mingw,
- },
- )
diff --git a/cc/private/toolchain/windows_cc_toolchain_config.bzl b/cc/private/toolchain/windows_cc_toolchain_config.bzl
deleted file mode 100644
index bb344a6..0000000
--- a/cc/private/toolchain/windows_cc_toolchain_config.bzl
+++ /dev/null
@@ -1,1338 +0,0 @@
-# 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(
- "//cc/private/toolchain: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("//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],
-)
diff --git a/cc/toolchain_utils.bzl b/cc/toolchain_utils.bzl
deleted file mode 100644
index 1d2a750..0000000
--- a/cc/toolchain_utils.bzl
+++ /dev/null
@@ -1,48 +0,0 @@
-# pylint: disable=g-bad-file-header
-# Copyright 2016 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.
-
-"""
-Finds the c++ toolchain.
-
-Returns the toolchain if enabled, and falls back to a toolchain constructed from
-the CppConfiguration.
-"""
-
-def find_cpp_toolchain(ctx):
- """
- Finds the c++ toolchain.
-
- If the c++ toolchain is in use, returns it. Otherwise, returns a c++
- toolchain derived from legacy toolchain selection.
-
- Args:
- ctx: The rule context for which to find a toolchain.
-
- Returns:
- A CcToolchainProvider.
- """
-
- # Check the incompatible flag for toolchain resolution.
- if hasattr(cc_common, "is_cc_toolchain_resolution_enabled_do_not_use") and cc_common.is_cc_toolchain_resolution_enabled_do_not_use(ctx = ctx):
- if "//cc:toolchain_type" in ctx.toolchains:
- return ctx.toolchains["//cc:toolchain_type"]
- fail("In order to use find_cpp_toolchain, you must include the '@rules_cc//cc:toolchain_type' in the toolchains argument to your rule.")
-
- # Fall back to the legacy implicit attribute lookup.
- if hasattr(ctx.attr, "_cc_toolchain"):
- return ctx.attr._cc_toolchain[cc_common.CcToolchainInfo]
-
- # We didn't find anything.
- fail("In order to use find_cpp_toolchain, you must define the '_cc_toolchain' attribute on your rule or aspect.")