diff options
Diffstat (limited to 'src')
4 files changed, 32 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java index 1251e2363d..23c998ae6f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java +++ b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java @@ -64,6 +64,18 @@ public class AppleCommandLineOptions extends FragmentOptions { public boolean mandatoryMinimumVersion; @Option( + name = "experimental_objc_provider_from_linked", + defaultValue = "true", + category = "experimental", + documentationCategory = OptionDocumentationCategory.UNDOCUMENTED, + effectTags = { OptionEffectTag.LOSES_INCREMENTAL_STATE, OptionEffectTag.BUILD_FILE_SEMANTICS }, + help = "Whether Apple rules which control linking should propagate objc provider at the top " + + "level" + ) + // TODO(b/32411441): This flag should be default-off and then be removed. + public boolean objcProviderFromLinked; + + @Option( name = "xcode_version", defaultValue = "null", category = "build", @@ -504,6 +516,7 @@ public class AppleCommandLineOptions extends FragmentOptions { void serialize(CodedOutputStream out) throws IOException, SerializationException { out.writeBoolNoTag(mandatoryMinimumVersion); + out.writeBoolNoTag(objcProviderFromLinked); serializeNullable(xcodeVersion, out, FastStringCodec.INSTANCE); serializeNullable(iosSdkVersion, out, DottedVersion.CODEC); serializeNullable(watchOsSdkVersion, out, DottedVersion.CODEC); @@ -534,6 +547,7 @@ public class AppleCommandLineOptions extends FragmentOptions { throws IOException, SerializationException { AppleCommandLineOptions result = new AppleCommandLineOptions(); result.mandatoryMinimumVersion = in.readBool(); + result.objcProviderFromLinked = in.readBool(); result.xcodeVersion = deserializeNullable(in, FastStringCodec.INSTANCE); result.iosSdkVersion = deserializeNullable(in, DottedVersion.CODEC); result.watchOsSdkVersion = deserializeNullable(in, DottedVersion.CODEC); diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java index 1747763a14..72b9e9a3bf 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java @@ -107,6 +107,7 @@ public class AppleConfiguration extends BuildConfiguration.Fragment { @Nullable private final String xcodeToolchain; @Nullable private final Label defaultProvisioningProfileLabel; private final boolean mandatoryMinimumVersion; + private final boolean objcProviderFromLinked; @VisibleForTesting AppleConfiguration( @@ -160,6 +161,7 @@ public class AppleConfiguration extends BuildConfiguration.Fragment { this.defaultProvisioningProfileLabel = options.defaultProvisioningProfile; this.xcodeToolchain = options.xcodeToolchain; this.mandatoryMinimumVersion = options.mandatoryMinimumVersion; + this.objcProviderFromLinked = options.objcProviderFromLinked; } /** Determines cpu value from apple-specific toolchain identifier. */ @@ -655,6 +657,14 @@ public class AppleConfiguration extends BuildConfiguration.Fragment { return mandatoryMinimumVersion; } + /** + * Returns true if rules which manage link actions should propagate {@link ObjcProvider} at the + * top level. + **/ + public boolean shouldLinkingRulesPropagateObjc() { + return objcProviderFromLinked; + } + /** Returns true if {@link AppleCrosstoolTransition} should be applied to every apple rule. */ public boolean isAppleCrosstoolEnabled() { return enableAppleCrosstool; 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 93db9b34bd..1b82a932ea 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 @@ -164,8 +164,10 @@ public class AppleBinary implements RuleConfiguredTargetFactory { objcProviderBuilder.add(MULTI_ARCH_LINKED_BINARIES, outputArtifact); ObjcProvider objcProvider = objcProviderBuilder.build(); - // TODO(cparsons): Stop propagating ObjcProvider directly from this rule. - targetBuilder.addNativeDeclaredProvider(objcProvider); + + if (appleConfiguration.shouldLinkingRulesPropagateObjc()) { + targetBuilder.addNativeDeclaredProvider(objcProvider); + } switch (getBinaryType(ruleContext)) { case EXECUTABLE: diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java index ac871f310a..0a32e6124d 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java @@ -177,9 +177,11 @@ public class AppleStaticLibrary implements RuleConfiguredTargetFactory { ObjcProvider objcProvider = objcProviderBuilder.build(); + if (appleConfiguration.shouldLinkingRulesPropagateObjc()) { + targetBuilder.addNativeDeclaredProvider(objcProvider); + } + targetBuilder - // TODO(cparsons): Remove ObjcProvider as a direct provider. - .addNativeDeclaredProvider(objcProvider) .addNativeDeclaredProvider( new AppleStaticLibraryProvider( ruleIntermediateArtifacts.combinedArchitectureArchive(), |