309 lines
9.6 KiB
RPMSpec
309 lines
9.6 KiB
RPMSpec
|
#
|
|||
|
# spec file for package armnn
|
|||
|
#
|
|||
|
# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
|
|||
|
#
|
|||
|
# All modifications and additions to the file contributed by third parties
|
|||
|
# remain the property of their copyright owners, unless otherwise agreed
|
|||
|
# upon. The license for this file, and modifications and additions to the
|
|||
|
# file, is the same license as for the pristine package itself (unless the
|
|||
|
# license for the pristine package is not an Open Source License, in which
|
|||
|
# case the license is the MIT License). An "Open Source License" is a
|
|||
|
# license that conforms to the Open Source Definition (Version 1.9)
|
|||
|
# published by the Open Source Initiative.
|
|||
|
|
|||
|
# Please submit bugfixes or comments via http://bugs.opensuse.org/
|
|||
|
#
|
|||
|
|
|||
|
# Compute library has neon enabled for aarch64 only
|
|||
|
%ifarch aarch64
|
|||
|
%bcond_without compute_neon
|
|||
|
%else
|
|||
|
%bcond_with compute_neon
|
|||
|
%endif
|
|||
|
|
|||
|
# Disable OpenCL from Compute library, as check fails
|
|||
|
%bcond_with compute_cl
|
|||
|
|
|||
|
# stb-devel and flatbuffers-devel are available on Leap 15.1+
|
|||
|
%if 0%{?suse_version} > 1500
|
|||
|
%bcond_without armnn_tests
|
|||
|
%bcond_without armnn_flatbuffers
|
|||
|
%else
|
|||
|
%bcond_with armnn_tests
|
|||
|
%bcond_with armnn_flatbuffers
|
|||
|
%endif
|
|||
|
|
|||
|
# Disable CAFFE for now (build broken)
|
|||
|
%bcond_with armnn_caffe
|
|||
|
|
|||
|
# Disable TensorFlow for now (build broken)
|
|||
|
%bcond_with armnn_tf
|
|||
|
|
|||
|
%define version_major 19
|
|||
|
%define version_minor 02
|
|||
|
|
|||
|
Name: armnn
|
|||
|
Version: %{version_major}.%{version_minor}
|
|||
|
Release: 0
|
|||
|
Summary: Arm NN SDK enables machine learning workloads on power-efficient devices
|
|||
|
License: MIT
|
|||
|
Group: Development/Libraries/Other
|
|||
|
Url: https://developer.arm.com/products/processors/machine-learning/arm-nn
|
|||
|
Source0: https://github.com/ARM-software/armnn/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz
|
|||
|
Patch1: armnn-fix_boost.patch
|
|||
|
Patch2: armnn-fix_stb_include.patch
|
|||
|
# PATCH: based on http://arago-project.org/git/?p=meta-arago.git;a=blob;f=meta-arago-extras/recipes-support/armnn/armnn/0004-generate-versioned-library.patch;hb=master
|
|||
|
Patch3: armnn-generate-versioned-library.patch
|
|||
|
# Patch: http://arago-project.org/git/?p=meta-arago.git;a=blob;f=meta-arago-extras/recipes-support/armnn/armnn/0007-enable-use-of-arm-compute-shared-library.patch;hb=master
|
|||
|
Patch4: 0007-enable-use-of-arm-compute-shared-library.patch
|
|||
|
%if 0%{?suse_version} < 1330
|
|||
|
BuildRequires: boost-devel >= 1.59
|
|||
|
%else
|
|||
|
BuildRequires: libboost_filesystem-devel >= 1.59
|
|||
|
BuildRequires: libboost_log-devel >= 1.59
|
|||
|
BuildRequires: libboost_program_options-devel >= 1.59
|
|||
|
BuildRequires: libboost_system-devel >= 1.59
|
|||
|
BuildRequires: libboost_test-devel >= 1.59
|
|||
|
BuildRequires: libboost_thread-devel >= 1.59
|
|||
|
%endif
|
|||
|
%if %{with armnn_caffe}
|
|||
|
BuildRequires: caffe-devel
|
|||
|
%endif
|
|||
|
BuildRequires: cmake >= 3.0.2
|
|||
|
BuildRequires: ComputeLibrary-devel
|
|||
|
BuildRequires: gcc-c++
|
|||
|
%if %{with armnn_flatbuffers}
|
|||
|
BuildRequires: flatbuffers-devel
|
|||
|
%endif
|
|||
|
%if %{with compute_cl}
|
|||
|
# Mesa-libOpenCl is required for tests
|
|||
|
BuildRequires: Mesa-libOpenCL
|
|||
|
BuildRequires: ocl-icd-devel
|
|||
|
BuildRequires: opencl-cpp-headers
|
|||
|
%endif
|
|||
|
BuildRequires: protobuf-devel
|
|||
|
BuildRequires: python-rpm-macros
|
|||
|
%if %{with armnn_tests}
|
|||
|
BuildRequires: stb-devel
|
|||
|
%endif
|
|||
|
%if %{with armnn_tf}
|
|||
|
BuildRequires: tensorflow-devel
|
|||
|
%endif
|
|||
|
BuildRequires: valgrind-devel
|
|||
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
|||
|
|
|||
|
%description
|
|||
|
Arm NN is an inference engine for CPUs, GPUs and NPUs.
|
|||
|
It bridges the gap between existing NN frameworks and the underlying IP.
|
|||
|
It enables efficient translation of existing neural network frameworks,
|
|||
|
such as TensorFlow and Caffe, allowing them to run efficiently – without
|
|||
|
modification – across Arm Cortex CPUs and Arm Mali GPUs.
|
|||
|
|
|||
|
%package devel
|
|||
|
Summary: Development headers and libraries for armnn
|
|||
|
Group: Development/Libraries/C and C++
|
|||
|
Requires: %{name} = %{version}
|
|||
|
Requires: lib%{name}%{version_major} = %{version}
|
|||
|
%if %{with armnn_flatbuffers}
|
|||
|
Requires: libarmnnSerializer%{version_major} = %{version}
|
|||
|
%endif
|
|||
|
|
|||
|
%description devel
|
|||
|
Arm NN is an inference engine for CPUs, GPUs and NPUs.
|
|||
|
It bridges the gap between existing NN frameworks and the underlying IP.
|
|||
|
It enables efficient translation of existing neural network frameworks,
|
|||
|
such as TensorFlow and Caffe, allowing them to run efficiently – without
|
|||
|
modification – across Arm Cortex CPUs and Arm Mali GPUs.
|
|||
|
|
|||
|
This package contains the development libraries and headers for armnn.
|
|||
|
|
|||
|
%package -n lib%{name}%{version_major}
|
|||
|
Summary: lib%{name} from armnn
|
|||
|
Group: Development/Libraries/C and C++
|
|||
|
|
|||
|
%description -n lib%{name}%{version_major}
|
|||
|
Arm NN is an inference engine for CPUs, GPUs and NPUs.
|
|||
|
It bridges the gap between existing NN frameworks and the underlying IP.
|
|||
|
It enables efficient translation of existing neural network frameworks,
|
|||
|
such as TensorFlow and Caffe, allowing them to run efficiently – without
|
|||
|
modification – across Arm Cortex CPUs and Arm Mali GPUs.
|
|||
|
|
|||
|
This package contains the libarmnn library from armnn.
|
|||
|
|
|||
|
%if %{with armnn_flatbuffers}
|
|||
|
%package -n libarmnnSerializer%{version_major}
|
|||
|
Summary: libarmnnSerializer from armnn
|
|||
|
Group: Development/Libraries/C and C++
|
|||
|
|
|||
|
%description -n libarmnnSerializer%{version_major}
|
|||
|
Arm NN is an inference engine for CPUs, GPUs and NPUs.
|
|||
|
It bridges the gap between existing NN frameworks and the underlying IP.
|
|||
|
It enables efficient translation of existing neural network frameworks,
|
|||
|
such as TensorFlow and Caffe, allowing them to run efficiently – without
|
|||
|
modification – across Arm Cortex CPUs and Arm Mali GPUs.
|
|||
|
|
|||
|
This package contains the libarmnnSerializer library from armnn.
|
|||
|
|
|||
|
%endif
|
|||
|
|
|||
|
%prep
|
|||
|
%setup -q
|
|||
|
%patch1 -p1
|
|||
|
%patch2 -p1
|
|||
|
%patch3 -p1
|
|||
|
%patch4 -p1
|
|||
|
# Boost fixes for dynamic linking
|
|||
|
sed -i 's/add_definitions("-DBOOST_ALL_NO_LIB")/add_definitions("-DBOOST_ALL_DYN_LINK")/' ./cmake/GlobalConfig.cmake
|
|||
|
sed -i 's/set(Boost_USE_STATIC_LIBS ON)/set(Boost_USE_STATIC_LIBS OFF)/' ./cmake/GlobalConfig.cmake
|
|||
|
sed -i 's/find_package(Boost 1.59 REQUIRED COMPONENTS unit_test_framework system filesystem log program_options)/find_package(Boost 1.59 REQUIRED COMPONENTS unit_test_framework system filesystem log thread program_options)/' ./cmake/GlobalConfig.cmake
|
|||
|
# Build fix
|
|||
|
sed -i 's/-Wsign-conversion//' ./cmake/GlobalConfig.cmake
|
|||
|
|
|||
|
%build
|
|||
|
%cmake \
|
|||
|
-DGENERIC_LIB_VERSION=%{version} \
|
|||
|
-DGENERIC_LIB_SOVERSION=%{version_major} \
|
|||
|
%if %{with armnn_tf}
|
|||
|
-DCMAKE_CXX_FLAGS:STRING="%{optflags} -pthread -ltensorflow_cc -ltensorflow_framework" \
|
|||
|
%else
|
|||
|
-DCMAKE_CXX_FLAGS:STRING="%{optflags} -pthread" \
|
|||
|
%endif
|
|||
|
-DBOOST_LIBRARYDIR=%{_libdir} \
|
|||
|
%if %{with armnn_caffe}
|
|||
|
-DBUILD_CAFFE_PARSER=ON \
|
|||
|
%else
|
|||
|
-DBUILD_CAFFE_PARSER=OFF \
|
|||
|
%endif
|
|||
|
-DCAFFE_GENERATED_SOURCES=%{_includedir}/ \
|
|||
|
-DBUILD_ONNX_PARSER=OFF \
|
|||
|
%if %{with armnn_flatbuffers}
|
|||
|
-DBUILD_ARMNN_SERIALIZER=ON \
|
|||
|
-DFLATC_DIR=%{_bindir} \
|
|||
|
-DFLATBUFFERS_INCLUDE_PATH=%{_includedir} \
|
|||
|
-DBUILD_ARMNN_QUANTIZER=ON \
|
|||
|
%else
|
|||
|
-DBUILD_ARMNN_SERIALIZER=OFF \
|
|||
|
-DBUILD_ARMNN_QUANTIZER=OFF \
|
|||
|
%endif
|
|||
|
%if %{with armnn_tf}
|
|||
|
-DBUILD_TF_PARSER=ON \
|
|||
|
-DTF_GENERATED_SOURCES=%{python3_sitelib}/tensorflow/include/ \
|
|||
|
%else
|
|||
|
-DBUILD_TF_PARSER=OFF \
|
|||
|
%endif
|
|||
|
%if %{with compute_neon} || %{with compute_cl}
|
|||
|
-DARMCOMPUTE_INCLUDE=%{_includedir} \
|
|||
|
-DHALF_INCLUDE=%{_includedir}/half \
|
|||
|
-DARMCOMPUTE_BUILD_DIR=%{_libdir} \
|
|||
|
-DARMCOMPUTE_ROOT=/usr \
|
|||
|
%endif
|
|||
|
%if %{with compute_neon}
|
|||
|
-DARMCOMPUTENEON=ON \
|
|||
|
%else
|
|||
|
-DARMCOMPUTENEON=OFF \
|
|||
|
%endif
|
|||
|
%if %{with compute_cl}
|
|||
|
-DARMCOMPUTECL=ON \
|
|||
|
-DOPENCL_INCLUDE=%{_includedir} \
|
|||
|
%else
|
|||
|
-DARMCOMPUTECL=OFF \
|
|||
|
%endif
|
|||
|
-DTHIRD_PARTY_INCLUDE_DIRS=%{_includedir} \
|
|||
|
%if %{with armnn_flatbuffers}
|
|||
|
-DBUILD_SAMPLE_APP=ON \
|
|||
|
%else
|
|||
|
-DBUILD_SAMPLE_APP=OFF \
|
|||
|
%endif
|
|||
|
%if %{with armnn_tests}
|
|||
|
-DBUILD_UNIT_TESTS=ON \
|
|||
|
-DBUILD_TESTS=ON
|
|||
|
%else
|
|||
|
-DBUILD_UNIT_TESTS=OFF \
|
|||
|
-DBUILD_TESTS=OFF
|
|||
|
%endif
|
|||
|
%if %{suse_version} > 1500
|
|||
|
%cmake_build
|
|||
|
%else
|
|||
|
%make_jobs
|
|||
|
%endif
|
|||
|
%if %{with armnn_tests}
|
|||
|
pushd tests/
|
|||
|
%if %{suse_version} > 1500
|
|||
|
%cmake_build
|
|||
|
%else
|
|||
|
%make_jobs
|
|||
|
%endif
|
|||
|
popd
|
|||
|
%endif
|
|||
|
|
|||
|
%install
|
|||
|
%cmake_install
|
|||
|
%if %{with armnn_tests}
|
|||
|
# Install tests manually
|
|||
|
install -d %{buildroot}%{_bindir}
|
|||
|
CP_ARGS="-Prf --preserve=mode,timestamps --no-preserve=ownership" \
|
|||
|
find ./build/tests -maxdepth 1 -type f -executable -exec cp $CP_ARGS {} %{buildroot}%{_bindir} \;
|
|||
|
%endif
|
|||
|
%if %{with armnn_flatbuffers}
|
|||
|
# Install Sample app
|
|||
|
cp $CP_ARGS ./build/samples/SimpleSample %{buildroot}%{_bindir}
|
|||
|
%endif
|
|||
|
|
|||
|
%if %{with armnn_tests}
|
|||
|
%check
|
|||
|
# Run tests
|
|||
|
LD_LIBRARY_PATH="$(pwd)/build/" \
|
|||
|
./build/UnitTests
|
|||
|
%endif
|
|||
|
|
|||
|
%post -n lib%{name}%{version_major} -p /sbin/ldconfig
|
|||
|
%postun -n lib%{name}%{version_major} -p /sbin/ldconfig
|
|||
|
|
|||
|
%if %{with armnn_flatbuffers}
|
|||
|
%post -n libarmnnSerializer%{version_major} -p /sbin/ldconfig
|
|||
|
%postun -n libarmnnSerializer%{version_major} -p /sbin/ldconfig
|
|||
|
%endif
|
|||
|
|
|||
|
%files
|
|||
|
%defattr(-,root,root)
|
|||
|
%doc README.md
|
|||
|
%license LICENSE
|
|||
|
%if %{with armnn_tests}
|
|||
|
%{_bindir}/ExecuteNetwork
|
|||
|
%endif
|
|||
|
%if %{with armnn_flatbuffers}
|
|||
|
%{_bindir}/SimpleSample
|
|||
|
%endif
|
|||
|
|
|||
|
%files -n lib%{name}%{version_major}
|
|||
|
/usr/lib/lib%{name}.so.*
|
|||
|
|
|||
|
%if %{with armnn_flatbuffers}
|
|||
|
%files -n libarmnnSerializer%{version_major}
|
|||
|
/usr/lib/libarmnnSerializer.so.*
|
|||
|
%endif
|
|||
|
|
|||
|
%files devel
|
|||
|
%defattr(-,root,root)
|
|||
|
%dir %{_includedir}/armnn/
|
|||
|
%{_includedir}/armnn/*.hpp
|
|||
|
%dir %{_includedir}/armnnCaffeParser/
|
|||
|
%{_includedir}/armnnCaffeParser/ICaffeParser.hpp
|
|||
|
%dir %{_includedir}/armnnOnnxParser/
|
|||
|
%{_includedir}/armnnOnnxParser/IOnnxParser.hpp
|
|||
|
%dir %{_includedir}/armnnTfLiteParser/
|
|||
|
%{_includedir}/armnnTfLiteParser/ITfLiteParser.hpp
|
|||
|
%dir %{_includedir}/armnnTfParser/
|
|||
|
%{_includedir}/armnnTfParser/ITfParser.hpp
|
|||
|
%dir %{_includedir}/armnnDeserializer/
|
|||
|
%{_includedir}/armnnDeserializer/IDeserializer.hpp
|
|||
|
%dir %{_includedir}/armnnSerializer/
|
|||
|
%{_includedir}/armnnSerializer/ISerializer.hpp
|
|||
|
/usr/lib/libarmnn.so
|
|||
|
%if %{with armnn_flatbuffers}
|
|||
|
/usr/lib/libarmnnSerializer.so
|
|||
|
%endif
|
|||
|
|
|||
|
%changelog
|