Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions clwb/src/META-INF/clwb.xml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
<actionConfigurationCustomizer implementation="com.google.idea.blaze.plugin.ClwbHideMakeActions"/>
<registryKey defaultValue="false" description="Disable the extra debug flags in debug C/C++ builds" key="bazel.clwb.debug.extraflags.disabled"/>
<registryKey defaultValue="false" description="Disable the fission flag in debug C/C++ builds" key="bazel.clwb.debug.fission.disabled"/>
<registryKey defaultValue="true" description="Enforce dbg compilation mode for debug runs" key="bazel.clwb.debug.enforce.dbg.compilation.mode"/>
<registryKey defaultValue="true" description="Use GDB-Server instead of bundled GDB version" key="bazel.clwb.debug.use.gdb.server"/>
<registryKey defaultValue="false" description="Use the debugger selected in the default toolchain" key="bazel.clwb.debug.use.default.toolchain"/>
</extensions>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -110,22 +114,39 @@ private ImmutableList<String> getExtraDebugFlags(ExecutionEnvironment env) {
}

final var flagsBuilder = ImmutableList.<String>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();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -22,7 +24,10 @@
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;
import org.jetbrains.annotations.NotNull;
Expand All @@ -33,12 +38,30 @@
@RunWith(JUnit4.class)
public class ExecutionTest extends ClwbHeadlessTestCase {

@Override
protected void addAllowedVfsRoots(ArrayList<AllowedVfsRoot> roots) {
super.addAllowedVfsRoots(roots);

// use flat?
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);
}

@Test
public void testClwb() throws Exception {
final var errors = runSync(defaultSyncParams().build());
errors.assertNoErrors();

checkRun();
checkDebug();
checkTest();
}

Expand All @@ -47,6 +70,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);
Expand All @@ -61,7 +89,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);
Expand Down