diff options
Diffstat (limited to 'src')
7 files changed, 101 insertions, 35 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/PlatformOptions.java b/src/main/java/com/google/devtools/build/lib/analysis/PlatformOptions.java index fb96bcdbc5..6a53a5a34a 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/PlatformOptions.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/PlatformOptions.java @@ -60,7 +60,7 @@ public class PlatformOptions extends FragmentOptions { @Option( name = "extra_toolchains", converter = LabelListConverter.class, - defaultValue = "@bazel_tools//tools/cpp:dummy_cc_toolchain", + defaultValue = "", documentationCategory = OptionDocumentationCategory.UNDOCUMENTED, effectTags = {OptionEffectTag.UNKNOWN}, metadataTags = {OptionMetadataTag.HIDDEN}, diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java index 54bfabc689..c9749efa91 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java @@ -215,6 +215,8 @@ public class BazelRuleClassProvider { builder.addConfigurationFragment(new BazelConfiguration.Loader()); builder.addConfigurationOptions(BazelConfiguration.Options.class); builder.addConfigurationOptions(BuildConfiguration.Options.class); + builder.addWorkspaceFileSuffix( + "register_toolchains('@bazel_tools//tools/cpp:dummy_cc_toolchain')\n"); } @Override diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java index 7e6b7acae8..56477bdbcd 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java @@ -610,7 +610,7 @@ public final class SkyframeBuildView { * #createConfiguredTarget}, and false immediately after the call. Use it to fail-fast in the case * that a target is requested for analysis not during the analysis phase. */ - void enableAnalysis(boolean enable) { + public void enableAnalysis(boolean enable) { this.enableAnalysis = enable; } diff --git a/src/test/java/com/google/devtools/build/lib/rules/platform/BUILD b/src/test/java/com/google/devtools/build/lib/rules/platform/BUILD index 6a3bab0083..704fcb4ea2 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/platform/BUILD +++ b/src/test/java/com/google/devtools/build/lib/rules/platform/BUILD @@ -28,8 +28,12 @@ java_test( "//src/main/java/com/google/devtools/build/lib/analysis/platform", "//src/main/java/com/google/devtools/build/lib/analysis/platform:utils", "//src/main/java/com/google/devtools/build/lib/cmdline", + "//src/main/java/com/google/devtools/build/lib/collect", + "//src/main/java/com/google/devtools/build/skyframe", + "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects", "//src/test/java/com/google/devtools/build/lib:analysis_testutil", "//src/test/java/com/google/devtools/build/lib:packages_testutil", + "//src/test/java/com/google/devtools/build/lib/skyframe:testutil", "//src/test/java/com/google/devtools/build/lib/skylark:testutil", "//third_party:guava", "//third_party:guava-testlib", @@ -43,9 +47,14 @@ java_library( srcs = TESTUTIL_SRCS, visibility = ["//src/test/java/com/google/devtools/build/lib:__subpackages__"], deps = [ + "//src/main/java/com/google/devtools/build/lib:build-base", "//src/main/java/com/google/devtools/build/lib/analysis/platform", "//src/main/java/com/google/devtools/build/lib/cmdline", + "//src/main/java/com/google/devtools/build/skyframe", + "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects", + "//src/test/java/com/google/devtools/build/lib/skyframe:testutil", "//src/test/java/com/google/devtools/build/lib/skylark:testutil", + "//third_party:guava", "//third_party:junit4", "//third_party:truth", ], diff --git a/src/test/java/com/google/devtools/build/lib/rules/platform/ToolchainTestCase.java b/src/test/java/com/google/devtools/build/lib/rules/platform/ToolchainTestCase.java index 23e92db4c1..77a9daa331 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/platform/ToolchainTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/rules/platform/ToolchainTestCase.java @@ -14,11 +14,22 @@ package com.google.devtools.build.lib.rules.platform; +import static com.google.common.truth.Truth.assertThat; + +import com.google.common.collect.ImmutableList; +import com.google.common.truth.IterableSubject; import com.google.devtools.build.lib.analysis.platform.ConstraintSettingInfo; import com.google.devtools.build.lib.analysis.platform.ConstraintValueInfo; +import com.google.devtools.build.lib.analysis.platform.DeclaredToolchainInfo; import com.google.devtools.build.lib.analysis.platform.PlatformInfo; import com.google.devtools.build.lib.cmdline.Label; +import com.google.devtools.build.lib.skyframe.RegisteredToolchainsValue; +import com.google.devtools.build.lib.skyframe.util.SkyframeExecutorTestUtils; import com.google.devtools.build.lib.skylark.util.SkylarkTestCase; +import com.google.devtools.build.skyframe.EvaluationResult; +import com.google.devtools.build.skyframe.SkyKey; +import java.util.List; +import java.util.stream.Collectors; import org.junit.Before; /** Utility methods for setting up platform and toolchain related tests. */ @@ -33,6 +44,22 @@ public abstract class ToolchainTestCase extends SkylarkTestCase { public Label testToolchainType; + protected static IterableSubject assertToolchainLabels( + RegisteredToolchainsValue registeredToolchainsValue) { + assertThat(registeredToolchainsValue).isNotNull(); + ImmutableList<DeclaredToolchainInfo> declaredToolchains = + registeredToolchainsValue.registeredToolchains(); + List<Label> labels = collectToolchainLabels(declaredToolchains); + return assertThat(labels); + } + + protected static List<Label> collectToolchainLabels(List<DeclaredToolchainInfo> toolchains) { + return toolchains + .stream() + .map((toolchain -> toolchain.toolchainLabel())) + .collect(Collectors.toList()); + } + @Before public void createConstraints() throws Exception { scratch.file( @@ -102,4 +129,15 @@ public abstract class ToolchainTestCase extends SkylarkTestCase { testToolchainType = makeLabel("//toolchain:test_toolchain"); } + + protected EvaluationResult<RegisteredToolchainsValue> requestToolchainsFromSkyframe( + SkyKey toolchainsKey) throws InterruptedException { + try { + getSkyframeExecutor().getSkyframeBuildView().enableAnalysis(true); + return SkyframeExecutorTestUtils.evaluate( + getSkyframeExecutor(), toolchainsKey, /*keepGoing=*/ false, reporter); + } finally { + getSkyframeExecutor().getSkyframeBuildView().enableAnalysis(false); + } + } } diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/DefaultToolchainTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/DefaultToolchainTest.java new file mode 100644 index 0000000000..bd6c8ccec0 --- /dev/null +++ b/src/test/java/com/google/devtools/build/lib/skyframe/DefaultToolchainTest.java @@ -0,0 +1,49 @@ +// 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.skyframe; + +import static com.google.common.truth.Truth.assertThat; + +import com.google.common.collect.ImmutableList; +import com.google.devtools.build.lib.analysis.platform.DeclaredToolchainInfo; +import com.google.devtools.build.lib.cmdline.Label; +import com.google.devtools.build.lib.rules.platform.ToolchainTestCase; +import com.google.devtools.build.skyframe.EvaluationResult; +import com.google.devtools.build.skyframe.SkyKey; +import java.util.List; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** Tests for default toolchains. */ +@RunWith(JUnit4.class) +public class DefaultToolchainTest extends ToolchainTestCase { + @Test + public void testDefaultCcToolchainIsPresent() throws Exception { + SkyKey toolchainKey = RegisteredToolchainsValue.key(targetConfig); + EvaluationResult<RegisteredToolchainsValue> result = + requestToolchainsFromSkyframe(toolchainKey); + ImmutableList<DeclaredToolchainInfo> declaredToolchains = + result.get(toolchainKey).registeredToolchains(); + List<Label> labels = collectToolchainLabels(declaredToolchains); + assertThat( + labels + .stream() + .anyMatch( + toolchainLabel -> + toolchainLabel.toString().contains("//tools/cpp:dummy_cc_toolchain_impl"))) + .isTrue(); + } +} diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunctionTest.java index 0c4996ecf8..6ffa290a20 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunctionTest.java @@ -19,15 +19,10 @@ import static com.google.devtools.build.skyframe.EvaluationResultSubjectFactory. import com.google.common.collect.ImmutableList; import com.google.common.testing.EqualsTester; -import com.google.common.truth.IterableSubject; import com.google.devtools.build.lib.analysis.platform.DeclaredToolchainInfo; -import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.rules.platform.ToolchainTestCase; -import com.google.devtools.build.lib.skyframe.util.SkyframeExecutorTestUtils; import com.google.devtools.build.skyframe.EvaluationResult; import com.google.devtools.build.skyframe.SkyKey; -import java.util.List; -import java.util.stream.Collectors; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @@ -36,17 +31,6 @@ import org.junit.runners.JUnit4; @RunWith(JUnit4.class) public class RegisteredToolchainsFunctionTest extends ToolchainTestCase { - private EvaluationResult<RegisteredToolchainsValue> requestToolchainsFromSkyframe( - SkyKey toolchainsKey) throws InterruptedException { - try { - getSkyframeExecutor().getSkyframeBuildView().enableAnalysis(true); - return SkyframeExecutorTestUtils.evaluate( - getSkyframeExecutor(), toolchainsKey, /*keepGoing=*/ false, reporter); - } finally { - getSkyframeExecutor().getSkyframeBuildView().enableAnalysis(false); - } - } - @Test public void testRegisteredToolchains() throws Exception { // Request the toolchains. @@ -100,7 +84,7 @@ public class RegisteredToolchainsFunctionTest extends ToolchainTestCase { // Verify that the target registered with the extra_toolchains flag is first in the list. assertToolchainLabels(result.get(toolchainsKey)) - .containsExactly( + .containsAllOf( makeLabel("//extra:extra_toolchain_impl"), makeLabel("//toolchain:test_toolchain_1")) .inOrder(); } @@ -168,20 +152,4 @@ public class RegisteredToolchainsFunctionTest extends ToolchainTestCase { RegisteredToolchainsValue.create(ImmutableList.of(toolchain2)), RegisteredToolchainsValue.create(ImmutableList.of(toolchain2, toolchain1))); } - - private static IterableSubject assertToolchainLabels( - RegisteredToolchainsValue registeredToolchainsValue) { - assertThat(registeredToolchainsValue).isNotNull(); - ImmutableList<DeclaredToolchainInfo> declaredToolchains = - registeredToolchainsValue.registeredToolchains(); - List<Label> labels = collectToolchainLabels(declaredToolchains); - return assertThat(labels); - } - - private static List<Label> collectToolchainLabels(List<DeclaredToolchainInfo> toolchains) { - return toolchains - .stream() - .map((toolchain -> toolchain.toolchainLabel())) - .collect(Collectors.toList()); - } } |