diff options
| -rw-r--r-- | .gitignore | 2 | ||||
| -rw-r--r-- | foxglove-bridge.spec | 120 | ||||
| -rw-r--r-- | sources | 2 |
3 files changed, 124 insertions, 0 deletions
@@ -0,0 +1,2 @@ +/foxglove-bridge-3.5.0-1.tar.gz +/foxglove-v0.27.0-cpp-aarch64-unknown-linux-gnu.zip diff --git a/foxglove-bridge.spec b/foxglove-bridge.spec new file mode 100644 index 0000000..62e1a15 --- /dev/null +++ b/foxglove-bridge.spec @@ -0,0 +1,120 @@ +%define ros_distro humble +%define RosPkgName foxglove-bridge +%define src_version 3.5.0-1 +# 上游 Foxglove C++ SDK 版本(CMakeLists.txt 中 FOXGLOVE_SDK_VERSION),随 ROS 包发布 +%define sdk_version 0.27.0 + +Name: ros-%{ros_distro}-%{RosPkgName} +Version: 3.5.0 +Release: 1%{?dist} +Summary: ROS Foxglove Bridge +License: MIT +URL: https://github.com/foxglove/foxglove-sdk +# Source0:foxglove-sdk monorepo 归档(含 ros/src/foxglove_bridge 包),src_version 为完整清单版本号 +Source0: %{RosPkgName}-%{src_version}.tar.gz +# Source1:上游 CMake FetchContent 下载的预编译 Foxglove C++ SDK zip(aarch64,GitHub release tag sdk/v0.27.0)。 +# COPR 构建环境无网络,FetchContent 必败,故在此声明为 Source 并于 %prep 离线解压、%build 以 +# -DFETCHCONTENT_SOURCE_DIR_FOXGLOVE_SDK 重定向。zip 顶层目录为 foxglove/,内含 +# lib/cmake/foxglove-sdk/foxglove-sdkConfig.cmake。 +# 本 Source 由 pkg-fixer 离线抓取后放 pkgs/<pkg>/ 本地文件,_prepare_inputs 的本地文件复制 +# 优先于 URL 下载(规避 release-assets.githubusercontent.com CDN 限速)。 +# COPR chroot 仅为 openEuler-24.03_LTS_SP3-aarch64,故仅提供 aarch64 zip(原 x86_64 Source 已删除)。 +Source1: https://github.com/foxglove/foxglove-sdk/releases/download/sdk/v%{sdk_version}/foxglove-v%{sdk_version}-cpp-aarch64-unknown-linux-gnu.zip + +# 预编译 SDK zip 仅为 aarch64;限制构建架构与 COPR chroot 一致 +ExclusiveArch: aarch64 + +# debug 子包无意义(/opt 前缀),SIG 模板统一关闭 +%global debug_package %{nil} +# /opt 下 python 字节码编译会写标准 sitelib 路径,摘掉 brp-python-bytecompile +%global __os_install_post %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g') +# ROS 包不做自动依赖扫描(.so 全在 /opt/ros 下,由 ament 间接依赖模型替代) +%global __provides_exclude_from ^/opt/ros/%{ros_distro}/.*$ +%global __requires_exclude_from ^/opt/ros/%{ros_distro}/.*$ + +BuildRequires: cmake +BuildRequires: unzip +BuildRequires: ros-%{ros_distro}-ament-cmake +BuildRequires: ros-%{ros_distro}-ament-index-cpp +BuildRequires: ros-%{ros_distro}-geometry-msgs +BuildRequires: ros-%{ros_distro}-rcl-interfaces +BuildRequires: ros-%{ros_distro}-rclcpp +BuildRequires: ros-%{ros_distro}-rclcpp-components +BuildRequires: ros-%{ros_distro}-rcpputils +BuildRequires: ros-%{ros_distro}-rcutils +BuildRequires: ros-%{ros_distro}-resource-retriever +BuildRequires: ros-%{ros_distro}-ros-environment +BuildRequires: ros-%{ros_distro}-rosgraph-msgs +BuildRequires: ros-%{ros_distro}-rosidl-typesupport-introspection-cpp +# rosx-introspection 仅在 ros-upstream.list(rosdistro 全量),SIG 源尚未移植: +# 依 §6 写 BuildRequires 交构建失败诊断循环注册递归引入,禁止静默丢弃 +BuildRequires: ros-%{ros_distro}-rosx-introspection +BuildRequires: ros-%{ros_distro}-sensor-msgs +BuildRequires: ros-%{ros_distro}-std-msgs + +Requires: ros-%{ros_distro}-ros-workspace +Requires: ros-%{ros_distro}-ament-cmake +Requires: ros-%{ros_distro}-ament-index-cpp +Requires: ros-%{ros_distro}-rcl-interfaces +Requires: ros-%{ros_distro}-rclcpp +Requires: ros-%{ros_distro}-rclcpp-components +Requires: ros-%{ros_distro}-rcpputils +Requires: ros-%{ros_distro}-rcutils +Requires: ros-%{ros_distro}-resource-retriever +Requires: ros-%{ros_distro}-rosgraph-msgs +Requires: ros-%{ros_distro}-rosidl-typesupport-introspection-cpp +Requires: ros-%{ros_distro}-rosx-introspection +Requires: ros-%{ros_distro}-std-msgs + +# 单包策略:严禁拆实体子包(路径重叠致安装事务冲突),改用虚拟别名兼容依赖方 +Provides: %{name}-devel = %{version}-%{release} +Provides: %{name}-doc = %{version}-%{release} +Provides: %{name}-runtime = %{version}-%{release} + +%description +High performance ROS 2 WebSocket bridge using the Foxglove SDK, written in C++. +The foxglove_bridge bridges ROS 2 topics, services and parameters to WebSocket +clients (such as Foxglove Studio) with low overhead. + +%prep +%autosetup -n %{RosPkgName}-%{src_version} +# 离线本地化上游 CMake FetchContent 下载的预编译 Foxglove C++ SDK(COPR 构建无网络)。 +# 解压到 %{_builddir},顶层目录 foxglove/ 与 Source0 目录不冲突;unzip -d 不改变当前工作目录。 +# 仅 aarch64(ExclusiveArch 限制,COPR chroot 为 openEuler-24.03_LTS_SP3-aarch64)。 +unzip -q -o %{_sourcedir}/foxglove-v%{sdk_version}-cpp-aarch64-unknown-linux-gnu.zip -d %{_builddir} + +%build +# ROS 基座环境(setup.sh 可能不存在,用 [ -f ] 守卫) +[ -f /opt/ros/%{ros_distro}/setup.sh ] && source /opt/ros/%{ros_distro}/setup.sh || true +export PYTHONPATH=/opt/ros/%{ros_distro}/lib/python%{python3_version}/site-packages${PYTHONPATH:+:$PYTHONPATH} +export PKG_CONFIG_PATH=/opt/ros/%{ros_distro}/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH} +# 包位于 monorepo 的 ros/src/foxglove_bridge 子目录 +cd ros/src/foxglove_bridge +mkdir -p .obj && cd .obj +%cmake3 \ + -DCMAKE_INSTALL_PREFIX="/opt/ros/%{ros_distro}" \ + -DAMENT_PREFIX_PATH="/opt/ros/%{ros_distro}" \ + -DCMAKE_PREFIX_PATH="/opt/ros/%{ros_distro}" \ + -UINCLUDE_INSTALL_DIR -ULIB_INSTALL_DIR -USYSCONF_INSTALL_DIR -USHARE_INSTALL_PREFIX -ULIB_SUFFIX \ + -DSETUPTOOLS_DEB_LAYOUT=OFF \ + -DBUILD_TESTING=OFF -DTESTING=OFF -DCMAKE_SUPPRESS_REGENERATION=ON \ + -DFOXGLOVE_BRIDGE_REMOTE_ACCESS=OFF \ + -DFETCHCONTENT_SOURCE_DIR_FOXGLOVE_SDK=%{_builddir}/foxglove \ + .. +make %{?_smp_mflags} + +%install +[ -f /opt/ros/%{ros_distro}/setup.sh ] && source /opt/ros/%{ros_distro}/setup.sh || true +export PYTHONPATH=/opt/ros/%{ros_distro}/lib/python%{python3_version}/site-packages${PYTHONPATH:+:$PYTHONPATH} +export PKG_CONFIG_PATH=/opt/ros/%{ros_distro}/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH} +cd ros/src/foxglove_bridge +cd .obj +make install DESTDIR=%{buildroot} + +# %files 整树拥有 /opt/ros/<distro>,对"装了没打包"类错误免疫(SIG 模板标准做法) +%files +/opt/ros/%{ros_distro} + +%changelog +* Wed Sep 23 2026 ai-importer <ai-importer@openeuler.org> - 3.5.0-1 +- Initial import (ROS batch) @@ -0,0 +1,2 @@ +9db1e21b3010a57aec3ae56a6efb63f1 foxglove-bridge-3.5.0-1.tar.gz +50f347d51ef7539412253a2870aeb557 foxglove-v0.27.0-cpp-aarch64-unknown-linux-gnu.zip |
