aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java16
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));