From ea70ceb7c6bd6d3c5673a60d83f2c333a51dc519 Mon Sep 17 00:00:00 2001 From: Sergio Campama Date: Wed, 2 Nov 2016 19:50:12 +0000 Subject: Adds flag to enable/disable apple_binary from generating and linking ObjC protos natively. -- MOS_MIGRATED_REVID=137980688 --- .../build/lib/rules/objc/MultiArchBinarySupport.java | 20 ++++++++++++-------- .../build/lib/rules/objc/ObjcCommandLineOptions.java | 9 +++++++++ .../build/lib/rules/objc/ObjcConfiguration.java | 15 ++++++++++++--- 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 configurationToObjcCommonBuilder = ImmutableMap.builder(); for (BuildConfiguration childConfig : childConfigurations) { - ProtobufSupport protoSupport = - new ProtobufSupport(ruleContext, childConfig) - .registerGenerationActions() - .registerCompilationActions(); - - Optional protosObjcProvider = protoSupport.getObjcProvider(); + Optional 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> 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; -- cgit v1.2.3