aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/android
diff options
context:
space:
mode:
authorGravatar Luis Fernando Pino Duque <lpino@google.com>2016-04-26 15:34:43 +0000
committerGravatar Yun Peng <pcloudy@google.com>2016-04-27 11:46:13 +0000
commitbac102a562bce8a423754c19e35ad7656d3f5d2c (patch)
tree769c760addc05c1c4ad5a6a4aa1378ad8c8a5b91 /src/main/java/com/google/devtools/build/lib/rules/android
parentebde9a267486fc2573eeb4d17f8f8e9c4099a132 (diff)
Set --android_sdk=@bazel_tools//tools/android:sdk by default and delete Constants.ANDROID_DEFAULT_SDK.
This CL also updates the test infrastructure to include a mock of @bazel_tools//tools/android:sdk. -- MOS_MIGRATED_REVID=120815577
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/android')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java28
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java29
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/JackAspect.java14
3 files changed, 41 insertions, 30 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java
index 712733196c..606a35e9a0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java
@@ -18,11 +18,11 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Multimap;
-import com.google.devtools.build.lib.Constants;
+import com.google.devtools.build.lib.analysis.RedirectChaser;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
-import com.google.devtools.build.lib.analysis.config.BuildConfiguration.DefaultLabelConverter;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration.EmptyToNullLabelConverter;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration.Fragment;
+import com.google.devtools.build.lib.analysis.config.BuildConfiguration.LabelConverter;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration.StrictDepsConverter;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration.StrictDepsMode;
import com.google.devtools.build.lib.analysis.config.BuildOptions;
@@ -48,13 +48,6 @@ import java.util.Set;
@Immutable
public class AndroidConfiguration extends BuildConfiguration.Fragment {
- /** Converter for --android_sdk. */
- public static class AndroidSdkConverter extends DefaultLabelConverter {
- public AndroidSdkConverter() {
- super(Constants.ANDROID_DEFAULT_SDK);
- }
- }
-
/**
* Converter for {@link com.google.devtools.build.lib.rules.android.AndroidConfiguration.ConfigurationDistinguisher}
*/
@@ -198,9 +191,9 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
// Label of filegroup combining all Android tools used as implicit dependencies of
// android_* rules
@Option(name = "android_sdk",
- defaultValue = "",
+ defaultValue = "@bazel_tools//tools/android:sdk",
category = "version",
- converter = AndroidSdkConverter.class,
+ converter = LabelConverter.class,
help = "Specifies Android SDK/platform that is used to build Android applications.")
public Label sdk;
@@ -300,6 +293,7 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
public FragmentOptions getHost(boolean fallback) {
Options host = (Options) super.getHost(fallback);
host.androidCrosstoolTop = androidCrosstoolTop;
+ host.sdk = sdk;
return host;
}
@@ -321,7 +315,13 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
@Override
public Fragment create(ConfigurationEnvironment env, BuildOptions buildOptions)
throws InvalidConfigurationException {
- return new AndroidConfiguration(buildOptions.get(Options.class));
+ AndroidConfiguration.Options androidOptions =
+ buildOptions.get(AndroidConfiguration.Options.class);
+ Label androidSdk = RedirectChaser.followRedirects(env, androidOptions.sdk, "android_sdk");
+ if (androidSdk == null) {
+ return null;
+ }
+ return new AndroidConfiguration(buildOptions.get(Options.class), androidSdk);
}
@Override
@@ -349,8 +349,8 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
private final boolean allowAndroidLibraryDepsWithoutSrcs;
private final boolean useAndroidResourceShrinking;
- AndroidConfiguration(Options options) {
- this.sdk = options.sdk;
+ AndroidConfiguration(Options options, Label androidSdk) {
+ this.sdk = androidSdk;
this.incrementalNativeLibs = options.incrementalNativeLibs;
this.strictDeps = options.strictDeps;
this.legacyNativeSupport = options.legacyNativeSupport;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
index 7cd976d654..0cb5c907fc 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
@@ -28,7 +28,6 @@ import static com.google.devtools.build.lib.util.FileTypeSet.ANY_FILE;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSortedSet;
import com.google.common.collect.Lists;
-import com.google.devtools.build.lib.Constants;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
@@ -169,19 +168,20 @@ public final class AndroidRuleClasses {
public static final String DEFAULT_RESOURCE_SHRINKER =
"//tools/android:resource_shrinker";
public static final String DEFAULT_AAR_GENERATOR = "//tools/android:aar_generator";
+ public static final String DEFAULT_SDK = "//tools/android:sdk";
- public static final Label DEFAULT_ANDROID_SDK =
- Label.parseAbsoluteUnchecked(
- Constants.ANDROID_DEFAULT_SDK);
-
- public static final LateBoundLabel<BuildConfiguration> ANDROID_SDK =
- new LateBoundLabel<BuildConfiguration>(DEFAULT_ANDROID_SDK, AndroidConfiguration.class) {
- @Override
- public Label resolve(Rule rule, AttributeMap attributes,
- BuildConfiguration configuration) {
- return configuration.getFragment(AndroidConfiguration.class).getSdk();
- }
- };
+ /**
+ * The default label of android_sdk option
+ */
+ public static final class AndroidSdkLabel extends LateBoundLabel<BuildConfiguration> {
+ public AndroidSdkLabel(Label androidSdk) {
+ super(androidSdk, AndroidConfiguration.class);
+ }
+ @Override
+ public Label resolve(Rule rule, AttributeMap attributes, BuildConfiguration configuration) {
+ return configuration.getFragment(AndroidConfiguration.class).getSdk();
+ }
+ }
public static final SplitTransition<BuildOptions> ANDROID_SPLIT_TRANSITION =
new SplitTransition<BuildOptions>() {
@@ -496,7 +496,7 @@ public final class AndroidRuleClasses {
return builder
.add(attr(":android_sdk", LABEL)
.allowedRuleClasses("android_sdk", "filegroup")
- .value(ANDROID_SDK))
+ .value(new AndroidSdkLabel(env.getToolsLabel(AndroidRuleClasses.DEFAULT_SDK))))
/* <!-- #BLAZE_RULE($android_base).ATTRIBUTE(plugins) -->
Java compiler plugins to run at compile-time.
Every <code>java_plugin</code> specified in
@@ -780,3 +780,4 @@ com/google/common/base/Objects.class
}
}
}
+
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/JackAspect.java b/src/main/java/com/google/devtools/build/lib/rules/android/JackAspect.java
index 60a912d774..cceff8a5ba 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/JackAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/JackAspect.java
@@ -19,6 +19,7 @@ import static com.google.devtools.build.lib.packages.BuildType.LABEL;
import static com.google.devtools.build.lib.packages.BuildType.LABEL_LIST;
import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.Constants;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.ConfiguredAspect;
import com.google.devtools.build.lib.analysis.ConfiguredAspectFactory;
@@ -26,13 +27,15 @@ import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
+import com.google.devtools.build.lib.cmdline.Label;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.packages.AspectDefinition;
import com.google.devtools.build.lib.packages.AspectParameters;
import com.google.devtools.build.lib.packages.NativeAspectClass.NativeAspectFactory;
+import com.google.devtools.build.lib.rules.android.AndroidRuleClasses.AndroidSdkLabel;
import com.google.devtools.build.lib.rules.java.JavaCommon;
import com.google.devtools.build.lib.rules.java.JavaSourceInfoProvider;
import com.google.devtools.build.lib.vfs.PathFragment;
-
import java.util.List;
/** Aspect to provide Jack support to rules which have java sources. */
@@ -41,11 +44,18 @@ public final class JackAspect implements NativeAspectFactory, ConfiguredAspectFa
@Override
public AspectDefinition getDefinition(AspectParameters params) {
+ Label androidSdk;
+ try {
+ androidSdk = Label.parseAbsolute(Constants.TOOLS_REPOSITORY + AndroidRuleClasses.DEFAULT_SDK);
+ } catch (LabelSyntaxException e) {
+ throw new IllegalStateException(e);
+ }
+
return new AspectDefinition.Builder("JackAspect")
.requireProvider(JavaSourceInfoProvider.class)
.add(attr(":android_sdk", LABEL)
.allowedRuleClasses("android_sdk")
- .value(AndroidRuleClasses.ANDROID_SDK))
+ .value(new AndroidSdkLabel(androidSdk)))
.attributeAspect("deps", JackAspect.class)
.attributeAspect("exports", JackAspect.class)
.attributeAspect("runtime_deps", JackAspect.class)