aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar cpeyser <cpeyser@google.com>2017-09-13 21:24:40 +0200
committerGravatar Philipp Wollermann <philwo@google.com>2017-09-14 18:46:43 +0200
commitca216f5eb4b1f1892219db0f578495bbbdbaa875 (patch)
tree2cd1853f5424c44dc57e986ee0bd5e3f4ad3bc50
parentd1bd9d6637a7201e31e94683a9bc12cc59ac3651 (diff)
Introduce empty "toolchain_category" rule for labels that will be used as
categories of toolchains for the purpose of toolchain selection. Up to now, we've used the native toolchain_type rule for this purpose. That rule depends on a number of configuration fragments that supply build variables - we don't want toolchains to need to depend on those fragments as well. E.g. toolchain_type depends on JvmConfiguration, but we would like toolchains to work with --experimental_disable_jvm. PiperOrigin-RevId: 168577759
-rw-r--r--src/create_embedded_tools.py2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java14
-rw-r--r--tools/BUILD2
-rw-r--r--tools/build_defs/toolchains/BUILD14
-rw-r--r--tools/build_defs/toolchains/toolchain_category.bzl25
-rw-r--r--tools/cpp/BUILD7
-rw-r--r--tools/cpp/BUILD.static6
-rw-r--r--tools/cpp/BUILD.tpl6
9 files changed, 68 insertions, 10 deletions
diff --git a/src/create_embedded_tools.py b/src/create_embedded_tools.py
index 699edd09f5..8b013cee44 100644
--- a/src/create_embedded_tools.py
+++ b/src/create_embedded_tools.py
@@ -31,6 +31,8 @@ output_paths = [
('*tools/jdk/BUILD*', lambda x: 'tools/jdk/BUILD'),
('*tools/platforms/platforms.BUILD', lambda x: 'platforms/BUILD'),
('*tools/platforms/*', lambda x: 'platforms/' + os.path.basename(x)),
+ ('*tools/build_defs/toolchains/*',
+ lambda x: 'tools/build_defs/toolchains/' + os.path.basename(x)),
('*JavaBuilder*_deploy.jar', lambda x: 'tools/jdk/' + os.path.basename(x)),
('*JacocoCoverage*_deploy.jar',
lambda x: 'tools/jdk/JacocoCoverage_deploy.jar'),
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
index 87f43cc057..5273d32226 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
@@ -89,7 +89,7 @@ public class CppHelper {
/** Returns label used to select resolved cc_toolchain instances based on platform. */
public static Label getCcToolchainType(String toolsRepository) {
- return Label.parseAbsoluteUnchecked(toolsRepository + "//tools/cpp:toolchain_type");
+ return Label.parseAbsoluteUnchecked(toolsRepository + "//tools/cpp:toolchain_category");
}
private CppHelper() {
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java b/src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java
index b938e5fe93..2cf84b62d6 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java
@@ -78,6 +78,7 @@ public final class BazelMockCcSupport extends MockCcSupport {
"/bazel_tools_workspace/tools/cpp/BUILD",
"package(default_visibility=['//visibility:public'])",
"cc_library(name = 'stl')",
+ "toolchain_type(name = 'toolchain_type')",
"cc_library(name = 'malloc')",
"cc_toolchain_suite(",
" name = 'toolchain',",
@@ -145,16 +146,17 @@ public final class BazelMockCcSupport extends MockCcSupport {
" name = 'link_dynamic_library',",
" srcs = ['link_dynamic_library.sh'],",
")",
- "toolchain_type(name = 'toolchain_type')",
+ "load('//tools/build_defs/toolchains:toolchain_category.bzl', 'toolchain_category')",
+ "toolchain_category(name = 'toolchain_category')",
"toolchain(",
" name = 'toolchain_cc-compiler-piii',",
- " toolchain_type = ':toolchain_type',",
+ " toolchain_type = ':toolchain_category',",
" toolchain = '//third_party/crosstool/mock:cc-compiler-piii',",
" target_compatible_with = [':mock_value'],",
")",
"toolchain(",
" name = 'dummy_cc_toolchain',",
- " toolchain_type = ':toolchain_type',",
+ " toolchain_type = ':toolchain_category',",
" toolchain = ':dummy_cc_toolchain_impl',",
")",
"load(':dummy_toolchain.bzl', 'dummy_toolchain')",
@@ -165,6 +167,12 @@ public final class BazelMockCcSupport extends MockCcSupport {
" toolchain = platform_common.ToolchainInfo()",
" return [toolchain]",
"dummy_toolchain = rule(_dummy_toolchain_impl, attrs = {})");
+ config.create("/bazel_tools_workspace/tools/build_defs/toolchains/BUILD");
+ config.create(
+ "/bazel_tools_workspace/tools/build_defs/toolchains/toolchain_category.bzl",
+ "def _toolchain_category_impl(ctx):",
+ " ctx = ctx",
+ "toolchain_category = rule(_toolchain_category_impl, attrs = {})");
config.create(
"/bazel_tools_workspace/tools/cpp/CROSSTOOL",
readCrosstoolFile());
diff --git a/tools/BUILD b/tools/BUILD
index 0432b126cb..bbf75a398e 100644
--- a/tools/BUILD
+++ b/tools/BUILD
@@ -15,6 +15,7 @@ filegroup(
"//tools/build_defs/hash:srcs",
"//tools/build_defs/pkg:srcs",
"//tools/build_defs/repo:srcs",
+ "//tools/build_defs/toolchains:srcs",
"//tools/build_rules:srcs",
"//tools/coverage:srcs",
"//tools/jdk:srcs",
@@ -42,6 +43,7 @@ filegroup(
"//tools/build_defs/hash:srcs",
"//tools/build_defs/pkg:srcs",
"//tools/build_defs/repo:srcs",
+ "//tools/build_defs/toolchains:srcs",
"//tools/build_rules:embedded_tools_srcs",
"//tools/buildstamp:srcs",
"//tools/coverage:srcs",
diff --git a/tools/build_defs/toolchains/BUILD b/tools/build_defs/toolchains/BUILD
new file mode 100644
index 0000000000..92d6ec8a7f
--- /dev/null
+++ b/tools/build_defs/toolchains/BUILD
@@ -0,0 +1,14 @@
+# Rules for defining toolchains.
+
+licenses(["notice"]) # Apache 2.0
+
+package(default_visibility = ["//visibility:public"])
+
+exports_files(
+ glob(["**"]),
+)
+
+filegroup(
+ name = "srcs",
+ srcs = glob(["**"]),
+)
diff --git a/tools/build_defs/toolchains/toolchain_category.bzl b/tools/build_defs/toolchains/toolchain_category.bzl
new file mode 100644
index 0000000000..4520128921
--- /dev/null
+++ b/tools/build_defs/toolchains/toolchain_category.bzl
@@ -0,0 +1,25 @@
+# pylint: disable=g-bad-file-header
+# 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.
+"""Skylark rule to be used for toolchain "types".
+
+Blaze will allow a toolchain category to be any label, but we use an
+empty rule in particular in order to add behavior if the need arises.
+"""
+def _toolchain_category_impl(ctx):
+ ctx = ctx # unused argument
+
+toolchain_category = rule(_toolchain_category_impl, attrs = {})
+
+
diff --git a/tools/cpp/BUILD b/tools/cpp/BUILD
index eb75333e75..d8ed66b46e 100644
--- a/tools/cpp/BUILD
+++ b/tools/cpp/BUILD
@@ -205,7 +205,10 @@ filegroup(
srcs = ["link_dynamic_library.sh"],
)
-toolchain_type(name = "toolchain_type")
+# The c++ toolchain type
+load("//tools/build_defs/toolchains:toolchain_category.bzl", "toolchain_category")
+
+toolchain_category(name = "toolchain_category")
# A dummy toolchain is necessary to satisfy toolchain resolution until platforms
# are used in c++ by default.
@@ -213,7 +216,7 @@ toolchain_type(name = "toolchain_type")
toolchain(
name = "dummy_cc_toolchain",
toolchain = "dummy_cc_toolchain_impl",
- toolchain_type = ":toolchain_type",
+ toolchain_type = ":toolchain_category",
)
load(":dummy_toolchain.bzl", "dummy_toolchain")
diff --git a/tools/cpp/BUILD.static b/tools/cpp/BUILD.static
index aaadc5bad8..d948039c9f 100644
--- a/tools/cpp/BUILD.static
+++ b/tools/cpp/BUILD.static
@@ -116,7 +116,9 @@ filegroup(
srcs = ["link_dynamic_library.sh"],
)
-toolchain_type(name = "toolchain_type")
+# The c++ toolchain type
+load("//tools/build_defs/toolchains:toolchain_category.bzl", "toolchain_category")
+toolchain_category(name = "toolchain_category")
# A dummy toolchain is necessary to satisfy toolchain resolution until platforms
# are used in c++ by default.
@@ -124,7 +126,7 @@ toolchain_type(name = "toolchain_type")
toolchain(
name = "dummy_cc_toolchain",
toolchain = "dummy_cc_toolchain_impl",
- toolchain_type = ":toolchain_type",
+ toolchain_type = ":toolchain_category",
)
load(":dummy_toolchain.bzl", "dummy_toolchain")
diff --git a/tools/cpp/BUILD.tpl b/tools/cpp/BUILD.tpl
index 170fe3f91d..d1e81b2f84 100644
--- a/tools/cpp/BUILD.tpl
+++ b/tools/cpp/BUILD.tpl
@@ -76,7 +76,9 @@ cc_toolchain(
supports_param_files = 1,
)
-toolchain_type(name = "toolchain_type")
+# The c++ toolchain type
+load("//tools/build_rules:toolchain_category.bzl", "toolchain_category")
+toolchain_category(name = "toolchain_category")
# A dummy toolchain is necessary to satisfy toolchain resolution until platforms
# are used in c++ by default.
@@ -84,7 +86,7 @@ toolchain_type(name = "toolchain_type")
toolchain(
name = "dummy_cc_toolchain",
toolchain = "dummy_cc_toolchain_impl",
- toolchain_type = ":toolchain_type",
+ toolchain_type = ":toolchain_category",
)
load(":dummy_toolchain.bzl", "dummy_toolchain")