diff options
Diffstat (limited to 'src')
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"))); } |