diff options
author | Cal Peyser <cpeyser@google.com> | 2016-08-22 15:59:41 +0000 |
---|---|---|
committer | Philipp Wollermann <philwo@google.com> | 2016-08-23 09:28:18 +0000 |
commit | 77fe154515d664345a21a167a1a3530a077ac820 (patch) | |
tree | 59822df46fe64a419833571a9b3e28a85adfbb6d /src/main/java/com/google/devtools/build/lib/rules/objc | |
parent | 846a5ab98fc26d72024890fdb79a5d3bc6a5a1ba (diff) |
Add a switch to treat any objc_library like an experimental_objc_library. This
will be used to perform tests of the changeover.
--
MOS_MIGRATED_REVID=130943982
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/objc')
5 files changed, 45 insertions, 9 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalObjcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalObjcLibrary.java index 5de560630b..da0f88f76c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalObjcLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalObjcLibrary.java @@ -50,7 +50,18 @@ public class ExperimentalObjcLibrary implements RuleConfiguredTargetFactory { ImmutableList.of("objc-compile", "objc++-compile", "objc-archive", "objc-fully-link"); @Override - public ConfiguredTarget create(RuleContext ruleContext) + public ConfiguredTarget create(RuleContext ruleContext) + throws InterruptedException, RuleErrorException { + return configureExperimentalObjcLibrary(ruleContext); + } + + /** + * Returns a configured target using the given context as an experimental_objc_library. + * + * <p>Implemented outside of {@link RuleClass.ConfiguredTargetFactory#create} so as to allow + * experimental analysis of objc_library targets as experimental_objc_library. + */ + public static ConfiguredTarget configureExperimentalObjcLibrary(RuleContext ruleContext) throws InterruptedException, RuleErrorException { validateAttributes(ruleContext); @@ -131,7 +142,7 @@ public class ExperimentalObjcLibrary implements RuleConfiguredTargetFactory { .build(); } - private FeatureConfiguration getFeatureConfiguration(RuleContext ruleContext) { + private static FeatureConfiguration getFeatureConfiguration(RuleContext ruleContext) { CcToolchainProvider toolchain = ruleContext .getPrerequisite(":cc_toolchain", Mode.TARGET) @@ -159,7 +170,7 @@ public class ExperimentalObjcLibrary implements RuleConfiguredTargetFactory { return toolchain.getFeatures().getFeatureConfiguration(activatedCrosstoolSelectables.build()); } - private void registerArchiveAction( + private static void registerArchiveAction( IntermediateArtifacts intermediateArtifacts, CompilationSupport compilationSupport, CompilationArtifacts compilationArtifacts, @@ -173,7 +184,7 @@ public class ExperimentalObjcLibrary implements RuleConfiguredTargetFactory { helper.setLinkType(LinkTargetType.OBJC_ARCHIVE).addLinkActionInput(objList); } - private void registerFullyLinkAction( + private static void registerFullyLinkAction( RuleContext ruleContext, ObjcCommon common, VariablesExtension variablesExtension, @@ -202,7 +213,7 @@ public class ExperimentalObjcLibrary implements RuleConfiguredTargetFactory { } /** Throws errors or warnings for bad attribute state. */ - private void validateAttributes(RuleContext ruleContext) { + private static void validateAttributes(RuleContext ruleContext) { for (String copt : ObjcCommon.getNonCrosstoolCopts(ruleContext)) { if (copt.contains("-fmodules-cache-path")) { ruleContext.ruleWarning(CompilationSupport.MODULES_CACHE_PATH_WARNING); @@ -213,7 +224,7 @@ public class ExperimentalObjcLibrary implements RuleConfiguredTargetFactory { /** * Constructs an {@link ObjcCommon} instance based on the attributes of the given rule context. */ - private ObjcCommon common( + private static ObjcCommon common( RuleContext ruleContext, CompilationAttributes compilationAttributes, CompilationArtifacts compilationArtifacts) { @@ -228,7 +239,7 @@ public class ExperimentalObjcLibrary implements RuleConfiguredTargetFactory { .build(); } - private ImmutableList<Artifact> getObjFiles( + private static ImmutableList<Artifact> getObjFiles( CompilationArtifacts compilationArtifacts, IntermediateArtifacts intermediateArtifacts) { ImmutableList.Builder<Artifact> result = new ImmutableList.Builder<>(); for (Artifact sourceFile : compilationArtifacts.getSrcs()) { 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 ac2abad6a0..bd6e6723aa 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 @@ -200,6 +200,13 @@ public class ObjcCommandLineOptions extends FragmentOptions { ) public boolean deviceDebugEntitlements; + @Option( + name = "experimental_objc_library", + defaultValue = "false", + category = "undocumented" + ) + public boolean experimentalObjcLibrary; + @VisibleForTesting static final String DEFAULT_MINIMUM_IOS = "7.0"; @SuppressWarnings("unchecked") 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 33c1fb5541..e22de84701 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 @@ -71,6 +71,7 @@ public class ObjcConfiguration extends BuildConfiguration.Fragment { private final boolean debugWithGlibcxx; @Nullable private final Label extraEntitlements; private final boolean deviceDebugEntitlements; + private final boolean experimentalObjcLibrary; ObjcConfiguration(ObjcCommandLineOptions objcOptions, BuildConfiguration.Options options, @Nullable BlazeDirectories directories) { @@ -95,6 +96,7 @@ public class ObjcConfiguration extends BuildConfiguration.Fragment { this.debugWithGlibcxx = objcOptions.debugWithGlibcxx; this.extraEntitlements = objcOptions.extraEntitlements; this.deviceDebugEntitlements = objcOptions.deviceDebugEntitlements; + this.experimentalObjcLibrary = objcOptions.experimentalObjcLibrary; } /** @@ -276,4 +278,12 @@ public class ObjcConfiguration extends BuildConfiguration.Fragment { public boolean useDeviceDebugEntitlements() { return deviceDebugEntitlements; } + + /** + * Returns true if all objc_library targets should be configured as if they were + * experimental_objc_library targets. + */ + public boolean useExperimentalObjcLibrary() { + return experimentalObjcLibrary; + } } 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 1f371fb2cb..6341a60178 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 @@ -93,6 +93,11 @@ public class ObjcLibrary implements RuleConfiguredTargetFactory { @Override public ConfiguredTarget create(RuleContext ruleContext) throws InterruptedException, RuleErrorException { + // Support treating objc_library as experimental_objc_library + if (ruleContext.getFragment(ObjcConfiguration.class).useExperimentalObjcLibrary()) { + return ExperimentalObjcLibrary.configureExperimentalObjcLibrary(ruleContext); + } + ObjcCommon common = common(ruleContext); XcodeProvider.Builder xcodeProviderBuilder = new XcodeProvider.Builder(); diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryRule.java index fa1be6ed59..9c612d45da 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryRule.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryRule.java @@ -21,6 +21,7 @@ import com.google.devtools.build.lib.packages.ImplicitOutputsFunction; import com.google.devtools.build.lib.packages.RuleClass; import com.google.devtools.build.lib.packages.RuleClass.Builder; import com.google.devtools.build.lib.rules.apple.AppleConfiguration; +import com.google.devtools.build.lib.rules.cpp.CppConfiguration; /** * Rule definition for objc_library. @@ -30,7 +31,8 @@ public class ObjcLibraryRule implements RuleDefinition { @Override public RuleClass build(Builder builder, RuleDefinitionEnvironment env) { return builder - .requiresConfigurationFragments(ObjcConfiguration.class, AppleConfiguration.class) + .requiresConfigurationFragments(ObjcConfiguration.class, AppleConfiguration.class, + CppConfiguration.class) /*<!-- #BLAZE_RULE(objc_library).IMPLICIT_OUTPUTS --> <ul> <li><code><var>name</var>.xcodeproj/project.pbxproj</code>: An Xcode project file which @@ -50,7 +52,8 @@ public class ObjcLibraryRule implements RuleDefinition { .name("objc_library") .factoryClass(ObjcLibrary.class) .ancestors(BaseRuleClasses.BaseRule.class, ObjcRuleClasses.CompilingRule.class, - ObjcRuleClasses.AlwaysLinkRule.class, ObjcRuleClasses.XcodegenRule.class) + ObjcRuleClasses.CrosstoolRule.class, ObjcRuleClasses.AlwaysLinkRule.class, + ObjcRuleClasses.XcodegenRule.class) .build(); } } |