aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google
diff options
context:
space:
mode:
authorGravatar cpeyser <cpeyser@google.com>2018-02-14 13:14:13 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-02-14 13:16:13 -0800
commita84e9e4dcc4bdc1a3b3f39605421ff7a451894d6 (patch)
tree91b4736a97697d09ff45c5734a7902444f4849ea /src/main/java/com/google
parent27458be9cd752dd1dfd4d2c8f1bdc421bdbf16bb (diff)
Add a CODEC for CppCompileAction.
PiperOrigin-RevId: 185733313
Diffstat (limited to 'src/main/java/com/google')
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/ActionOwner.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/platform/BUILD1
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintSettingInfo.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfo.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformInfo.java24
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppSemantics.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/collect/CollectionUtils.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/Info.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java17
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java144
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/IncludeProcessing.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/IncludeScannable.java15
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/NoProcessing.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/BUILD1
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/HeaderThinning.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetKey.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodec.java2
20 files changed, 202 insertions, 73 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java b/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java
index 8e470fa033..5aba95bec6 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java
@@ -29,6 +29,7 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.packages.AspectDescriptor;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
@@ -77,7 +78,7 @@ public abstract class AbstractAction implements Action, SkylarkValue {
* AbstractAction itself. The appropriate getter methods should be used instead. This has to be
* done due to the fact that the getter methods can be overridden in subclasses.
*/
- private final ActionOwner owner;
+ @VisibleForSerialization protected final ActionOwner owner;
/**
* Tools are a subset of inputs and used by the WorkerSpawnStrategy to determine whether a
@@ -103,11 +104,12 @@ public abstract class AbstractAction implements Action, SkylarkValue {
// The variable inputs is non-final only so that actions that discover their inputs can modify it.
@GuardedBy("this")
- private Iterable<Artifact> inputs;
+ @VisibleForSerialization
+ protected Iterable<Artifact> inputs;
protected final ActionEnvironment env;
private final RunfilesSupplier runfilesSupplier;
- private final ImmutableSet<Artifact> outputs;
+ @VisibleForSerialization protected final ImmutableSet<Artifact> outputs;
private String cachedKey;
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionOwner.java b/src/main/java/com/google/devtools/build/lib/actions/ActionOwner.java
index 85b2574eb9..caa1859d77 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ActionOwner.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionOwner.java
@@ -21,6 +21,8 @@ import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.packages.AspectDescriptor;
+import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import javax.annotation.Nullable;
/**
@@ -31,8 +33,11 @@ import javax.annotation.Nullable;
* analysis and actions packages, the RuleConfiguredTarget provides an instance of this class.
*/
@AutoValue
+@AutoCodec
@Immutable
public abstract class ActionOwner {
+ public static final ObjectCodec<ActionOwner> CODEC = new ActionOwner_AutoCodec();
+
/** An action owner for special cases. Usage is strongly discouraged. */
public static final ActionOwner SYSTEM_ACTION_OWNER =
ActionOwner.create(
@@ -46,6 +51,7 @@ public abstract class ActionOwner {
null,
null);
+ @AutoCodec.Instantiator
public static ActionOwner create(
@Nullable Label label,
ImmutableList<AspectDescriptor> aspectDescriptors,
@@ -80,7 +86,7 @@ public abstract class ActionOwner {
/** Returns the configuration's mnemonic. */
@Nullable
- public abstract String getConfigurationMnemonic();
+ public abstract String getMnemonic();
/**
* Returns the short cache key for the configuration of the action owner.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/BUILD b/src/main/java/com/google/devtools/build/lib/analysis/platform/BUILD
index acd0618a1a..b36b478b73 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/platform/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/BUILD
@@ -23,6 +23,7 @@ java_library(
"//src/main/java/com/google/devtools/build/lib:skylarkinterface",
"//src/main/java/com/google/devtools/build/lib:transitive-info-provider",
"//src/main/java/com/google/devtools/build/lib/concurrent",
+ "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
"//third_party:auto_value",
"//third_party:guava",
],
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintSettingInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintSettingInfo.java
index 9554692dfc..4b3f2f44f7 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintSettingInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintSettingInfo.java
@@ -21,6 +21,9 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.packages.NativeProvider;
+import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
@@ -35,7 +38,10 @@ import com.google.devtools.build.lib.syntax.SkylarkType;
category = SkylarkModuleCategory.PROVIDER
)
@Immutable
+@AutoCodec
public class ConstraintSettingInfo extends NativeInfo {
+ public static final ObjectCodec<ConstraintSettingInfo> CODEC =
+ new ConstraintSettingInfo_AutoCodec();
/** Name used in Skylark for accessing this provider. */
public static final String SKYLARK_NAME = "ConstraintSettingInfo";
@@ -67,7 +73,8 @@ public class ConstraintSettingInfo extends NativeInfo {
private final Label label;
- private ConstraintSettingInfo(Label label, Location location) {
+ @VisibleForSerialization
+ ConstraintSettingInfo(Label label, Location location) {
super(PROVIDER, ImmutableMap.<String, Object>of("label", label), location);
this.label = label;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfo.java
index d9b167bf1a..84f3544428 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfo.java
@@ -21,6 +21,9 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.packages.NativeProvider;
+import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
@@ -35,7 +38,9 @@ import com.google.devtools.build.lib.syntax.SkylarkType;
category = SkylarkModuleCategory.PROVIDER
)
@Immutable
+@AutoCodec
public class ConstraintValueInfo extends NativeInfo {
+ public static final ObjectCodec<ConstraintValueInfo> CODEC = new ConstraintValueInfo_AutoCodec();
/** Name used in Skylark for accessing this provider. */
public static final String SKYLARK_NAME = "ConstraintValueInfo";
@@ -70,7 +75,8 @@ public class ConstraintValueInfo extends NativeInfo {
private final ConstraintSettingInfo constraint;
private final Label label;
- private ConstraintValueInfo(ConstraintSettingInfo constraint, Label label, Location location) {
+ @VisibleForSerialization
+ ConstraintValueInfo(ConstraintSettingInfo constraint, Label label, Location location) {
super(
SKYLARK_CONSTRUCTOR,
ImmutableMap.<String, Object>of(
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformInfo.java
index bfee814b6c..3b3462d420 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformInfo.java
@@ -29,6 +29,9 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.packages.NativeProvider;
+import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
@@ -49,7 +52,9 @@ import javax.annotation.Nullable;
category = SkylarkModuleCategory.PROVIDER
)
@Immutable
+@AutoCodec
public class PlatformInfo extends NativeInfo {
+ public static final ObjectCodec<PlatformInfo> CODEC = new PlatformInfo_AutoCodec();
/** Name used in Skylark for accessing this provider. */
public static final String SKYLARK_NAME = "PlatformInfo";
@@ -99,27 +104,36 @@ public class PlatformInfo extends NativeInfo {
private final ImmutableMap<ConstraintSettingInfo, ConstraintValueInfo> constraints;
private final String remoteExecutionProperties;
- private PlatformInfo(
+ @AutoCodec.Instantiator
+ @VisibleForSerialization
+ PlatformInfo(
Label label,
- ImmutableList<ConstraintValueInfo> constraints,
+ ImmutableMap<ConstraintSettingInfo, ConstraintValueInfo> constraints,
String remoteExecutionProperties,
Location location) {
super(
SKYLARK_CONSTRUCTOR,
ImmutableMap.<String, Object>of(
"label", label,
- "constraints", constraints),
+ "constraints", constraints.values().asList()),
location);
this.label = label;
+ this.constraints = constraints;
this.remoteExecutionProperties = remoteExecutionProperties;
+ }
+ static PlatformInfo create(
+ Label label,
+ ImmutableList<ConstraintValueInfo> constraints,
+ String remoteExecutionProperties,
+ Location location) {
ImmutableMap.Builder<ConstraintSettingInfo, ConstraintValueInfo> constraintsBuilder =
new ImmutableMap.Builder<>();
for (ConstraintValueInfo constraint : constraints) {
constraintsBuilder.put(constraint.constraint(), constraint);
}
- this.constraints = constraintsBuilder.build();
+ return new PlatformInfo(label, constraintsBuilder.build(), remoteExecutionProperties, location);
}
@SkylarkCallable(
@@ -243,7 +257,7 @@ public class PlatformInfo extends NativeInfo {
*/
public PlatformInfo build() throws DuplicateConstraintException {
ImmutableList<ConstraintValueInfo> validatedConstraints = validateConstraints(constraints);
- return new PlatformInfo(label, validatedConstraints, remoteExecutionProperties, location);
+ return PlatformInfo.create(label, validatedConstraints, remoteExecutionProperties, location);
}
public static ImmutableList<ConstraintValueInfo> validateConstraints(
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppSemantics.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppSemantics.java
index d497113bf3..b15c523200 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppSemantics.java
@@ -39,7 +39,7 @@ public class BazelCppSemantics implements AspectLegalCppSemantics {
private final IncludeProcessing includeProcessing;
private BazelCppSemantics() {
- this.includeProcessing = new NoProcessing();
+ this.includeProcessing = NoProcessing.INSTANCE;
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/collect/CollectionUtils.java b/src/main/java/com/google/devtools/build/lib/collect/CollectionUtils.java
index 369ef52274..9198ba2ba7 100644
--- a/src/main/java/com/google/devtools/build/lib/collect/CollectionUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/collect/CollectionUtils.java
@@ -13,7 +13,7 @@
// limitations under the License.
package com.google.devtools.build.lib.collect;
-import static com.google.common.collect.ImmutableList.toImmutableList;
+import static com.google.common.collect.ImmutableSet.toImmutableSet;
import static java.util.stream.Collectors.toCollection;
import com.google.common.base.Preconditions;
@@ -106,12 +106,11 @@ public final class CollectionUtils {
}
/**
- * Returns an immutable list of all non-null parameters in the order in which
- * they are specified.
+ * Returns an immutable set of all non-null parameters in the order in which they are specified.
*/
@SuppressWarnings("unchecked")
- public static <T> ImmutableList<T> asListWithoutNulls(T... elements) {
- return Arrays.stream(elements).filter(Objects::nonNull).collect(toImmutableList());
+ public static <T> ImmutableSet<T> asSetWithoutNulls(T... elements) {
+ return Arrays.stream(elements).filter(Objects::nonNull).collect(toImmutableSet());
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Info.java b/src/main/java/com/google/devtools/build/lib/packages/Info.java
index 33b8c95d13..e50ab26e81 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Info.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Info.java
@@ -21,6 +21,7 @@ import com.google.common.collect.ImmutableCollection;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Ordering;
import com.google.devtools.build.lib.events.Location;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
@@ -57,7 +58,7 @@ public abstract class Info implements ClassObject, SkylarkValue, Serializable {
*
* <p>Built-in provider instances may use {@link Location#BUILTIN}.
*/
- private final Location location;
+ @VisibleForSerialization protected final Location location;
/**
* Constructs an {@link Info}.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java
index 0270ff6237..281f2d0af8 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java
@@ -167,15 +167,18 @@ public class CcToolchainFeatures implements Serializable {
return Objects.hash(text);
}
}
-
- /**
- * A chunk of a string value into which a variable should be expanded.
- */
+
+ /** A chunk of a string value into which a variable should be expanded. */
@Immutable
- private static class VariableChunk implements StringChunk, Serializable {
+ @AutoCodec
+ static class VariableChunk implements StringChunk, Serializable {
+ public static final ObjectCodec<VariableChunk> CODEC =
+ new CcToolchainFeatures_VariableChunk_AutoCodec();
+
private final String variableName;
-
- private VariableChunk(String variableName) {
+
+ @VisibleForSerialization
+ VariableChunk(String variableName) {
this.variableName = variableName;
}
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 e3a92ec93d..273974b978 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
@@ -86,9 +86,11 @@ import java.util.UUID;
import javax.annotation.Nullable;
/** Action that represents some kind of C++ compilation step. */
+@AutoCodec
@ThreadCompatible
public class CppCompileAction extends AbstractAction
implements IncludeScannable, ExecutionInfoSpecifier, CommandAction {
+ public static final ObjectCodec<CppCompileAction> CODEC = new CppCompileAction_AutoCodec();
private static final PathFragment BUILD_PATH_FRAGMENT = PathFragment.create("BUILD");
@@ -259,7 +261,7 @@ public class CppCompileAction extends AbstractAction
* @param cppSemantics C++ compilation semantics
* @param cppProvider - CcToolchainProvider with configuration-dependent information.
*/
- protected CppCompileAction(
+ CppCompileAction(
ActionOwner owner,
NestedSet<Artifact> allInputs,
FeatureConfiguration featureConfiguration,
@@ -291,61 +293,125 @@ public class CppCompileAction extends AbstractAction
String actionName,
CppSemantics cppSemantics,
CcToolchainProvider cppProvider) {
- super(
+ this(
owner,
allInputs,
- CollectionUtils.asListWithoutNulls(
+ CollectionUtils.asSetWithoutNulls(
outputFile,
- (dotdFile == null ? null : dotdFile.artifact()),
+ dotdFile == null ? null : dotdFile.artifact(),
gcnoFile,
dwoFile,
- ltoIndexingFile));
+ ltoIndexingFile),
+ localShellEnvironment,
+ Preconditions.checkNotNull(outputFile),
+ sourceFile,
+ optionalSourceFile,
+ // We do not need to include the middleman artifact since it is a generated
+ // artifact and will definitely exist prior to this action execution.
+ mandatoryInputs,
+ prunableInputs,
+ // inputsKnown begins as the logical negation of shouldScanIncludes.
+ // When scanning includes, the inputs begin as not known, and become
+ // known after inclusion scanning. When *not* scanning includes,
+ // the inputs are as declared, hence known, and remain so.
+ shouldScanIncludes,
+ shouldPruneModules,
+ usePic,
+ useHeaderModules,
+ isStrictSystemIncludes,
+ context,
+ lipoScannables,
+ builtinIncludeFiles,
+ ImmutableList.copyOf(additionalIncludeScanningRoots),
+ CompileCommandLine.builder(
+ sourceFile, coptsFilter, actionName, crosstoolTopPathFragment, dotdFile)
+ .setFeatureConfiguration(featureConfiguration)
+ .setVariables(variables)
+ .build(),
+ executionInfo,
+ environment,
+ actionName,
+ featureConfiguration,
+ actionClassId,
+ shouldScanIncludes || cppSemantics.needsDotdInputPruning(),
+ ImmutableList.copyOf(cppProvider.getBuiltInIncludeDirectories()),
+ /*additionalInputs=*/ null,
+ /*usedModules=*/ null,
+ /*topLevelModules=*/ null,
+ /*overwrittenVariables=*/ null,
+ cppSemantics.needsDotdInputPruning(),
+ cppSemantics.needsIncludeValidation(),
+ cppSemantics.getIncludeProcessing());
+ Preconditions.checkArgument(!shouldPruneModules || shouldScanIncludes);
+ }
+
+ @AutoCodec.Instantiator
+ @VisibleForSerialization
+ CppCompileAction(
+ ActionOwner owner,
+ NestedSet<Artifact> inputs,
+ ImmutableSet<Artifact> outputs,
+ ImmutableMap<String, String> localShellEnvironment,
+ Artifact outputFile,
+ Artifact sourceFile,
+ Artifact optionalSourceFile,
+ NestedSet<Artifact> mandatoryInputs,
+ NestedSet<Artifact> prunableInputs,
+ boolean shouldScanIncludes,
+ boolean shouldPruneModules,
+ boolean usePic,
+ boolean useHeaderModules,
+ boolean isStrictSystemIncludes,
+ CppCompilationContext context,
+ Iterable<IncludeScannable> lipoScannables,
+ ImmutableList<Artifact> builtinIncludeFiles,
+ ImmutableList<Artifact> additionalIncludeScanningRoots,
+ CompileCommandLine compileCommandLine,
+ ImmutableMap<String, String> executionInfo,
+ ImmutableMap<String, String> environment,
+ String actionName,
+ FeatureConfiguration featureConfiguration,
+ UUID actionClassId,
+ boolean discoversInputs,
+ ImmutableList<PathFragment> builtInIncludeDirectories,
+ Iterable<Artifact> additionalInputs,
+ Collection<Artifact> usedModules,
+ Iterable<Artifact> topLevelModules,
+ CcToolchainFeatures.Variables overwrittenVariables,
+ boolean needsDotdInputPruning,
+ boolean needsIncludeValidation,
+ IncludeProcessing includeProcessing) {
+ super(owner, inputs, outputs);
this.localShellEnvironment = localShellEnvironment;
+ this.outputFile = outputFile;
this.sourceFile = sourceFile;
- this.outputFile = Preconditions.checkNotNull(outputFile);
this.optionalSourceFile = optionalSourceFile;
- this.context = context;
- this.featureConfiguration = featureConfiguration;
- // inputsKnown begins as the logical negation of shouldScanIncludes.
- // When scanning includes, the inputs begin as not known, and become
- // known after inclusion scanning. When *not* scanning includes,
- // the inputs are as declared, hence known, and remain so.
+ this.mandatoryInputs = mandatoryInputs;
+ this.prunableInputs = prunableInputs;
this.shouldScanIncludes = shouldScanIncludes;
this.shouldPruneModules = shouldPruneModules;
- // We can only prune modules if include scanning is enabled.
- Preconditions.checkArgument(!shouldPruneModules || shouldScanIncludes, this);
this.usePic = usePic;
this.useHeaderModules = useHeaderModules;
this.isStrictSystemIncludes = isStrictSystemIncludes;
- this.discoversInputs = shouldScanIncludes || cppSemantics.needsDotdInputPruning();
- this.compileCommandLine =
- CompileCommandLine.builder(
- sourceFile,
- coptsFilter,
- actionName,
- crosstoolTopPathFragment,
- dotdFile)
- .setFeatureConfiguration(featureConfiguration)
- .setVariables(variables)
- .build();
+ this.context = context;
this.lipoScannables = lipoScannables;
- this.actionClassId = actionClassId;
+ this.builtinIncludeFiles = builtinIncludeFiles;
+ this.additionalIncludeScanningRoots = additionalIncludeScanningRoots;
+ this.compileCommandLine = compileCommandLine;
this.executionInfo = executionInfo;
this.environment = environment;
this.actionName = actionName;
-
- // We do not need to include the middleman artifact since it is a generated
- // artifact and will definitely exist prior to this action execution.
- this.mandatoryInputs = mandatoryInputs;
- this.prunableInputs = prunableInputs;
- this.builtinIncludeFiles = builtinIncludeFiles;
- this.needsDotdInputPruning = cppSemantics.needsDotdInputPruning();
- this.needsIncludeValidation = cppSemantics.needsIncludeValidation();
- this.includeProcessing = cppSemantics.getIncludeProcessing();
-
- this.additionalIncludeScanningRoots = ImmutableList.copyOf(additionalIncludeScanningRoots);
- this.builtInIncludeDirectories =
- ImmutableList.copyOf(cppProvider.getBuiltInIncludeDirectories());
+ this.featureConfiguration = featureConfiguration;
+ this.needsDotdInputPruning = needsDotdInputPruning;
+ this.needsIncludeValidation = needsIncludeValidation;
+ this.includeProcessing = includeProcessing;
+ this.actionClassId = actionClassId;
+ this.discoversInputs = discoversInputs;
+ this.builtInIncludeDirectories = builtInIncludeDirectories;
+ this.additionalInputs = additionalInputs;
+ this.usedModules = usedModules;
+ this.topLevelModules = topLevelModules;
+ this.overwrittenVariables = overwrittenVariables;
}
/**
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 46c9d92a81..c965bba2dd 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
@@ -1179,7 +1179,7 @@ public class CppLinkActionBuilder {
return new ImmutableList.Builder<Artifact>()
.add(primaryOutput)
.addAll(outputList)
- .addAll(CollectionUtils.asListWithoutNulls(outputs))
+ .addAll(CollectionUtils.asSetWithoutNulls(outputs))
.build();
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/IncludeProcessing.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/IncludeProcessing.java
index e9721a5a3d..6bd958930b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/IncludeProcessing.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/IncludeProcessing.java
@@ -18,10 +18,16 @@ import com.google.devtools.build.lib.actions.ActionExecutionContext;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.ExecException;
import com.google.devtools.build.lib.rules.cpp.IncludeScanner.IncludeScannerSupplier;
+import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.Strategy;
import javax.annotation.Nullable;
/** Used as an interface to thin header inputs to compile actions for C++-like compiles. */
+@AutoCodec(strategy = Strategy.POLYMORPHIC)
public interface IncludeProcessing {
+ ObjectCodec<IncludeProcessing> CODEC = new IncludeProcessing_AutoCodec();
+
/** Performs include processing actions and returns the processed set of resulting headers. */
Iterable<Artifact> determineAdditionalInputs(
@Nullable IncludeScannerSupplier includeScannerSupplier,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/IncludeScannable.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/IncludeScannable.java
index 2c625901ea..71c9ce406b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/IncludeScannable.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/IncludeScannable.java
@@ -16,22 +16,25 @@ package com.google.devtools.build.lib.rules.cpp;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
+import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.Strategy;
import com.google.devtools.build.lib.vfs.PathFragment;
-
import java.util.Collection;
import java.util.List;
import java.util.Map;
-
import javax.annotation.Nullable;
/**
- * To be implemented by actions (such as C++ compilation steps) whose inputs
- * can be scanned to discover other implicit inputs (such as C++ header files).
+ * To be implemented by actions (such as C++ compilation steps) whose inputs can be scanned to
+ * discover other implicit inputs (such as C++ header files).
*
- * <p>This is useful for remote execution strategies to be able to compute the
- * complete set of files that must be distributed in order to execute such an action.
+ * <p>This is useful for remote execution strategies to be able to compute the complete set of files
+ * that must be distributed in order to execute such an action.
*/
+@AutoCodec(strategy = Strategy.POLYMORPHIC)
public interface IncludeScannable {
+ public static final ObjectCodec<IncludeScannable> CODEC = new IncludeScannable_AutoCodec();
/**
* Returns the built-in list of system include paths for the toolchain compiler. All paths in this
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/NoProcessing.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/NoProcessing.java
index 85bfcd9997..954214994a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/NoProcessing.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/NoProcessing.java
@@ -18,10 +18,18 @@ import com.google.devtools.build.lib.actions.ActionExecutionContext;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.ExecException;
import com.google.devtools.build.lib.rules.cpp.IncludeScanner.IncludeScannerSupplier;
+import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.Strategy;
import javax.annotation.Nullable;
/** Always performs no include processing and returns null. */
+@AutoCodec(strategy = Strategy.SINGLETON)
public class NoProcessing implements IncludeProcessing {
+ public static final ObjectCodec<NoProcessing> CODEC = new NoProcessing_AutoCodec();
+
+ public static final NoProcessing INSTANCE = new NoProcessing();
+
@Override
public Iterable<Artifact> determineAdditionalInputs(
@Nullable IncludeScannerSupplier includeScannerSupplier,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/BUILD b/src/main/java/com/google/devtools/build/lib/rules/objc/BUILD
index c9022b5d3f..d6c8cf42ab 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/BUILD
@@ -25,6 +25,7 @@ java_library(
"//src/main/java/com/google/devtools/build/lib/analysis/platform",
"//src/main/java/com/google/devtools/build/lib/collect",
"//src/main/java/com/google/devtools/build/lib/collect/nestedset",
+ "//src/main/java/com/google/devtools/build/lib/collect/nestedset:serialization",
"//src/main/java/com/google/devtools/build/lib/concurrent",
"//src/main/java/com/google/devtools/build/lib/profiler",
"//src/main/java/com/google/devtools/build/lib/rules/apple",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
index b6bd529655..2a69298e45 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
@@ -300,7 +300,7 @@ public class CompilationSupport {
}
return new HeaderThinning(potentialInputs);
} else {
- return new NoProcessing();
+ return NoProcessing.INSTANCE;
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/HeaderThinning.java b/src/main/java/com/google/devtools/build/lib/rules/objc/HeaderThinning.java
index dcd8bca663..3291a405f4 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/HeaderThinning.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/HeaderThinning.java
@@ -24,6 +24,8 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.rules.cpp.CppCompileAction;
import com.google.devtools.build.lib.rules.cpp.IncludeProcessing;
import com.google.devtools.build.lib.rules.cpp.IncludeScanner.IncludeScannerSupplier;
+import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.io.IOException;
@@ -42,7 +44,9 @@ import javax.annotation.Nullable;
* <p>Reads the .headers_list output file if one was generated for the actions source file and
* returns the Artifact objects associated with the headers that were found.
*/
+@AutoCodec
public class HeaderThinning implements IncludeProcessing {
+ public static final ObjectCodec<HeaderThinning> CODEC = new HeaderThinning_AutoCodec();
private final Iterable<Artifact> potentialInputs;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetKey.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetKey.java
index 33d29d3461..8eee47800c 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetKey.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetKey.java
@@ -172,6 +172,8 @@ public class ConfiguredTargetKey extends ActionLookupKey {
}
private static class HostConfiguredTargetKey extends ConfiguredTargetKey {
+ public static final ObjectCodec<ConfiguredTargetKey> CODEC = ConfiguredTargetKey.CODEC;
+
private HostConfiguredTargetKey(
Label label, @Nullable BuildConfigurationValue.Key configurationKey) {
super(label, configurationKey);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodec.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodec.java
index b627952a2f..8476298243 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodec.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodec.java
@@ -94,6 +94,6 @@ public @interface AutoCodec {
*
* <p>TODO(janakr): Add an ErrorProne checker to enforce this.
*/
- @Target({ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR})
+ @Target({ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.FIELD})
@interface VisibleForSerialization {}
}