From e8fb14b8b45b6466048b790d2efb35df2b80f9b0 Mon Sep 17 00:00:00 2001 From: Mohammadreza Hendiani Date: Thu, 30 May 2024 20:28:46 +0330 Subject: [PATCH] removed ffmpeg and sed since core utills are already installed fixed CMAKE_SYSTEM_PROCESSOR through rpm macros added additional cmake options partially added OpenVINO and added cmake options changed opstions v1 added options openblas and openvino to whisper add -n as name of subpackages removed -n fixed bug with description added ccache as build dependacny change cmake build to make_build removed patch in setup replace name of cpu with %{_build_cpu} should makeno diffrance removed -DCMAKE_SYSTEM_NAME=Linux removed -DCMAKE_BUILD_TYPE=Release and set spec to cd to build dir to cmake fixed cmkae so build works (but not all prarmiters have been given) added back aarch64 removed cmake options due to being checked in make added av optiones and set them to be enabled fixed build and setup partial install fixed install for bin and devel added back ffmpeg removed patch --- 0001-Generalize-install-locations.patch | 62 -------- whisper-cpp.spec | 179 +++++++++++++++++------- 2 files changed, 126 insertions(+), 115 deletions(-) delete mode 100644 0001-Generalize-install-locations.patch diff --git a/0001-Generalize-install-locations.patch b/0001-Generalize-install-locations.patch deleted file mode 100644 index e5f6444..0000000 --- a/0001-Generalize-install-locations.patch +++ /dev/null @@ -1,62 +0,0 @@ -From 62ce17eb08b838fd4ac78d7fc3ece57694aad32a Mon Sep 17 00:00:00 2001 -From: Tom Rix -Date: Sat, 20 Jan 2024 08:00:46 -0500 -Subject: [PATCH] Generalize install locations - -On Fedora the install location is dependent on the arch -ex/ for x86_64 libraries install to /usr/lib64 - -So copy how llama-cpp does its install, replacing 'llama' with 'whisper' -in the cmake variables. - -Signed-off-by: Tom Rix ---- - CMakeLists.txt | 17 ++++++++++++----- - cmake/DefaultTargetOptions.cmake | 4 ++-- - 2 files changed, 14 insertions(+), 7 deletions(-) - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 567a58d..01e64c4 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -549,12 +549,19 @@ set_target_properties(${TARGET} PROPERTIES PUBLIC_HEADER "ggml.h;whisper.h") - - include(GNUInstallDirs) - -+set(WHISPER_INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR} -+ CACHE PATH "Location of header files") -+set(WHISPER_LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR} -+ CACHE PATH "Location of library files") -+set(WHISPER_BIN_INSTALL_DIR ${CMAKE_INSTALL_BINDIR} -+ CACHE PATH "Location of binary files") -+ - install(TARGETS ${TARGET} -- LIBRARY DESTINATION lib -- ARCHIVE DESTINATION lib/static -- RUNTIME DESTINATION bin -- RESOURCE DESTINATION bin -- PUBLIC_HEADER DESTINATION include -+ LIBRARY DESTINATION "${WHISPER_LIB_INSTALL_DIR}" -+ ARCHIVE DESTINATION "${WHISPER_LIB_INSTALL_DIR}/static" -+ RUNTIME DESTINATION "${WHISPER_BIN_INSTALL_DIR}" -+ RESOURCE DESTINATION "${WHISPER_BIN_INSTALL_DIR}" -+ PUBLIC_HEADER DESTINATION "${WHISPER_INCLUDE_INSTALL_DIR}" - ) - - # -diff --git a/cmake/DefaultTargetOptions.cmake b/cmake/DefaultTargetOptions.cmake -index b4e93e3..277b99e 100644 ---- a/cmake/DefaultTargetOptions.cmake -+++ b/cmake/DefaultTargetOptions.cmake -@@ -12,6 +12,6 @@ target_compile_features(${TARGET} - set_target_properties(${TARGET} - PROPERTIES - EXPORT_COMPILE_COMMANDS ON -- RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" -- INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib" -+ RUNTIME_OUTPUT_DIRECTORY "${WHISPER_BIN_INSTALL_DIR}" -+ INSTALL_RPATH "${WHISPER_LIB_INSTALL_DIR}" - ) --- -2.43.0 - diff --git a/whisper-cpp.spec b/whisper-cpp.spec index 05f0baa..03ead3c 100644 --- a/whisper-cpp.spec +++ b/whisper-cpp.spec @@ -1,6 +1,8 @@ # Some optional subpackages %bcond_with examples %bcond_with test +%bcond_with openblas +%bcond_with openvino Summary: Port of OpenAI's Whisper model in C/C++ Name: whisper-cpp @@ -26,59 +28,63 @@ ExclusiveArch: x86_64 aarch64 BuildRequires: cmake >= 3.27 BuildRequires: clang BuildRequires: coreutils -BuildRequires: sed BuildRequires: git -BuildRequires: pkgconfig(ffmpeg) -BuildRequires: pkgconfig(ffmpeg-devel) +BuildRequires: ccache +BuildRequires: ffmpeg-free-devel +BuildRequires: pkgconfig(libavcodec) +BuildRequires: pkgconfig(libavformat) +BuildRequires: pkgconfig(libavdevice) +BuildRequires: pkgconfig(libavutil) +BuildRequires: pkgconfig(libavfilter) +BuildRequires: pkgconfig(libswscale) +BuildRequires: pkgconfig(libpostproc) +BuildRequires: pkgconfig(libswresample) -#Requires: ffmpeg -#Requires: ffmpeg-devel +Requires: /usr/bin/ffmpeg +Requires: pkgconfig(libavcodec) +Requires: pkgconfig(libavformat) +Requires: pkgconfig(libavdevice) +Requires: pkgconfig(libavutil) +Requires: pkgconfig(libavfilter) +Requires: pkgconfig(libswscale) +Requires: pkgconfig(libpostproc) +Requires: pkgconfig(libswresample) # TODO: add openblas package # TODO: add OPENVINO package # TODO: add CLBLAST package # TODO opencl, rocm, CoreML +# TODO bindings/go/* and add package + + +%global base_description \ +High-performance inference of OpenAI's Whisper automatic speech \ +recognition (ASR) model: \ + \ +* Plain C/C++ implementation without dependencies \ +* Apple Silicon first-class citizen - optimized via ARM NEON, \ +* Accelerate framework, Metal and Core ML \ +* AVX intrinsics support for x86 architectures \ +* VSX intrinsics support for POWER architectures \ +* Mixed F16 / F32 precision \ +* 4-bit and 5-bit integer quantization support \ +* Zero memory allocations at runtime \ +* Support for CPU-only inference \ +* Efficient GPU support for NVIDIA \ +* Partial OpenCL GPU support via CLBlast \ +* OpenVINO Support \ +* C-style API %description -High-performance inference of OpenAI's Whisper automatic speech -recognition (ASR) model: - -* Plain C/C++ implementation without dependencies -* Apple Silicon first-class citizen - optimized via ARM NEON, - Accelerate framework, Metal and Core ML -* AVX intrinsics support for x86 architectures -* VSX intrinsics support for POWER architectures -* Mixed F16 / F32 precision -* 4-bit and 5-bit integer quantization support -* Zero memory allocations at runtime -* Support for CPU-only inference -* Efficient GPU support for NVIDIA -* Partial OpenCL GPU support via CLBlast -* OpenVINO Support -* C-style API +%{base_description} %package devel Summary: Libraries and headers for %{name} Requires: %{name}%{?_isa} = %{version}-%{release} %description devel -High-performance inference of OpenAI's Whisper automatic speech -recognition (ASR) model: - -* Plain C/C++ implementation without dependencies -* Apple Silicon first-class citizen - optimized via ARM NEON, - Accelerate framework, Metal and Core ML -* AVX intrinsics support for x86 architectures -* VSX intrinsics support for POWER architectures -* Mixed F16 / F32 precision -* 4-bit and 5-bit integer quantization support -* Zero memory allocations at runtime -* Support for CPU-only inference -* Efficient GPU support for NVIDIA -* Partial OpenCL GPU support via CLBlast -* OpenVINO Support -* C-style API +%{base_description} %if %{with test} %package test @@ -98,8 +104,26 @@ Requires: %{name}%{?_isa} = %{version}-%{release} %{summary} %endif +%if %{with openvino} +%package openvino +Summary: %{name} with openvino +Requires: %{name}%{?_isa} = openvino-%{version}-%{release} + +%description openvino +%{summary} +%endif + +%if %{with openblas} +%package openblas +Summary: %{name} with openblas +Requires: %{name}%{?_isa} = openblas-%{version}-%{release} + +%description openblas +%{summary} +%endif + %prep -%autosetup -p1 -n whisper.cpp-%{version} +%autosetup -n whisper.cpp-%{version} # verson the *.so sed -i -e 's/POSITION_INDEPENDENT_CODE ON/POSITION_INDEPENDENT_CODE ON SOVERSION %{version}/' CMakeLists.txt @@ -109,41 +133,90 @@ find . -name '.gitignore' -exec rm -rf {} \; %build %cmake \ - -DCMAKE_SYSTEM_NAME=ON + -DCMAKE_SYSTEM_PROCESSOR=%{_build_cpu} \ + -DCMAKE_SYSTEM_NAME="Linux" \ + -DCMAKE_BUILD_TYPE="Release" \ + -DBUILD_SHARED_LIBS_DEFAULT=ON \ + -DWHISPER_WASM_SINGLE_FILE=OFF \ + -DWHISPER_ALL_WARNINGS_3RD_PARTY=ON \ + -DWHISPER_SANITIZE_THREAD=OFF \ + -DWHISPER_SANITIZE_ADDRESS=OFF \ + -DWHISPER_SANITIZE_UNDEFINED=OFF \ -DWHISPER_BUILD_TESTS=OFF \ -DWHISPER_BUILD_EXAMPLES=OFF \ - -DWHISPER_NO_AVX=ON \ - -DWHISPER_NO_AVX2=ON \ - -DWHISPER_NO_FMA=ON \ - -DWHISPER_NO_F16C=ON -%if %{with examples} - -DWHISPER_BUILD_EXAMPLES=ON + -DWHISPER_SDL2=ON \ + -DWHISPER_FFMPEG=ON \ + -DWHISPER_NO_AVX2=OFF \ + -DWHISPER_NO_AVX512=OFF \ + -DWHISPER_NO_AVX512_VBMI=OFF \ + -DWHISPER_NO_AVX512_VNNI=OFF \ + -DWHISPER_NO_FMA=OFF \ + -DWHISPER_NO_F16C=OFF \ + -DWHISPER_PERF=OFF \ +%if %{with openvino} + -DWHISPER_OPENVINO=ON \ %else - -DWHISPER_BUILD_EXAMPLES=OFF + -DWHISPER_OPENVINO=OFF \ +%endif +%if %{with openblas} + -DWHISPER_OPENBLAS=ON \ +%else + -DWHISPER_OPENBLAS=OFF \ +%endif +%if %{with examples} + -DWHISPER_BUILD_EXAMPLES=ON \ +%else + -DWHISPER_BUILD_EXAMPLES=OFF \ %endif %if %{with test} - -DWHISPER_BUILD_TESTS=OFF + -DWHISPER_BUILD_TESTS=ON \ %else -DWHISPER_BUILD_TESTS=OFF %endif -%cmake_build +%make_build %install -%cmake_install +install -Dpm 0644 %{_vpath_srcdir}/main -t %{buildroot}%{_bindir}/whisper.cpp/whisper-cpp +install -Dpm 0644 %{_vpath_srcdir}/quantize -t %{buildroot}%{_bindir}/whisper.cpp/whisper-cpp-quantize +install -Dpm 0644 %{_vpath_srcdir}/server -t %{buildroot}%{_bindir}/whisper.cpp/whisper-cpp-server +install -Dpm 0644 %{_vpath_srcdir}/bench -t %{buildroot}%{_bindir}/whisper.cpp/whisper-cpp-bench + +# devel +install -Dp %{_vpath_srcdir}/main -t %{buildroot}%{_libdir}/whisper.cpp/main +install -Dp %{_vpath_srcdir}/quantize -t %{buildroot}%{_libdir}/whisper.cpp/quantize +install -Dp %{_vpath_srcdir}/server -t %{buildroot}%{_libdir}/whisper.cpp/server +install -Dp %{_vpath_srcdir}/bench -t %{buildroot}%{_libdir}/whisper.cpp/bench +install -Dp %{_vpath_srcdir}/ggml-alloc.o -t %{buildroot}%{_libdir}/whisper.cpp/ggml-alloc.o +install -Dp %{_vpath_srcdir}/ggml-backend.o -t %{buildroot}%{_libdir}/whisper.cpp/ggml-backend.o +install -Dp %{_vpath_srcdir}/ggml.o -t %{buildroot}%{_libdir}/whisper.cpp/ggml.o +install -Dp %{_vpath_srcdir}/ggml-quants.o -t %{buildroot}%{_libdir}/whisper.cpp/ggml-quants.o +install -Dp %{_vpath_srcdir}/whisper.o -t %{buildroot}%{_libdir}/whisper.cpp/whisper.o %check %ctest %files +%doc README.md +%doc AUTHORS %license LICENSE -%{_libdir}/libwhisper.so.%{version} +%{_bindir}/whisper.cpp/whisper-cpp +%{_bindir}/whisper.cpp/whisper-cpp-quantize +%{_bindir}/whisper.cpp/whisper-cpp-server +%{_bindir}/whisper.cpp/whisper-cpp-bench %files devel %doc README.md -%{_includedir}/ggml.h -%{_includedir}/whisper.h -%{_libdir}/libwhisper.so +%license LICENSE +%{_libdir}/whisper.cpp/main +%{_libdir}/whisper.cpp/quantize +%{_libdir}/whisper.cpp/server +%{_libdir}/whisper.cpp/bench +%{_libdir}/whisper.cpp/ggml-alloc.o +%{_libdir}/whisper.cpp/ggml-backend.o +%{_libdir}/whisper.cpp/ggml.o +%{_libdir}/whisper.cpp/ggml-quants.o +%{_libdir}/whisper.cpp/whisper.o %changelog %autochangelog