Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for Colcon Debug builds #1253

Merged
merged 2 commits into from
Jan 8, 2024
Merged
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
8 changes: 4 additions & 4 deletions src/build-tool/catkin-tools.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ import * as extension from "../extension";
import * as common from "./common";
import * as rosShell from "./ros-shell";

function makeCatkin(command: string, args: string[], category?: string): vscode.Task {
const task = rosShell.make({type: command, command, args: ['--workspace', vscode.workspace.rootPath, ...args]}, category)
function makeCatkin(name: string, command: string, args: string[], category?: string): vscode.Task {
const task = rosShell.make(name, {type: command, command, args: ['--workspace', vscode.workspace.rootPath, ...args]}, category)
task.problemMatchers = ["$catkin-gcc"];

return task;
Expand All @@ -19,10 +19,10 @@ function makeCatkin(command: string, args: string[], category?: string): vscode.
*/
export class CatkinToolsProvider implements vscode.TaskProvider {
public provideTasks(token?: vscode.CancellationToken): vscode.ProviderResult<vscode.Task[]> {
const make = makeCatkin('catkin', [], 'build');
const make = makeCatkin('Catkin Tools - Build', 'catkin', [], 'build');
make.group = vscode.TaskGroup.Build;

const test = makeCatkin('catkin', ['--catkin-make-args', 'run_tests'], 'run_tests');
const test = makeCatkin('Catkin Tools - Test', 'catkin', ['--catkin-make-args', 'run_tests'], 'run_tests');
test.group = vscode.TaskGroup.Test;

return [make, test];
Expand Down
12 changes: 6 additions & 6 deletions src/build-tool/catkin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ import * as extension from "../extension";
import * as common from "./common";
import * as rosShell from "./ros-shell";

function makeCatkin(command: string, args: string[], category?: string): vscode.Task {
const task = rosShell.make({type: command, command, args: ['--directory', vscode.workspace.rootPath, '-DCMAKE_BUILD_TYPE=RelWithDebInfo',...args]}, category)
function makeCatkin(name: string, command: string, args: string[], category?: string): vscode.Task {
const task = rosShell.make(name, {type: command, command, args: ['--directory', vscode.workspace.rootPath, '-DCMAKE_BUILD_TYPE=RelWithDebInfo',...args]}, category)
task.problemMatchers = ["$catkin-gcc"];

return task;
Expand All @@ -18,10 +18,10 @@ function makeCatkin(command: string, args: string[], category?: string): vscode.
*/
export class CatkinMakeProvider implements vscode.TaskProvider {
public provideTasks(token?: vscode.CancellationToken): vscode.ProviderResult<vscode.Task[]> {
const make = makeCatkin('catkin_make', [], 'build');
const make = makeCatkin('Catkin Build', 'catkin_make', [], 'build');
make.group = vscode.TaskGroup.Build;

const test = makeCatkin('catkin_make', ['run_tests'], 'run_tests');
const test = makeCatkin('Catkin Test', 'catkin_make', ['run_tests'], 'run_tests');
test.group = vscode.TaskGroup.Test;

return [make, test];
Expand All @@ -36,10 +36,10 @@ export class CatkinMakeProvider implements vscode.TaskProvider {
*/
export class CatkinMakeIsolatedProvider implements vscode.TaskProvider {
public provideTasks(token?: vscode.CancellationToken): vscode.ProviderResult<vscode.Task[]> {
const make = makeCatkin('catkin_make_isolated', [], 'build');
const make = makeCatkin('Catkin Build Isolated', 'catkin_make_isolated', [], 'build');
make.group = vscode.TaskGroup.Build;

const test = makeCatkin('catkin_make_isolated', ['--catkin-make-args', 'run_tests'], 'run_tests');
const test = makeCatkin('Catkin Test Isolated', 'catkin_make_isolated', ['--catkin-make-args', 'run_tests'], 'run_tests');
test.group = vscode.TaskGroup.Test;

return [make, test];
Expand Down
17 changes: 11 additions & 6 deletions src/build-tool/colcon.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,15 @@ import * as common from "./common";
import * as rosShell from "./ros-shell";
import { env } from "process";

function makeColcon(command: string, verb: string, args: string[], category?: string): vscode.Task {
function makeColcon(name: string, command: string, verb: string, args: string[], category?: string): vscode.Task {
let installType = '--symlink-install';
if (process.platform === "win32") {

// Use Merge Install on Windows to support adminless builds and deployment.
installType = '--merge-install';
}

const task = rosShell.make({type: command, command, args: [verb, installType, '--event-handlers', 'console_cohesion+', '--base-paths', vscode.workspace.rootPath, `--cmake-args`, `-DCMAKE_BUILD_TYPE=RelWithDebInfo`,...args]},
category)
const task = rosShell.make(name, {type: command, command, args: [verb, installType, '--event-handlers', 'console_cohesion+', '--base-paths', vscode.workspace.rootPath, `--cmake-args`, ...args]}, category)
task.problemMatchers = ["$catkin-gcc"];

return task;
Expand All @@ -30,13 +29,19 @@ function makeColcon(command: string, verb: string, args: string[], category?: st
*/
export class ColconProvider implements vscode.TaskProvider {
public provideTasks(token?: vscode.CancellationToken): vscode.ProviderResult<vscode.Task[]> {
const make = makeColcon('colcon', 'build', [], 'build');
const make = makeColcon('Colcon Build Release', 'colcon', 'build', [`-DCMAKE_BUILD_TYPE=RelWithDebInfo`], 'build');
make.group = vscode.TaskGroup.Build;

const test = makeColcon('colcon', 'test', [], 'test');
const makeDebug = makeColcon('Colcon Build Debug', 'colcon', 'build', [`-DCMAKE_BUILD_TYPE=Debug`], 'build');
makeDebug.group = vscode.TaskGroup.Build;

const test = makeColcon('Colcon Build Test Release', 'colcon', 'test', [`-DCMAKE_BUILD_TYPE=RelWithDebInfo`], 'test');
test.group = vscode.TaskGroup.Test;

return [make, test];
const testDebug = makeColcon('Colcon Build Test Debug', 'colcon', 'test', [`-DCMAKE_BUILD_TYPE=Debug`], 'test');
test.group = vscode.TaskGroup.Test;

return [make, makeDebug, test, testDebug];
}

public resolveTask(task: vscode.Task, token?: vscode.CancellationToken): vscode.ProviderResult<vscode.Task> {
Expand Down
10 changes: 5 additions & 5 deletions src/build-tool/ros-shell.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@ export class RosShellTaskProvider implements vscode.TaskProvider {
}

public defaultRosTasks(): vscode.Task[] {
const rosCore = make({type: 'ros', command: 'roscore'}, 'roscore');
const rosCore = make('ros core', {type: 'ros', command: 'roscore'}, 'roscore');
rosCore.isBackground = true;
rosCore.problemMatchers = ['$roscore'];

const rosLaunch = make({type: 'ros', command: 'roslaunch', args: ['package_name', 'launch_file.launch']}, 'roslaunch');
const rosLaunch = make('ros launch', {type: 'ros', command: 'roslaunch', args: ['package_name', 'launch_file.launch']}, 'roslaunch');
rosLaunch.isBackground = true;
rosLaunch.problemMatchers = ['$roslaunch'];

Expand All @@ -39,18 +39,18 @@ export function registerRosShellTaskProvider(): vscode.Disposable[] {
}

export function resolve(task: vscode.Task): vscode.Task {
const resolvedTask = make(task.definition as RosTaskDefinition);
let definition = task.definition as RosTaskDefinition
const resolvedTask = make(definition.command, definition);

resolvedTask.isBackground = task.isBackground;
resolvedTask.problemMatchers = task.problemMatchers;
return resolvedTask;
}

export function make(definition: RosTaskDefinition, category?: string): vscode.Task {
export function make(name: string, definition: RosTaskDefinition, category?: string): vscode.Task {
definition.command = definition.command || definition.type; // Command can be missing in build tasks that have type==command

const args = definition.args || [];
const name = category ? category : args.join(' ');
const task = new vscode.Task(definition, vscode.TaskScope.Workspace, name, definition.command);

task.execution = new vscode.ShellExecution(definition.command, args, {
Expand Down
Loading