diff options
author | 2016-06-08 17:35:44 +0000 | |
---|---|---|
committer | 2016-06-09 08:01:03 +0000 | |
commit | bbab724f9c3600952a65a90febf50e1118568a96 (patch) | |
tree | a36222ab6062fbac2c2aecaa4cb4e1805538793f /src | |
parent | 1df0cf1de30bed5107373d5c310711341b1b9971 (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.java | 35 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/objc/IntermediateArtifacts.java | 14 |
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"); } /** |