mbox series

[00/14] devtool ide-sdk: clang and lldb support

Message ID 20260802195324.64533-1-adrian.freihofer@siemens.com
Headers show
Series devtool ide-sdk: clang and lldb support | expand

Message

AdrianF Aug. 2, 2026, 7:52 p.m. UTC
From: Adrian Freihofer <adrian.freihofer@siemens.com>

This series adds clang toolchain support to devtool ide-sdk. LLDB is
part of the same LLVM project as clang and is the more natural debugger
pairing for it (much like GDB pairs with gcc), so ide-sdk now picks LLDB
as the debugger whenever the recipe is built with clang, while
continuing to use GDB for gcc-built recipes as before. The series also
significantly extends oe-selftest coverage for both debugging paths
(ide=code and ide=none).

Highlights:
 - Introduce a debugger back-end abstraction in ide-sdk so GDB and LLDB
   can share the common ide=code/ide=none plumbing, and select LLDB
   automatically when the recipe's toolchain is clang.
 - Add LLDB support for the clang toolchain, for both ide=code
   (lldb-server platform mode + CodeLLDB launch/task config) and ide=none
   (generated shell scripts).
 - Fix a handful of pre-existing ide-sdk issues found along the way:
   waiting for the gdbserver port before returning, a duplicate -p flag in
   _target_ssh_args, $@ getting overwritten by `set` in the
   install_and_deploy script, and meson compile_commands.json generation.
 - Refactor the meta-selftest cpp debugging examples into shared .inc
   files with clang variants, and add real, end-to-end debug session
   coverage (breakpoints in the executable, a library and a header-only
   inline function) for GDB (meson) and LLDB (clang, both ide=code and
   ide=none), including a recompile/redeploy cycle.

For now the debugger is selected purely based on the recipe's
TOOLCHAIN (gcc -> GDB, clang -> LLDB). Other combinations, e.g. gcc for
compiling with clang-tidy for static analysis, or support for the VSCode
clangd plugin are not covered yet but could be supported in the future
by making the debugger selection more independent from the compiler
choice.

Adrian Freihofer (14):
  qemuboot: make do_write_qemuboot_conf a standalone sstate task
  oe-selftest: devtool: use stat for reading user/group names in ide-sdk
    tests
  devtool: ide-sdk: fix duplicate -p flag in _target_ssh_args
  devtool: ide-sdk: fix $@ overwritten by set in install_and_deploy
    script
  devtool: ide-sdk: fix meson compile_commands.json
  oe-selftest: devtool ide-sdk: cover breakpoints in exe, header and
    library
  oe-selftest: devtool ide-sdk: add real debug coverage for meson+code
  devtool: ide-sdk debugger back-end abstraction
  devtool: ide-sdk: wait for gdbserver port before returning
  devtool: ide-sdk add LLDB support for clang toolchain
  devtool: ide-sdk: add LLDB support for ide=none (clang toolchain)
  meta-selftest: refactor cpp examples into .inc files and add clang
    variants
  oe-selftest: devtool ide-sdk: add clang/LLDB test
  oe-selftest: devtool ide-sdk: add test for ide=none LLDB/clang support

 .../recipes-test/cpp/cmake-example-clang.bb   |  13 +
 .../recipes-test/cpp/cmake-example.bb         |  20 +-
 .../recipes-test/cpp/cmake-example.inc        |  29 +
 .../recipes-test/cpp/cmake-example/run-ptest  |  10 -
 .../recipes-test/cpp/cpp-example.inc          |  20 +-
 .../recipes-test/cpp/files/CMakeLists.txt     |  35 +-
 .../cpp/files/cpp-example-lib.hpp             |  10 +
 .../recipes-test/cpp/files/cpp-example.cpp    |   4 +
 .../recipes-test/cpp/files/meson.build        |  17 +-
 .../recipes-test/cpp/files/meson.options      |   6 +
 .../cpp/{meson-example => files}/run-ptest    |   4 +-
 .../recipes-test/cpp/meson-example-clang.bb   |  13 +
 .../recipes-test/cpp/meson-example.bb         |  24 +-
 .../recipes-test/cpp/meson-example.inc        |  36 +
 meta/classes-recipe/qemuboot.bbclass          |  19 +-
 meta/lib/oeqa/selftest/cases/devtool.py       | 937 ++++++++++++++++--
 scripts/lib/devtool/ide_plugins/__init__.py   | 262 +++--
 scripts/lib/devtool/ide_plugins/ide_code.py   | 401 ++++++--
 scripts/lib/devtool/ide_plugins/ide_none.py   | 188 +++-
 scripts/lib/devtool/ide_sdk.py                | 206 +++-
 20 files changed, 1871 insertions(+), 383 deletions(-)
 create mode 100644 meta-selftest/recipes-test/cpp/cmake-example-clang.bb
 create mode 100644 meta-selftest/recipes-test/cpp/cmake-example.inc
 delete mode 100644 meta-selftest/recipes-test/cpp/cmake-example/run-ptest
 rename meta-selftest/recipes-test/cpp/{meson-example => files}/run-ptest (51%)
 create mode 100644 meta-selftest/recipes-test/cpp/meson-example-clang.bb
 create mode 100644 meta-selftest/recipes-test/cpp/meson-example.inc