diff mbox series

[meta-darwin,15/21] clang/lldb: move LLDB support to its own nativesdk-lldb recipe

Message ID 20261014141209.488034-15-ecordonnier@snap.com
State New
Headers show
Series [meta-darwin,01/21] meta-darwin: bump layer series to wrynose (6.0.3) | expand

Commit Message

Etienne Cordonnier Oct. 14, 2026, 2:10 p.m. UTC
From: Etienne Cordonnier <ecordonnier@snap.com>

The Darwin nativesdk-clang bbappend carried a set of LLDB-specific
EXTRA_OECMAKE flags and a do_compile:append install_name_tool fix for
lldb-dap, but LLDB was never actually attached to clang's own standalone
cmake build (clang/tools/CMakeLists.txt has no lldb hookup, only
clang-tools-extra) - CMake's own "manually-specified variables were not
used by the project" warning listed every one of them as dead. lldb-dap
was never being built at all.

OE-core already ships a standalone lldb_git.bb (BBCLASSEXTEND =
"native nativesdk"). Move the misplaced flags there (as lldb_%.bbappend),
fix its COMPATIBLE_HOST (hardcoded to "-linux", excluding darwin), and
pull nativesdk-lldb into the SDK the same way nativesdk-clang already is.

Build nativesdk-lldb with clang (PREFERRED_TOOLCHAIN_SDK;
TOOLCHAIN:class-nativesdk has no effect as TCOVERRIDE is resolved first),
because lldb's macOS host support is Objective-C++, which the Darwin
cross-GCC can't compile. Use GCC's libstdc++ and libgcc_s instead of the
compiler-rt and libcxx that clang.bbclass adds to BASE_DEFAULT_DEPS, and
drop the nativesdk-python3 dependency that python3targetconfig adds:
Python support is disabled, and nativesdk-python3 doesn't configure for
darwin21.

Tested by building nativesdk-lldb for x86_64-darwin.

AI-Generated: Claude Sonnet 5.5

Signed-off-by: Etienne Cordonnier <ecordonnier@snap.com>
---
 .../nativesdk-packagegroup-sdk-host.bbappend  |  2 +-
 recipes-devtools/clang/clang_%.bbappend       | 23 -----
 recipes-devtools/clang/lldb_%.bbappend        | 91 +++++++++++++++++++
 3 files changed, 92 insertions(+), 24 deletions(-)
 create mode 100644 recipes-devtools/clang/lldb_%.bbappend
diff mbox series

Patch

diff --git a/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bbappend b/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bbappend
index d1191e7..2ea92b5 100644
--- a/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bbappend
+++ b/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bbappend
@@ -5,5 +5,5 @@  RDEPENDS:${PN}:darwin21 = "\
     nativesdk-sdk-provides-dummy \
     "
 
-RDEPENDS:${PN}:darwin21 += "${@bb.utils.contains('CLANGSDK', '1', 'nativesdk-clang', '', d)}"
+RDEPENDS:${PN}:darwin21 += "${@bb.utils.contains('CLANGSDK', '1', 'nativesdk-clang nativesdk-lldb', '', d)}"
 
