From eb028cc1ae5fdc5b677f820d7519b49fa063a203 Mon Sep 17 00:00:00 2001 From: Maurice Date: Sat, 26 Sep 2026 14:00:42 +0800 Subject: [PATCH 1/3] Fix backward ros when using component node and macos Signed-off-by: Maurice --- patch/ros-rolling-backward-ros.patch | 46 ++++++++++++++-------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/patch/ros-rolling-backward-ros.patch b/patch/ros-rolling-backward-ros.patch index 5bebceebc..85437c757 100644 --- a/patch/ros-rolling-backward-ros.patch +++ b/patch/ros-rolling-backward-ros.patch @@ -1,15 +1,3 @@ -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 317f65f..1f38e81 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -27,6 +27,7 @@ include(cmake/BackwardConfig.cmake) - - set(CMAKE_CXX_STANDARD_REQUIRED True) - set(CMAKE_CXX_STANDARD 14) -+set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) - - ############################################################################### - # COMPILER FLAGS diff --git a/cmake/BackwardConfig.cmake b/cmake/BackwardConfig.cmake index 77d22d2..8e95287 100644 --- a/cmake/BackwardConfig.cmake @@ -33,25 +21,37 @@ index 77d22d2..8e95287 100644 list(APPEND _BACKWARD_INCLUDE_DIRS ${BACKWARD_INCLUDE_DIR}) diff --git a/cmake/BackwardConfigAment.cmake b/cmake/BackwardConfigAment.cmake -index 273a51a..3a1a726 100644 +index 273a51a..d52dd05 100644 --- a/cmake/BackwardConfigAment.cmake +++ b/cmake/BackwardConfigAment.cmake -@@ -24,5 +24,12 @@ foreach(lib ${backward_ros_forced_LIBRARIES}) +@@ -24,5 +24,24 @@ foreach(lib ${backward_ros_forced_LIBRARIES}) set(backward_ros_full_path_LIBRARIES "${backward_ros_full_path_LIBRARIES} ${lib}") endif() endforeach() -SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--no-as-needed ${backward_ros_full_path_LIBRARIES} -Wl,--as-needed ${CMAKE_EXE_LINKER_FLAGS}") -+set(no_as_needed) -+set(as_needed) - -+if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") -+ set(no_as_needed "-Wl,--no-as-needed") -+ set(as_needed "-Wl,--as-needed") ++# Nothing references libbackward's symbols; it works through a static ++# initializer. Force the linker to keep it anyway. ++if(APPLE) ++ # ld64 has no --no-as-needed; -needed_library survives -dead_strip_dylibs. ++ set(backward_ros_link_flags "") ++ separate_arguments(backward_ros_full_path_LIBRARIES) ++ foreach(lib ${backward_ros_full_path_LIBRARIES}) ++ set(backward_ros_link_flags "${backward_ros_link_flags} -Wl,-needed_library,${lib}") ++ endforeach() ++elseif(MSVC) ++ set(backward_ros_link_flags "${backward_ros_full_path_LIBRARIES}") ++else() ++ # GNU ld, gold, lld and mold all accept --no-as-needed, whichever compiler drives them. ++ set(backward_ros_link_flags "-Wl,--no-as-needed ${backward_ros_full_path_LIBRARIES} -Wl,--as-needed") +endif() -+ -+SET(CMAKE_EXE_LINKER_FLAGS "${no_as_needed} ${backward_ros_full_path_LIBRARIES} ${as_needed} ${CMAKE_EXE_LINKER_FLAGS}") ++SET(CMAKE_EXE_LINKER_FLAGS "${backward_ros_link_flags} ${CMAKE_EXE_LINKER_FLAGS}") ++# Libraries too: a component or plugin dlopen'ed by a host that does not link ++# libbackward (e.g. component_container) then pulls it in and installs the handler. ++SET(CMAKE_SHARED_LINKER_FLAGS "${backward_ros_link_flags} ${CMAKE_SHARED_LINKER_FLAGS}") ++SET(CMAKE_MODULE_LINKER_FLAGS "${backward_ros_link_flags} ${CMAKE_MODULE_LINKER_FLAGS}") + diff --git a/package.xml b/package.xml -index 6de8f0e..3ac0db1 100644 +index 88c1304..f7832d8 100644 --- a/package.xml +++ b/package.xml @@ -11,6 +11,7 @@ From ac54a44a1c753885899e0109190119a06c3e8ab7 Mon Sep 17 00:00:00 2001 From: Maurice Date: Sat, 26 Sep 2026 14:34:17 +0800 Subject: [PATCH 2/3] backward_ros: don't force libbackward into MODULE targets Only executables and SHARED libraries (e.g. rclcpp components) need libbackward forced in. Linking it into MODULE targets such as pybind11 extensions made importing them replace Python's faulthandler output. Also drop the CI cache for backward-ros so the patch is actually rebuilt (temporary, remove before merge). Co-Authored-By: Claude Opus 5.5 Signed-off-by: Maurice --- .github/workflows/testpr.yml | 1 + patch/ros-rolling-backward-ros.patch | 7 ++++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/testpr.yml b/.github/workflows/testpr.yml index 221a4959e..f1d6410d9 100644 --- a/.github/workflows/testpr.yml +++ b/.github/workflows/testpr.yml @@ -126,6 +126,7 @@ jobs: # You can uncomment/modify the line below in case the cache for some packages becomes corrupted and needs to be regenerated. # Make sure you don't merge these changes, though! # rm -rf ${{ matrix.folder_cache }}/ros-rolling-moveit-core* ${{ matrix.folder_cache }}/ros2-moveit-core* 2>/dev/null || true + rm -rf ${{ matrix.folder_cache }}/ros-rolling-backward-ros* ${{ matrix.folder_cache }}/ros2-backward-ros* 2>/dev/null || true mkdir -p ${{ matrix.folder_cache }} pixi run rattler-index fs ${{ matrix.folder_cache }}/.. --force diff --git a/patch/ros-rolling-backward-ros.patch b/patch/ros-rolling-backward-ros.patch index 85437c757..09f97dd95 100644 --- a/patch/ros-rolling-backward-ros.patch +++ b/patch/ros-rolling-backward-ros.patch @@ -24,7 +24,7 @@ diff --git a/cmake/BackwardConfigAment.cmake b/cmake/BackwardConfigAment.cmake index 273a51a..d52dd05 100644 --- a/cmake/BackwardConfigAment.cmake +++ b/cmake/BackwardConfigAment.cmake -@@ -24,5 +24,24 @@ foreach(lib ${backward_ros_forced_LIBRARIES}) +@@ -24,5 +24,25 @@ foreach(lib ${backward_ros_forced_LIBRARIES}) set(backward_ros_full_path_LIBRARIES "${backward_ros_full_path_LIBRARIES} ${lib}") endif() endforeach() @@ -45,10 +45,11 @@ index 273a51a..d52dd05 100644 + set(backward_ros_link_flags "-Wl,--no-as-needed ${backward_ros_full_path_LIBRARIES} -Wl,--as-needed") +endif() +SET(CMAKE_EXE_LINKER_FLAGS "${backward_ros_link_flags} ${CMAKE_EXE_LINKER_FLAGS}") -+# Libraries too: a component or plugin dlopen'ed by a host that does not link ++# Shared libraries too: a component dlopen'ed by a host that does not link +# libbackward (e.g. component_container) then pulls it in and installs the handler. ++# MODULE targets (Python extensions) are left alone so importing them does not ++# replace the interpreter's own crash handling. +SET(CMAKE_SHARED_LINKER_FLAGS "${backward_ros_link_flags} ${CMAKE_SHARED_LINKER_FLAGS}") -+SET(CMAKE_MODULE_LINKER_FLAGS "${backward_ros_link_flags} ${CMAKE_MODULE_LINKER_FLAGS}") diff --git a/package.xml b/package.xml index 88c1304..f7832d8 100644 From 2bacb6ac07a68b7fe3ee55daf6d08cf5991ffe89 Mon Sep 17 00:00:00 2001 From: Maurice Date: Sat, 26 Sep 2026 14:48:01 +0800 Subject: [PATCH 3/3] Bump backward_ros build number so the patched package is rebuilt vinca skips recipes already published on robostack-rolling with the same build number, so the patch change was never built in CI. Co-Authored-By: Claude Opus 5.5 Signed-off-by: Maurice --- pkg_additional_info.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkg_additional_info.yaml b/pkg_additional_info.yaml index d8f6da8c8..e1fee24ad 100644 --- a/pkg_additional_info.yaml +++ b/pkg_additional_info.yaml @@ -229,6 +229,8 @@ visp: override_version: '3.6.0' zenoh_cpp_vendor: additional_cmake_args: "-DAMENT_VENDOR_POLICY=NEVER_VENDOR_IGNORE_SATISFIED_CHECK -DUSE_SYSTEM_ZENOH=ON" +backward_ros: + build_number: 26 diagnostic_updater: additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" build_number: 26