From c1da83b329775b4f0c2978750d7458f0321c4494 Mon Sep 17 00:00:00 2001 From: Evgenii Novozhilov Date: Tue, 5 Aug 2025 00:16:49 +0300 Subject: [PATCH 1/5] wip: debug test --- .../google/idea/blaze/clwb/ExecutionTest.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/clwb/tests/headlesstests/com/google/idea/blaze/clwb/ExecutionTest.java b/clwb/tests/headlesstests/com/google/idea/blaze/clwb/ExecutionTest.java index 8051c1e7403..f95aff0c691 100644 --- a/clwb/tests/headlesstests/com/google/idea/blaze/clwb/ExecutionTest.java +++ b/clwb/tests/headlesstests/com/google/idea/blaze/clwb/ExecutionTest.java @@ -3,6 +3,7 @@ import static com.google.common.truth.Truth.assertThat; import com.google.idea.blaze.base.run.producers.BlazeBuildFileRunConfigurationProducer; +import com.google.idea.blaze.clwb.base.AllowedVfsRoot; import com.google.idea.blaze.clwb.base.ClwbHeadlessTestCase; import com.google.idea.blaze.common.Label; import com.intellij.execution.ExecutionListener; @@ -12,6 +13,7 @@ import com.intellij.execution.PsiLocation; import com.intellij.execution.actions.ConfigurationContext; import com.intellij.execution.actions.RunConfigurationProducer; +import com.intellij.execution.executors.DefaultDebugExecutor; import com.intellij.execution.executors.DefaultRunExecutor; import com.intellij.execution.impl.ExecutionManagerImpl; import com.intellij.execution.process.ProcessHandler; @@ -23,6 +25,7 @@ import com.intellij.openapi.actionSystem.impl.SimpleDataContext; import com.intellij.openapi.module.ModuleUtilCore; import com.intellij.testFramework.PlatformTestUtil; +import java.util.ArrayList; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; import org.jetbrains.annotations.NotNull; @@ -33,12 +36,19 @@ @RunWith(JUnit4.class) public class ExecutionTest extends ClwbHeadlessTestCase { + @Override + protected void addAllowedVfsRoots(ArrayList roots) { + super.addAllowedVfsRoots(roots); + roots.add(AllowedVfsRoot.bazelBinRecursive(myBazelInfo, "bazel-out/darwin_arm64-dbg/bin/main/hello-world")); + } + @Test public void testClwb() throws Exception { final var errors = runSync(defaultSyncParams().build()); errors.assertNoErrors(); checkRun(); + checkDebug(); checkTest(); } @@ -47,6 +57,11 @@ private void checkRun() throws Exception { assertThat(result).isEqualTo(0); } + private void checkDebug() throws Exception { + final var result = execute(Label.of("//main:hello-world"), DefaultDebugExecutor.EXECUTOR_ID); + assertThat(result).isEqualTo(0); + } + private void checkTest() throws Exception { final var result = execute(Label.of("//main:test"), DefaultRunExecutor.EXECUTOR_ID); assertThat(result).isEqualTo(0); @@ -61,7 +76,7 @@ private int execute(Label label, String executorId) throws Exception { .add(Location.DATA_KEY, PsiLocation.fromPsiElement(element)) .build(), ActionPlaces.UNKNOWN); - final var executor = ExecutorRegistry.getInstance().getExecutorById(DefaultRunExecutor.EXECUTOR_ID); + final var executor = ExecutorRegistry.getInstance().getExecutorById(executorId); assertThat(executor).isNotNull(); final var producer = RunConfigurationProducer.getInstance(BlazeBuildFileRunConfigurationProducer.class); From af15d12f89e2de18e7762e66cc8168b8cbe41e72 Mon Sep 17 00:00:00 2001 From: Evgenii Novozhilov Date: Tue, 5 Aug 2025 00:28:48 +0300 Subject: [PATCH 2/5] wip: try without vfs cehcks --- .../com/google/idea/blaze/clwb/base/ClwbHeadlessTestCase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clwb/tests/headlesstests/com/google/idea/blaze/clwb/base/ClwbHeadlessTestCase.java b/clwb/tests/headlesstests/com/google/idea/blaze/clwb/base/ClwbHeadlessTestCase.java index 59872a356cc..f675b234c63 100644 --- a/clwb/tests/headlesstests/com/google/idea/blaze/clwb/base/ClwbHeadlessTestCase.java +++ b/clwb/tests/headlesstests/com/google/idea/blaze/clwb/base/ClwbHeadlessTestCase.java @@ -32,7 +32,7 @@ protected void tearDown() { final var roots = new ArrayList(); addAllowedVfsRoots(roots); - Assertions.assertVfsLoads(myBazelInfo.executionRoot(), roots); +// Assertions.assertVfsLoads(myBazelInfo.executionRoot(), roots); } private void setupSandboxBin() { From b33c2b28f442a0d677312a879fc66642beb3dbd3 Mon Sep 17 00:00:00 2001 From: Evgenii Novozhilov Date: Tue, 5 Aug 2025 00:52:54 +0300 Subject: [PATCH 3/5] wip: bring vfs checks back --- .../com/google/idea/blaze/clwb/ExecutionTest.java | 6 +++++- .../google/idea/blaze/clwb/base/ClwbHeadlessTestCase.java | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/clwb/tests/headlesstests/com/google/idea/blaze/clwb/ExecutionTest.java b/clwb/tests/headlesstests/com/google/idea/blaze/clwb/ExecutionTest.java index f95aff0c691..4bbdd243d53 100644 --- a/clwb/tests/headlesstests/com/google/idea/blaze/clwb/ExecutionTest.java +++ b/clwb/tests/headlesstests/com/google/idea/blaze/clwb/ExecutionTest.java @@ -39,7 +39,11 @@ public class ExecutionTest extends ClwbHeadlessTestCase { @Override protected void addAllowedVfsRoots(ArrayList roots) { super.addAllowedVfsRoots(roots); - roots.add(AllowedVfsRoot.bazelBinRecursive(myBazelInfo, "bazel-out/darwin_arm64-dbg/bin/main/hello-world")); + + // use flat? + var fastBuildRoot = AllowedVfsRoot.bazelBinRecursive(myBazelInfo, "main/hello-world"); + var debugBuildRoot = AllowedVfsRoot.recursive(fastBuildRoot.toString().replace("fastbuild", "dbg")); + roots.add(debugBuildRoot); } @Test diff --git a/clwb/tests/headlesstests/com/google/idea/blaze/clwb/base/ClwbHeadlessTestCase.java b/clwb/tests/headlesstests/com/google/idea/blaze/clwb/base/ClwbHeadlessTestCase.java index f675b234c63..59872a356cc 100644 --- a/clwb/tests/headlesstests/com/google/idea/blaze/clwb/base/ClwbHeadlessTestCase.java +++ b/clwb/tests/headlesstests/com/google/idea/blaze/clwb/base/ClwbHeadlessTestCase.java @@ -32,7 +32,7 @@ protected void tearDown() { final var roots = new ArrayList(); addAllowedVfsRoots(roots); -// Assertions.assertVfsLoads(myBazelInfo.executionRoot(), roots); + Assertions.assertVfsLoads(myBazelInfo.executionRoot(), roots); } private void setupSandboxBin() { From 1814bcf63efee00cb87689193990f595308660b7 Mon Sep 17 00:00:00 2001 From: Evgenii Novozhilov Date: Tue, 5 Aug 2025 01:16:36 +0300 Subject: [PATCH 4/5] wip: experiment with copt --- clwb/src/META-INF/clwb.xml | 1 + .../run/BlazeCidrRunConfigurationRunner.java | 47 ++++++++++++++----- 2 files changed, 35 insertions(+), 13 deletions(-) diff --git a/clwb/src/META-INF/clwb.xml b/clwb/src/META-INF/clwb.xml index 9782a007564..8d84ef90e4c 100644 --- a/clwb/src/META-INF/clwb.xml +++ b/clwb/src/META-INF/clwb.xml @@ -33,6 +33,7 @@ + diff --git a/clwb/src/com/google/idea/blaze/clwb/run/BlazeCidrRunConfigurationRunner.java b/clwb/src/com/google/idea/blaze/clwb/run/BlazeCidrRunConfigurationRunner.java index 3429fd59d15..2ce3cc1841f 100644 --- a/clwb/src/com/google/idea/blaze/clwb/run/BlazeCidrRunConfigurationRunner.java +++ b/clwb/src/com/google/idea/blaze/clwb/run/BlazeCidrRunConfigurationRunner.java @@ -44,6 +44,10 @@ import com.intellij.util.PathUtil; import com.jetbrains.cidr.execution.CidrCommandLineState; +import com.jetbrains.cidr.lang.toolchains.CidrSwitchBuilder; +import com.jetbrains.cidr.lang.workspace.compiler.ClangClCompilerKind; +import com.jetbrains.cidr.lang.workspace.compiler.ClangCompilerKind; +import com.jetbrains.cidr.lang.workspace.compiler.MSVCCompilerKind; import javax.annotation.Nullable; import java.io.File; import java.util.List; @@ -110,22 +114,39 @@ private ImmutableList getExtraDebugFlags(ExecutionEnvironment env) { } final var flagsBuilder = ImmutableList.builder(); - - if (debuggerKind == BlazeDebuggerKind.BUNDLED_LLDB && !Registry.is("bazel.trim.absolute.path.disabled")) { - flagsBuilder.add("--copt=-fdebug-compilation-dir=" + WorkspaceRoot.fromProject(env.getProject())); - - if (SystemInfo.isMac) { - flagsBuilder.add("--linkopt=-Wl,-oso_prefix,."); - } + if (Registry.is("bazel.clwb.debug.enforce.dbg.compilation.mode")) { + flagsBuilder.add("--compilation_mode=dbg"); + flagsBuilder.add("--strip=never"); + flagsBuilder.add("--dynamic_mode=off"); } - flagsBuilder.add("--compilation_mode=dbg"); - flagsBuilder.add("--copt=-O0"); - flagsBuilder.add("--copt=-g"); - flagsBuilder.add("--strip=never"); - flagsBuilder.add("--dynamic_mode=off"); - flagsBuilder.addAll(BlazeGDBServerProvider.getOptionalFissionArguments()); + var compilerKind = RunConfigurationUtils.getCompilerKind(configuration); + if (compilerKind == ClangClCompilerKind.INSTANCE || compilerKind == MSVCCompilerKind.INSTANCE) { + var sb = new CidrSwitchBuilder(); + var sb2 = compilerKind.getSwitchBuilder(sb); + sb2 + .withDebugInfo(-1) // ignored for msvc/clangcl + .withDisableOptimization(); + + sb2.buildRaw().forEach((opt) -> { + flagsBuilder.add("--copt=" + opt); + }); + + } else { + if (debuggerKind == BlazeDebuggerKind.BUNDLED_LLDB && !Registry.is( + "bazel.trim.absolute.path.disabled")) { + flagsBuilder.add( + "--copt=-fdebug-compilation-dir=" + WorkspaceRoot.fromProject(env.getProject())); + + if (SystemInfo.isMac) { + flagsBuilder.add("--linkopt=-Wl,-oso_prefix,."); + } + } + flagsBuilder.add("--copt=-O0"); + flagsBuilder.add("--copt=-g"); + flagsBuilder.addAll(BlazeGDBServerProvider.getOptionalFissionArguments()); + } return flagsBuilder.build(); } From 7cc59732b0a78835202068b3305eb9d8d45ad14e Mon Sep 17 00:00:00 2001 From: Evgenii Novozhilov Date: Tue, 5 Aug 2025 11:13:25 +0300 Subject: [PATCH 5/5] handle windows --- .../com/google/idea/blaze/clwb/ExecutionTest.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/clwb/tests/headlesstests/com/google/idea/blaze/clwb/ExecutionTest.java b/clwb/tests/headlesstests/com/google/idea/blaze/clwb/ExecutionTest.java index 4bbdd243d53..d2841043553 100644 --- a/clwb/tests/headlesstests/com/google/idea/blaze/clwb/ExecutionTest.java +++ b/clwb/tests/headlesstests/com/google/idea/blaze/clwb/ExecutionTest.java @@ -24,7 +24,9 @@ import com.intellij.openapi.actionSystem.PlatformCoreDataKeys; import com.intellij.openapi.actionSystem.impl.SimpleDataContext; import com.intellij.openapi.module.ModuleUtilCore; +import com.intellij.openapi.util.SystemInfo; import com.intellij.testFramework.PlatformTestUtil; +import com.intellij.util.system.OS; import java.util.ArrayList; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; @@ -41,7 +43,14 @@ protected void addAllowedVfsRoots(ArrayList roots) { super.addAllowedVfsRoots(roots); // use flat? - var fastBuildRoot = AllowedVfsRoot.bazelBinRecursive(myBazelInfo, "main/hello-world"); + String path; + if (SystemInfo.isWindows) { + path = "main/hello-world.exe"; + } else { + path = "main/hello-world"; + } + + var fastBuildRoot = AllowedVfsRoot.bazelBinRecursive(myBazelInfo, path); var debugBuildRoot = AllowedVfsRoot.recursive(fastBuildRoot.toString().replace("fastbuild", "dbg")); roots.add(debugBuildRoot); }