diff options
author | Googler <noreply@google.com> | 2015-06-25 02:36:02 +0000 |
---|---|---|
committer | Damien Martin-Guillerez <dmarting@google.com> | 2015-06-25 08:57:15 +0200 |
commit | 91c69f025d4cf4380c37c878f1aa1120ef31abcc (patch) | |
tree | 2a6b16110ff2f5a3236b99aae5dde59cc1838e2b /src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java | |
parent | 7ae29d2617e1039380df2b8fb3ee45286ba64dab (diff) |
Setup FDO command-line options via feature configurations.
--
MOS_MIGRATED_REVID=96835732
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java | 46 |
1 files changed, 41 insertions, 5 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java index e597907015..66b2722e83 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java @@ -31,6 +31,7 @@ import com.google.devtools.build.lib.analysis.actions.CommandLine; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.collect.CollectionUtils; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; +import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration; import com.google.devtools.build.lib.rules.cpp.Link.LinkStaticness; import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType; import com.google.devtools.build.lib.syntax.Label; @@ -58,6 +59,9 @@ public final class LinkCommandLine extends CommandLine { private final BuildConfiguration configuration; private final CppConfiguration cppConfiguration; private final ActionOwner owner; + private final CcToolchainFeatures.Variables variables; + // The feature config can be null for tests. + @Nullable private final FeatureConfiguration featureConfiguration; @Nullable private final Artifact output; @Nullable private final Artifact interfaceOutput; @Nullable private final Artifact symbolCountsOutput; @@ -77,6 +81,12 @@ public final class LinkCommandLine extends CommandLine { @Nullable private final Artifact paramFile; @Nullable private final Artifact interfaceSoBuilder; + /** + * A string constant for the c++ link action, used to access the feature + * configuration. + */ + public static final String CPP_LINK = "c++-link"; + private LinkCommandLine( BuildConfiguration configuration, ActionOwner owner, @@ -97,7 +107,9 @@ public final class LinkCommandLine extends CommandLine { boolean useTestOnlyFlags, boolean needWholeArchive, @Nullable Artifact paramFile, - Artifact interfaceSoBuilder) { + Artifact interfaceSoBuilder, + CcToolchainFeatures.Variables variables, + @Nullable FeatureConfiguration featureConfiguration) { Preconditions.checkArgument(linkTargetType != LinkTargetType.INTERFACE_DYNAMIC_LIBRARY, "you can't link an interface dynamic library directly"); if (linkTargetType != LinkTargetType.DYNAMIC_LIBRARY) { @@ -123,6 +135,8 @@ public final class LinkCommandLine extends CommandLine { this.configuration = Preconditions.checkNotNull(configuration); this.cppConfiguration = configuration.getFragment(CppConfiguration.class); + this.variables = variables; + this.featureConfiguration = featureConfiguration; this.owner = Preconditions.checkNotNull(owner); this.output = output; this.interfaceOutput = interfaceOutput; @@ -658,7 +672,10 @@ public final class LinkCommandLine extends CommandLine { } argv.addAll(cppConfiguration.getLinkOptions()); - argv.addAll(cppConfiguration.getFdoSupport().getLinkOptions()); + // The feature config can be null for tests. + if (featureConfiguration != null) { + argv.addAll(featureConfiguration.getCommandLine(CPP_LINK, variables)); + } } private static boolean isDynamicLibrary(LinkerInput linkInput) { @@ -933,6 +950,7 @@ public final class LinkCommandLine extends CommandLine { private final BuildConfiguration configuration; private final ActionOwner owner; + @Nullable private final RuleContext ruleContext; @Nullable private Artifact output; @Nullable private Artifact interfaceOutput; @@ -953,13 +971,18 @@ public final class LinkCommandLine extends CommandLine { @Nullable private Artifact paramFile; @Nullable private Artifact interfaceSoBuilder; - public Builder(BuildConfiguration configuration, ActionOwner owner) { + // This interface is needed to support tests that don't create a + // ruleContext, in which case the configuration and action owner + // cannot be accessed off of the give ruleContext. + public Builder(BuildConfiguration configuration, ActionOwner owner, + @Nullable RuleContext ruleContext) { this.configuration = configuration; this.owner = owner; + this.ruleContext = ruleContext; } public Builder(RuleContext ruleContext) { - this(ruleContext.getConfiguration(), ruleContext.getActionOwner()); + this(ruleContext.getConfiguration(), ruleContext.getActionOwner(), ruleContext); } public LinkCommandLine build() { @@ -970,6 +993,17 @@ public final class LinkCommandLine extends CommandLine { actualLinkstampCompileOptions = ImmutableList.copyOf( Iterables.concat(DEFAULT_LINKSTAMP_OPTIONS, linkstampCompileOptions)); } + CcToolchainFeatures.Variables variables = null; + FeatureConfiguration featureConfiguration = null; + // The ruleContext can be null for some tests. + if (ruleContext != null) { + featureConfiguration = CcCommon.configureFeatures(ruleContext); + CcToolchainFeatures.Variables.Builder buildVariables = + new CcToolchainFeatures.Variables.Builder(); + CppConfiguration cppConfiguration = configuration.getFragment(CppConfiguration.class); + cppConfiguration.getFdoSupport().getLinkOptions(featureConfiguration, buildVariables); + variables = buildVariables.build(); + } return new LinkCommandLine( configuration, owner, @@ -990,7 +1024,9 @@ public final class LinkCommandLine extends CommandLine { useTestOnlyFlags, needWholeArchive, paramFile, - interfaceSoBuilder); + interfaceSoBuilder, + variables, + featureConfiguration); } /** |