aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Chris Parsons <cparsons@google.com>2016-06-08 17:35:44 +0000
committerGravatar Yun Peng <pcloudy@google.com>2016-06-09 08:01:03 +0000
commitbbab724f9c3600952a65a90febf50e1118568a96 (patch)
treea36222ab6062fbac2c2aecaa4cb4e1805538793f /src
parent1df0cf1de30bed5107373d5c310711341b1b9971 (diff)
Wrap inputs to ObjcLink (via clang) invocations in an objlist, and pass the args as a -filelist arg.
This prevents certain many-arg actions from making clang unhappy. -- MOS_MIGRATED_REVID=124367172
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java35
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/IntermediateArtifacts.java14
2 files changed, 32 insertions, 17 deletions
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 632887e02f..5adaf565a1 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
@@ -777,7 +777,8 @@ public final class CompilationSupport {
private void registerArchiveActions(ImmutableList.Builder<Artifact> objFiles, Artifact archive) {
for (Action action :
- archiveActions(ruleContext, objFiles.build(), archive, intermediateArtifacts.objList())) {
+ archiveActions(ruleContext, objFiles.build(), archive,
+ intermediateArtifacts.archiveObjList())) {
ruleContext.registerAction(action);
}
}
@@ -790,11 +791,7 @@ public final class CompilationSupport {
ImmutableList.Builder<Action> actions = new ImmutableList.Builder<>();
- actions.add(new FileWriteAction(
- context.getActionOwner(),
- objList,
- Artifact.joinExecPaths("\n", objFiles),
- /*makeExecutable=*/ false));
+ actions.add(objFilelistAction(context, objFiles, objList));
actions.add(ObjcRuleClasses.spawnAppleEnvActionBuilder(
ruleContext, appleConfiguration.getPlatform(PlatformType.IOS))
@@ -815,6 +812,15 @@ public final class CompilationSupport {
return actions.build();
}
+ private Action objFilelistAction(ActionConstructionContext context,
+ Iterable<Artifact> objFiles, Artifact objList) {
+ return new FileWriteAction(
+ context.getActionOwner(),
+ objList,
+ Artifact.joinExecPaths("\n", objFiles),
+ /*makeExecutable=*/ false);
+ }
+
/**
* Registers an action to create an archive artifact by fully (statically) linking all
* transitive dependencies of this rule.
@@ -1045,6 +1051,7 @@ public final class CompilationSupport {
.addInputs(ccLibraries)
.addInputs(extraLinkInputs)
.addInputs(prunedJ2ObjcArchives)
+ .addInput(intermediateArtifacts.linkerObjList())
.addInput(xcrunwrapper(ruleContext).getExecutable())
.build(ruleContext));
@@ -1158,11 +1165,14 @@ public final class CompilationSupport {
commandLine.add("-dead_strip").add("-no_dead_strip_inits_and_terms");
}
+ Artifact inputFileList = intermediateArtifacts.linkerObjList();
+ ruleContext.registerAction(
+ objFilelistAction(ruleContext,
+ Iterables.concat(bazelBuiltLibraries, objcProvider.get(IMPORTED_LIBRARY), ccLibraries),
+ inputFileList));
+
if (objcConfiguration.shouldPrioritizeStaticLibs()) {
- commandLine
- .addExecPaths(bazelBuiltLibraries)
- .addExecPaths(objcProvider.get(IMPORTED_LIBRARY))
- .addExecPaths(ccLibraries);
+ commandLine.add("-filelist").add(inputFileList.getExecPathString());
}
commandLine
@@ -1184,10 +1194,7 @@ public final class CompilationSupport {
.addFormatEach("-l%s", libraryNames);
if (!objcConfiguration.shouldPrioritizeStaticLibs()) {
- commandLine
- .addExecPaths(bazelBuiltLibraries)
- .addExecPaths(objcProvider.get(IMPORTED_LIBRARY))
- .addExecPaths(ccLibraries);
+ commandLine.add("-filelist").add(inputFileList.getExecPathString());
}
Iterable<Artifact> ccLibrariesToForceLoad =
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IntermediateArtifacts.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IntermediateArtifacts.java
index effeefc035..7c41642950 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/IntermediateArtifacts.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IntermediateArtifacts.java
@@ -149,11 +149,19 @@ public final class IntermediateArtifacts {
}
/**
+ * The .objlist file, which contains a list of paths of object files to archive and is read by
+ * clang (via -filelist flag) in the link action (for binary creation).
+ */
+ public Artifact linkerObjList() {
+ return appendExtension("-linker.objlist");
+ }
+
+ /**
* The .objlist file, which contains a list of paths of object files to archive and is read by
- * libtool in the archive action.
+ * libtool (via -filelist flag) in the archive action.
*/
- public Artifact objList() {
- return appendExtension(".objlist");
+ public Artifact archiveObjList() {
+ return appendExtension("-archive.objlist");
}
/**