blob: 1474dfc889564109e52697d59f13010d1da471bb (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
%define ros_distro humble
%define RosPkgName adi-iio
%define src_version 1.0.1-3
%define libiio_version 0.25
Name: ros-%{ros_distro}-%{RosPkgName}
Version: 1.0.1
Release: 4%{?dist}
Summary: ROS package to interface with IIO devices
License: Apache License, Version 2.0
URL: https://github.com/analogdevicesinc/iio_ros2/tree/humble
Source0: %{RosPkgName}-%{src_version}.tar.gz
Source1: libiio-%{libiio_version}.tar.gz
%global debug_package %{nil}
%global __os_install_post %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
%global __provides_exclude_from ^/opt/ros/%{ros_distro}/.*$
%global __requires_exclude_from ^/opt/ros/%{ros_distro}/.*$
BuildRequires: cmake
BuildRequires: ros-%{ros_distro}-ament-cmake
BuildRequires: ros-%{ros_distro}-rclcpp
BuildRequires: ros-%{ros_distro}-ros2launch
BuildRequires: ros-%{ros_distro}-rosidl-default-generators
BuildRequires: ros-%{ros_distro}-rosidl-default-runtime
BuildRequires: ros-%{ros_distro}-rosidl-typesupport-introspection-cpp
BuildRequires: ros-%{ros_distro}-std-msgs
Requires: ros-%{ros_distro}-ros-workspace
Requires: ros-%{ros_distro}-ament-cmake
Requires: ros-%{ros_distro}-rclcpp
Requires: ros-%{ros_distro}-ros2launch
Requires: ros-%{ros_distro}-rosidl-default-runtime
Requires: ros-%{ros_distro}-rosidl-typesupport-introspection-cpp
Requires: ros-%{ros_distro}-std-msgs
Provides: libiio = %{libiio_version}
Provides: libiio-devel = %{libiio_version}
Provides: %{name}-devel = %{version}-%{release}
Provides: %{name}-doc = %{version}-%{release}
Provides: %{name}-runtime = %{version}-%{release}
%description
ROS package to interface with IIO devices.
Vendors libiio (userspace IIO library) as it is not available on openEuler.
%prep
%autosetup -n %{RosPkgName}-%{src_version} -a 1
%build
# Build vendored libiio 0.25 first (openEuler has no libiio package).
# Using 0.25 (last 0.x release) because adi-iio 1.0.1 uses the libiio 0.x API
# (iio_buffer_cancel/destroy, iio_channel_enable/disable single-arg,
# iio_device_create_buffer, iio_buffer_refill/first/step/push) which was
# removed/changed in libiio 1.0. libiio 1.0.0 was tried in rounds 1-2 and
# caused compilation failures due to API mismatch.
# Network backend disabled: it transitively pulls in libavahi/libxml2
# (DNS-SD discovery + XML backend). adi-iio only needs the local backend
# (iio_create_context_from_uri with "local:" URI) plus the libiio API,
# so WITH_NETWORK_BACKEND=OFF avoids the whole dependency chain.
cd libiio-%{libiio_version}
mkdir -p build && cd build
cmake .. \
-DCMAKE_INSTALL_PREFIX="/usr" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_LIBDIR=lib64 \
-DBUILD_SHARED_LIBS=ON \
-DWITH_XML_BACKEND=OFF \
-DWITH_USB_BACKEND=OFF \
-DWITH_SERIAL_BACKEND=OFF \
-DWITH_NETWORK_BACKEND=OFF \
-DWITH_ZSTD=OFF \
-DWITH_IIOD=OFF \
-DWITH_EXAMPLES=OFF \
-DWITH_TESTS=OFF \
-DWITH_MAN=OFF
make %{?_smp_mflags}
_LIBIIO_BUILD_DIR="$PWD"
_LIBIIO_INC_DIR="$(cd .. && pwd)"
cd ../..
# Source ROS environment
[ -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}
export LD_LIBRARY_PATH="${_LIBIIO_BUILD_DIR}${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
# Build adi-iio against vendored libiio
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}" \
-DIIO_INCLUDE_DIRS="${_LIBIIO_INC_DIR}" \
-DIIO_LIBRARIES="${_LIBIIO_BUILD_DIR}/libiio.so" \
-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 \
..
make %{?_smp_mflags}
%install
# Install vendored libiio
cd libiio-%{libiio_version}/build
make install DESTDIR=%{buildroot}
cd ../..
# Source ROS environment
[ -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}
# Install adi-iio
cd .obj
make install DESTDIR=%{buildroot}
%files
/usr/lib*/libiio.so*
/usr/lib*/pkgconfig/libiio.pc
/usr/include/iio.h
/opt/ros/%{ros_distro}
%changelog
* Mon Sep 28 2026 ai-importer <ai-importer@openeuler.org> - 1.0.1-4
- Switch vendored libiio from 1.0.0 to 0.25: adi-iio 1.0.1 uses the libiio
0.x API (iio_buffer_cancel/destroy, single-arg iio_channel_enable/disable,
iio_device_create_buffer, iio_buffer_refill/first/step/push) which was
removed/changed in libiio 1.0, causing compilation failures in iio_buffer.cpp.
libiio 0.25 header (iio.h) is at source root, not include/iio/ subdirectory.
* Mon Sep 28 2026 ai-importer <ai-importer@openeuler.org> - 1.0.1-3
- Disable libiio network backend: it requires libavahi/libxml2/libzstd which are
not pulled in; local backend suffices for adi-iio's iio_create_context_from_uri
* Mon Sep 28 2026 ai-importer <ai-importer@openeuler.org> - 1.0.1-2
- Vendor libiio 1.0.0 (not available on openEuler)
- Remove libiio-dev BuildRequires/Requires, add Provides: libiio/libiio-devel
* Mon Sep 28 2026 ai-importer <ai-importer@openeuler.org> - 1.0.1-1
- Initial import (ROS batch)
|