diff options
author | 2017-10-11 16:18:56 +0200 | |
---|---|---|
committer | 2017-10-11 18:11:59 +0200 | |
commit | 3d0ade5e635a1e5a21babff29ff7f9c0b07cebdf (patch) | |
tree | ddbc5814efa243c34174874a9de61a68c206ab55 /src/test/java/com/google | |
parent | 0cb8d403acdbdd8f3adb08634760ddb7fac666f1 (diff) |
Migrate usage of CppConfiguration#getToolPathFragment and
CppConfiguration#getLdExecutable to CcToolchainProvider.
PiperOrigin-RevId: 171818406
Diffstat (limited to 'src/test/java/com/google')
4 files changed, 59 insertions, 1 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java b/src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java index eaa5b694d1..96fb665de9 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java +++ b/src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java @@ -13,6 +13,7 @@ // limitations under the License. package com.google.devtools.build.lib.packages.util; +import com.google.common.base.Function; import com.google.common.base.Joiner; import com.google.common.base.Predicate; import com.google.common.base.Verify; @@ -29,6 +30,7 @@ import com.google.devtools.build.lib.vfs.PathFragment; import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig; import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain; import com.google.protobuf.TextFormat; +import com.google.protobuf.TextFormat.ParseException; import java.io.IOException; /** @@ -490,6 +492,29 @@ public abstract class MockCcSupport { return TextFormat.printToString(builder.build()); } + /** Applies the given function to the first toolchain that applies to the given cpu. */ + public static String applyToToolchain( + String original, + String targetCpu, + Function<CToolchain.Builder, CToolchain.Builder> transformation) + throws ParseException { + CrosstoolConfig.CrosstoolRelease.Builder crosstoolBuilder = + CrosstoolConfig.CrosstoolRelease.newBuilder(); + TextFormat.merge(original, crosstoolBuilder); + for (int i = 0; i < crosstoolBuilder.getToolchainCount(); i++) { + if (crosstoolBuilder.getToolchain(i).getTargetCpu().equals(targetCpu)) { + CToolchain.Builder toolchainBuilder = + CToolchain.newBuilder(crosstoolBuilder.getToolchain(i)); + transformation.apply(toolchainBuilder); + crosstoolBuilder.removeToolchain(i); + crosstoolBuilder.addToolchain(toolchainBuilder.build()); + break; + } + } + + return TextFormat.printToString(crosstoolBuilder.build()); + } + public static String addOptionalDefaultCoptsToCrosstool(String original) throws TextFormat.ParseException { CrosstoolConfig.CrosstoolRelease.Builder builder = diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderTest.java index 89d0cbc8f0..0c8aba50a7 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderTest.java @@ -38,6 +38,7 @@ public class CcToolchainProviderTest { new CcToolchainProvider( null, null, + null, NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER), NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER), NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER), @@ -69,6 +70,7 @@ public class CcToolchainProviderTest { new CcToolchainProvider( null, null, + null, NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER), NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER), NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER), diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSelectionTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSelectionTest.java index 8bb82384b8..f5f22a229b 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSelectionTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSelectionTest.java @@ -24,9 +24,11 @@ import com.google.devtools.build.lib.analysis.platform.ToolchainInfo; import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.analysis.util.ScratchAttributeWriter; import com.google.devtools.build.lib.cmdline.Label; +import com.google.devtools.build.lib.packages.util.MockCcSupport; import com.google.devtools.build.lib.packages.util.MockPlatformSupport; import com.google.devtools.build.lib.testutil.MoreAsserts; import com.google.devtools.build.lib.testutil.TestConstants; +import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath; import java.util.List; import org.junit.Before; import org.junit.Test; @@ -166,4 +168,33 @@ public class CcToolchainSelectionTest extends BuildViewTestCase { .hasMessageThat() .contains("Using cc_toolchain target requires the attribute 'compiler' to be present"); } + + @Test + public void testToolPaths() throws Exception { + String originalCrosstool = analysisMock.ccSupport().readCrosstoolFile(); + String crosstoolWithPiiiLd = + MockCcSupport.applyToToolchain( + originalCrosstool, + "piii", + t -> t.addToolPath(ToolPath.newBuilder().setName("ld").setPath("piii-ld").build())); + + getAnalysisMock().ccSupport().setupCrosstoolWithRelease(mockToolsConfig, crosstoolWithPiiiLd); + + useConfiguration( + "--enabled_toolchain_types=" + CPP_TOOLCHAIN_TYPE, + "--experimental_platforms=//mock_platform:mock-piii-platform", + "--extra_toolchains=//mock_platform:toolchain_cc-compiler-piii"); + ConfiguredTarget target = + ScratchAttributeWriter.fromLabelString(this, "cc_library", "//lib") + .setList("srcs", "a.cc") + .write(); + ResolvedToolchainProviders providers = + (ResolvedToolchainProviders) + getRuleContext(target).getToolchainContext().getResolvedToolchainProviders(); + CcToolchainProvider toolchain = + (CcToolchainProvider) + providers.getForToolchainType(Label.parseAbsolute(CPP_TOOLCHAIN_TYPE)); + assertThat(toolchain.getToolPathFragment(CppConfiguration.Tool.LD).toString()) + .contains("piii-ld"); + } } diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoaderTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoaderTest.java index 84fe3c9d26..73d031acf7 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoaderTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoaderTest.java @@ -239,7 +239,7 @@ public class CrosstoolConfigurationLoaderTest extends AnalysisTestCase { "CC_FLAGS", "") .entrySet()); - assertThat(toolchain.getLdExecutable()).isEqualTo(getToolPath("/path-to-ld")); + assertThat(toolchain.getToolPathFragment(Tool.LD)).isEqualTo(getToolPath("/path-to-ld")); assertThat(toolchain.getToolPathFragment(Tool.DWP)).isEqualTo(getToolPath("/path-to-dwp")); } |