aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Sergio Campama <kaipi@google.com>2016-11-02 19:50:12 +0000
committerGravatar Laszlo Csomor <laszlocsomor@google.com>2016-11-03 07:17:05 +0000
commitea70ceb7c6bd6d3c5673a60d83f2c333a51dc519 (patch)
tree5c60c429547deb439e012b97b191a28a27c7f328
parenta1b2ae004c179e218acdd8028cd698e2c7102eba (diff)
Adds flag to enable/disable apple_binary from generating and linking ObjC protos natively.
-- MOS_MIGRATED_REVID=137980688
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java20
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommandLineOptions.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java15
3 files changed, 33 insertions, 11 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java
index d65b39bc15..ede6fd0c98 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java
@@ -138,12 +138,16 @@ public class MultiArchBinarySupport {
ImmutableMap.Builder<BuildConfiguration, ObjcCommon> configurationToObjcCommonBuilder =
ImmutableMap.builder();
for (BuildConfiguration childConfig : childConfigurations) {
- ProtobufSupport protoSupport =
- new ProtobufSupport(ruleContext, childConfig)
- .registerGenerationActions()
- .registerCompilationActions();
-
- Optional<ObjcProvider> protosObjcProvider = protoSupport.getObjcProvider();
+ Optional<ObjcProvider> protosObjcProvider;
+ if (ObjcRuleClasses.objcConfiguration(ruleContext).enableAppleBinaryNativeProtos()) {
+ ProtobufSupport protoSupport =
+ new ProtobufSupport(ruleContext, childConfig)
+ .registerGenerationActions()
+ .registerCompilationActions();
+ protosObjcProvider = protoSupport.getObjcProvider();
+ } else {
+ protosObjcProvider = Optional.absent();
+ }
IntermediateArtifacts intermediateArtifacts =
ObjcRuleClasses.intermediateArtifacts(ruleContext, childConfig);
@@ -160,10 +164,10 @@ public class MultiArchBinarySupport {
nullToEmptyList(configToDepsCollectionMap.get(childConfig)),
nullToEmptyList(configurationToNonPropagatedObjcMap.get(childConfig)),
additionalDepProviders);
-
+
configurationToObjcCommonBuilder.put(childConfig, common);
}
-
+
return configurationToObjcCommonBuilder.build();
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommandLineOptions.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommandLineOptions.java
index cff7ad0e67..c2f45b5cd0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommandLineOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommandLineOptions.java
@@ -237,6 +237,15 @@ public class ObjcCommandLineOptions extends FragmentOptions {
)
public boolean useDotdPruning;
+ @Option(
+ name = "enable_apple_binary_native_protos",
+ defaultValue = "true",
+ category = "flags",
+ help =
+ "If set, apple_binary will generate and link objc protos into the output binary."
+ )
+ public boolean enableAppleBinaryNativeProtos;
+
@SuppressWarnings("unchecked")
@Override
public List<SplitTransition<BuildOptions>> getPotentialSplitTransitions() {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java
index e0e26a8e3b..d01a8f407a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java
@@ -77,6 +77,7 @@ public class ObjcConfiguration extends BuildConfiguration.Fragment {
private final boolean deviceDebugEntitlements;
private final boolean experimentalObjcLibrary;
private final boolean experimentalUseCrosstoolForBinary;
+ private final boolean enableAppleBinaryNativeProtos;
private final HeaderDiscovery.DotdPruningMode dotdPruningPlan;
ObjcConfiguration(ObjcCommandLineOptions objcOptions, BuildConfiguration.Options options,
@@ -111,6 +112,7 @@ public class ObjcConfiguration extends BuildConfiguration.Fragment {
this.deviceDebugEntitlements = objcOptions.deviceDebugEntitlements;
this.experimentalObjcLibrary = objcOptions.experimentalObjcLibrary;
this.experimentalUseCrosstoolForBinary = objcOptions.experimentalUseCrosstoolForBinary;
+ this.enableAppleBinaryNativeProtos = objcOptions.enableAppleBinaryNativeProtos;
this.dotdPruningPlan =
objcOptions.useDotdPruning
? HeaderDiscovery.DotdPruningMode.USE
@@ -327,7 +329,7 @@ public class ObjcConfiguration extends BuildConfiguration.Fragment {
public boolean useDeviceDebugEntitlements() {
return deviceDebugEntitlements && compilationMode != CompilationMode.OPT;
}
-
+
/**
* Returns true if all objc_library targets should be configured as if they were
* experimental_objc_library targets.
@@ -335,12 +337,19 @@ public class ObjcConfiguration extends BuildConfiguration.Fragment {
public boolean useExperimentalObjcLibrary() {
return experimentalObjcLibrary;
}
-
+
/** Returns true if objc_binary targets should use the crosstool for compiling and archiving. */
public boolean useCrosstoolForBinary() {
return experimentalUseCrosstoolForBinary;
}
-
+
+ /** Returns true if apple_binary targets should generate and link Objc protos. */
+ @SkylarkCallable(name = "enable_apple_binary_native_protos", structField = true,
+ doc = "Returns whether apple_binary should generate and link protos natively.")
+ public boolean enableAppleBinaryNativeProtos() {
+ return enableAppleBinaryNativeProtos;
+ }
+
/** Returns the DotdPruningPlan for compiles in this build. */
public HeaderDiscovery.DotdPruningMode getDotdPruningPlan() {
return dotdPruningPlan;