Bring experimental_objc_library module semantics in line with those of
objc_library. That is, a module map is always generated, but modules only
used by the library if module maps are enabled.
This is in contrast with previous behavior, under which modules were always
used.
--
MOS_MIGRATED_REVID=137697659
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolSupport.java
index 8769f56..e00f223 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolSupport.java
@@ -47,6 +47,7 @@
public class CrosstoolSupport {
private static final String OBJC_MODULE_FEATURE_NAME = "use_objc_modules";
+ private static final String NO_ENABLE_MODULES_FEATURE_NAME = "no_enable_modules";
private static final Iterable<String> ACTIVATED_ACTIONS =
ImmutableList.of(
"objc-compile",
@@ -170,12 +171,18 @@
.getBitcodeMode()
.getFeatureNames())
// We create a module map by default to allow for swift interop.
- .add(OBJC_MODULE_FEATURE_NAME)
.add(CppRuleClasses.MODULE_MAPS)
.add(CppRuleClasses.COMPILE_ACTION_FLAGS_IN_FLAG_SET)
.add(CppRuleClasses.DEPENDENCY_FILE)
.add(CppRuleClasses.INCLUDE_PATHS);
-
+
+ if (ruleContext.getConfiguration().getFragment(ObjcConfiguration.class).moduleMapsEnabled()) {
+ activatedCrosstoolSelectables.add(OBJC_MODULE_FEATURE_NAME);
+ }
+ if (!CompilationAttributes.Builder.fromRuleContext(ruleContext).build().enableModules()) {
+ activatedCrosstoolSelectables.add(NO_ENABLE_MODULES_FEATURE_NAME);
+ }
+
if (ruleContext.getPrerequisiteArtifact("pch", Mode.TARGET) != null) {
activatedCrosstoolSelectables.add("pch");
}