diff options
Diffstat (limited to 'src/main/java/com/google')
7 files changed, 44 insertions, 34 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/AnalysisEnvironment.java b/src/main/java/com/google/devtools/build/lib/analysis/AnalysisEnvironment.java index dd96b3a6de..fcdc3ec4c6 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/AnalysisEnvironment.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/AnalysisEnvironment.java @@ -23,6 +23,7 @@ import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.MiddlemanFactory; import com.google.devtools.build.lib.actions.Root; import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoFactory.BuildInfoKey; +import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.events.EventHandler; import com.google.devtools.build.lib.vfs.PathFragment; import com.google.devtools.build.skyframe.SkyFunction; @@ -137,10 +138,11 @@ public interface AnalysisEnvironment extends ActionRegistry { /** * Returns the Artifacts that contain the workspace status for the current build request. * - * @param ruleContext the rule to use for error reporting and to determine the - * configuration + * @param ruleContext the rule to use for error reporting. + * @param config the current build configuration. */ - ImmutableList<Artifact> getBuildInfo(RuleContext ruleContext, BuildInfoKey key); + ImmutableList<Artifact> getBuildInfo( + RuleContext ruleContext, BuildInfoKey key, BuildConfiguration config); /** * Returns the set of orphan Artifacts (i.e. Artifacts without generating action). Should only be diff --git a/src/main/java/com/google/devtools/build/lib/analysis/AnalysisUtils.java b/src/main/java/com/google/devtools/build/lib/analysis/AnalysisUtils.java index 40fdf9b6b1..3c137f915e 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/AnalysisUtils.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/AnalysisUtils.java @@ -44,8 +44,7 @@ public final class AnalysisUtils { * host configuration. Otherwise it returns the value of the stamp attribute, * or of the stamp option if the attribute value is -1. */ - public static boolean isStampingEnabled(RuleContext ruleContext) { - BuildConfiguration config = ruleContext.getConfiguration(); + public static boolean isStampingEnabled(RuleContext ruleContext, BuildConfiguration config) { if (config.isHostConfiguration() || !ruleContext.attributes().has("stamp", BuildType.TRISTATE)) { return false; @@ -54,6 +53,10 @@ public final class AnalysisUtils { return stamp == TriState.YES || (stamp == TriState.AUTO && config.stampBinaries()); } + public static boolean isStampingEnabled(RuleContext ruleContext) { + return isStampingEnabled(ruleContext, ruleContext.getConfiguration()); + } + // TODO(bazel-team): These need Iterable<? extends TransitiveInfoCollection> because they need to // be called with Iterable<ConfiguredTarget>. Once the configured target lockdown is complete, we // can eliminate the "extends" clauses. diff --git a/src/main/java/com/google/devtools/build/lib/analysis/CachingAnalysisEnvironment.java b/src/main/java/com/google/devtools/build/lib/analysis/CachingAnalysisEnvironment.java index 2f8762d025..5fd3d43822 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/CachingAnalysisEnvironment.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/CachingAnalysisEnvironment.java @@ -313,14 +313,14 @@ public class CachingAnalysisEnvironment implements AnalysisEnvironment { } @Override - public ImmutableList<Artifact> getBuildInfo(RuleContext ruleContext, BuildInfoKey key) { - boolean stamp = AnalysisUtils.isStampingEnabled(ruleContext); + public ImmutableList<Artifact> getBuildInfo( + RuleContext ruleContext, BuildInfoKey key, BuildConfiguration config) { + boolean stamp = AnalysisUtils.isStampingEnabled(ruleContext, config); BuildInfoCollectionValue collectionValue = (BuildInfoCollectionValue) skyframeEnv.getValue(BuildInfoCollectionValue.key( - new BuildInfoCollectionValue.BuildInfoKeyAndConfig( - key, ruleContext.getConfiguration()))); + new BuildInfoCollectionValue.BuildInfoKeyAndConfig(key, config))); if (collectionValue == null) { - throw collectDebugInfoAndCrash(key, ruleContext.getConfiguration()); + throw collectDebugInfoAndCrash(key, config); } BuildInfoCollection collection = collectionValue.getCollection(); return stamp ? collection.getStampedBuildInfo() : collection.getRedactedBuildInfo(); diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java index 5025906295..d946aae9a0 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java @@ -390,7 +390,7 @@ public final class RuleContext extends TargetContext } public ImmutableList<Artifact> getBuildInfo(BuildInfoKey key) { - return getAnalysisEnvironment().getBuildInfo(this, key); + return getAnalysisEnvironment().getBuildInfo(this, key, getConfiguration()); } @VisibleForTesting diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java index 3e17a83721..6d240bbddc 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java @@ -91,7 +91,8 @@ public final class CppLinkAction extends AbstractAction implements ExecutionInfo /** * Create an artifact at the specified root-relative path in the bin directory. */ - Artifact create(RuleContext ruleContext, PathFragment rootRelativePath); + Artifact create(RuleContext ruleContext, BuildConfiguration configuration, + PathFragment rootRelativePath); } /** @@ -100,9 +101,9 @@ public final class CppLinkAction extends AbstractAction implements ExecutionInfo */ public static final LinkArtifactFactory DEFAULT_ARTIFACT_FACTORY = new LinkArtifactFactory() { @Override - public Artifact create(RuleContext ruleContext, PathFragment rootRelativePath) { - return ruleContext.getDerivedArtifact(rootRelativePath, - ruleContext.getConfiguration().getBinDirectory()); + public Artifact create(RuleContext ruleContext, BuildConfiguration configuration, + PathFragment rootRelativePath) { + return ruleContext.getDerivedArtifact(rootRelativePath, configuration.getBinDirectory()); } }; @@ -693,7 +694,7 @@ public final class CppLinkAction extends AbstractAction implements ExecutionInfo ImmutableList.Builder<LTOBackendArtifacts> ltoOutputs = ImmutableList.builder(); for (Artifact a : allBitcode.values()) { LTOBackendArtifacts ltoArtifacts = new LTOBackendArtifacts( - ltoOutputRootPrefix, a, allBitcode, ruleContext, linkArtifactFactory); + ltoOutputRootPrefix, a, allBitcode, ruleContext, configuration, linkArtifactFactory); ltoOutputs.add(ltoArtifacts); } return ltoOutputs.build(); @@ -732,7 +733,7 @@ public final class CppLinkAction extends AbstractAction implements ExecutionInfo } final ImmutableList<Artifact> buildInfoHeaderArtifacts = !linkstamps.isEmpty() - ? ruleContext.getBuildInfo(CppBuildInfo.KEY) + ? analysisEnvironment.getBuildInfo(ruleContext, CppBuildInfo.KEY, configuration) : ImmutableList.<Artifact>of(); boolean needWholeArchive = wholeArchive || needWholeArchive( @@ -762,7 +763,8 @@ public final class CppLinkAction extends AbstractAction implements ExecutionInfo interfaceOutput, filteredNonLibraryArtifacts, this.ltoBitcodeFiles); final ImmutableMap<Artifact, Artifact> linkstampMap = - mapLinkstampsToOutputs(linkstamps, ruleContext, output, linkArtifactFactory); + mapLinkstampsToOutputs(linkstamps, ruleContext, configuration, output, + linkArtifactFactory); PathFragment ltoOutputRootPrefix = null; if (isLTOIndexing && allLTOArtifacts == null) { @@ -795,7 +797,7 @@ public final class CppLinkAction extends AbstractAction implements ExecutionInfo @Nullable final Artifact paramFile = canSplitCommandLine() - ? linkArtifactFactory.create(ruleContext, paramRootPath) + ? linkArtifactFactory.create(ruleContext, configuration, paramRootPath) : null; LinkCommandLine.Builder linkCommandLineBuilder = @@ -990,8 +992,8 @@ public final class CppLinkAction extends AbstractAction implements ExecutionInfo * corresponding object file that should be fed into the link */ public static ImmutableMap<Artifact, Artifact> mapLinkstampsToOutputs( - Collection<Artifact> linkstamps, RuleContext ruleContext, Artifact outputBinary, - LinkArtifactFactory linkArtifactFactory) { + Collection<Artifact> linkstamps, RuleContext ruleContext, BuildConfiguration configuration, + Artifact outputBinary, LinkArtifactFactory linkArtifactFactory) { ImmutableMap.Builder<Artifact, Artifact> mapBuilder = ImmutableMap.builder(); PathFragment outputBinaryPath = outputBinary.getRootRelativePath(); @@ -1004,7 +1006,7 @@ public final class CppLinkAction extends AbstractAction implements ExecutionInfo mapBuilder.put(linkstamp, // Note that link stamp actions can be shared between link actions that output shared // native dep libraries. - linkArtifactFactory.create(ruleContext, stampOutputPath)); + linkArtifactFactory.create(ruleContext, configuration, stampOutputPath)); } return mapBuilder.build(); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/LTOBackendArtifacts.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/LTOBackendArtifacts.java index f5765f0ccf..6eeadae89c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/LTOBackendArtifacts.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/LTOBackendArtifacts.java @@ -18,6 +18,7 @@ import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.actions.LTOBackendAction; +import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.vfs.FileSystemUtils; import com.google.devtools.build.lib.vfs.PathFragment; @@ -73,16 +74,16 @@ public final class LTOBackendArtifacts { Artifact bitcodeFile, Map<PathFragment, Artifact> allBitCodeFiles, RuleContext ruleContext, + BuildConfiguration configuration, CppLinkAction.LinkArtifactFactory linkArtifactFactory) { this.bitcodeFile = bitcodeFile; PathFragment obj = ltoOutputRootPrefix.getRelative(bitcodeFile.getRootRelativePath()); - objectFile = linkArtifactFactory.create(ruleContext, obj); - imports = - linkArtifactFactory.create(ruleContext, FileSystemUtils.appendExtension(obj, ".imports")); - index = - linkArtifactFactory.create( - ruleContext, FileSystemUtils.appendExtension(obj, ".thinlto.bc")); + objectFile = linkArtifactFactory.create(ruleContext, configuration, obj); + imports = linkArtifactFactory.create( + ruleContext, configuration, FileSystemUtils.appendExtension(obj, ".imports")); + index = linkArtifactFactory.create( + ruleContext, configuration, FileSystemUtils.appendExtension(obj, ".thinlto.bc")); bitcodeFiles = allBitCodeFiles; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java b/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java index ed1bdbbfb8..0b36ed61aa 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java @@ -35,6 +35,7 @@ import com.google.devtools.build.lib.rules.cpp.LinkerInputs.LibraryToLink; import com.google.devtools.build.lib.util.Fingerprint; import com.google.devtools.build.lib.util.Preconditions; import com.google.devtools.build.lib.vfs.PathFragment; + import java.util.ArrayList; import java.util.Collection; import java.util.LinkedList; @@ -61,9 +62,10 @@ public abstract class NativeDepsHelper { private static final CppLinkAction.LinkArtifactFactory SHAREABLE_LINK_ARTIFACT_FACTORY = new CppLinkAction.LinkArtifactFactory() { @Override - public Artifact create(RuleContext ruleContext, PathFragment rootRelativePath) { + public Artifact create(RuleContext ruleContext, BuildConfiguration configuration, + PathFragment rootRelativePath) { return ruleContext.getShareableArtifact(rootRelativePath, - ruleContext.getConfiguration().getBinDirectory()); + configuration.getBinDirectory()); } }; @@ -169,7 +171,8 @@ public abstract class NativeDepsHelper { CppHelper.resolveLinkstamps(ruleContext, linkParams); List<Artifact> buildInfoArtifacts = linkstamps.isEmpty() ? ImmutableList.<Artifact>of() - : ruleContext.getBuildInfo(CppBuildInfo.KEY); + : ruleContext.getAnalysisEnvironment().getBuildInfo( + ruleContext, CppBuildInfo.KEY, configuration); boolean shareNativeDeps = configuration.getFragment(CppConfiguration.class).shareNativeDeps(); NestedSet<LibraryToLink> linkerInputs = linkParams.getLibraries(); @@ -178,7 +181,7 @@ public abstract class NativeDepsHelper { LinkerInputs.toLibraryArtifacts(linkerInputs), linkopts, linkstamps.keySet(), buildInfoArtifacts, ruleContext.getFeatures()), - ruleContext.getConfiguration().getBinDirectory()) + configuration.getBinDirectory()) : nativeDeps; CppLinkAction.Builder builder = new CppLinkAction.Builder( ruleContext, sharedLibrary, configuration, toolchain); @@ -285,7 +288,6 @@ public abstract class NativeDepsHelper { for (String feature : features) { fp.addStrings(feature); } - return new PathFragment( - "_nativedeps/" + fp.hexDigestAndReset() + ".so"); + return new PathFragment("_nativedeps/" + fp.hexDigestAndReset() + ".so"); } } |