aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2017-08-25 04:06:17 +0200
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2017-08-25 12:54:21 +0200
commite2bfb4bb4017b9a50b6e00b84d2fc52856323592 (patch)
tree330f938189fd33b2e5dd6480c5b2fcda32fe85ef /src/main/java/com/google/devtools
parentb91ef056ce096bfe9f995080264980e418dada80 (diff)
Automated rollback of commit 1af9b1e2238c3b43a2b66233495ecf7b6ef4dcab.
*** Reason for rollback *** Reason for previous rollback was identified as being a memory regression causing some cases to hit java heap limit. Proposal is to increase java heap limit to compensate and just go with the original change. *** Original change description *** Automated rollback of commit 6cfffdf37e11018c7e6e2cabc90440d6d29c819b. PiperOrigin-RevId: 166426608
Diffstat (limited to 'src/main/java/com/google/devtools')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java48
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java19
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/LegacyCompilationSupport.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCppSemantics.java15
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java34
7 files changed, 87 insertions, 37 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java
index e8549a6e7f..b31f682c93 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java
@@ -115,7 +115,8 @@ public class AppleStaticLibrary implements RuleConfiguredTargetFactory {
protosToAvoid,
ImmutableList.<ProtoSourcesProvider>of(),
objcProtoProviders,
- ProtobufSupport.getTransitivePortableProtoFilters(objcProtoProviders))
+ ProtobufSupport.getTransitivePortableProtoFilters(objcProtoProviders),
+ childConfigurationsAndToolchains.get(childConfig))
.registerGenerationActions()
.registerCompilationActions();
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 c9716a5902..b787ebcaf5 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
@@ -301,6 +301,7 @@ public abstract class CompilationSupport {
protected final IntermediateArtifacts intermediateArtifacts;
protected final boolean useDeps;
protected final Map<String, NestedSet<Artifact>> outputGroupCollector;
+ protected final CcToolchainProvider toolchain;
protected final boolean isTestRule;
protected final boolean usePch;
@@ -324,6 +325,7 @@ public abstract class CompilationSupport {
CompilationAttributes compilationAttributes,
boolean useDeps,
Map<String, NestedSet<Artifact>> outputGroupCollector,
+ CcToolchainProvider toolchain,
boolean isTestRule,
boolean usePch) {
this.ruleContext = ruleContext;
@@ -336,6 +338,18 @@ public abstract class CompilationSupport {
this.isTestRule = isTestRule;
this.outputGroupCollector = outputGroupCollector;
this.usePch = usePch;
+ // TODO(b/62143697): Remove this check once all rules are using the crosstool support.
+ if (ruleContext
+ .attributes()
+ .has(CcToolchain.CC_TOOLCHAIN_DEFAULT_ATTRIBUTE_NAME, BuildType.LABEL)) {
+ if (toolchain == null) {
+ toolchain = CppHelper.getToolchainUsingDefaultCcToolchainAttribute(ruleContext);
+ }
+ this.toolchain = toolchain;
+ } else {
+ // Since the rule context doesn't have a toolchain at all, ignore any provided override.
+ this.toolchain = null;
+ }
}
/** Builder for {@link CompilationSupport} */
@@ -347,6 +361,7 @@ public abstract class CompilationSupport {
private boolean useDeps = true;
private Map<String, NestedSet<Artifact>> outputGroupCollector;
private boolean isObjcLibrary = false;
+ private CcToolchainProvider toolchain;
private boolean isTestRule = false;
private boolean usePch = true;
@@ -423,6 +438,17 @@ public abstract class CompilationSupport {
}
/**
+ * Sets {@link CcToolchainProvider} for the calling target.
+ *
+ * <p>This is needed if it can't correctly be inferred directly from the rule context. Setting
+ * to null causes the default to be used as if this was never called.
+ */
+ public Builder setToolchainProvider(CcToolchainProvider toolchain) {
+ this.toolchain = toolchain;
+ return this;
+ }
+
+ /**
* Returns a {@link CompilationSupport} instance. This is either a {@link
* CrosstoolCompilationSupport} or {@link LegacyCompilationSupport} depending on the value of
* --experimental_objc_crosstool.
@@ -458,6 +484,7 @@ public abstract class CompilationSupport {
compilationAttributes,
useDeps,
outputGroupCollector,
+ toolchain,
isTestRule,
usePch);
} else {
@@ -468,6 +495,7 @@ public abstract class CompilationSupport {
compilationAttributes,
useDeps,
outputGroupCollector,
+ toolchain,
isTestRule,
usePch);
}
@@ -490,7 +518,7 @@ public abstract class CompilationSupport {
objcProvider,
ExtraCompileArgs.NONE,
ImmutableList.<PathFragment>of(),
- maybeGetCcToolchain(),
+ toolchain,
maybeGetFdoSupport());
}
@@ -571,7 +599,7 @@ public abstract class CompilationSupport {
return registerFullyLinkAction(
objcProvider,
outputArchive,
- maybeGetCcToolchain(),
+ toolchain,
maybeGetFdoSupport());
}
@@ -629,7 +657,7 @@ public abstract class CompilationSupport {
objcProvider,
inputArtifacts,
outputArchive,
- maybeGetCcToolchain(),
+ toolchain,
maybeGetFdoSupport());
}
@@ -758,7 +786,7 @@ public abstract class CompilationSupport {
common.getObjcProvider(),
extraCompileArgs,
priorityHeaders,
- maybeGetCcToolchain(),
+ toolchain,
maybeGetFdoSupport());
}
return this;
@@ -1444,18 +1472,6 @@ public abstract class CompilationSupport {
}
@Nullable
- private CcToolchainProvider maybeGetCcToolchain() {
- // TODO(rduan): Remove this check once all rules are using the crosstool support.
- if (ruleContext
- .attributes()
- .has(CcToolchain.CC_TOOLCHAIN_DEFAULT_ATTRIBUTE_NAME, BuildType.LABEL)) {
- return CppHelper.getToolchainUsingDefaultCcToolchainAttribute(ruleContext);
- } else {
- return null;
- }
- }
-
- @Nullable
private FdoSupportProvider maybeGetFdoSupport() {
// TODO(rduan): Remove this check once all rules are using the crosstool support.
if (ruleContext
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java
index e0369a11d2..193b3eeb1b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java
@@ -137,6 +137,7 @@ public class CrosstoolCompilationSupport extends CompilationSupport {
CompilationAttributes.Builder.fromRuleContext(ruleContext).build(),
/*useDeps=*/ true,
outputGroupCollector,
+ null,
/*isTestRule=*/ false,
/*usePch=*/ true);
}
@@ -149,6 +150,7 @@ public class CrosstoolCompilationSupport extends CompilationSupport {
* @param intermediateArtifacts IntermediateArtifacts for deriving artifact paths
* @param compilationAttributes attributes of the calling target
* @param useDeps true if deps should be used
+ * @param toolchain if not null overrides the default toolchain from the ruleContext.
* @param usePch true if pch should be used
*/
public CrosstoolCompilationSupport(
@@ -158,6 +160,7 @@ public class CrosstoolCompilationSupport extends CompilationSupport {
CompilationAttributes compilationAttributes,
boolean useDeps,
Map<String, NestedSet<Artifact>> outputGroupCollector,
+ CcToolchainProvider toolchain,
boolean isTestRule,
boolean usePch) {
super(
@@ -167,6 +170,7 @@ public class CrosstoolCompilationSupport extends CompilationSupport {
compilationAttributes,
useDeps,
outputGroupCollector,
+ toolchain,
isTestRule,
usePch);
}
@@ -194,7 +198,7 @@ public class CrosstoolCompilationSupport extends CompilationSupport {
// TODO(b/30783125): Signal the need for this action in the CROSSTOOL.
registerObjFilelistAction(getObjFiles(compilationArtifacts, intermediateArtifacts), objList);
-
+
extension.addVariableCategory(VariableCategory.ARCHIVE_VARIABLES);
helper =
@@ -204,7 +208,8 @@ public class CrosstoolCompilationSupport extends CompilationSupport {
extension.build(),
extraCompileArgs,
ccToolchain,
- fdoSupport)
+ fdoSupport,
+ priorityHeaders)
.setLinkType(LinkTargetType.OBJC_ARCHIVE)
.addLinkActionInput(objList);
} else {
@@ -215,7 +220,8 @@ public class CrosstoolCompilationSupport extends CompilationSupport {
extension.build(),
extraCompileArgs,
ccToolchain,
- fdoSupport);
+ fdoSupport,
+ priorityHeaders);
}
Info info = helper.build();
@@ -405,7 +411,8 @@ public class CrosstoolCompilationSupport extends CompilationSupport {
VariablesExtension extension,
ExtraCompileArgs extraCompileArgs,
CcToolchainProvider ccToolchain,
- FdoSupportProvider fdoSupport) {
+ FdoSupportProvider fdoSupport,
+ Iterable<PathFragment> priorityHeaders) {
PrecompiledFiles precompiledFiles = new PrecompiledFiles(ruleContext);
Collection<Artifact> arcSources = ImmutableSortedSet.copyOf(compilationArtifacts.getSrcs());
Collection<Artifact> nonArcSources =
@@ -424,7 +431,8 @@ public class CrosstoolCompilationSupport extends CompilationSupport {
createIncludeProcessing(privateHdrs, objcProvider, pchHdr),
ruleContext.getFragment(ObjcConfiguration.class),
isHeaderThinningEnabled(),
- intermediateArtifacts);
+ intermediateArtifacts,
+ buildConfiguration);
CcLibraryHelper result =
new CcLibraryHelper(
ruleContext,
@@ -455,6 +463,7 @@ public class CrosstoolCompilationSupport extends CompilationSupport {
.getCoptsForCompilationMode())
.addAll(extraCompileArgs)
.build())
+ .addIncludeDirs(priorityHeaders)
.addIncludeDirs(objcProvider.get(INCLUDE))
.addSystemIncludeDirs(objcProvider.get(INCLUDE_SYSTEM))
.setCppModuleMap(intermediateArtifacts.moduleMap())
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/LegacyCompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/LegacyCompilationSupport.java
index 3b09fc991f..e65b5597f9 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/LegacyCompilationSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/LegacyCompilationSupport.java
@@ -149,6 +149,7 @@ public class LegacyCompilationSupport extends CompilationSupport {
CompilationAttributes compilationAttributes,
boolean useDeps,
Map<String, NestedSet<Artifact>> outputGroupCollector,
+ CcToolchainProvider toolchain,
boolean isTestRule,
boolean usePch) {
super(
@@ -158,6 +159,7 @@ public class LegacyCompilationSupport extends CompilationSupport {
compilationAttributes,
useDeps,
outputGroupCollector,
+ toolchain,
isTestRule,
usePch);
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java
index 27e050d01a..1d88318d13 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java
@@ -245,7 +245,8 @@ public class MultiArchBinarySupport {
protosToAvoid,
ImmutableList.<ProtoSourcesProvider>of(),
objcProtoProviders,
- ProtobufSupport.getTransitivePortableProtoFilters(objcProtoProviders))
+ ProtobufSupport.getTransitivePortableProtoFilters(objcProtoProviders),
+ childConfigurationsAndToolchains.get(childConfig))
.registerGenerationActions()
.registerCompilationActions();
protosObjcProvider = protoSupport.getObjcProvider();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCppSemantics.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCppSemantics.java
index 9dc7fc98ba..27f920b103 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCppSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCppSemantics.java
@@ -22,6 +22,7 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.RuleContext;
+import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.rules.cpp.CppCompilationContext.Builder;
import com.google.devtools.build.lib.rules.cpp.CppCompileActionBuilder;
@@ -46,6 +47,7 @@ public class ObjcCppSemantics implements CppSemantics {
private final ObjcConfiguration config;
private final boolean isHeaderThinningEnabled;
private final IntermediateArtifacts intermediateArtifacts;
+ private final BuildConfiguration buildConfiguration;
/**
* Set of {@link com.google.devtools.build.lib.util.FileType} of source artifacts that are
@@ -69,18 +71,21 @@ public class ObjcCppSemantics implements CppSemantics {
* @param isHeaderThinningEnabled true if headers_list artifacts should be generated and added as
* input to compiling actions
* @param intermediateArtifacts used to create headers_list artifacts
+ * @param buildConfiguration the build configuration for this build
*/
public ObjcCppSemantics(
ObjcProvider objcProvider,
IncludeProcessing includeProcessing,
ObjcConfiguration config,
boolean isHeaderThinningEnabled,
- IntermediateArtifacts intermediateArtifacts) {
+ IntermediateArtifacts intermediateArtifacts,
+ BuildConfiguration buildConfiguration) {
this.objcProvider = objcProvider;
this.includeProcessing = includeProcessing;
this.config = config;
this.isHeaderThinningEnabled = isHeaderThinningEnabled;
this.intermediateArtifacts = intermediateArtifacts;
+ this.buildConfiguration = buildConfiguration;
}
@Override
@@ -133,6 +138,14 @@ public class ObjcCppSemantics implements CppSemantics {
ObjcCommon.userHeaderSearchPaths(objcProvider, ruleContext.getConfiguration())) {
contextBuilder.addQuoteIncludeDir(iquotePath);
}
+
+ // ProtoSupport creates multiple compilation contexts for a single rule, potentially multiple
+ // archives per build configuration. This covers that worst case.
+ contextBuilder.setPurpose(
+ "ObjcCppSemantics_build_arch_"
+ + buildConfiguration.getMnemonic()
+ + "_with_suffix_"
+ + intermediateArtifacts.archiveFileNameSuffix());
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java
index e9b666a526..a5ff7418b1 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java
@@ -34,13 +34,13 @@ import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
+import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider;
import com.google.devtools.build.lib.rules.proto.ProtoSourcesProvider;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
-import java.util.TreeMap;
/**
* Support for generating Objective C proto static libraries that registers actions which generate
@@ -73,6 +73,7 @@ final class ProtobufSupport {
private final Set<PathFragment> dylibHandledProtoPaths;
private final Iterable<ObjcProtoProvider> objcProtoProviders;
private final NestedSet<Artifact> portableProtoFilters;
+ private final CcToolchainProvider toolchain;
// Each entry of this map represents a generation action and a compilation action. The input set
// are dependencies of the output set. The output set is always a subset of, or the same set as,
@@ -114,7 +115,8 @@ final class ProtobufSupport {
NestedSetBuilder.<Artifact>stableOrder().build(),
protoProviders,
objcProtoProviders,
- portableProtoFilters);
+ portableProtoFilters,
+ null);
}
/**
@@ -131,6 +133,8 @@ final class ProtobufSupport {
* symbols
* @param protoProviders the list of ProtoSourcesProviders that this proto support should process
* @param objcProtoProviders the list of ObjcProtoProviders that this proto support should process
+ * @param toolchain if not null, the toolchain to override the default toolchain for the rule
+ * context.
*/
public ProtobufSupport(
RuleContext ruleContext,
@@ -138,7 +142,8 @@ final class ProtobufSupport {
NestedSet<Artifact> dylibHandledProtos,
Iterable<ProtoSourcesProvider> protoProviders,
Iterable<ObjcProtoProvider> objcProtoProviders,
- NestedSet<Artifact> portableProtoFilters) {
+ NestedSet<Artifact> portableProtoFilters,
+ CcToolchainProvider toolchain) {
this.ruleContext = ruleContext;
this.buildConfiguration = buildConfiguration;
this.attributes = new ProtoAttributes(ruleContext);
@@ -148,6 +153,7 @@ final class ProtobufSupport {
this.intermediateArtifacts =
ObjcRuleClasses.intermediateArtifacts(ruleContext, buildConfiguration);
this.inputsToOutputsMap = getInputsToOutputsMap(attributes, protoProviders, objcProtoProviders);
+ this.toolchain = toolchain;
}
/**
@@ -206,16 +212,18 @@ final class ProtobufSupport {
ObjcCommon common = getCommon(intermediateArtifacts, compilationArtifacts);
- new LegacyCompilationSupport(
- ruleContext,
- buildConfiguration,
- intermediateArtifacts,
- new CompilationAttributes.Builder().build(),
- /*useDeps=*/ false,
- new TreeMap<String, NestedSet<Artifact>>(),
- /*isTestRule=*/ false,
- /*usePch=*/ false)
- .registerCompileAndArchiveActions(common, userHeaderSearchPaths);
+ CompilationSupport compilationSupport =
+ new CompilationSupport.Builder()
+ .setRuleContext(ruleContext)
+ .setConfig(buildConfiguration)
+ .setIntermediateArtifacts(intermediateArtifacts)
+ .setCompilationAttributes(new CompilationAttributes.Builder().build())
+ .setToolchainProvider(toolchain)
+ .doNotUseDeps()
+ .doNotUsePch()
+ .build();
+
+ compilationSupport.registerCompileAndArchiveActions(common, userHeaderSearchPaths);
actionId++;
}