aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2016-07-01 05:00:14 +0000
committerGravatar Lukacs Berki <lberki@google.com>2016-07-01 07:12:56 +0000
commit38ad0bfb006188c874c28e804419aa2fa8cd8376 (patch)
treea2f49b3a5f3fa46434dfa9008ffd4cc48237f4f8 /src/main/java/com/google/devtools
parentf3cf015a2a926d93240ffe1af38035a0682c3628 (diff)
RELNOTES: Use the correct build configuration for shared native deps during Android split transitions.
-- MOS_MIGRATED_REVID=126378169
Diffstat (limited to 'src/main/java/com/google/devtools')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/AnalysisEnvironment.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/AnalysisUtils.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/CachingAnalysisEnvironment.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java24
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/LTOBackendArtifacts.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java14
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");
}
}