diff --git a/recipes-devtools/clang/clang_%.bbappend b/recipes-devtools/clang/clang_%.bbappend
index 1947781..91a9226 100644
--- a/recipes-devtools/clang/clang_%.bbappend
+++ b/recipes-devtools/clang/clang_%.bbappend
@@ -58,33 +58,10 @@  EXTRA_OECMAKE:remove:class-nativesdk:darwin21 = "-DPYTHON_EXECUTABLE='${PYTHON}'
 EXTRA_OECMAKE:append:class-nativesdk:darwin21 = " \
     -DCMAKE_FRAMEWORK_PATH='${OSXSDK}/System/Library/Frameworks'\
     -DCLANGD_BUILD_XPC=OFF \
-    -DLLDB_USE_SYSTEM_DEBUGSERVER=ON \
-    -DLLDB_INCLUDE_TESTS=OFF \
-    -DLLDB_ENABLE_PYTHON=OFF \
-    \
-    -DLLDB_ENABLE_LZMA=ON \
-    \
-    -DLLVM_ENABLE_LIBEDIT=ON -DLLDB_ENABLE_LIBEDIT=ON \
-    -DLibEdit_LIBRARIES=${OSXSDK}/usr/lib/libedit.tbd \
-    -DLibEdit_INCLUDE_DIRS=${OSXSDK}/usr/include \
-    \
-    -DCURSES_INCLUDE_DIRS=${OSXSDK}/usr/include \
-    -DCURSES_LIBRARIES=${OSXSDK}/usr/lib/libcurses.tbd \
-    -DPANEL_LIBRARIES=${OSXSDK}/usr/lib/libpanel.tbd \
-    \
-    -DLIBXML2_INCLUDE_DIR=${OSXSDK}/usr/include/libxml2 \
-    -DLIBXML2_LIBRARY=${OSXSDK}/usr/lib/libxml2.tbd \
-    \
-    -DFFI_LIBRARY_PATH=${OSXSDK}/usr/lib/libffi.tbd \
-    -DFFI_INCLUDE_PATH=${OSXSDK}/usr/include \
 "
 
 FILES:${PN} += " \
    ${libdir}/LLVMgold.dylib \
 "
 
-do_compile:append:class-nativesdk:darwin21() {
-    ${SDK_PREFIX}install_name_tool -change liblldb.${PV}.dylib @loader_path/../lib/liblldb.${PV}.dylib ${B}/bin/lldb-dap
-}
-
 INSANE_SKIP:${PN}:class-nativesdk:darwin21 += " file-rdeps"
