aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
authorGravatar Cal Peyser <cpeyser@google.com>2016-08-22 15:59:41 +0000
committerGravatar Philipp Wollermann <philwo@google.com>2016-08-23 09:28:18 +0000
commit77fe154515d664345a21a167a1a3530a077ac820 (patch)
tree59822df46fe64a419833571a9b3e28a85adfbb6d /src/main
parent846a5ab98fc26d72024890fdb79a5d3bc6a5a1ba (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')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalObjcLibrary.java25
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommandLineOptions.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryRule.java7
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();
}
}