Skip to content

Commit 37abafe

Browse files
committed
Fix Ubuntu packaging
1 parent aaa135f commit 37abafe

5 files changed

Lines changed: 154 additions & 70 deletions

File tree

.github/scripts/.build.zsh

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,12 @@ build() {
6565
linux-aarch64
6666
)
6767
local target
68-
local config='RelWithDebInfo'
68+
if [[ "${+ACCELERATION}" == "amd" ]]
69+
then
70+
local config='Release'
71+
else
72+
local config='RelWithDebInfo'
73+
fi
6974
local -r -a _valid_configs=(Debug RelWithDebInfo Release MinSizeRel)
7075
local -i codesign=0
7176

@@ -250,7 +255,7 @@ ${_usage_host:-}"
250255
-G "${generator}"
251256
-DQT_VERSION=${QT_VERSION:-6}
252257
-DCMAKE_BUILD_TYPE=${config}
253-
-DCMAKE_INSTALL_PREFIX=${project_root}/release/${config}
258+
-DCMAKE_INSTALL_PREFIX=/usr
254259
)
255260
256261
local cmake_version

.github/workflows/build-project.yaml

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,23 @@ jobs:
211211
env:
212212
CI: 1
213213
steps:
214+
- name: Free Disk Space (Ubuntu)
215+
if: ${{ matrix.acceleration == 'amd' || matrix.acceleration == 'nvidia' }}
216+
uses: jlumbroso/free-disk-space@main
217+
with:
218+
# this might remove tools that are actually needed,
219+
# if set to "true" but frees about 6 GB
220+
tool-cache: false
221+
# Needs to be false to prevent running out of memory
222+
swap-storage: false
223+
# large-packages takes a long time so don't remove them unless we need to
224+
large-packages: false
225+
226+
android: true
227+
dotnet: true
228+
haskell: true
229+
docker-images: true
230+
214231
- uses: actions/checkout@v4
215232
with:
216233
submodules: recursive
@@ -263,6 +280,29 @@ jobs:
263280
264281
- uses: actions-rust-lang/setup-rust-toolchain@v1
265282

