aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java17
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSelectionTest.java15
2 files changed, 12 insertions, 20 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java
index f7fc13e4dc..c66dd9378b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java
@@ -601,18 +601,21 @@ public class CcToolchain implements RuleConfiguredTargetFactory {
private CToolchain getToolchainFromAttributes(
RuleContext ruleContext, CppConfiguration cppConfiguration) throws RuleErrorException {
- for (String requiredAttr : ImmutableList.of("cpu", "compiler", "libc")) {
- if (ruleContext.attributes().get(requiredAttr, Type.STRING).isEmpty()) {
- ruleContext.throwWithRuleError(
- String.format(
- "Using cc_toolchain target requires the attribute '%s' to be present.",
- requiredAttr));
- }
+ if (ruleContext.attributes().get("cpu", Type.STRING).isEmpty()) {
+ ruleContext.throwWithRuleError("Using cc_toolchain target requires the attribute 'cpu' "
+ + "to be present");
}
+
String cpu = ruleContext.attributes().get("cpu", Type.STRING);
String compiler = ruleContext.attributes().get("compiler", Type.STRING);
+ if (compiler.isEmpty()) {
+ compiler = null;
+ }
String libc = ruleContext.attributes().get("libc", Type.STRING);
+ if (libc.isEmpty()) {
+ libc = null;
+ }
CrosstoolConfigurationIdentifier config =
new CrosstoolConfigurationIdentifier(cpu, compiler, libc);
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 e0d92a4c1e..e6c453e28a 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
@@ -26,7 +26,6 @@ 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;
@@ -128,7 +127,7 @@ public class CcToolchainSelectionTest extends BuildViewTestCase {
}
@Test
- public void testErrorForIncompleteCcToolchain() throws Exception {
+ public void testIncompleteCcToolchain() throws Exception {
mockToolsConfig.create(
"incomplete_toolchain/BUILD",
"toolchain(",
@@ -156,17 +155,7 @@ public class CcToolchainSelectionTest extends BuildViewTestCase {
"--experimental_platforms=//mock_platform:mock-piii-platform",
"--extra_toolchains=//incomplete_toolchain:incomplete_toolchain_cc-compiler-piii");
- AssertionError thrown =
- MoreAsserts.expectThrows(
- AssertionError.class,
- () ->
- ScratchAttributeWriter.fromLabelString(this, "cc_library", "//lib")
- .setList("srcs", "a.cc")
- .write());
-
- assertThat(thrown)
- .hasMessageThat()
- .contains("Using cc_toolchain target requires the attribute 'compiler' to be present");
+ // should not throw.
}
@Test