diff options
author | Janak Ramakrishnan <janakr@google.com> | 2016-08-15 21:54:55 +0000 |
---|---|---|
committer | Philipp Wollermann <philwo@google.com> | 2016-08-16 15:21:17 +0000 |
commit | 3c0adb26bac6d756fb97e4bcc6d4e5b2cefa5eeb (patch) | |
tree | c77f6438711f4b23d6c528907a81e23dc9e6dc91 /src/main/java/com/google/devtools/build/lib/rules/cpp | |
parent | 89125d5ee83f562c309a792a7c56ce24452e61ea (diff) |
Allow Skyframe graph lookups and value retrievals to throw InterruptedException.
The only place we now don't handle InterruptedException is in the action graph created after analysis, since I'm not sure that will be around for that much longer.
--
MOS_MIGRATED_REVID=130327770
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp')
12 files changed, 43 insertions, 39 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java index 1856b04a19..d49415f6a4 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java @@ -396,7 +396,8 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory { boolean fake, Artifact binary, LinkStaticness linkStaticness, - List<String> linkopts) { + List<String> linkopts) + throws InterruptedException { CppLinkActionBuilder builder = new CppLinkActionBuilder(context, binary) .setCrosstoolInputs(CppHelper.getToolchain(context).getLink()) diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcIncLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcIncLibrary.java index 8e2a5aa402..ead1c79d25 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcIncLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcIncLibrary.java @@ -24,13 +24,11 @@ import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.Runfiles; import com.google.devtools.build.lib.analysis.RunfilesProvider; import com.google.devtools.build.lib.analysis.actions.CreateIncSymlinkAction; -import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory; import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration; import com.google.devtools.build.lib.rules.test.InstrumentedFilesProvider; import com.google.devtools.build.lib.syntax.Type; import com.google.devtools.build.lib.vfs.PathFragment; - import java.util.ArrayList; import java.util.Arrays; @@ -58,7 +56,8 @@ public abstract class CcIncLibrary implements RuleConfiguredTargetFactory { } @Override - public ConfiguredTarget create(final RuleContext ruleContext) throws RuleErrorException { + public ConfiguredTarget create(final RuleContext ruleContext) + throws RuleErrorException, InterruptedException { FeatureConfiguration featureConfiguration = CcCommon.configureFeatures(ruleContext); PathFragment packageFragment = ruleContext.getPackageDirectory(); diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java index 73fd7095b1..3dd3f96515 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java @@ -92,7 +92,8 @@ public abstract class CcLibrary implements RuleConfiguredTargetFactory { } @Override - public ConfiguredTarget create(RuleContext context) throws RuleErrorException { + public ConfiguredTarget create(RuleContext context) + throws RuleErrorException, InterruptedException { RuleConfiguredTargetBuilder builder = new RuleConfiguredTargetBuilder(context); LinkTargetType linkType = getStaticLinkType(context); boolean linkStatic = context.attributes().get("linkstatic", Type.BOOLEAN); @@ -113,7 +114,7 @@ public abstract class CcLibrary implements RuleConfiguredTargetFactory { boolean linkStatic, boolean collectLinkstamp, boolean addDynamicRuntimeInputArtifactsToRunfiles) - throws RuleErrorException { + throws RuleErrorException, InterruptedException { FeatureConfiguration featureConfiguration = CcCommon.configureFeatures(ruleContext); final CcCommon common = new CcCommon(ruleContext); PrecompiledFiles precompiledFiles = new PrecompiledFiles(ruleContext); 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 43d43dcc95..2b78db3c0b 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 @@ -868,7 +868,7 @@ public final class CcLibraryHelper { * * @throws RuleErrorException */ - public Info build() throws RuleErrorException { + public Info build() throws RuleErrorException, InterruptedException { // Fail early if there is no lipo context collector on the rule - otherwise we end up failing // in lipo optimization. Preconditions.checkState( 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 f56ffdd2a4..f24432db98 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 @@ -62,7 +62,8 @@ public class CcToolchain implements RuleConfiguredTargetFactory { new PathFragment("include/stdc-predef.h"); @Override - public ConfiguredTarget create(RuleContext ruleContext) throws RuleErrorException { + public ConfiguredTarget create(RuleContext ruleContext) + throws RuleErrorException, InterruptedException { TransitiveInfoCollection lipoContextCollector = ruleContext.getPrerequisite(":lipo_context_collector", Mode.DONT_CHECK); if (lipoContextCollector != null diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java index 91ff304ee0..3769518150 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java @@ -993,8 +993,10 @@ public class CppCompileAction extends AbstractAction @Override public Iterable<Artifact> resolveInputsFromCache( - ArtifactResolver artifactResolver, PackageRootResolver resolver, - Collection<PathFragment> inputPaths) throws PackageRootResolutionException { + ArtifactResolver artifactResolver, + PackageRootResolver resolver, + Collection<PathFragment> inputPaths) + throws PackageRootResolutionException, InterruptedException { // Note that this method may trigger a violation of the desirable invariant that getInputs() // is a superset of getMandatoryInputs(). See bug about an "action not in canonical form" // error message and the integration test test_crosstool_change_and_failure(). diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfigurationLoader.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfigurationLoader.java index e5097f08d4..c59480fb96 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfigurationLoader.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfigurationLoader.java @@ -39,7 +39,6 @@ import com.google.devtools.build.lib.packages.Target; import com.google.devtools.build.lib.vfs.FileSystemUtils; import com.google.devtools.build.lib.vfs.Path; import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig; - import javax.annotation.Nullable; /** @@ -69,7 +68,7 @@ public class CppConfigurationLoader implements ConfigurationFragmentFactory { @Override public CppConfiguration create(ConfigurationEnvironment env, BuildOptions options) - throws InvalidConfigurationException { + throws InvalidConfigurationException, InterruptedException { CppConfigurationParameters params = createParameters(env, options); if (params == null) { return null; @@ -113,7 +112,8 @@ public class CppConfigurationLoader implements ConfigurationFragmentFactory { @Nullable protected CppConfigurationParameters createParameters( - ConfigurationEnvironment env, BuildOptions options) throws InvalidConfigurationException { + ConfigurationEnvironment env, BuildOptions options) + throws InvalidConfigurationException, InterruptedException { BlazeDirectories directories = env.getBlazeDirectories(); if (directories == null) { return null; 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 ab0eb4163b..5268ff4fbd 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 @@ -425,7 +425,7 @@ public class CppLinkActionBuilder { } /** Builds the Action as configured and returns it. */ - public CppLinkAction build() { + public CppLinkAction build() throws InterruptedException { Preconditions.checkState( (libraryIdentifier == null) == (linkType == LinkTargetType.EXECUTABLE)); if (interfaceOutput != null && (fake || linkType != LinkTargetType.DYNAMIC_LIBRARY)) { @@ -1026,7 +1026,7 @@ public class CppLinkActionBuilder { * #addLibraries}, and {@link #addLinkstamps}. */ public CppLinkActionBuilder addLinkParams( - CcLinkParams linkParams, RuleErrorConsumer errorListener) { + CcLinkParams linkParams, RuleErrorConsumer errorListener) throws InterruptedException { addLinkopts(linkParams.flattenedLinkopts()); addLibraries(linkParams.getLibraries()); ExtraLinkTimeLibraries extraLinkTimeLibraries = linkParams.getExtraLinkTimeLibraries(); 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 ba76f3e56d..8e0120efe0 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 @@ -823,8 +823,9 @@ public final class CppModel { * * @throws RuleErrorException */ - public CcLinkingOutputs createCcLinkActions(CcCompilationOutputs ccOutputs, - Iterable<Artifact> nonCodeLinkerInputs) throws RuleErrorException { + public CcLinkingOutputs createCcLinkActions( + CcCompilationOutputs ccOutputs, Iterable<Artifact> nonCodeLinkerInputs) + throws RuleErrorException, InterruptedException { // For now only handle static links. Note that the dynamic library link below ignores linkType. // TODO(bazel-team): Either support non-static links or move this check to setLinkType(). Preconditions.checkState( diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoader.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoader.java index 0a15404699..d8fbe78555 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoader.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoader.java @@ -41,14 +41,12 @@ import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.Cross import com.google.protobuf.TextFormat; import com.google.protobuf.TextFormat.ParseException; import com.google.protobuf.UninitializedMessageException; - import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Collection; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; - import javax.annotation.Nullable; /** @@ -171,7 +169,7 @@ public class CrosstoolConfigurationLoader { } private static CrosstoolProto getCrosstoolProtofromBuildFile( - ConfigurationEnvironment env, Label crosstoolTop) { + ConfigurationEnvironment env, Label crosstoolTop) throws InterruptedException { Target target; try { target = env.getTarget(crosstoolTop); @@ -202,7 +200,7 @@ public class CrosstoolConfigurationLoader { private static CrosstoolProto getCrosstoolProtoFromCrosstoolFile( ConfigurationEnvironment env, Label crosstoolTop) - throws IOException, InvalidConfigurationException { + throws IOException, InvalidConfigurationException, InterruptedException { final Path path; try { Package containingPackage = env.getTarget(crosstoolTop.getLocalTargetLabel("BUILD")) @@ -234,7 +232,7 @@ public class CrosstoolConfigurationLoader { private static CrosstoolFile findCrosstoolConfiguration( ConfigurationEnvironment env, Label crosstoolTop) - throws IOException, InvalidConfigurationException { + throws IOException, InvalidConfigurationException, InterruptedException { CrosstoolProto crosstoolProto = getCrosstoolProtofromBuildFile(env, crosstoolTop); if (crosstoolProto == null) { @@ -267,12 +265,11 @@ public class CrosstoolConfigurationLoader { } } - /** - * Reads a crosstool file. - */ + /** Reads a crosstool file. */ @Nullable public static CrosstoolConfigurationLoader.CrosstoolFile readCrosstool( - ConfigurationEnvironment env, Label crosstoolTop) throws InvalidConfigurationException { + ConfigurationEnvironment env, Label crosstoolTop) + throws InvalidConfigurationException, InterruptedException { crosstoolTop = RedirectChaser.followRedirects(env, crosstoolTop, "crosstool_top"); if (crosstoolTop == null) { return null; @@ -400,9 +397,11 @@ public class CrosstoolConfigurationLoader { } public static CrosstoolConfig.CrosstoolRelease getCrosstoolReleaseProto( - ConfigurationEnvironment env, BuildOptions options, - Label crosstoolTop, Function<String, String> cpuTransformer) - throws InvalidConfigurationException { + ConfigurationEnvironment env, + BuildOptions options, + Label crosstoolTop, + Function<String, String> cpuTransformer) + throws InvalidConfigurationException, InterruptedException { CrosstoolConfigurationLoader.CrosstoolFile file = readCrosstool(env, crosstoolTop); // Make sure that we have the requested toolchain in the result. Throw an exception if not. diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/ExtraLinkTimeLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/ExtraLinkTimeLibrary.java index 52b2a0822a..5daeb2deaa 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/ExtraLinkTimeLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/ExtraLinkTimeLibrary.java @@ -32,10 +32,8 @@ import com.google.devtools.build.lib.rules.cpp.LinkerInputs.LibraryToLink; * context. */ public interface ExtraLinkTimeLibrary { - /** - * Build the LibraryToLink inputs to pass to the C++ linker. - */ - NestedSet<LibraryToLink> buildLibraries(RuleContext context); + /** Build the LibraryToLink inputs to pass to the C++ linker. */ + NestedSet<LibraryToLink> buildLibraries(RuleContext context) throws InterruptedException; /** * Get a new Builder for this ExtraLinkTimeLibrary class. This acts diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupport.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupport.java index 747ea822e0..db3fbf1815 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupport.java @@ -38,7 +38,6 @@ import com.google.devtools.build.lib.vfs.RootedPath; import com.google.devtools.build.lib.vfs.ZipFileSystem; import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoMode; import com.google.devtools.build.skyframe.SkyFunction; - import java.io.IOException; import java.util.Collection; import java.util.zip.ZipException; @@ -233,11 +232,14 @@ public class FdoSupport { return fdoRoot; } - /** - * Creates an initialized {@link FdoSupport} instance. - */ - static FdoSupport create(SkyFunction.Environment env, PathFragment fdoInstrument, - Path fdoProfile, LipoMode lipoMode, Path execRoot) throws IOException, FdoException { + /** Creates an initialized {@link FdoSupport} instance. */ + static FdoSupport create( + SkyFunction.Environment env, + PathFragment fdoInstrument, + Path fdoProfile, + LipoMode lipoMode, + Path execRoot) + throws IOException, FdoException, InterruptedException { FdoMode fdoMode; if (fdoProfile != null && isAutoFdo(fdoProfile.getBaseName())) { fdoMode = FdoMode.AUTO_FDO; |