283+
# CUDA toolkit needed for linking against so it can be found when looking up package dependencies
284+
- name: "Install CUDA toolkit 12.8"
285+
if: ${{ matrix.acceleration == 'nvidia' }}
286+
run: |
287+
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
288+
sudo dpkg -i cuda-keyring_1.1-1_all.deb
289+
sudo apt update
290+
sudo apt -y install cuda-12-8
291+
export PATH=/usr/local/cuda-12.8/bin${PATH:+:${PATH}}
292+
export LD_LIBRARY_PATH=/usr/local/cuda-12.8/lib ${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
293+
294+
# hip SDK needed for linking against so it can be found when looking up package dependencies
295+
- name: "Install AMD hip SDK v6.4.2"
296+
if: ${{ matrix.acceleration == 'amd' }}
297+
run: |
298+
wget https://repo.radeon.com/amdgpu-install/6.4.2/ubuntu/jammy/amdgpu-install_6.4.60402-1_all.deb
299+
sudo apt install ./amdgpu-install_6.4.60402-1_all.deb
300+
sudo apt update
301+
sudo apt install python3-setuptools python3-wheel
302+
sudo usermod -a -G render,video $LOGNAME # Add the current user to the render and video groups
303+
sudo apt install rocm
304+
sudo apt update && sudo apt install hipblas
305+
266306
- uses: actions/cache@v4
267307
id: ccache-cache
268308
with:
@@ -292,20 +332,20 @@ jobs:
292332
uses: actions/upload-artifact@v4
293333
with:
294334
name: ${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-${{ matrix.acceleration }}-sources-${{ needs.check-event.outputs.commitHash }}
295-
path: ${{ github.workspace }}/release/${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-source.*
335+
path: ${{ github.workspace }}/release/${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-${{ matrix.acceleration }}-source.*
296336

297337
- name: Upload Artifacts 📡
298338
uses: actions/upload-artifact@v4
299339
with:
300340
name: ${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-${{ matrix.acceleration }}-ubuntu-22.04-x86_64-${{ needs.check-event.outputs.commitHash }}
301-
path: ${{ github.workspace }}/release/${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-x86_64*.*
341+
path: ${{ github.workspace }}/release/${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-${{ matrix.acceleration }}-x86_64*.*
302342

303343
- name: Upload debug symbol artifacts 🪲
304344
uses: actions/upload-artifact@v4
305-
if: ${{ fromJSON(needs.check-event.outputs.package) }}
345+
if: ${{ fromJSON(needs.check-event.outputs.package) && (matrix.acceleration != 'amd') }}
306346
with:
307347
name: ${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-${{ matrix.acceleration }}-ubuntu-22.04-x86_64-${{ needs.check-event.outputs.commitHash }}-dbgsym
308-
path: ${{ github.workspace }}/release/${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-x86_64*-dbgsym.ddeb
348+
path: ${{ github.workspace }}/release/${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-${{ matrix.acceleration }}-x86_64*-dbgsym.ddeb
309349

310350
windows-build:
311351
name: Build for Windows 🪟

CMakeLists.txt

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -64,25 +64,19 @@ else()
6464
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE libcurl)
6565
endif()
6666

67-
if(WIN32
68-
OR (UNIX
69-
AND NOT APPLE
70-
AND CI))
71-
if(DEFINED ENV{ACCELERATION})
72-
set(ACCELERATION
73-
$ENV{ACCELERATION}
74-
CACHE STRING "Acceleration to use" FORCE)
75-
endif()
76-
if(NOT DEFINED ACCELERATION)
77-
set(ACCELERATION
78-
"generic"
79-
CACHE STRING "Acceleration to use")
80-
endif()
81-
set_property(CACHE ACCELERATION PROPERTY STRINGS "generic" "nvidia" "amd")
82-
elseif(
83-
UNIX
84-
AND NOT APPLE
85-
AND NOT CI)
67+
if(DEFINED ENV{ACCELERATION})
68+
set(ACCELERATION
69+
$ENV{ACCELERATION}
70+
CACHE STRING "Acceleration to use" FORCE)
71+
endif()
72+
if(NOT DEFINED ACCELERATION)
73+
set(ACCELERATION
74+
"generic"
75+
CACHE STRING "Acceleration to use")
76+
endif()
77+
set_property(CACHE ACCELERATION PROPERTY STRINGS "generic" "nvidia" "amd")
78+
79+
if(UNIX AND NOT APPLE)
8680
set(BLA_VENDOR OpenBLAS)
8781
find_package(BLAS REQUIRED)
8882
endif()

cmake/BuildWhispercpp.cmake

Lines changed: 86 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,10 @@ function(WHISPER_LIB_PATHS COMPONENT SOURCE_DIR WHISPER_STATIC_LIB_PATH WHISPER_
3636
WHISPER_SHARED_MODULE_PATH)
3737
lib_name(${COMPONENT} WHISPER_COMPONENT_IMPORT_LIB)
3838

39-
if(UNIX
40-
AND NOT APPLE
41-
AND NOT CI)
42-
set(STATIC_PATH ${SOURCE_DIR})
43-
set(SHARED_PATH ${SOURCE_DIR})
44-
set(SHARED_BIN_PATH ${SOURCE_DIR})
39+
if(UNIX AND NOT APPLE)
40+
set(STATIC_PATH ${SOURCE_DIR}/lib)
41+
set(SHARED_PATH ${SOURCE_DIR}/lib)
42+
set(SHARED_BIN_PATH ${SOURCE_DIR}/bin)
4543
else()
4644
set(STATIC_PATH ${SOURCE_DIR}/${CMAKE_INSTALL_LIBDIR})
4745
set(SHARED_PATH ${SOURCE_DIR}/${CMAKE_INSTALL_LIBDIR})
@@ -161,7 +159,6 @@ if(APPLE)
161159
"${PREBUILT_WHISPERCPP_URL_BASE}/whispercpp-macos-$ENV{MACOS_ARCH}-${PREBUILT_WHISPERCPP_VERSION}.tar.gz")
162160

163161
set(WHISPER_LIBRARIES Whisper WhisperCoreML GGML GGMLBase)
164-
# list(APPEND WHISPER_RUNTIME_MODULES WhisperCoreML GGMLMetal GGMLBlas)
165162
list(APPEND WHISPER_RUNTIME_MODULES GGMLMetal GGMLBlas)
166163
set(WHISPER_DEPENDENCY_LIBRARIES "-framework Accelerate" "-framework CoreML" "-framework Metal" ${BLAS_LIBRARIES})
167164
set(WHISPER_LIBRARY_TYPE SHARED)
@@ -180,7 +177,7 @@ if(APPLE)
180177
install(FILES ${WHISPER_DYLIBS} DESTINATION "${CMAKE_PROJECT_NAME}.plugin/Contents/Frameworks")
181178
elseif(WIN32)
182179
if(NOT DEFINED ACCELERATION)
183-
message(FATAL_ERROR "ACCELERATION is not set. Please set it to either `cpu`, `cuda`, `vulkan` or `hipblas`")
180+
message(FATAL_ERROR "ACCELERATION is not set. Please set it to either `generic`, `nvidia`, or `amd`")
184181
endif()
185182

186183
set(WHISPER_LIBRARIES Whisper GGML GGMLBase)
@@ -244,10 +241,17 @@ else()
244241
set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE_PROGRAM})
245242
endif()
246243

244+
set(BLA_VENDOR OpenBLAS)
245+
find_package(BLAS REQUIRED)
246+
247247
if(CI)
248248
set(WHISPER_LIBRARY_TYPE SHARED)
249249
set(WHISPER_LIBRARIES Whisper GGML GGMLBase)
250-
# list(APPEND WHISPER_DEPENDENCY_LIBRARIES Vulkan::Vulkan ${BLAS_LIBRARIES} OpenCL::OpenCL)
250+
list(APPEND WHISPER_DEPENDENCY_LIBRARIES Vulkan::Vulkan BLAS::BLAS)
251+
if(NOT ${ACCELERATION} STREQUAL "nvidia")
252+
# NVidia CUDA has its own OpenCL library
253+
list(APPEND WHISPER_DEPENDENCY_LIBRARIES OpenCL::OpenCL)
254+
endif()
251255
list(
252256
APPEND
253257
WHISPER_RUNTIME_MODULES
@@ -262,6 +266,14 @@ else()
262266
GGMLBlas
263267
GGMLVulkan
264268
GGMLOpenCL)
269+
add_compile_definitions(WHISPER_DYNAMIC_BACKENDS)
270+
271+
find_package(
272+
Vulkan
273+
COMPONENTS glslc
274+
REQUIRED)
275+
find_package(OpenCL REQUIRED)
276+
find_package(Python3 REQUIRED)
265277

266278
set(ARCH_PREFIX "-x86_64")
267279
set(ACCELERATION_PREFIX "-${ACCELERATION}")
@@ -272,9 +284,39 @@ else()
272284
elseif(${ACCELERATION} STREQUAL "nvidia")
273285
set(WHISPER_CPP_HASH "a43dc8a44577e965caf9b0baaae74f30a9e00d99a296768021e7ccf0b9217878")
274286
list(APPEND WHISPER_RUNTIME_MODULES GGMLCUDA)
287+
288+
# Find CUDA libraries and link against them
289+
set(CUDAToolkit_ROOT /usr/local/cuda-12.8/)
290+
find_package(CUDAToolkit REQUIRED)
291+
list(
292+
APPEND
293+
WHISPER_DEPENDENCY_LIBRARIES
294+
CUDA::cudart
295+
CUDA::cublas
296+
CUDA::cublasLt
297+
CUDA::cuda_driver
298+
CUDA::OpenCL)
299+
set(CUDART_LIB ${CUDAToolkit_LIBRARY_DIR}/libcuda.so.1)
300+
if(NOT EXISTS ${CUDART_LIB})
301+
message(
302+
STATUS
303+
"Creating symlink from ${CUDAToolkit_LIBRARY_DIR}/libcuda.so to ${CUDAToolkit_LIBRARY_DIR}/libcuda.so.1")
304+
execute_process(COMMAND sudo ${CMAKE_COMMAND} -E create_symlink ${CUDAToolkit_LIBRARY_DIR}/libcuda.so
305+
${CUDAToolkit_LIBRARY_DIR}/libcuda.so.1)
306+
endif()
275307
elseif(${ACCELERATION} STREQUAL "amd")
276308
set(WHISPER_CPP_HASH "1a7592da41493e57ead23c97a420f2db11a4fe31049c9b01cdb310bff05fdca1")
277309
list(APPEND WHISPER_RUNTIME_MODULES GGMLHip)
310+
311+
# Find hip libraries and link against them
312+
set(CMAKE_PREFIX_PATH /opt/rocm-6.4.2/lib/cmake)
313+
set(HIP_PLATFORM amd)
314+
set(CMAKE_HIP_PLATFORM amd)
315+
set(CMAKE_HIP_ARCHITECTURES OFF)
316+
find_package(hip REQUIRED)
317+
find_package(hipblas REQUIRED)
318+
find_package(rocblas REQUIRED)
319+
list(APPEND WHISPER_DEPENDENCY_LIBRARIES hip::host roc::rocblas roc::hipblas)
278320
else()
279321
message(
280322
FATAL_ERROR
@@ -294,10 +336,15 @@ else()
294336

295337
set(WHISPER_SOURCE_DIR ${whispercpp_fetch_SOURCE_DIR})
296338
set(WHISPER_LIB_DIR ${whispercpp_fetch_SOURCE_DIR})
339+
340+
file(GLOB WHISPER_SOS ${whispercpp_fetch_SOURCE_DIR}/lib/*${CMAKE_SHARED_LIBRARY_SUFFIX}*)
341+
install(FILES ${WHISPER_SOS} DESTINATION "${CMAKE_INSTALL_LIBDIR}/obs-plugins/obs-localvocal")
342+
file(GLOB WHISPER_BIN_SOS ${whispercpp_fetch_SOURCE_DIR}/bin/*${CMAKE_SHARED_LIBRARY_SUFFIX}*)
343+
install(FILES ${WHISPER_BIN_SOS} DESTINATION "${CMAKE_INSTALL_LIBDIR}/obs-plugins/obs-localvocal")
297344
else()
298345
# Source build
299346
if(${CMAKE_BUILD_TYPE} STREQUAL Release OR ${CMAKE_BUILD_TYPE} STREQUAL RelWithDebInfo)
300-
set(Whispercpp_BUILD_TYPE Release)
347+
set(Whispercpp_BUILD_TYPE RelWithDebInfo)
301348
else()
302349
set(Whispercpp_BUILD_TYPE Debug)
303350
endif()
@@ -329,9 +376,35 @@ else()
329376
list(APPEND WHISPER_LIBRARIES GGMLBlas GGMLCPU)
330377
endif()
331378

332-
# TODO: Add SYCL support
379+
find_package(
380+
Vulkan
381+
COMPONENTS glslc
382+
QUIET)
383+
if(Vulkan_FOUND)
384+
message(STATUS "Vulkan found, Libraries: ${Vulkan_LIBRARIES}")
385+
list(APPEND WHISPER_ADDITIONAL_CMAKE_ARGS -DGGML_VULKAN=ON)
386+
if(WHISPER_DYNAMIC_BACKENDS)
387+
list(APPEND WHISPER_RUNTIME_MODULES GGMLVulkan)
388+
else()
389+
list(APPEND WHISPER_LIBRARIES GGMLVulkan)
390+
endif()
391+
list(APPEND WHISPER_DEPENDENCY_LIBRARIES Vulkan::Vulkan)
392+
endif()
393+
394+
find_package(OpenCL QUIET)
395+
find_package(Python3 QUIET)
396+
if(OpenCL_FOUND AND Python3_FOUND)
397+
message(STATUS "OpenCL found, Libraries: ${OpenCL_LIBRARIES}")
398+
list(APPEND WHISPER_ADDITIONAL_CMAKE_ARGS -DGGML_OPENCL=ON -DGGML_OPENCL_EMBED_KERNELS=ON
399+
-DGGML_OPENCL_USE_ADRENO_KERNELS=OFF)
400+
if(WHISPER_DYNAMIC_BACKENDS)
401+
list(APPEND WHISPER_RUNTIME_MODULES GGMLOpenCL)
402+
else()
403+
list(APPEND WHISPER_LIBRARIES GGMLOpenCL)
404+
endif()
405+
list(APPEND WHISPER_DEPENDENCY_LIBRARIES OpenCL::OpenCL)
406+
endif()
333407

334-
# set(CMAKE_PREFIX_PATH "C:/Program Files/AMD/ROCm/6.1;$ENV{VULKAN_SDK}")
335408
set(HIP_PLATFORM amd)
336409
set(CMAKE_HIP_PLATFORM amd)
337410
set(CMAKE_HIP_ARCHITECTURES OFF)
@@ -342,7 +415,7 @@ else()
342415
AND hipblas_FOUND
343416
AND rocblas_FOUND)
344417
message(STATUS "hipblas found, Libraries: ${hipblas_LIBRARIES}")
345-
set(WHISPER_ADDITIONAL_ENV "CMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH};HIP_PLATFORM=${HIP_PLATFORM}")
418+
list(APPEND WHISPER_ADDITIONAL_ENV "CMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH};HIP_PLATFORM=${HIP_PLATFORM}")
346419
list(APPEND WHISPER_ADDITIONAL_CMAKE_ARGS -DGGML_HIP=ON -DGGML_HIP_ROCWMMA_FATTN=ON)
347420
if(WHISPER_DYNAMIC_BACKENDS)
348421
list(APPEND WHISPER_RUNTIME_MODULES GGMLHip)
@@ -364,35 +437,6 @@ else()
364437
list(APPEND WHISPER_DEPENDENCY_LIBRARIES CUDA::cudart CUDA::cublas CUDA::cublasLt CUDA::cuda_driver)
365438
endif()
366439

367-
find_package(
368-
Vulkan
369-
COMPONENTS glslc
370-
QUIET)
371-
if(Vulkan_FOUND)
372-
message(STATUS "Vulkan found, Libraries: ${Vulkan_LIBRARIES}")
373-
list(APPEND WHISPER_ADDITIONAL_CMAKE_ARGS -DGGML_VULKAN=ON)
374-
if(WHISPER_DYNAMIC_BACKENDS)
375-
list(APPEND WHISPER_RUNTIME_MODULES GGMLVulkan)
376-
else()
377-
list(APPEND WHISPER_LIBRARIES GGMLVulkan)
378-
endif()
379-
list(APPEND WHISPER_DEPENDENCY_LIBRARIES Vulkan::Vulkan)
380-
endif()
381-
382-
find_package(OpenCL QUIET)
383-
find_package(Python3 QUIET)
384-
if(OpenCL_FOUND AND Python3_FOUND)
385-
message(STATUS "OpenCL found, Libraries: ${OpenCL_LIBRARIES}")
386-
list(APPEND WHISPER_ADDITIONAL_CMAKE_ARGS -DGGML_OPENCL=ON -DGGML_OPENCL_EMBED_KERNELS=ON
387-
-DGGML_OPENCL_USE_ADRENO_KERNELS=OFF)
388-
if(WHISPER_DYNAMIC_BACKENDS)
389-
list(APPEND WHISPER_RUNTIME_MODULES GGMLOpenCL)
390-
else()
391-
list(APPEND WHISPER_LIBRARIES GGMLOpenCL)
392-
endif()
393-
list(APPEND WHISPER_DEPENDENCY_LIBRARIES OpenCL::OpenCL)
394-
endif()
395-
396440
foreach(component ${WHISPER_LIBRARIES})
397441
whisper_lib_paths(${component} ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/obs-plugins/${CMAKE_PROJECT_NAME}
398442
WHISPER_STATIC_LIB_PATH WHISPER_SHARED_LIB_PATH WHISPER_SHARED_MODULE_PATH)

cmake/linux/defaults.cmake

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,15 @@ set(CMAKE_FIND_PACKAGE_TARGETS_GLOBAL TRUE)
1414

1515
set(CPACK_PACKAGE_NAME "${CMAKE_PROJECT_NAME}")
1616
set(CPACK_PACKAGE_VERSION "${CMAKE_PROJECT_VERSION}")
17-
set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CMAKE_C_LIBRARY_ARCHITECTURE}")
17+
set(CPACK_PACKAGE_FILE_NAME
18+
"${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-$ENV{ACCELERATION}-${CMAKE_C_LIBRARY_ARCHITECTURE}")
1819

1920
set(CPACK_GENERATOR "DEB")
2021
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
2122
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "${PLUGIN_EMAIL}")
2223
set(CPACK_SET_DESTDIR ON)
2324

24-
if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.25.0 OR NOT CMAKE_CROSSCOMPILING)
25+
if((CMAKE_VERSION VERSION_GREATER_EQUAL 3.25.0 OR NOT CMAKE_CROSSCOMPILING) AND NOT (ACCELERATION STREQUAL amd))
2526
set(CPACK_DEBIAN_DEBUGINFO_PACKAGE ON)
2627
endif()
2728

@@ -39,7 +40,7 @@ set(CPACK_SOURCE_IGNORE_FILES
3940
release/)
4041

4142
set(CPACK_VERBATIM_VARIABLES YES)
42-
set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-$ENV{ACCELERATION}source")
43+
set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-$ENV{ACCELERATION}-source")
4344
set(CPACK_ARCHIVE_THREADS 0)
4445

4546
include(CPack)

0 commit comments

Comments
 (0)