From 91d23bfd98025094d9549857a28d3da1e0a311b9 Mon Sep 17 00:00:00 2001 From: cpeyser Date: Thu, 31 Aug 2017 18:25:53 +0200 Subject: Bazel c++ rules depend on a c++ toolchain. PiperOrigin-RevId: 167147239 --- .../com/google/devtools/build/lib/analysis/PlatformOptions.java | 2 +- .../devtools/build/lib/bazel/rules/cpp/BazelCppRuleClasses.java | 2 ++ src/main/java/com/google/devtools/build/lib/packages/RuleClass.java | 6 ++++++ .../java/com/google/devtools/build/lib/rules/cpp/CppHelper.java | 5 +++++ 4 files changed, 14 insertions(+), 1 deletion(-) (limited to 'src/main/java/com/google') diff --git a/src/main/java/com/google/devtools/build/lib/analysis/PlatformOptions.java b/src/main/java/com/google/devtools/build/lib/analysis/PlatformOptions.java index 3a84352105..dd65946476 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/PlatformOptions.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/PlatformOptions.java @@ -60,7 +60,7 @@ public class PlatformOptions extends FragmentOptions { @Option( name = "extra_toolchains", converter = LabelListConverter.class, - defaultValue = "", + defaultValue = "@bazel_tools//tools/cpp:dummy_cc_toolchain", documentationCategory = OptionDocumentationCategory.UNDOCUMENTED, effectTags = {OptionEffectTag.UNKNOWN}, metadataTags = {OptionMetadataTag.HIDDEN}, diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppRuleClasses.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppRuleClasses.java index 12737d9d51..00ebc98c53 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppRuleClasses.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppRuleClasses.java @@ -57,6 +57,7 @@ import com.google.devtools.build.lib.packages.TriState; import com.google.devtools.build.lib.rules.cpp.CcToolchain; import com.google.devtools.build.lib.rules.cpp.CppConfiguration; import com.google.devtools.build.lib.rules.cpp.CppFileTypes; +import com.google.devtools.build.lib.rules.cpp.CppHelper; import com.google.devtools.build.lib.rules.cpp.CppRuleClasses; import com.google.devtools.build.lib.rules.cpp.CppRuleClasses.LipoTransition; import com.google.devtools.build.lib.util.FileTypeSet; @@ -139,6 +140,7 @@ public class BazelCppRuleClasses { attr(CcToolchain.CC_TOOLCHAIN_DEFAULT_ATTRIBUTE_NAME, LABEL) .value(CppRuleClasses.ccToolchainAttribute(env))) .setPreferredDependencyPredicate(Predicates.or(CPP_SOURCE, C_SOURCE, CPP_HEADER)) + .addRequiredToolchains(CppHelper.getCcToolchainType(env.getToolsRepository())) .build(); } diff --git a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java index 7cbb25fd1b..565cb7a222 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java +++ b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java @@ -28,6 +28,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; import com.google.common.collect.Ordering; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.LabelSyntaxException; @@ -996,6 +997,11 @@ public class RuleClass { return this; } + public Builder addRequiredToolchains(Label... toolchainLabels) { + Iterables.addAll(this.requiredToolchains, Lists.newArrayList(toolchainLabels)); + return this; + } + /** * Returns an Attribute.Builder object which contains a replica of the * same attribute in the parent rule if exists. 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 1100576151..87f43cc057 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 @@ -87,6 +87,11 @@ public class CppHelper { private static final ImmutableList LINKOPTS_PREREQUISITE_LABEL_KINDS = ImmutableList.of("deps", "srcs"); + /** 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"); + } + private CppHelper() { // prevents construction } -- cgit v1.2.3