aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java
diff options
context:
space:
mode:
authorGravatar Dmitry Shevchenko <dmishe@google.com>2016-06-08 20:22:48 +0000
committerGravatar Yun Peng <pcloudy@google.com>2016-06-09 08:02:42 +0000
commitac2e6a50ef5aea017b9b65de9b4eb8c06a902928 (patch)
treeba5fbff623868ac4695e0ba52034bda0c080e500 /src/main/java
parent42c49355e5d20b03b2d25212e39a64d0198c832a (diff)
Always register module map actions.
* Makes it so module map generation action will be registered for all targets that should provide module maps. This allows other rules to depend directly on modulemap artifacts without turning on --experimental_objc_enable_module_maps for all builds. * Disabled module maps for apple_binary because of a bug. * objc_proto_library targets will register module map generation even with experimental union flag so that its modules can be imported by the dependent targets (even though the compilation is happening much later in the linking target). RELNOTES: -- MOS_MIGRATED_REVID=124386048
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java28
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/IntermediateArtifacts.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibrary.java8
6 files changed, 25 insertions, 21 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java
index e7dba73b6c..325c7bfc86 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java
@@ -184,7 +184,7 @@ public class AppleBinary implements RuleConfiguredTargetFactory {
.addNonPropagatedDepObjcProviders(nonPropagatedObjcDeps)
.setIntermediateArtifacts(intermediateArtifacts)
.setAlwayslink(false)
- .setHasModuleMap()
+ // TODO(b/29152500): Enable module map generation.
.setLinkedBinary(intermediateArtifacts.strippedSingleArchitectureBinary())
.addExtraImportLibraries(protoLib.asSet())
.build();
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 ef3d63c013..b4e8c87f6c 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
@@ -538,6 +538,10 @@ public final class CompilationSupport {
.add("-MD")
.addExecPath("-MF", dotdFile);
+ if (objcConfiguration.moduleMapsEnabled()) {
+ additionalInputs.addAll(objcProvider.get(MODULE_MAP));
+ }
+
if (moduleMap.isPresent()) {
// If modules are enabled for the rule, -fmodules is added to the copts already. (This implies
// module map usage). Otherwise, we need to pass -fmodule-maps.
@@ -572,7 +576,6 @@ public final class CompilationSupport {
.addOutputs(gcnoFiles.build())
.addOutput(dotdFile)
.addTransitiveInputs(objcProvider.get(HEADER))
- .addTransitiveInputs(objcProvider.get(MODULE_MAP))
.addInputs(compilationArtifacts.getPrivateHdrs())
.addTransitiveInputs(objcProvider.get(STATIC_FRAMEWORK_FILE))
.addTransitiveInputs(objcProvider.get(DYNAMIC_FRAMEWORK_FILE))
@@ -956,19 +959,18 @@ public final class CompilationSupport {
*/
CompilationSupport registerGenerateModuleMapAction(
Optional<CompilationArtifacts> compilationArtifacts) {
- if (objcConfiguration.moduleMapsEnabled()) {
- // TODO(bazel-team): Include textual headers in the module map when Xcode 6 support is
- // dropped.
- Iterable<Artifact> publicHeaders = attributes.hdrs();
- Iterable<Artifact> privateHeaders = ImmutableList.of();
- if (compilationArtifacts.isPresent()) {
- CompilationArtifacts artifacts = compilationArtifacts.get();
- publicHeaders = Iterables.concat(publicHeaders, artifacts.getAdditionalHdrs());
- privateHeaders = Iterables.concat(privateHeaders, artifacts.getPrivateHdrs());
- }
- CppModuleMap moduleMap = ObjcRuleClasses.intermediateArtifacts(ruleContext).moduleMap();
- registerGenerateModuleMapAction(moduleMap, publicHeaders, privateHeaders);
+ // TODO(bazel-team): Include textual headers in the module map when Xcode 6 support is
+ // dropped.
+ Iterable<Artifact> publicHeaders = attributes.hdrs();
+ Iterable<Artifact> privateHeaders = ImmutableList.of();
+ if (compilationArtifacts.isPresent()) {
+ CompilationArtifacts artifacts = compilationArtifacts.get();
+ publicHeaders = Iterables.concat(publicHeaders, artifacts.getAdditionalHdrs());
+ privateHeaders = Iterables.concat(privateHeaders, artifacts.getPrivateHdrs());
}
+ CppModuleMap moduleMap = intermediateArtifacts.moduleMap();
+ registerGenerateModuleMapAction(moduleMap, publicHeaders, privateHeaders);
+
return this;
}
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 7c41642950..ec5c05564f 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
@@ -401,9 +401,6 @@ public final class IntermediateArtifacts {
* {@link CppModuleMap} that provides the clang module map for this target.
*/
public CppModuleMap moduleMap() {
- if (!ObjcCommon.shouldUseObjcModules(ruleContext)) {
- throw new IllegalStateException();
- }
String moduleName =
ruleContext
.getLabel()
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
index 5ec92b80be..a0d3411e80 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
@@ -448,6 +448,7 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF
.addAdditionalHdrs(transpiledHeaders)
.build();
builder.setCompilationArtifacts(compilationArtifacts);
+ builder.setHasModuleMap();
}
for (Attribute dependentAttribute : dependentAttributes) {
@@ -462,7 +463,6 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF
return builder
.addUserHeaderSearchPaths(headerSearchPaths)
.setIntermediateArtifacts(intermediateArtifacts)
- .setHasModuleMap()
.build();
}
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 cbf98c928a..8bcc72ae9d 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
@@ -536,8 +536,7 @@ public final class ObjcCommon {
}
}
- if (hasModuleMap
- && buildConfiguration.getFragment(ObjcConfiguration.class).moduleMapsEnabled()) {
+ if (hasModuleMap) {
CppModuleMap moduleMap = intermediateArtifacts.moduleMap();
objcProvider.add(MODULE_MAP, moduleMap.getArtifact());
objcProvider.add(TOP_LEVEL_MODULE_MAP, moduleMap);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibrary.java
index 89d420b2da..344d5d3f14 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibrary.java
@@ -62,10 +62,16 @@ public class ObjcProtoLibrary implements RuleConfiguredTargetFactory {
boolean experimentalAutoUnion =
ObjcRuleClasses.objcConfiguration(ruleContext).experimentalAutoTopLevelUnionObjCProtos();
+ CompilationSupport compilationSupport = new CompilationSupport(ruleContext);
+
// If the experimental flag is not set, or if it's set and doesn't use the protobuf library,
// register the compilation actions, as the output needs to be linked in the final binary.
if (!experimentalAutoUnion || !usesProtobufLibrary) {
- new CompilationSupport(ruleContext).registerCompileAndArchiveActions(common);
+ compilationSupport.registerCompileAndArchiveActions(common);
+ } else {
+ // Even though there is nothing to compile, still generate a module map based on this target
+ // headers.
+ compilationSupport.registerGenerateModuleMapAction(common.getCompilationArtifacts());
}
return ObjcRuleClasses.ruleConfiguredTarget(ruleContext, filesToBuild.build())