Use testing Crosstool in BazelMockCcSupport
Stages enough to get us through (most?) loading and analysis phase tests that
rely on cpp support. The execution phase isn't supported, but it wasn't before,
so this is better than nothing.
Verified this gets some yet-to-be-enabled tests working.
PiperOrigin-RevId: 403458095
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java b/src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java
index cfe8dc8..1a88c57 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java
@@ -16,7 +16,6 @@
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.testutil.TestConstants;
import java.io.IOException;
/**
@@ -57,7 +56,6 @@
writeMacroFile(config);
setupRulesCc(config);
setupCcToolchainConfig(config);
- createDummyCppPackages(config);
createParseHeadersAndLayeringCheckWhitelist(config);
createStarlarkLooseHeadersWhitelist(config, "//...");
}
@@ -77,17 +75,9 @@
return BazelMockCcSupport::isNotCcLabel;
}
- /** Creates bare-minimum filesystem state to support cpp rules. */
- private static void createDummyCppPackages(MockToolsConfig config) throws IOException {
- if (config.isRealFileSystem()) {
- // TODO(b/195425240): Make real-filesystem test mode work in bazel - for now we fake out the
- // bare minimum targets to get by in at least the loading phase.
- config.append(
- TestConstants.TOOLS_REPOSITORY_SCRATCH + "tools/cpp/BUILD",
- "exports_files(['toolchain', 'grep-includes', 'malloc'])");
- config.create(TestConstants.TOOLS_REPOSITORY_SCRATCH + "tools/cpp/toolchain", "");
- config.create(TestConstants.TOOLS_REPOSITORY_SCRATCH + "tools/cpp/grep-includes", "");
- config.create(TestConstants.TOOLS_REPOSITORY_SCRATCH + "tools/cpp/malloc", "");
- }
+ @Override
+ protected boolean shouldUseRealFileSystemCrosstool() {
+ // TODO(b/195425240): Workaround for lack of real-filesystem support.
+ return false;
}
}
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/Crosstool.java b/src/test/java/com/google/devtools/build/lib/packages/util/Crosstool.java
index 5b340bf..dc59415 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/util/Crosstool.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/util/Crosstool.java
@@ -19,7 +19,6 @@
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.packages.util.Crosstool.CcToolchainConfig;
import com.google.devtools.build.lib.rules.cpp.CppRuleClasses;
import com.google.devtools.build.lib.testutil.TestConstants;
import com.google.devtools.build.lib.util.Pair;
@@ -554,7 +553,9 @@
" srcs = ['build_interface_so'],",
")",
// We add an empty :malloc target in case we need it.
- "cc_library(name = 'malloc')");
+ "cc_library(name = 'malloc')",
+ // Fake targets to get us through loading/analysis.
+ "exports_files(['grep-includes', 'link_dynamic_library'])");
config.create(crosstoolTop + "/mock_version/x86/bin/gcc");
config.create(crosstoolTop + "/mock_version/x86/bin/ld");
@@ -566,6 +567,10 @@
String.format(
"register_toolchains('%s:all')",
crosstoolTopLabel.getPackageIdentifier().getCanonicalForm()));
+ // Empty files to satisfy fake targets.
+ config.create(crosstoolTop + "/grep-includes");
+ config.create(crosstoolTop + "/build_interface_so");
+ config.create(crosstoolTop + "/link_dynamic_library");
}
public void writeOSX() throws IOException {
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 7021d0f..07ee861 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
@@ -209,13 +209,17 @@
}
}
+ protected boolean shouldUseRealFileSystemCrosstool() {
+ return true;
+ }
+
public void setupCcToolchainConfig(MockToolsConfig config) throws IOException {
setupCcToolchainConfig(config, CcToolchainConfig.builder());
}
public void setupCcToolchainConfig(
MockToolsConfig config, CcToolchainConfig.Builder ccToolchainConfig) throws IOException {
- if (config.isRealFileSystem()) {
+ if (config.isRealFileSystem() && shouldUseRealFileSystemCrosstool()) {
String crosstoolTopPath = getRealFilesystemCrosstoolTopPath();
config.linkTools(getRealFilesystemTools(crosstoolTopPath));
writeToolchainsForRealFilesystemTools(config, crosstoolTopPath);