aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar gregce <gregce@google.com>2017-12-21 14:31:24 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2017-12-21 14:33:45 -0800
commit9ccafc68eff8485f7abedf35e6130d564f5c118e (patch)
treeb5bf1d17225e72e9dd10f1475fef7e28be39f925 /src
parent0421d7d8566a6fbe35e17a1edc3ab4d622aa6c9e (diff)
Move config transition definitions out of lib.packages.Attribute.
This cleans up a legacy API from Bazel's "static configuration" days, when transition definitions involved deep and complex logic in the analysis code. That was too much cruft to embed into lib.packages. But the modern definitions are way simpler and thus easier to embed. This change only *copies* the existing definitions. Because a lot of references will have to be updated, we'll migrate the move over a few changes. PiperOrigin-RevId: 179859293
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/config/FragmentOptions.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/config/transitions/ConfigurationTransition.java43
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/config/transitions/SplitTransition.java32
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/config/transitions/Transition.java27
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java3
-rw-r--r--src/test/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcherRcoptionsTest.java2
9 files changed, 111 insertions, 10 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
index c3b6c41818..785a54e88c 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
@@ -1070,7 +1070,7 @@ public class BuildConfiguration implements BuildEvent {
}
@Override
- public Map<String, Set<Label>> getDefaultsLabels(BuildConfiguration.Options commonOptions) {
+ public Map<String, Set<Label>> getDefaultsLabels() {
return ImmutableMap.<String, Set<Label>>of(
"coverage_support", ImmutableSet.of(coverageSupport),
"coverage_report_generator", ImmutableSet.of(coverageReportGenerator));
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java
index 51def581cc..ae0a7f66dd 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java
@@ -78,7 +78,9 @@ public final class BuildOptions implements Cloneable, Serializable {
Builder builder = builder();
for (FragmentOptions options : fragmentOptionsMap.values()) {
if (optionsClasses.contains(options.getClass())
- || options instanceof BuildConfiguration.Options) {
+ // TODO(bazel-team): make this non-hacky while not requiring BuildConfiguration access
+ // to BuildOptions.
+ || options.toString().contains("BuildConfiguration$Options")) {
builder.add(options);
}
}
@@ -133,10 +135,9 @@ public final class BuildOptions implements Cloneable, Serializable {
// It would be very convenient to use a Multimap here, but we cannot do that because we need to
// support defaults labels that have zero elements.
ImmutableMap<String, ImmutableSet<Label>> getDefaultsLabels() {
- BuildConfiguration.Options opts = get(BuildConfiguration.Options.class);
Map<String, Set<Label>> collector = new TreeMap<>();
for (FragmentOptions fragment : fragmentOptionsMap.values()) {
- for (Map.Entry<String, Set<Label>> entry : fragment.getDefaultsLabels(opts).entrySet()) {
+ for (Map.Entry<String, Set<Label>> entry : fragment.getDefaultsLabels().entrySet()) {
if (!collector.containsKey(entry.getKey())) {
collector.put(entry.getKey(), new TreeSet<Label>());
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentOptions.java b/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentOptions.java
index 2ddb5079ef..f6b2bca182 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentOptions.java
@@ -35,7 +35,7 @@ public abstract class FragmentOptions extends OptionsBase implements Cloneable,
* allowed to change depending on the value of the options.
*/
@SuppressWarnings("unused")
- public Map<String, Set<Label>> getDefaultsLabels(BuildConfiguration.Options commonOptions) {
+ public Map<String, Set<Label>> getDefaultsLabels() {
return ImmutableMap.of();
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/ConfigurationTransition.java b/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/ConfigurationTransition.java
new file mode 100644
index 0000000000..6cee8d4509
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/ConfigurationTransition.java
@@ -0,0 +1,43 @@
+// Copyright 2017 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.devtools.build.lib.analysis.config.transitions;
+
+/**
+ * Declaration how the configuration should change when following a label or label list attribute.
+ *
+ * <p>Do not add to this. This is a legacy interface from when Blaze had limited support for
+ * transitions. Use {@link PatchTransition} or {@link SplitTransition} instead.
+ */
+@Deprecated
+public enum ConfigurationTransition implements Transition {
+ /** No transition, i.e., the same configuration as the current. */
+ NONE,
+
+ /** Transition to a null configuration (applies to, e.g., input files). */
+ NULL,
+
+ /** Transition from the target configuration to the data configuration. */
+ // TODO(bazel-team): Move this elsewhere.
+ DATA,
+
+ /**
+ * Transition to one or more configurations. To obtain the actual child configurations,
+ * invoke {@link com.google.devtools.build.lib.packages.Attribute#getSplitTransition}).
+ * com.google.devtools.build.lib.packages.AttributeMap)}.
+ *
+ * <p>See {@link SplitTransition}.
+ **/
+ SPLIT
+}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/SplitTransition.java b/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/SplitTransition.java
new file mode 100644
index 0000000000..9dc4eeedb9
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/SplitTransition.java
@@ -0,0 +1,32 @@
+// Copyright 2017 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.devtools.build.lib.analysis.config.transitions;
+
+import com.google.devtools.build.lib.analysis.config.BuildOptions;
+import com.google.devtools.build.lib.concurrent.ThreadSafety;
+import java.util.List;
+
+/**
+ * A configuration split transition; this should be used to transition to multiple configurations
+ * simultaneously. Note that the corresponding rule implementations must have special support to
+ * handle this.
+ */
+@ThreadSafety.Immutable
+public interface SplitTransition extends Transition {
+ /**
+ * Return the list of {@code BuildOptions} after splitting; empty if not applicable.
+ */
+ List<BuildOptions> split(BuildOptions buildOptions);
+}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/Transition.java b/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/Transition.java
new file mode 100644
index 0000000000..cf647fd0da
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/Transition.java
@@ -0,0 +1,27 @@
+// Copyright 2017 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.devtools.build.lib.analysis.config.transitions;
+
+/**
+ * A configuration transition.
+ */
+public interface Transition {
+ /**
+ * Does this transition switch to a "host" configuration?
+ */
+ default boolean isHostTransition() {
+ return false;
+ }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java
index e9906d1ad4..2649e2091d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java
@@ -17,7 +17,6 @@ import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
-import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration.LabelConverter;
import com.google.devtools.build.lib.analysis.config.CompilationMode;
import com.google.devtools.build.lib.analysis.config.FragmentOptions;
@@ -892,7 +891,7 @@ public class CppOptions extends FragmentOptions {
}
@Override
- public Map<String, Set<Label>> getDefaultsLabels(BuildConfiguration.Options commonOptions) {
+ public Map<String, Set<Label>> getDefaultsLabels() {
Set<Label> crosstoolLabels = new LinkedHashSet<>();
crosstoolLabels.add(crosstoolTop);
if (hostCrosstoolTop != null) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java
index 6155d68e0d..fe72380895 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java
@@ -15,7 +15,6 @@ package com.google.devtools.build.lib.rules.java;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
-import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration.LabelConverter;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration.LabelListConverter;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration.LabelMapConverter;
@@ -581,7 +580,7 @@ public class JavaOptions extends FragmentOptions {
}
@Override
- public Map<String, Set<Label>> getDefaultsLabels(BuildConfiguration.Options commonOptions) {
+ public Map<String, Set<Label>> getDefaultsLabels() {
Map<String, Set<Label>> result = new HashMap<>();
result.put("JDK", ImmutableSet.of(javaBase, hostJavaBase));
result.put("JAVA_TOOLCHAIN", ImmutableSet.of(javaToolchain));
diff --git a/src/test/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcherRcoptionsTest.java b/src/test/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcherRcoptionsTest.java
index 2198a13f0e..75a4c955ff 100644
--- a/src/test/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcherRcoptionsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcherRcoptionsTest.java
@@ -318,7 +318,7 @@ public class BlazeCommandDispatcherRcoptionsTest {
public boolean fakeOpt;
@Override
- public Map<String, Set<Label>> getDefaultsLabels(BuildConfiguration.Options commonOptions) {
+ public Map<String, Set<Label>> getDefaultsLabels() {
return ImmutableMap.<String, Set<Label>>of(
"mock_target", ImmutableSet.of(Label.parseAbsoluteUnchecked("//mock:target")));
}