aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar cparsons <cparsons@google.com>2017-09-22 11:12:31 -0400
committerGravatar John Cater <jcater@google.com>2017-09-25 09:37:13 -0400
commite8d3c223185a8e1c0b659a5c70d2987460460d06 (patch)
tree055b6295048f6b5ce3a7bac6f88a067536c0592d /src
parentda8386aaf23ba4b76de542d7c4d37f057b4b8683 (diff)
Contingent on a flag --experimental_objc_provider_from_linked, apple_binary and apple_static_library no longer propagate ObjcProvider.
RELNOTES: None. PiperOrigin-RevId: 169690934
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java14
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java6
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(),