diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
8 files changed, 47 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcIncLibraryRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcIncLibraryRule.java index 8685322ba5..c17a0aee4d 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcIncLibraryRule.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcIncLibraryRule.java @@ -36,6 +36,9 @@ public final class BazelCcIncLibraryRule implements RuleDefinition { .add( attr(CcToolchain.CC_TOOLCHAIN_DEFAULT_ATTRIBUTE_NAME, LABEL) .value(CppRuleClasses.ccToolchainAttribute(env))) + .add( + attr(CcToolchain.CC_TOOLCHAIN_TYPE_ATTRIBUTE_NAME, LABEL) + .value(CppRuleClasses.ccToolchainTypeAttribute(env))) .add(attr(":stl", LABEL).value(BazelCppRuleClasses.STL)) .build(); } 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 5d63a33650..1a63327fff 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 @@ -140,6 +140,9 @@ public class BazelCppRuleClasses { .add( attr(CcToolchain.CC_TOOLCHAIN_DEFAULT_ATTRIBUTE_NAME, LABEL) .value(CppRuleClasses.ccToolchainAttribute(env))) + .add( + attr(CcToolchain.CC_TOOLCHAIN_TYPE_ATTRIBUTE_NAME, LABEL) + .value(CppRuleClasses.ccToolchainTypeAttribute(env))) .setPreferredDependencyPredicate(Predicates.<String>or(CPP_SOURCE, C_SOURCE, CPP_HEADER)) .requiresConfigurationFragments(PlatformConfiguration.class) .addRequiredToolchains(CppHelper.getCcToolchainType(env.getToolsRepository())) diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/genrule/BazelGenRuleRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/genrule/BazelGenRuleRule.java index c2ef057882..36c89c5757 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/genrule/BazelGenRuleRule.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/genrule/BazelGenRuleRule.java @@ -51,6 +51,9 @@ public final class BazelGenRuleRule implements RuleDefinition { .add( attr(CcToolchain.CC_TOOLCHAIN_DEFAULT_ATTRIBUTE_NAME, LABEL) .value(GenRuleBaseRule.ccToolchainAttribute(env))) + .add( + attr(CcToolchain.CC_TOOLCHAIN_TYPE_ATTRIBUTE_NAME, LABEL) + .value(GenRuleBaseRule.ccToolchainTypeAttribute(env))) .add(attr(":host_jdk", LABEL).cfg(HOST).value(JavaSemantics.hostJdkAttribute(env))) .build(); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java index e44b32b7ff..6a7318eee9 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java @@ -68,6 +68,9 @@ public class CcToolchain implements RuleConfiguredTargetFactory { /** Default attribute name where rules store the reference to cc_toolchain */ public static final String CC_TOOLCHAIN_DEFAULT_ATTRIBUTE_NAME = ":cc_toolchain"; + /** Default attribute name for the c++ toolchain type */ + public static final String CC_TOOLCHAIN_TYPE_ATTRIBUTE_NAME = ":cc_toolchain_type"; + /** * This file (found under the sysroot) may be unconditionally included in every C/C++ compilation. */ 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 da85efa79e..466b62513d 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,9 +87,12 @@ public class CppHelper { private static final ImmutableList<String> LINKOPTS_PREREQUISITE_LABEL_KINDS = ImmutableList.of("deps", "srcs"); + /** Base label of the c++ toolchain category. */ + public static final String TOOLCHAIN_TYPE_LABEL = "//tools/cpp:toolchain_category"; + /** 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_category"); + return Label.parseAbsoluteUnchecked(toolsRepository + TOOLCHAIN_TYPE_LABEL); } private CppHelper() { diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java index 5239a2f5eb..bca6407a0b 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java @@ -131,6 +131,17 @@ public class CppRuleClasses { }; } + public static LateBoundLabel<BuildConfiguration> ccToolchainTypeAttribute( + RuleDefinitionEnvironment env) { + return new LateBoundLabel<BuildConfiguration>( + env.getToolsLabel(CppHelper.TOOLCHAIN_TYPE_LABEL), CppConfiguration.class) { + @Override + public Label resolve(Rule rule, AttributeMap attributes, BuildConfiguration configuration) { + return CppHelper.getCcToolchainType(env.getToolsRepository()); + } + }; + } + // Artifacts of these types are discarded from the 'hdrs' attribute in cc rules static final FileTypeSet DISALLOWED_HDRS_FILES = FileTypeSet.of( ARCHIVE, diff --git a/src/main/java/com/google/devtools/build/lib/rules/genrule/GenRuleBaseRule.java b/src/main/java/com/google/devtools/build/lib/rules/genrule/GenRuleBaseRule.java index 082904ae81..67e5a6f8b7 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/genrule/GenRuleBaseRule.java +++ b/src/main/java/com/google/devtools/build/lib/rules/genrule/GenRuleBaseRule.java @@ -35,6 +35,7 @@ import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.packages.RuleClass; import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType; import com.google.devtools.build.lib.rules.cpp.CppConfiguration; +import com.google.devtools.build.lib.rules.cpp.CppHelper; import com.google.devtools.build.lib.rules.cpp.CppRuleClasses; import com.google.devtools.build.lib.syntax.Type; import com.google.devtools.build.lib.util.FileTypeSet; @@ -63,6 +64,21 @@ public class GenRuleBaseRule implements RuleDefinition { }; } + /** Late-bound dependency on the C++ toolchain type. */ + public static Attribute.LateBoundLabel<BuildConfiguration> ccToolchainTypeAttribute( + RuleDefinitionEnvironment env) { + return new LateBoundLabel<BuildConfiguration>( + env.getToolsLabel(CppHelper.TOOLCHAIN_TYPE_LABEL), CppConfiguration.class) { + @Override + public Label resolve(Rule rule, AttributeMap attributes, BuildConfiguration configuration) { + return attributes != null + && GenRuleBase.requiresCrosstool(attributes.get("cmd", Type.STRING)) + ? CppHelper.getCcToolchainType(env.getToolsRepository()) + : null; + } + }; + } + @Override public RuleClass build( RuleClass.Builder builder, RuleDefinitionEnvironment env) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java index dded003b2f..2fee1f098f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java @@ -58,6 +58,7 @@ import com.google.devtools.build.lib.rules.apple.AppleToolchain.RequiresXcodeCon 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.CppModuleMap.UmbrellaHeaderStrategy; +import com.google.devtools.build.lib.rules.cpp.CppRuleClasses; import com.google.devtools.build.lib.rules.proto.ProtoSourceFileBlacklist; import com.google.devtools.build.lib.syntax.Type; import com.google.devtools.build.lib.util.FileType; @@ -539,6 +540,9 @@ public class ObjcRuleClasses { return builder .add(attr(CcToolchain.CC_TOOLCHAIN_DEFAULT_ATTRIBUTE_NAME, LABEL).value(APPLE_TOOLCHAIN)) .add( + attr(CcToolchain.CC_TOOLCHAIN_TYPE_ATTRIBUTE_NAME, LABEL) + .value(CppRuleClasses.ccToolchainTypeAttribute(env))) + .add( attr(":lipo_context_collector", LABEL) .value(NULL_LIPO_CONTEXT_COLLECTOR) .skipPrereqValidatorCheck()) |