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