diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java | 16 |
1 files changed, 16 insertions, 0 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 395a2beaa2..27dc24bdb9 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 @@ -15,6 +15,7 @@ package com.google.devtools.build.lib.rules.objc; import static com.google.devtools.build.lib.packages.ImplicitOutputsFunction.fromTemplates; +import static com.google.devtools.build.lib.rules.cpp.Link.LINK_LIBRARY_FILETYPES; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.DEFINE; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.FORCE_LOAD_LIBRARY; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.FRAMEWORK_DIR; @@ -173,6 +174,17 @@ public final class CompilationSupport { }; /** + * Selects cc libraries that have alwayslink=1. + */ + private static final Predicate<Artifact> ALWAYS_LINKED_CC_LIBRARY = + new Predicate<Artifact>() { + @Override + public boolean apply(Artifact input) { + return LINK_LIBRARY_FILETYPES.matches(input.getFilename()); + } + }; + + /** * Defines a library that contains the transitive closure of dependencies. */ public static final SafeImplicitOutputsFunction FULLY_LINKED_LIB = @@ -1071,9 +1083,13 @@ public final class CompilationSupport { .addExecPaths(ccLibraries); } + Iterable<Artifact> ccLibrariesToForceLoad = + Iterables.filter(ccLibraries, ALWAYS_LINKED_CC_LIBRARY); + commandLine .addExecPath("-o", linkedBinary) .addBeforeEach("-force_load", Artifact.toExecPaths(objcProvider.get(FORCE_LOAD_LIBRARY))) + .addBeforeEach("-force_load", Artifact.toExecPaths(ccLibrariesToForceLoad)) .add(extraLinkArgs) .add(objcProvider.get(ObjcProvider.LINKOPT)); |