diff options
author | Cal Peyser <cpeyser@google.com> | 2016-08-09 15:48:40 +0000 |
---|---|---|
committer | Yue Gan <yueg@google.com> | 2016-08-10 08:36:18 +0000 |
commit | 5f2ef8d9382f4634f3f10d77f669af3f135bb6e5 (patch) | |
tree | f55465cc481b555c691b98b97b7b81414fda1646 /src/main/java/com | |
parent | 462edfc6b650b3003bd1dfa8dcd10e953141eb83 (diff) |
Allow extra action inputs and variables extensions to boe propagated to the
CppLinkAction.
--
MOS_MIGRATED_REVID=129753508
Diffstat (limited to 'src/main/java/com')
3 files changed, 50 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java index f610d5e76d..ef70efb4f1 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java @@ -259,6 +259,7 @@ public final class CcLibraryHelper { private final List<PathFragment> looseIncludeDirs = new ArrayList<>(); private final List<PathFragment> systemIncludeDirs = new ArrayList<>(); private final List<PathFragment> includeDirs = new ArrayList<>(); + private final List<Artifact> linkActionInputs = new ArrayList<>(); @Nullable private Artifact dynamicLibrary; private LinkTargetType linkType = LinkTargetType.STATIC_LIBRARY; @@ -695,6 +696,15 @@ public final class CcLibraryHelper { Iterables.addAll(this.includeDirs, includeDirs); return this; } + + /** + * Adds the given artifact to the input of any generated link actions. + */ + public CcLibraryHelper addLinkActionInput(Artifact input) { + Preconditions.checkNotNull(input); + this.linkActionInputs.add(input); + return this; + } /** * Adds a variableExtension to template the crosstool. @@ -1062,6 +1072,7 @@ public final class CcLibraryHelper { .addCopts(copts) .setLinkTargetType(linkType) .setNeverLink(neverlink) + .addLinkActionInputs(linkActionInputs) .setFake(fake) .setAllowInterfaceSharedObjects(emitInterfaceSharedObjects) .setCreateDynamicLibrary(emitDynamicLibrary) diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java index 881eec63de..21425b2564 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java @@ -146,6 +146,9 @@ public class CppLinkActionBuilder { private boolean isLTOIndexing = false; private Iterable<LTOBackendArtifacts> allLTOArtifacts = null; + + private final List<VariablesExtension> variablesExtensions = new ArrayList<>(); + private final List<Artifact> linkActionInputs = new ArrayList<>(); /** * Creates a builder that builds {@link CppLinkAction} instances. @@ -510,6 +513,9 @@ public class CppLinkActionBuilder { runtimeLinkerInputs, output); variablesExtension.addVariables(buildVariablesBuilder); + for (VariablesExtension extraVariablesExtension : variablesExtensions) { + extraVariablesExtension.addVariables(buildVariablesBuilder); + } Variables buildVariables = buildVariablesBuilder.build(); PathFragment paramRootPath = @@ -597,6 +603,7 @@ public class CppLinkActionBuilder { // Compute the set of inputs - we only need stable order here. NestedSetBuilder<Artifact> dependencyInputsBuilder = NestedSetBuilder.stableOrder(); dependencyInputsBuilder.addTransitive(crosstoolInputs); + dependencyInputsBuilder.addAll(linkActionInputs); if (runtimeMiddleman != null) { dependencyInputsBuilder.add(runtimeMiddleman); } @@ -799,6 +806,14 @@ public class CppLinkActionBuilder { } /** + * Adds variables extensions to template the toolchain for this link action. + */ + public CppLinkActionBuilder addVariablesExtension(List<VariablesExtension> variablesExtensions) { + this.variablesExtensions.addAll(variablesExtensions); + return this; + } + + /** * Sets the interface output of the link. A non-null argument can only be provided if the link * type is {@code DYNAMIC_LIBRARY} and fake is false. */ @@ -1051,6 +1066,14 @@ public class CppLinkActionBuilder { this.runtimeSolibDir = runtimeSolibDir; return this; } + + /** + * Sets extra input artifacts to the link action. + */ + public CppLinkActionBuilder addActionInputs(Collection<Artifact> inputs) { + this.linkActionInputs.addAll(inputs); + return this; + } private static class LinkArgCollector { String rpathRoot; diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java index 1c08ea1582..e7e52185a6 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java @@ -80,6 +80,7 @@ public final class CppModel { private final List<String> linkopts = new ArrayList<>(); private LinkTargetType linkType = LinkTargetType.STATIC_LIBRARY; private boolean neverLink; + private final List<Artifact> linkActionInputs = new ArrayList<>(); private boolean allowInterfaceSharedObjects; private boolean createDynamicLibrary = true; private Artifact soImplArtifact; @@ -218,6 +219,14 @@ public final class CppModel { this.neverLink = neverLink; return this; } + + /** + * Adds an artifact to the inputs of any link actions created by this CppModel. + */ + public CppModel addLinkActionInputs(Collection<Artifact> inputs) { + this.linkActionInputs.addAll(inputs); + return this; + } /** * Whether to allow interface dynamic libraries. Note that setting this to true only has an effect @@ -854,7 +863,9 @@ public final class CppModel { .addLTOBitcodeFiles(ccOutputs.getLtoBitcodeFiles()) .setLinkType(linkType) .setLinkStaticness(LinkStaticness.FULLY_STATIC) + .addActionInputs(linkActionInputs) .setLibraryIdentifier(libraryIdentifier) + .addVariablesExtension(variablesExtensions) .setFeatureConfiguration(featureConfiguration) .build(); env.registerAction(maybePicAction); @@ -879,7 +890,9 @@ public final class CppModel { .addLTOBitcodeFiles(ccOutputs.getLtoBitcodeFiles()) .setLinkType(picLinkType) .setLinkStaticness(LinkStaticness.FULLY_STATIC) + .addActionInputs(linkActionInputs) .setLibraryIdentifier(libraryIdentifier) + .addVariablesExtension(variablesExtensions) .setFeatureConfiguration(featureConfiguration) .build(); env.registerAction(picAction); @@ -928,13 +941,15 @@ public final class CppModel { .addLTOBitcodeFiles(ccOutputs.getLtoBitcodeFiles()) .setLinkType(LinkTargetType.DYNAMIC_LIBRARY) .setLinkStaticness(LinkStaticness.DYNAMIC) + .addActionInputs(linkActionInputs) .setLibraryIdentifier(mainLibraryIdentifier) .addLinkopts(linkopts) .addLinkopts(sonameLinkopts) .setRuntimeInputs( CppHelper.getToolchain(ruleContext).getDynamicRuntimeLinkMiddleman(), CppHelper.getToolchain(ruleContext).getDynamicRuntimeLinkInputs()) - .setFeatureConfiguration(featureConfiguration); + .setFeatureConfiguration(featureConfiguration) + .addVariablesExtension(variablesExtensions); if (!ccOutputs.getLtoBitcodeFiles().isEmpty() && featureConfiguration.isEnabled(CppRuleClasses.THIN_LTO)) { |