File ipu6-camera-hal.spec of Package ipu6-camera-hal

%global commit cb00bdd254fdcc71795482dd61ac35ca32adb93a
%global commitdate 20240624
%global shortcommit %(c=%{commit}; echo ${c:0:7})

Name:           ipu6-camera-hal
Summary:        Hardware abstraction layer for Intel IPU6
URL:            https://github.com/intel/ipu6-camera-hal
Version:        1.0.3+git%{commitdate}.%{shortcommit}
Release:        0
License:        Apache-2.0
Group:          Hardware/Camera

Source0:        https://github.com/intel/%{name}/archive/%{commit}/%{name}-%{shortcommit}.tar.gz
Source1:        60-intel-ipu6.rules
Source2:        v4l2-relayd-adl
Source3:        v4l2-relayd-tgl
Source4:        v4l2-relayd-mtl
Source5:        intel_ipu6_isys.conf
Patch0:         add-configs-for-v4l2loopback-and-cheese.patch

BuildRequires:  systemd-rpm-macros
BuildRequires:  ipu6-camera-bins-devel
BuildRequires:  cmake
BuildRequires:  gcc
BuildRequires:  gcc-c++
BuildRequires:  libexpat-devel
BuildRequires:  fdupes
BuildRequires:  pkgconfig(libdrm)
#!BuildIgnore:  gstreamer-plugins-icamerasrc
#!BuildIgnore:  ipu6-camera-bins-firmware
#!BuildIgnore:  ivsc-firmware
#!BuildIgnore:  v4l2-relayd
#!BuildIgnore:  intel-ipu6-kmp-default
ExclusiveArch:  x86_64
BuildRequires:       ipu6-camera-bins

%description
ipu6-camera-hal provides the basic hardware access APIs for IPU6.

%package devel
Summary:        IPU6 header files for HAL
Requires:       %{name} = %{version}-%{release}
Requires:       ipu6-camera-bins-devel
Group:          Development/Languages/C and C++

%description devel
This provides the necessary header files for IPU6 HAL development.

%prep
%autosetup -p1 -n %{name}-%{commit}
%if 0%{?suse_version} > 1500
sed -i 's@-D_FORTIFY_SOURCE=2 @@' CMakeLists.txt
sed -i '/-D_FORTIFY_SOURCE=2/d' CMakeLists.txt
sed -i 's@-D_FORTIFY_SOURCE=2 @@' src/hal/hal_adaptor/CMakeLists.txt
sed -i '/-D_FORTIFY_SOURCE=2/d' src/hal/hal_adaptor/CMakeLists.txt
%endif
sed -i 's@lib/@%{_lib}/@' CMakeLists.txt

%build
for i in ipu_tgl ipu_adl ipu_mtl ; do
  case $i in
    ipu_tgl) IPU_VERSION=ipu6 ;;
    ipu_adl) IPU_VERSION=ipu6ep ;;
    ipu_mtl) IPU_VERSION=ipu6epmtl ;;
  esac
  export PKG_CONFIG_PATH=%{_libdir}/$i/pkgconfig
  mkdir $i && pushd $i
  %cmake -DCMAKE_BUILD_TYPE=Release -DIPU_VER=$IPU_VERSION \
         -DBUILD_CAMHAL_TESTS=OFF -DUSE_PG_LITE_PIPE=ON \
         -DCMAKE_INSTALL_PREFIX=%{_prefix} -DUSE_HAL_ADAPTOR=ON ../..
  %make_build
  popd
done
pushd src/hal/hal_adaptor
sed -i 's@/usr/lib/@%{_libdir}/@' HalAdaptor.cpp
%cmake -DCMAKE_INSTALL_PREFIX=%{_prefix} .
%make_build
popd

%install
for i in ipu_tgl ipu_adl ipu_mtl ; do
  pushd $i/build
  %make_install
  popd
done

pushd src/hal/hal_adaptor/build
%make_install
sed -i 's@lib/@%{_lib}/@' %{buildroot}%{_libdir}/pkgconfig/libcamhal.pc
popd

# We don't want static libs
#rm %{buildroot}%{_libdir}/*/libcamhal.a

mv %{buildroot}%{_prefix}/etc %{buildroot}/

install -p -m 0644 -D %{SOURCE1} %{buildroot}%{_udevrulesdir}/60-intel-ipu6.rules
install -m 0644 data/72-intel-mipi-ipu6-camera.rules %{buildroot}%{_udevrulesdir}/72-intel-mipi-ipu6-camera.rules
install -m 0644 data/72-intel-mipi-ipu7-camera.rules %{buildroot}%{_udevrulesdir}/72-intel-mipi-ipu7-camera.rules


# v4l2-relayd configuration examples
install -p -D -m 0644 %{SOURCE2} %{buildroot}%{_datadir}/defaults/etc/ipu_adl/v4l2-relayd
install -p -D -m 0644 %{SOURCE3} %{buildroot}%{_datadir}/defaults/etc/ipu_tgl/v4l2-relayd
install -p -D -m 0644 %{SOURCE4} %{buildroot}%{_datadir}/defaults/etc/ipu_mtl/v4l2-relayd

# Make intel-ipu6-kmp use /dev/video7 leaving /dev/video0 for loopback
install -p -D -m 0644 %{SOURCE5} %{buildroot}%{_modprobedir}/intel_ipu6_isys.conf

%fdupes %{buildroot}%{_datadir}/defaults/etc

%post
# skip triggering if udevd isn't even accessible, e.g. containers or
# rpm-ostree-based systems
if [ -S /run/udev/control ]; then
    /usr/bin/udevadm control --reload
    /usr/bin/udevadm trigger /sys/devices/pci0000:00/0000:00:05.0
fi

%files
%license LICENSE
%{_libdir}/libcamhal.so.*
%{_libdir}/libcamhal
%dir %{_datadir}/defaults
%dir %{_datadir}/defaults/etc
%{_datadir}/defaults/etc/*
%{_modprobedir}/intel_ipu6_isys.conf
%{_udevrulesdir}/*.rules
%{_sysconfdir}/camera

%files devel
%{_libdir}/libcamhal.so
%{_includedir}/libcamhal
%{_libdir}/pkgconfig/libcamhal.pc

%changelog
openSUSE Build Service is sponsored by