aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
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")));
}