diff options
author | 2017-01-18 20:07:09 +0000 | |
---|---|---|
committer | 2017-01-19 12:36:38 +0000 | |
commit | 7a58fdc827434ce1b872c17cda1b0a0220842387 (patch) | |
tree | c102d493d9c6f4d55782801c57c398f7355a2424 | |
parent | 8063f294bd425d71a12f5651517fe83e866c94aa (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
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; |