aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Cal Peyser <cpeyser@google.com>2017-01-18 20:07:09 +0000
committerGravatar Vladimir Moskva <vladmos@google.com>2017-01-19 12:36:38 +0000
commit7a58fdc827434ce1b872c17cda1b0a0220842387 (patch)
treec102d493d9c6f4d55782801c57c398f7355a2424
parent8063f294bd425d71a12f5651517fe83e866c94aa (diff)
Introduce --experimental_objc_crosstool, which replaces
--experimental_objc_library and --experimental_objc_use_crosstool_for_binary. This flag will allow testing of the complete (compilation and linking) rollout of the objc crosstool. -- PiperOrigin-RevId: 144864301 MOS_MIGRATED_REVID=144864301
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleWatchExtensionBinary.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java18
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java67
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java18
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/IosExtensionBinary.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/IosFrameworkBinary.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java5
-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/LegacyCompilationSupport.java38
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBinary.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommandLineOptions.java45
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java18
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcImport.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ProtocolBuffers2Support.java2
18 files changed, 148 insertions, 95 deletions
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 4213a58c9f..589738e504 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
@@ -112,7 +112,7 @@ public class AppleStaticLibrary implements RuleConfiguredTargetFactory {
librariesToLipo.add(intermediateArtifacts.strippedSingleArchitectureLibrary());
- new LegacyCompilationSupport(ruleContext, childConfig)
+ CompilationSupport.createForConfig(ruleContext, childConfig)
.registerCompileAndArchiveActions(common)
.registerFullyLinkAction(
objcProvider,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleWatchExtensionBinary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleWatchExtensionBinary.java
index 6ffbaec894..675c82a0d7 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleWatchExtensionBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleWatchExtensionBinary.java
@@ -23,7 +23,7 @@ import com.google.devtools.build.lib.rules.objc.CompilationSupport.ExtraLinkArgs
public class AppleWatchExtensionBinary extends BinaryLinkingTargetFactory {
public AppleWatchExtensionBinary() {
- super(HasReleaseBundlingSupport.NO, XcodeProductType.LIBRARY_STATIC, UsesCrosstool.NO);
+ super(HasReleaseBundlingSupport.NO, XcodeProductType.LIBRARY_STATIC);
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java b/src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java
index ea26384486..ed41efc127 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java
@@ -47,23 +47,14 @@ abstract class BinaryLinkingTargetFactory implements RuleConfiguredTargetFactory
YES, NO;
}
- /** Indicates whether this binary uses the c++ rules backend, including the crosstool. */
- enum UsesCrosstool {
- EXPERIMENTAL, // use the crosstool if --experimental_use_crosstool_for_binary is given
- NO;
- }
-
private final HasReleaseBundlingSupport hasReleaseBundlingSupport;
private final XcodeProductType productType;
- private final UsesCrosstool usesCrosstool;
protected BinaryLinkingTargetFactory(
HasReleaseBundlingSupport hasReleaseBundlingSupport,
- XcodeProductType productType,
- UsesCrosstool usesCrosstool) {
+ XcodeProductType productType) {
this.hasReleaseBundlingSupport = hasReleaseBundlingSupport;
this.productType = productType;
- this.usesCrosstool = usesCrosstool;
}
/**
@@ -115,12 +106,7 @@ abstract class BinaryLinkingTargetFactory implements RuleConfiguredTargetFactory
ruleContext.getPrerequisites("deps", Mode.TARGET, J2ObjcEntryClassProvider.class))
.build();
- CompilationSupport compilationSupport = (usesCrosstool != UsesCrosstool.EXPERIMENTAL
- || !ruleContext.getFragment(ObjcConfiguration.class).useCrosstoolForBinary())
- ? new LegacyCompilationSupport(ruleContext)
- : new CrosstoolCompilationSupport(ruleContext);
-
- compilationSupport
+ CompilationSupport compilationSupport = CompilationSupport.create(ruleContext)
.validateAttributes()
.addXcodeSettings(xcodeProviderBuilder, common)
.registerCompileAndArchiveActions(common)
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 d3206f45c1..dec209fd70 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
@@ -67,6 +67,7 @@ import com.google.devtools.build.lib.rules.apple.Platform;
import com.google.devtools.build.lib.rules.apple.Platform.PlatformType;
import com.google.devtools.build.lib.rules.cpp.CppModuleMap;
import com.google.devtools.build.lib.rules.cpp.CppModuleMapAction;
+import com.google.devtools.build.lib.rules.objc.ObjcCommandLineOptions.ObjcCrosstoolMode;
import com.google.devtools.build.lib.rules.objc.XcodeProvider.Builder;
import com.google.devtools.build.lib.rules.test.InstrumentedFilesCollector;
import com.google.devtools.build.lib.rules.test.InstrumentedFilesCollector.InstrumentationSpec;
@@ -332,8 +333,72 @@ public abstract class CompilationSupport {
this.attributes = compilationAttributes;
this.intermediateArtifacts = intermediateArtifacts;
}
-
+
/**
+ * Returns a CompilationSupport instance, the type of which is determined from the
+ * --experimental_objc_crosstool flag.
+ *
+ * @param ruleContext the RuleContext for the calling target
+ */
+ public static CompilationSupport create(RuleContext ruleContext) {
+ return createForConfig(ruleContext, ruleContext.getConfiguration());
+ }
+
+ /**
+ * Returns a CompilationSupport instance, the type of which is determined from the
+ * --experimental_objc_crosstool flag. The result can be either {@link LegacyCompilationSupport}
+ * or {@link CrosstoolCompilationSupport}.
+ *
+ * @param ruleContext the RuleContext for the calling target
+ * @param buildConfiguration the configuration for the calling target
+ */
+ public static CompilationSupport createForConfig(RuleContext ruleContext,
+ BuildConfiguration buildConfiguration) {
+ return createWithSelectedImplementation(ruleContext,
+ buildConfiguration,
+ ObjcRuleClasses.intermediateArtifacts(ruleContext, buildConfiguration),
+ CompilationAttributes.Builder.fromRuleContext(ruleContext).build());
+ }
+
+ /**
+ * Returns a CompilationSupport instance, the type of which is determined from the
+ * --experimental_objc_crosstool flag.
+ *
+ * @param ruleContext the RuleContext for the calling target
+ * @param compilationAttributes attributes of the calling target
+ */
+ public static CompilationSupport createForAttributes(RuleContext ruleContext,
+ CompilationAttributes compilationAttributes) {
+ BuildConfiguration config = ruleContext.getConfiguration();
+ return createWithSelectedImplementation(ruleContext,
+ config,
+ ObjcRuleClasses.intermediateArtifacts(ruleContext, config),
+ compilationAttributes);
+ }
+
+ /**
+ * Returns a CompilationSupport instance, the type of which is determined from the
+ * --experimental_objc_crosstool flag.
+ *
+ * @param ruleContext the RuleContext for the calling target
+ * @param buildConfiguration the configuration for the calling target
+ * @param intermediateArtifacts IntermediateArtifacts for deriving artifact paths
+ * @param compilationAttributes attributes of the calling target
+ */
+ private static CompilationSupport createWithSelectedImplementation(
+ RuleContext ruleContext,
+ BuildConfiguration buildConfiguration,
+ IntermediateArtifacts intermediateArtifacts,
+ CompilationAttributes compilationAttributes) {
+ return buildConfiguration.getFragment(ObjcConfiguration.class).getObjcCrosstoolMode()
+ == ObjcCrosstoolMode.ALL
+ ? new CrosstoolCompilationSupport(ruleContext, buildConfiguration, intermediateArtifacts,
+ compilationAttributes)
+ : new LegacyCompilationSupport(ruleContext, buildConfiguration, intermediateArtifacts,
+ compilationAttributes);
+ }
+
+ /**
* Registers all actions necessary to compile this rule's sources and archive them.
*
* @param compilationArtifacts collection of artifacts required for the compilation
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java
index 1688ba2dc2..1bdf71a985 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java
@@ -30,6 +30,7 @@ import com.google.common.collect.Sets;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode;
import com.google.devtools.build.lib.analysis.RuleContext;
+import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
import com.google.devtools.build.lib.rules.apple.AppleConfiguration;
import com.google.devtools.build.lib.rules.cpp.CcLibraryHelper;
@@ -82,11 +83,26 @@ public class CrosstoolCompilationSupport extends CompilationSupport {
* @param ruleContext the RuleContext for the calling target
*/
public CrosstoolCompilationSupport(RuleContext ruleContext) {
- super(
+ this(
ruleContext,
ruleContext.getConfiguration(),
ObjcRuleClasses.intermediateArtifacts(ruleContext),
CompilationAttributes.Builder.fromRuleContext(ruleContext).build());
+ }
+
+ /**
+ * Creates a new CompilationSupport instance that uses the c++ rule backend
+ *
+ * @param ruleContext the RuleContext for the calling target
+ * @param buildConfiguration the configuration for the calling target
+ * @param intermediateArtifacts IntermediateArtifacts for deriving artifact paths
+ * @param compilationAttributes attributes of the calling target
+ */
+ public CrosstoolCompilationSupport(RuleContext ruleContext,
+ BuildConfiguration buildConfiguration,
+ IntermediateArtifacts intermediateArtifacts,
+ CompilationAttributes compilationAttributes) {
+ super(ruleContext, buildConfiguration, intermediateArtifacts, compilationAttributes);
this.compilationArtifacts = compilationArtifacts(ruleContext);
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosExtensionBinary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosExtensionBinary.java
index b5dde4fe73..02b96ae7b1 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosExtensionBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosExtensionBinary.java
@@ -22,7 +22,7 @@ import com.google.devtools.build.lib.rules.objc.CompilationSupport.ExtraLinkArgs
*/
public class IosExtensionBinary extends BinaryLinkingTargetFactory {
public IosExtensionBinary() {
- super(HasReleaseBundlingSupport.NO, XcodeProductType.LIBRARY_STATIC, UsesCrosstool.NO);
+ super(HasReleaseBundlingSupport.NO, XcodeProductType.LIBRARY_STATIC);
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosFrameworkBinary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosFrameworkBinary.java
index fb9cfd6919..e9d21f2f97 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosFrameworkBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosFrameworkBinary.java
@@ -23,7 +23,7 @@ import com.google.devtools.build.lib.rules.objc.CompilationSupport.ExtraLinkArgs
*/
public class IosFrameworkBinary extends BinaryLinkingTargetFactory {
public IosFrameworkBinary() {
- super(HasReleaseBundlingSupport.NO, XcodeProductType.LIBRARY_STATIC, UsesCrosstool.NO);
+ super(HasReleaseBundlingSupport.NO, XcodeProductType.LIBRARY_STATIC);
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java
index 2902cdc65b..f104dc72b9 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java
@@ -32,7 +32,6 @@ import com.google.devtools.build.lib.analysis.RunfilesSupport;
import com.google.devtools.build.lib.analysis.actions.ExecutionRequirements;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
-import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory;
import com.google.devtools.build.lib.rules.apple.AppleConfiguration;
import com.google.devtools.build.lib.rules.apple.Platform.PlatformType;
@@ -151,7 +150,7 @@ public final class IosTest implements RuleConfiguredTargetFactory {
ruleContext.getPrerequisites("deps", Mode.TARGET, J2ObjcEntryClassProvider.class))
.build();
- new LegacyCompilationSupport(ruleContext)
+ CompilationSupport.create(ruleContext)
.registerLinkActions(
common.getObjcProvider(),
j2ObjcMappingFileProvider,
@@ -202,7 +201,7 @@ public final class IosTest implements RuleConfiguredTargetFactory {
NestedSetBuilder.<Artifact>stableOrder().addTransitive(filesToBuildSet);
InstrumentedFilesProvider instrumentedFilesProvider =
- new LegacyCompilationSupport(ruleContext).getInstrumentedFilesProvider(common);
+ CompilationSupport.create(ruleContext).getInstrumentedFilesProvider(common);
TestSupport testSupport =
new TestSupport(ruleContext)
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 bb521951b5..73fdbe6763 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
@@ -251,7 +251,7 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF
depAttributes);
try {
- new LegacyCompilationSupport(ruleContext)
+ CompilationSupport.create(ruleContext)
.registerCompileAndArchiveActions(common, EXTRA_COMPILE_ARGS)
.registerFullyLinkAction(common.getObjcProvider(),
ruleContext.getImplicitOutputArtifact(CompilationSupport.FULLY_LINKED_LIB));
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/LegacyCompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/LegacyCompilationSupport.java
index 709df500ea..f9b541ee73 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/LegacyCompilationSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/LegacyCompilationSupport.java
@@ -116,42 +116,6 @@ public class LegacyCompilationSupport extends CompilationSupport {
.build();
}
- /** Creates a new legacy compilation support for the given rule. */
- public LegacyCompilationSupport(RuleContext ruleContext) {
- this(ruleContext, ruleContext.getConfiguration());
- }
-
- /**
- * Creates a new legacy compilation support for the given rule.
- *
- * <p>All actions will be created under the given build configuration, which may be different than
- * the current rule context configuration.
- */
- public LegacyCompilationSupport(RuleContext ruleContext, BuildConfiguration buildConfiguration) {
- this(
- ruleContext,
- buildConfiguration,
- ObjcRuleClasses.intermediateArtifacts(ruleContext, buildConfiguration),
- CompilationAttributes.Builder.fromRuleContext(ruleContext).build());
- }
-
- /**
- * Creates a new legacy compilation support for the given rule.
- *
- * <p>The compilation and linking flags will be retrieved from the given compilation attributes.
- * The names of the generated artifacts will be retrieved from the given intermediate artifacts.
- *
- * <p>By instantiating multiple compilation supports for the same rule but with intermediate
- * artifacts with different output prefixes, multiple archives can be compiled for the same rule
- * context.
- */
- public LegacyCompilationSupport(
- RuleContext ruleContext,
- IntermediateArtifacts intermediateArtifacts,
- CompilationAttributes compilationAttributes) {
- this(ruleContext, ruleContext.getConfiguration(), intermediateArtifacts, compilationAttributes);
- }
-
/**
* Creates a new legacy compilation support for the given rule and build configuration.
*
@@ -165,7 +129,7 @@ public class LegacyCompilationSupport extends CompilationSupport {
* artifacts with different output prefixes, multiple archives can be compiled for the same rule
* context.
*/
- public LegacyCompilationSupport(
+ LegacyCompilationSupport(
RuleContext ruleContext,
BuildConfiguration buildConfiguration,
IntermediateArtifacts intermediateArtifacts,
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 11f8696a28..4e9caee9c9 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
@@ -102,7 +102,7 @@ public class MultiArchBinarySupport {
CompilationArtifacts compilationArtifacts =
CompilationSupport.compilationArtifacts(
ruleContext, ObjcRuleClasses.intermediateArtifacts(ruleContext, childConfig));
- new LegacyCompilationSupport(ruleContext, childConfig)
+ CompilationSupport.createForConfig(ruleContext, childConfig)
.registerCompileAndArchiveActions(compilationArtifacts, objcProvider)
.registerLinkActions(
objcProvider,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBinary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBinary.java
index 49a99db5da..02771efc62 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBinary.java
@@ -24,9 +24,6 @@ public class ObjcBinary extends BinaryLinkingTargetFactory {
// TODO(bazel-team): Use LIBRARY_STATIC as parameter instead of APPLICATION once objc_binary
// no longer creates an application bundle
- XcodeProductType.APPLICATION,
-
- // If --experimental_objc_binary is set
- UsesCrosstool.EXPERIMENTAL);
+ XcodeProductType.APPLICATION);
}
}
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 d837e0be66..6df5a446a2 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
@@ -23,6 +23,7 @@ import com.google.devtools.build.lib.packages.Attribute.SplitTransition;
import com.google.devtools.build.lib.rules.apple.DottedVersion;
import com.google.devtools.build.lib.rules.apple.DottedVersionConverter;
import com.google.devtools.common.options.Converters.CommaSeparatedOptionListConverter;
+import com.google.devtools.common.options.EnumConverter;
import com.google.devtools.common.options.Option;
import java.util.List;
@@ -213,19 +214,47 @@ public class ObjcCommandLineOptions extends FragmentOptions {
)
public boolean deviceDebugEntitlements;
+ /**
+ * Specifies the circumstances under which a CROSSTOOL is used for objc in this configuration.
+ */
+ enum ObjcCrosstoolMode {
+ /** The CROSSTOOL is used for all objc compile, archive, and link actions. */
+ ALL,
+
+ /**
+ * The CROSSTOOL is used for all objc compile and archive actions originating from an
+ * objc_library target.
+ */
+ LIBRARY,
+
+ /** The CROSSTOOL is not used for any objc action. */
+ OFF
+ }
+
+ /**
+ * Converter for {@link ObjcCrosstoolMode}.
+ */
+ public static class ObjcCrosstoolUsageConverter extends EnumConverter<ObjcCrosstoolMode> {
+ public ObjcCrosstoolUsageConverter() {
+ super(ObjcCrosstoolMode.class, "objc crosstool mode");
+ }
+ }
+
@Option(
- name = "experimental_objc_library",
- defaultValue = "false",
- category = "undocumented"
+ name = "experimental_objc_crosstool",
+ defaultValue = "off",
+ category = "undocumented",
+ converter = ObjcCrosstoolUsageConverter.class
)
- public boolean experimentalObjcLibrary;
+ public ObjcCrosstoolMode objcCrosstoolMode;
+ // TODO(b/34260565): Remove in favor of --experimental_objc_crosstool
@Option(
- name = "experimental_objc_use_crosstool_for_binary",
- defaultValue = "false",
- category = "undocumented"
+ name = "experimental_objc_library",
+ defaultValue = "false",
+ category = "undocumented"
)
- public boolean experimentalUseCrosstoolForBinary;
+ public boolean experimentalObjcLibrary;
@Option(
name = "objc_use_dotd_pruning",
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 4a797bcada..8d2bc203b0 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
@@ -24,6 +24,7 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.rules.apple.DottedVersion;
import com.google.devtools.build.lib.rules.apple.Platform.PlatformType;
import com.google.devtools.build.lib.rules.cpp.HeaderDiscovery;
+import com.google.devtools.build.lib.rules.objc.ObjcCommandLineOptions.ObjcCrosstoolMode;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
@@ -75,8 +76,8 @@ public class ObjcConfiguration extends BuildConfiguration.Fragment {
private final boolean debugWithGlibcxx;
@Nullable private final Label extraEntitlements;
private final boolean deviceDebugEntitlements;
+ private final ObjcCrosstoolMode objcCrosstoolMode;
private final boolean experimentalObjcLibrary;
- private final boolean experimentalUseCrosstoolForBinary;
private final boolean enableAppleBinaryNativeProtos;
private final HeaderDiscovery.DotdPruningMode dotdPruningPlan;
@@ -110,8 +111,8 @@ public class ObjcConfiguration extends BuildConfiguration.Fragment {
this.debugWithGlibcxx = objcOptions.debugWithGlibcxx;
this.extraEntitlements = objcOptions.extraEntitlements;
this.deviceDebugEntitlements = objcOptions.deviceDebugEntitlements;
+ this.objcCrosstoolMode = objcOptions.objcCrosstoolMode;
this.experimentalObjcLibrary = objcOptions.experimentalObjcLibrary;
- this.experimentalUseCrosstoolForBinary = objcOptions.experimentalUseCrosstoolForBinary;
this.enableAppleBinaryNativeProtos = objcOptions.enableAppleBinaryNativeProtos;
this.dotdPruningPlan =
objcOptions.useDotdPruning
@@ -322,16 +323,11 @@ public class ObjcConfiguration extends BuildConfiguration.Fragment {
}
/**
- * Returns true if all objc_library targets should be configured as if they were
- * experimental_objc_library targets.
+ * Returns an {@link ObjcCrosstoolMode} that specifies the circumstances under which a
+ * CROSSTOOL is used for objc in this configuration.
*/
- public boolean useExperimentalObjcLibrary() {
- return experimentalObjcLibrary;
- }
-
- /** Returns true if objc_binary targets should use the crosstool for compiling and archiving. */
- public boolean useCrosstoolForBinary() {
- return experimentalUseCrosstoolForBinary;
+ public ObjcCrosstoolMode getObjcCrosstoolMode() {
+ return experimentalObjcLibrary ? ObjcCrosstoolMode.LIBRARY : objcCrosstoolMode;
}
/** Returns true if apple_binary targets should generate and link Objc protos. */
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcImport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcImport.java
index cbadc2c0f8..a4166e13da 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcImport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcImport.java
@@ -58,7 +58,7 @@ public class ObjcImport implements RuleConfiguredTargetFactory {
Iterable<Artifact> publicHeaders = compilationAttributes.hdrs();
CppModuleMap moduleMap = intermediateArtifacts.moduleMap();
- new LegacyCompilationSupport(ruleContext)
+ CompilationSupport.create(ruleContext)
.registerGenerateModuleMapAction(moduleMap, publicHeaders)
.addXcodeSettings(xcodeProviderBuilder, common)
.validateAttributes();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java
index c774887f0b..efcbe30443 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java
@@ -23,6 +23,7 @@ import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory;
import com.google.devtools.build.lib.rules.cpp.CcLinkParamsProvider;
+import com.google.devtools.build.lib.rules.objc.ObjcCommandLineOptions.ObjcCrosstoolMode;
import com.google.devtools.build.lib.rules.objc.ObjcCommon.ResourceAttributes;
import com.google.devtools.build.lib.rules.test.InstrumentedFilesProvider;
import com.google.devtools.build.lib.syntax.Type;
@@ -58,7 +59,10 @@ public class ObjcLibrary implements RuleConfiguredTargetFactory {
public ConfiguredTarget create(RuleContext ruleContext)
throws InterruptedException, RuleErrorException {
// Support treating objc_library as experimental_objc_library
- if (ruleContext.getFragment(ObjcConfiguration.class).useExperimentalObjcLibrary()) {
+ // TODO(b/34260565): Deprecate ExperimentalObjcLibrary in favor of ObjcLibrary with
+ // CrosstoolCompilationSupport.
+ if (ruleContext.getFragment(ObjcConfiguration.class).getObjcCrosstoolMode()
+ != ObjcCrosstoolMode.OFF) {
return ExperimentalObjcLibrary.configureExperimentalObjcLibrary(ruleContext);
}
@@ -69,7 +73,7 @@ public class ObjcLibrary implements RuleConfiguredTargetFactory {
.addAll(common.getCompiledArchive().asSet());
CompilationSupport compilationSupport =
- new LegacyCompilationSupport(ruleContext)
+ CompilationSupport.create(ruleContext)
.registerCompileAndArchiveActions(common)
.registerFullyLinkAction(common.getObjcProvider(),
ruleContext.getImplicitOutputArtifact(CompilationSupport.FULLY_LINKED_LIB))
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java
index f8b8a7deb2..3c62f07a36 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java
@@ -168,10 +168,7 @@ final class ProtobufSupport {
.addAdditionalHdrs(
getGeneratedProtoOutputs(inputsToOutputsMap.values(), HEADER_SUFFIX));
- new LegacyCompilationSupport(
- ruleContext,
- intermediateArtifacts,
- new CompilationAttributes.Builder().build())
+ CompilationSupport.createForAttributes(ruleContext, new CompilationAttributes.Builder().build())
.registerGenerateModuleMapAction(moduleMapCompilationArtifacts.build());
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ProtocolBuffers2Support.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ProtocolBuffers2Support.java
index d781d49b2f..61abb70618 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ProtocolBuffers2Support.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ProtocolBuffers2Support.java
@@ -97,7 +97,7 @@ final class ProtocolBuffers2Support {
*/
public ProtocolBuffers2Support registerCompilationActions()
throws RuleErrorException, InterruptedException {
- new LegacyCompilationSupport(ruleContext)
+ CompilationSupport.create(ruleContext)
.registerCompileAndArchiveActions(getCommon())
.registerGenerateModuleMapAction(getCompilationArtifacts());
return this;