diff options
author | Googler <noreply@google.com> | 2015-09-23 22:58:43 +0000 |
---|---|---|
committer | Philipp Wollermann <philwo@google.com> | 2015-09-24 14:20:18 +0000 |
commit | d7f6e701b890498c054324571f4c816a96f6a89a (patch) | |
tree | ef87de9ba738702bf2b4aac7b8ac26464740a7bc /src | |
parent | 53330510c6ea5cd6257b9981b44e52d15a9e01aa (diff) |
Propagates cc_library linkopts attribute to dependent objc_libraries.
--
MOS_MIGRATED_REVID=103792157
Diffstat (limited to 'src')
3 files changed, 12 insertions, 2 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 e20ae818ef..521784ad1d 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 @@ -778,6 +778,7 @@ public final class CompilationSupport { .addExecPaths(ccLibraries) .addBeforeEach("-force_load", Artifact.toExecPaths(objcProvider.get(FORCE_LOAD_LIBRARY))) .add(extraLinkArgs) + .add(objcProvider.get(ObjcProvider.LINKOPT)) .build(); if (ruleContext.getConfiguration().isCodeCoverageEnabled()) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java index 8018218436..64e050db9a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java @@ -35,6 +35,7 @@ import static com.google.devtools.build.lib.rules.objc.ObjcProvider.INCLUDE; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.INCLUDE_SYSTEM; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.LIBRARY; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.LINKED_BINARY; +import static com.google.devtools.build.lib.rules.objc.ObjcProvider.LINKOPT; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.MODULE_MAP; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.SDK_DYLIB; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.SDK_FRAMEWORK; @@ -61,6 +62,7 @@ import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.packages.BuildType; import com.google.devtools.build.lib.rules.cpp.CcCommon; +import com.google.devtools.build.lib.rules.cpp.CcLinkParams; import com.google.devtools.build.lib.rules.cpp.CcLinkParamsProvider; import com.google.devtools.build.lib.rules.cpp.CppCompilationContext; import com.google.devtools.build.lib.rules.cpp.CppModuleMap; @@ -462,8 +464,10 @@ public final class ObjcCommon { objcProvider.addAll(DEFINE, headerProvider.getDefines()); } for (CcLinkParamsProvider linkProvider : depCcLinkProviders) { - objcProvider.addTransitiveAndPropagate( - CC_LIBRARY, linkProvider.getCcLinkParams(true, false).getLibraries()); + CcLinkParams params = linkProvider.getCcLinkParams(true, false); + objcProvider + .addAll(LINKOPT, params.flattenedLinkopts()) + .addTransitiveAndPropagate(CC_LIBRARY, params.getLibraries()); } if (compilationAttributes.isPresent()) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java index 5e3e5204e8..d534a40638 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java @@ -208,6 +208,11 @@ public final class ObjcProvider implements TransitiveInfoProvider { public static final Key<LinkerInputs.LibraryToLink> CC_LIBRARY = new Key<>(LINK_ORDER); /** + * Linking options from dependencies. + */ + public static final Key<String> LINKOPT = new Key<>(LINK_ORDER); + + /** * Flags that apply to a transitive build dependency tree. Each item in the enum corresponds to a * flag. If the item is included in the key {@link #FLAG}, then the flag is considered set. */ |