diff --git a/distros/jazzy/patch/ros2-fuse-models.win.patch b/distros/jazzy/patch/ros2-fuse-models.win.patch new file mode 100644 index 000000000..ed2b52812 --- /dev/null +++ b/distros/jazzy/patch/ros2-fuse-models.win.patch @@ -0,0 +1,15 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index fe3bc94..aadac7c 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -10,6 +10,10 @@ endif() + if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") + add_compile_options(-Wall -Wextra -Wpedantic) + endif() ++if(MSVC) ++ # error C1128: number of sections exceeded object file format limit ++ add_compile_options(/bigobj) ++endif() + + find_package(ament_cmake_ros REQUIRED) + diff --git a/distros/lyrical/patch/ros2-fuse-viz.patch b/distros/lyrical/patch/ros2-fuse-viz.patch new file mode 100644 index 000000000..0b12fe2d9 --- /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 000000000..0b12fe2d9 --- /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-constraints.win.patch b/shared/patch/ros2-fuse-constraints.win.patch new file mode 100644 index 000000000..7f30a3304 --- /dev/null +++ b/shared/patch/ros2-fuse-constraints.win.patch @@ -0,0 +1,13 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 8640fe0..55d6a47 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -67,7 +67,7 @@ include(suitesparse-extras.cmake) + # | ^~~ + if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 12.0) + add_compile_options(-Wall -Werror -Wno-array-bounds) +-else() ++elseif(NOT MSVC) + add_compile_options(-Wall -Werror) + endif() + diff --git a/shared/patch/ros2-fuse-core.win.patch b/shared/patch/ros2-fuse-core.win.patch new file mode 100644 index 000000000..d399a6a39 --- /dev/null +++ b/shared/patch/ros2-fuse-core.win.patch @@ -0,0 +1,15 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 737542c..9a68b92 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -63,6 +63,10 @@ target_link_libraries(${PROJECT_NAME} PUBLIC + target_link_libraries(${PROJECT_NAME} PRIVATE + rclcpp_components::component + ) ++# MSVC: M_PI (used in fuse_core/util.hpp) needs _USE_MATH_DEFINES, also in dependent packages ++if(MSVC) ++ target_compile_definitions(${PROJECT_NAME} PUBLIC _USE_MATH_DEFINES) ++endif() + + ## fuse_echo executable + add_library(fuse_echo_component SHARED src/fuse_echo.cpp) diff --git a/shared/patch/ros2-fuse-graphs.patch b/shared/patch/ros2-fuse-graphs.patch new file mode 100644 index 000000000..916300a1b --- /dev/null +++ b/shared/patch/ros2-fuse-graphs.patch @@ -0,0 +1,17 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 9a0bc4d..d07dce2 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -44,7 +44,11 @@ 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) ++if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") ++ add_compile_options(-Wall -Werror -Wno-maybe-uninitialized) ++elseif(NOT MSVC) ++ add_compile_options(-Wall -Werror) ++endif() + + ## fuse_graphs library + add_library(${PROJECT_NAME} diff --git a/shared/pkg_additional_info.yaml b/shared/pkg_additional_info.yaml index 4db4b4fd2..abf551cee 100644 --- a/shared/pkg_additional_info.yaml +++ b/shared/pkg_additional_info.yaml @@ -41,6 +41,26 @@ force_torque_sensor_broadcaster: additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" foxglove_bridge: additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" +fuse_constraints: + additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" +fuse_core: + additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" +fuse_graphs: + additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" +fuse_loss: + additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" +fuse_models: + additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" +fuse_optimizers: + additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" +fuse_publishers: + additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" +fuse_tutorials: + additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" +fuse_variables: + additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" +fuse_viz: + additional_cmake_args: "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON" gz_cmake_vendor: additional_cmake_args: "-DAMENT_VENDOR_POLICY=NEVER_VENDOR_IGNORE_SATISFIED_CHECK" gz_common_vendor: diff --git a/shared/tests/ros2-fuse-optimizers.yaml b/shared/tests/ros2-fuse-optimizers.yaml new file mode 100644 index 000000000..845a6068a --- /dev/null +++ b/shared/tests/ros2-fuse-optimizers.yaml @@ -0,0 +1,4 @@ +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. + - script: + - python -c "import os, subprocess, sys, time; d = os.path.join(os.environ['PREFIX'], 'Library') if os.name == 'nt' else os.environ['PREFIX']; p = subprocess.Popen([os.path.join(d, 'lib', 'fuse_optimizers', 'fixed_lag_smoother_node')]); time.sleep(5); r = p.poll(); p.terminate(); sys.exit(0 if r is None else 1)" diff --git a/shared/vinca.yaml b/shared/vinca.yaml index 39ac5936a..758f1e0b6 100644 --- a/shared/vinca.yaml +++ b/shared/vinca.yaml @@ -118,6 +118,7 @@ packages_select_by_deps: - flex_sync - foxglove_bridge - foxglove_msgs + - fuse # requested in https://github.com/RoboStack/ros-lyrical/pull/85 - gazebo_dev - gazebo_msgs - gazebo_plugins