diff --git a/recipes-devtools/clang/lldb_%.bbappend b/recipes-devtools/clang/lldb_%.bbappend
new file mode 100644
index 0000000..39734d8
--- /dev/null
+++ b/recipes-devtools/clang/lldb_%.bbappend
@@ -0,0 +1,91 @@ 
+OSXSDK:class-nativesdk:darwin21 = "${STAGING_DIR_TARGET}${SDKPATHNATIVE}/runtime"
+
+# The base recipe's COMPATIBLE_HOST only matches "-linux" host triples,
+# filtering out this darwin21 SDK build entirely.
+COMPATIBLE_HOST:class-nativesdk:darwin21 = ".*-darwin.*"
+
+# On darwin21 we link against the target OSX SDK's own stub (.tbd) libraries
+# instead of cross-building libedit for the target, mirroring the darwin
+# nativesdk-clang bbappend's own PACKAGECONFIG:remove for "libedit".
+PACKAGECONFIG:remove:class-nativesdk:darwin21 = "libedit"
+
+CFLAGS:append:class-nativesdk:darwin21 = " \
+    -I${OSXSDK}/usr/include \
+    -include TargetConditionals.h \
+"
+CXXFLAGS:append:class-nativesdk:darwin21 = " \
+    -I${OSXSDK}/usr/include \
+    -include TargetConditionals.h \
+    -F${OSXSDK}/System/Library/Frameworks \
+    -F${OSXSDK}/System/Library/Frameworks/CoreServices.framework/Frameworks \
+"
+
+EXTRA_OECMAKE:append:class-nativesdk:darwin21 = " \
+    -DCMAKE_FRAMEWORK_PATH='${OSXSDK}/System/Library/Frameworks' \
+    -DLLDB_USE_SYSTEM_DEBUGSERVER=ON \
+    -DLLDB_INCLUDE_TESTS=OFF \
+    -DLLDB_ENABLE_PYTHON=OFF \
+    \
+    -DLLDB_ENABLE_LZMA=ON \
+    \
+    -DLLVM_ENABLE_LIBEDIT=ON -DLLDB_ENABLE_LIBEDIT=ON \
+    -DLibEdit_LIBRARIES=${OSXSDK}/usr/lib/libedit.tbd \
+    -DLibEdit_INCLUDE_DIRS=${OSXSDK}/usr/include \
+    \
+    -DCURSES_INCLUDE_DIRS=${OSXSDK}/usr/include \
+    -DCURSES_LIBRARIES=${OSXSDK}/usr/lib/libcurses.tbd \
+    -DPANEL_LIBRARIES=${OSXSDK}/usr/lib/libpanel.tbd \
+    \
+    -DLIBXML2_INCLUDE_DIR=${OSXSDK}/usr/include/libxml2 \
+    -DLIBXML2_LIBRARY=${OSXSDK}/usr/lib/libxml2.tbd \
+    \
+    -DFFI_LIBRARY_PATH=${OSXSDK}/usr/lib/libffi.tbd \
+    -DFFI_INCLUDE_PATH=${OSXSDK}/usr/include \
+"
+
+do_compile:append:class-nativesdk:darwin21() {
+    ${SDK_PREFIX}install_name_tool -change liblldb.${PV}.dylib @loader_path/../lib/liblldb.${PV}.dylib ${B}/bin/lldb-dap
+}
+
+# lldb-dap's rewritten @loader_path reference to liblldb.dylib trips the
+# same file-rdeps QA check that nativesdk-clang already skips for darwin21.
+INSANE_SKIP:${PN}:class-nativesdk:darwin21 += " file-rdeps"
+
+# Python support is disabled above (LLDB_ENABLE_PYTHON=OFF), but lldb inherits
+# python3targetconfig, which adds nativesdk-python3 to DEPENDS. That recipe
+# doesn't configure for darwin21 (sw_vers is missing), so drop the dependency.
+EXTRA_PYTHON_DEPENDS:class-nativesdk:darwin21 = ""
+
+# lldb's macOS host support is Objective-C++ (Host.mm etc.), which the Darwin
+# cross-GCC can't compile. Build with the clang-crosssdk compiler instead, with
+# the same toolchain-clang adjustments as the nativesdk-clang bbappend.
+PREFERRED_TOOLCHAIN_SDK = "clang"
+
+COMPILER_RT:class-nativesdk:toolchain-clang:runtime-llvm:darwin21 = ""
+LIBCPLUSPLUS:class-nativesdk:toolchain-clang:darwin21 = " -stdlib=libstdc++"
+
+LDFLAGS:toolchain-clang:class-nativesdk:darwin21 = " \
+    ${BUILDSDK_LDFLAGS} \
+    -lgcc_s \
+"
+LDFLAGS:remove:toolchain-clang:class-nativesdk:x86-64:darwin21 = " -Wl,-dynamic-linker,${base_libdir}/ld-linux-x86-64.so.2"
+LDFLAGS:remove:toolchain-clang:class-nativesdk:aarch64:darwin21 = " -Wl,-dynamic-linker,${base_libdir}/ld-linux-aarch64.so.1"
+
+CFLAGS:append:class-nativesdk:toolchain-clang:darwin21 = " -femulated-tls"
+CXXFLAGS:append:class-nativesdk:toolchain-clang:darwin21 = " -femulated-tls -Wno-elaborated-enum-base"
+
+# clang.bbclass adds compiler-rt and libcxx to BASE_DEFAULT_DEPS, but the
+# nativesdk uses GCC's libgcc_s and libstdc++ (see LDFLAGS/LIBCPLUSPLUS above).
+BASE_DEFAULT_DEPS:remove:class-nativesdk:toolchain-clang:darwin21 = " compiler-rt libcxx"
+
+# clang defaults to libc++, but the nativesdk ships GCC's libstdc++. The Darwin
+# clang driver patch (0037) finds its headers via YOCTO_SDKPATH.
+CXXFLAGS:append:class-nativesdk:toolchain-clang:darwin21 = " -stdlib=libstdc++"
+LDFLAGS:append:class-nativesdk:toolchain-clang:darwin21 = " -stdlib=libstdc++"
+
+do_configure:prepend:class-nativesdk:darwin21() {
+    export YOCTO_SDKPATH="${OSXSDK}/usr/include"
+}
+do_compile:prepend:class-nativesdk:darwin21() {
+    export YOCTO_SDKPATH="${OSXSDK}/usr/include"
+}