From 969c95d3f775600e292f8a38f958347fa7bf1c52 Mon Sep 17 00:00:00 2001 From: Tobias Fischer Date: Mon, 19 Oct 2026 09:18:11 +1000 Subject: [PATCH 1/2] Add fuse (not on Windows) [skip ci] Ports RoboStack/ros-lyrical#85: fuse_graphs adds the GCC-only -Wno-maybe-uninitialized only for GCC (clang rejects it with -Werror), and fuse_viz builds against Qt6 where rviz does (lyrical, rolling). Co-authored-by: Kamil Baradziej <49471097+baradejoo@users.noreply.github.com> Co-Authored-By: Claude Opus 5.5 --- distros/lyrical/patch/ros2-fuse-viz.patch | 29 +++++++++++++++++++++++ distros/rolling/patch/ros2-fuse-viz.patch | 29 +++++++++++++++++++++++ shared/patch/ros2-fuse-graphs.patch | 16 +++++++++++++ shared/vinca.yaml | 1 + 4 files changed, 75 insertions(+) create mode 100644 distros/lyrical/patch/ros2-fuse-viz.patch create mode 100644 distros/rolling/patch/ros2-fuse-viz.patch create mode 100644 shared/patch/ros2-fuse-graphs.patch diff --git a/distros/lyrical/patch/ros2-fuse-viz.patch b/distros/lyrical/patch/ros2-fuse-viz.patch new file mode 100644 index 00000000..0b12fe2d --- /dev/null +++ b/distros/lyrical/patch/ros2-fuse-viz.patch @@ -0,0 +1,29 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 5a24db7..540d97e 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -23,13 +23,13 @@ find_package(tf2_geometry_msgs REQUIRED) + + find_package(Eigen3 REQUIRED) + find_package(gtest_vendor) +-find_package(Qt5 COMPONENTS Core Widgets REQUIRED) ++find_package(Qt6 COMPONENTS Core Widgets REQUIRED) + + ########### + ## Build ## + ########### + +-qt5_wrap_cpp(moc_files ++qt6_wrap_cpp(moc_files + include/fuse_viz/mapped_covariance_property.hpp + include/fuse_viz/pose_2d_stamped_property.hpp + include/fuse_viz/relative_pose_2d_stamped_constraint_property.hpp +@@ -61,7 +61,7 @@ target_link_libraries(${PROJECT_NAME} PRIVATE + target_include_directories(${PROJECT_NAME} PUBLIC + $ + $ +- ${Qt5Widgets_INCLUDE_DIRS} ++ ${Qt6Widgets_INCLUDE_DIRS} + ) + + ############# diff --git a/distros/rolling/patch/ros2-fuse-viz.patch b/distros/rolling/patch/ros2-fuse-viz.patch new file mode 100644 index 00000000..0b12fe2d --- /dev/null +++ b/distros/rolling/patch/ros2-fuse-viz.patch @@ -0,0 +1,29 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 5a24db7..540d97e 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -23,13 +23,13 @@ find_package(tf2_geometry_msgs REQUIRED) + + find_package(Eigen3 REQUIRED) + find_package(gtest_vendor) +-find_package(Qt5 COMPONENTS Core Widgets REQUIRED) ++find_package(Qt6 COMPONENTS Core Widgets REQUIRED) + + ########### + ## Build ## + ########### + +-qt5_wrap_cpp(moc_files ++qt6_wrap_cpp(moc_files + include/fuse_viz/mapped_covariance_property.hpp + include/fuse_viz/pose_2d_stamped_property.hpp + include/fuse_viz/relative_pose_2d_stamped_constraint_property.hpp +@@ -61,7 +61,7 @@ target_link_libraries(${PROJECT_NAME} PRIVATE + target_include_directories(${PROJECT_NAME} PUBLIC + $ + $ +- ${Qt5Widgets_INCLUDE_DIRS} ++ ${Qt6Widgets_INCLUDE_DIRS} + ) + + ############# diff --git a/shared/patch/ros2-fuse-graphs.patch b/shared/patch/ros2-fuse-graphs.patch new file mode 100644 index 00000000..c88ae7e8 --- /dev/null +++ b/shared/patch/ros2-fuse-graphs.patch @@ -0,0 +1,16 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 1b0ac27..43fab5b 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -45,7 +45,10 @@ include(boost-extras.cmake) + # /nix/store/b7hvml0m3qmqraz1022fwvyyg6fc1vdy-gcc-12.2.0/include/c++/12.2.0/bits/std_function.h:267:7: note: by argument 2 of type ‘const std::_Any_data&’ to ‘static bool std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_manager(std::_Any_data&, const std::_Any_data&, std::_Manager_operation) [with _Res = const fuse_core::Variable&; _Functor = fuse_graphs::HashGraph::getVariables() const::, boost::hash >::value_type&)>; _ArgTypes = {const std::pair >&}]’ declared here + # 267 | _M_manager(_Any_data& __dest, const _Any_data& __source, + # | ^~~~~~~~~~ +-add_compile_options(-Wall -Werror -Wno-maybe-uninitialized) ++add_compile_options(-Wall -Werror) ++if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") ++ add_compile_options(-Wno-maybe-uninitialized) ++endif() + + ## fuse_graphs library + add_library(${PROJECT_NAME} diff --git a/shared/vinca.yaml b/shared/vinca.yaml index c93bc085..58eff14a 100644 --- a/shared/vinca.yaml +++ b/shared/vinca.yaml @@ -542,6 +542,7 @@ packages_select_by_deps: - event_camera_renderer # doesn't support Windows shared library - ffmpeg_image_transport # TODO on windows: fix iconv link issue - foxglove_compressed_video_transport + - fuse # Windows: the fuse libraries export no symbols and add -Werror; requested in https://github.com/RoboStack/ros-lyrical/pull/85 - grid_map # rviz linking problems on Windows, see https://github.com/RoboStack/ros-jazzy/pull/79#issuecomment-2993499990 - grid_map_rviz_plugin # rviz linking problems on Windows, see https://github.com/RoboStack/ros-jazzy/pull/79#issuecomment-2993499990 - ign_ros2_control From efd9118471eb7962e35e80da83992b91e48b785e Mon Sep 17 00:00:00 2001 From: Tobias Fischer Date: Mon, 19 Oct 2026 18:33:11 +1000 Subject: [PATCH 2/2] fuse_optimizers: recipe test that the fixed-lag smoother node starts [skip ci] Turns the local checks of this PR into a recipe test, so later rebuilds keep them. Co-Authored-By: Claude Opus 5.5 --- shared/tests/ros2-fuse-optimizers.yaml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 shared/tests/ros2-fuse-optimizers.yaml diff --git a/shared/tests/ros2-fuse-optimizers.yaml b/shared/tests/ros2-fuse-optimizers.yaml new file mode 100644 index 00000000..d37c1f6a --- /dev/null +++ b/shared/tests/ros2-fuse-optimizers.yaml @@ -0,0 +1,6 @@ +tests: + # Smoke test: `fuse_optimizers/fixed_lag_smoother_node` (fuse's optimizer node) starts (loads its libraries and the RMW) and is still running after 5 s. + - if: unix + then: + script: + - python -c "import os, subprocess, sys, time; p = subprocess.Popen([os.path.join(os.environ['PREFIX'], 'lib', 'fuse_optimizers', 'fixed_lag_smoother_node')]); time.sleep(5); r = p.poll(); p.terminate(); sys.exit(0 if r is None else 1)"