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
diff --git a/src/main/java/com/google/devtools/build/lib/Constants.java b/src/main/java/com/google/devtools/build/lib/Constants.java
index 0928dc9..556a742 100644
--- a/src/main/java/com/google/devtools/build/lib/Constants.java
+++ b/src/main/java/com/google/devtools/build/lib/Constants.java
@@ -28,9 +28,6 @@
// Native Java deps are all linked into a single file, which is named with this value + ".so".
public static final String NATIVE_DEPS_LIB_SUFFIX = "_nativedeps";
- // Locations of implicit Android SDK dependencies.
- public static final String ANDROID_DEFAULT_SDK = "//external:android/sdk";
-
// Most other tools dependencies use this; we plan to split it into per-language repositories.
public static final String TOOLS_REPOSITORY = "@bazel_tools";
}
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidRuleClasses.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidRuleClasses.java
index f0af73a..ca5a669 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidRuleClasses.java
@@ -22,6 +22,7 @@
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.RuleClass;
import com.google.devtools.build.lib.rules.android.AndroidRuleClasses;
+import com.google.devtools.build.lib.rules.android.AndroidRuleClasses.AndroidSdkLabel;
import com.google.devtools.build.lib.rules.android.AndroidToolsDefaultsJar;
/** Rule class definitions for Android rules. */
@@ -36,7 +37,8 @@
.add(
attr(":android_sdk", LABEL)
.allowedRuleClasses("android_sdk", "filegroup")
- .value(AndroidRuleClasses.ANDROID_SDK))
+ .value(new AndroidSdkLabel(
+ environment.getToolsLabel(AndroidRuleClasses.DEFAULT_SDK))))
.build();
}
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 7127331..606a35e 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.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 @@
@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 @@
// 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 FragmentOptions getHost(boolean fallback) {
Options host = (Options) super.getHost(fallback);
host.androidCrosstoolTop = androidCrosstoolTop;
+ host.sdk = sdk;
return host;
}
@@ -321,7 +315,13 @@
@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 @@
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 7cd976d..0cb5c90 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 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 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 @@
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 @@
}
}
}
+
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 60a912d..cceff8a 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_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.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 @@
@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)
diff --git a/tools/android/BUILD b/tools/android/BUILD
index 3b0cc44..b6e7cb4 100644
--- a/tools/android/BUILD
+++ b/tools/android/BUILD
@@ -1,6 +1,9 @@
package(default_visibility = ["//visibility:public"])
-filegroup(name = "sdk")
+filegroup(
+ name = "sdk",
+ srcs = ["//external:android/sdk"],
+)
android_library(
name = "incremental_stub_application",