mirror of
https://github.com/royshil/obs-localvocal.git
synced 2026-01-09 12:28:05 -05:00
Fix MacOS 12 crashes and codesigning issues (#262)
* Refactor, fix codesigning, generate debug package * Bundle libomp and Accelerate framework * Bump version numbers * Stop bundling Accelerate framework * Update whispercpp deps to 0.0.11-2 * Format cmake files
This commit is contained in:
2
.github/scripts/.package.zsh
vendored
2
.github/scripts/.package.zsh
vendored
@@ -242,7 +242,7 @@ ${_usage_host:-}"
|
||||
popd
|
||||
}
|
||||
|
||||
if [[ ${config} == Release ]] {
|
||||
if [[ -f ${product_name}.plugin.dSYM ]] {
|
||||
log_group "Archiving ${product_name} Debug Symbols..."
|
||||
pushd ${project_root}/release/${config}
|
||||
XZ_OPT=-T0 tar "-${_tarflags}" ${project_root}/release/${output_name}-dSYMs.tar.xz ${product_name}.plugin.dSYM
|
||||
|
||||
@@ -187,7 +187,7 @@ if(APPLE)
|
||||
add_custom_command(
|
||||
TARGET "${CMAKE_PROJECT_NAME}"
|
||||
POST_BUILD VERBATIM
|
||||
COMMAND /usr/bin/codesign --force --verify --verbose --sign "${CODESIGN_IDENTITY}"
|
||||
COMMAND /usr/bin/codesign --force --deep --verify --verbose --sign "${CODESIGN_IDENTITY}"
|
||||
"${CMAKE_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${PROJECT_NAME}.plugin/Contents/MacOS/${PROJECT_NAME}")
|
||||
endif()
|
||||
|
||||
|
||||
@@ -13,9 +13,9 @@ If you’re looking for a hosted desktop recording API, consider checking out [R
|
||||
[](https://GitHub.com/locaal-ai/obs-localvocal/stargazers/)
|
||||
<br/>
|
||||
Download:</br>
|
||||
[-0078d6?style=for-the-badge&logo=windows&logoColor=white)](https://github.com/locaal-ai/obs-localvocal/releases/download/0.5.1/obs-localvocal-0.5.1-windows-x64-generic-Installer.exe) [-0078d6?style=for-the-badge&logo=windows&logoColor=white)](https://github.com/locaal-ai/obs-localvocal/releases/download/0.5.1/obs-localvocal-0.5.1-windows-x64-nvidia-Installer.exe) [-0078d6?style=for-the-badge&logo=windows&logoColor=white)](https://github.com/locaal-ai/obs-localvocal/releases/download/0.5.1/obs-localvocal-0.5.1-windows-x64-amd-Installer.exe)
|
||||
[](https://github.com/locaal-ai/obs-localvocal/releases/download/0.5.1/obs-localvocal-0.5.1-macos-x86_64.pkg) [](https://github.com/locaal-ai/obs-localvocal/releases/download/0.5.1/obs-localvocal-0.5.1-macos-arm64.pkg)
|
||||
[-FCC624?style=for-the-badge&logo=linux&logoColor=black)](https://github.com/locaal-ai/obs-localvocal/releases/download/0.5.1/obs-localvocal-0.5.1-generic-x86_64-linux-gnu.deb) [-FCC624?style=for-the-badge&logo=linux&logoColor=black)](https://github.com/locaal-ai/obs-localvocal/releases/download/0.5.1/obs-localvocal-0.5.1-nvidia-x86_64-linux-gnu.deb) [-FCC624?style=for-the-badge&logo=linux&logoColor=black)](https://github.com/locaal-ai/obs-localvocal/releases/download/0.5.1/obs-localvocal-0.5.1-amd-x86_64-linux-gnu.deb)
|
||||
[-0078d6?style=for-the-badge&logo=windows&logoColor=white)](https://github.com/locaal-ai/obs-localvocal/releases/download/0.5.2/obs-localvocal-0.5.2-windows-x64-generic-Installer.exe) [-0078d6?style=for-the-badge&logo=windows&logoColor=white)](https://github.com/locaal-ai/obs-localvocal/releases/download/0.5.2/obs-localvocal-0.5.2-windows-x64-nvidia-Installer.exe) [-0078d6?style=for-the-badge&logo=windows&logoColor=white)](https://github.com/locaal-ai/obs-localvocal/releases/download/0.5.2/obs-localvocal-0.5.2-windows-x64-amd-Installer.exe)
|
||||
[](https://github.com/locaal-ai/obs-localvocal/releases/download/0.5.2/obs-localvocal-0.5.2-macos-x86_64.pkg) [](https://github.com/locaal-ai/obs-localvocal/releases/download/0.5.2/obs-localvocal-0.5.2-macos-arm64.pkg)
|
||||
[-FCC624?style=for-the-badge&logo=linux&logoColor=black)](https://github.com/locaal-ai/obs-localvocal/releases/download/0.5.2/obs-localvocal-0.5.2-generic-x86_64-linux-gnu.deb) [-FCC624?style=for-the-badge&logo=linux&logoColor=black)](https://github.com/locaal-ai/obs-localvocal/releases/download/0.5.2/obs-localvocal-0.5.2-nvidia-x86_64-linux-gnu.deb) [-FCC624?style=for-the-badge&logo=linux&logoColor=black)](https://github.com/locaal-ai/obs-localvocal/releases/download/0.5.2/obs-localvocal-0.5.2-amd-x86_64-linux-gnu.deb)
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
},
|
||||
"name": "obs-localvocal",
|
||||
"displayName": "OBS Localvocal",
|
||||
"version": "0.5.1",
|
||||
"version": "0.5.2",
|
||||
"author": "Roy Shilkrot",
|
||||
"website": "https://github.com/locaal-ai/obs-localvocal",
|
||||
"email": "roy.shil@gmail.com",
|
||||
|
||||
@@ -1,155 +1,21 @@
|
||||
include(ExternalProject)
|
||||
include(FetchContent)
|
||||
|
||||
set(PREBUILT_WHISPERCPP_VERSION "0.0.10-2")
|
||||
set(PREBUILT_WHISPERCPP_VERSION "0.0.11-2")
|
||||
set(PREBUILT_WHISPERCPP_URL_BASE
|
||||
"https://github.com/locaal-ai/occ-ai-dep-whispercpp/releases/download/${PREBUILT_WHISPERCPP_VERSION}")
|
||||
|
||||
add_library(Whispercpp INTERFACE)
|
||||
|
||||
# Get the name for the whisper library file from the CMake component name
|
||||
function(LIB_NAME COMPONENT WHISPER_COMPONENT_IMPORT_LIB)
|
||||
if((COMPONENT STREQUAL "Whisper") OR (COMPONENT STREQUAL "Whispercpp::Whisper"))
|
||||
set(WHISPER_COMPONENT_IMPORT_LIB
|
||||
whisper
|
||||
PARENT_SCOPE)
|
||||
elseif((COMPONENT STREQUAL "GGML") OR (COMPONENT STREQUAL "Whispercpp::GGML"))
|
||||
set(WHISPER_COMPONENT_IMPORT_LIB
|
||||
ggml
|
||||
PARENT_SCOPE)
|
||||
elseif((COMPONENT STREQUAL "WhisperCoreML") OR (COMPONENT STREQUAL "Whispercpp::WhisperCoreML"))
|
||||
set(WHISPER_COMPONENT_IMPORT_LIB
|
||||
whisper.coreml
|
||||
PARENT_SCOPE)
|
||||
else()
|
||||
string(REGEX REPLACE "(Whispercpp::)?(GGML)" "\\2" COMPONENT ${COMPONENT})
|
||||
string(REGEX REPLACE "GGML(.*)" "\\1" LIB_SUFFIX ${COMPONENT})
|
||||
string(TOLOWER ${LIB_SUFFIX} IMPORT_LIB_SUFFIX)
|
||||
set(WHISPER_COMPONENT_IMPORT_LIB
|
||||
"ggml-${IMPORT_LIB_SUFFIX}"
|
||||
PARENT_SCOPE)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
# Get library paths for Whisper libs
|
||||
function(WHISPER_LIB_PATHS COMPONENT SOURCE_DIR WHISPER_STATIC_LIB_PATH WHISPER_SHARED_LIB_PATH
|
||||
WHISPER_SHARED_MODULE_PATH)
|
||||
lib_name(${COMPONENT} WHISPER_COMPONENT_IMPORT_LIB)
|
||||
|
||||
if(UNIX AND NOT APPLE)
|
||||
if(${LINUX_SOURCE_BUILD})
|
||||
set(STATIC_PATH ${SOURCE_DIR})
|
||||
set(SHARED_PATH ${SOURCE_DIR})
|
||||
set(SHARED_BIN_PATH ${SOURCE_DIR})
|
||||
else()
|
||||
set(STATIC_PATH ${SOURCE_DIR}/lib)
|
||||
set(SHARED_PATH ${SOURCE_DIR}/lib)
|
||||
set(SHARED_BIN_PATH ${SOURCE_DIR}/bin)
|
||||
endif()
|
||||
else()
|
||||
set(STATIC_PATH ${SOURCE_DIR}/${CMAKE_INSTALL_LIBDIR})
|
||||
set(SHARED_PATH ${SOURCE_DIR}/${CMAKE_INSTALL_LIBDIR})
|
||||
set(SHARED_BIN_PATH ${SOURCE_DIR}/${CMAKE_INSTALL_BINDIR})
|
||||
endif()
|
||||
|
||||
set(WHISPER_STATIC_LIB_PATH
|
||||
"${STATIC_PATH}/${CMAKE_STATIC_LIBRARY_PREFIX}${WHISPER_COMPONENT_IMPORT_LIB}${CMAKE_STATIC_LIBRARY_SUFFIX}"
|
||||
PARENT_SCOPE)
|
||||
set(WHISPER_SHARED_LIB_PATH
|
||||
"${SHARED_PATH}/${CMAKE_SHARED_LIBRARY_PREFIX}${WHISPER_COMPONENT_IMPORT_LIB}${CMAKE_SHARED_LIBRARY_SUFFIX}"
|
||||
PARENT_SCOPE)
|
||||
set(WHISPER_SHARED_MODULE_PATH
|
||||
"${SHARED_BIN_PATH}/${CMAKE_SHARED_MODULE_PREFIX}${WHISPER_COMPONENT_IMPORT_LIB}${CMAKE_SHARED_MODULE_SUFFIX}"
|
||||
PARENT_SCOPE)
|
||||
|
||||
# Debugging
|
||||
set(WHISPER_STATIC_LIB_PATH
|
||||
"${STATIC_PATH}/${CMAKE_STATIC_LIBRARY_PREFIX}${WHISPER_COMPONENT_IMPORT_LIB}${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
||||
set(WHISPER_SHARED_LIB_PATH
|
||||
"${SHARED_PATH}/${CMAKE_SHARED_LIBRARY_PREFIX}${WHISPER_COMPONENT_IMPORT_LIB}${CMAKE_SHARED_LIBRARY_SUFFIX}")
|
||||
set(WHISPER_SHARED_MODULE_PATH
|
||||
"${SHARED_BIN_PATH}/${CMAKE_SHARED_MODULE_PREFIX}${WHISPER_COMPONENT_IMPORT_LIB}${CMAKE_SHARED_MODULE_SUFFIX}")
|
||||
message(STATUS "Whisper lib import path: " ${WHISPER_STATIC_LIB_PATH})
|
||||
message(STATUS "Whisper shared lib import path: " ${WHISPER_SHARED_LIB_PATH})
|
||||
message(STATUS "Whisper shared MODULE import path: " ${WHISPER_SHARED_MODULE_PATH})
|
||||
endfunction()
|
||||
|
||||
# Add a Whisper component to the build
|
||||
function(ADD_WHISPER_COMPONENT COMPONENT LIB_TYPE SOURCE_DIR LIB_DIR)
|
||||
whisper_lib_paths(${COMPONENT} ${LIB_DIR} WHISPER_STATIC_LIB_PATH WHISPER_SHARED_LIB_PATH WHISPER_SHARED_MODULE_PATH)
|
||||
lib_name(${COMPONENT} WHISPER_COMPONENT_IMPORT_LIB)
|
||||
|
||||
if(APPLE AND (LIB_TYPE STREQUAL SHARED))
|
||||
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE "${WHISPER_SHARED_LIB_PATH}")
|
||||
target_sources(${CMAKE_PROJECT_NAME} PRIVATE "${WHISPER_SHARED_LIB_PATH}")
|
||||
set_property(SOURCE "${WHISPER_SHARED_LIB_PATH}" PROPERTY MACOSX_PACKAGE_LOCATION Frameworks)
|
||||
source_group("Frameworks" FILES "${WHISPER_SHARED_LIB_PATH}")
|
||||
add_custom_command(
|
||||
TARGET "${CMAKE_PROJECT_NAME}"
|
||||
PRE_BUILD VERBATIM
|
||||
COMMAND /usr/bin/codesign --force --verify --verbose --sign "${CODESIGN_IDENTITY}" "${WHISPER_SHARED_LIB_PATH}")
|
||||
message(STATUS "lib name: ${WHISPER_COMPONENT_IMPORT_LIB}")
|
||||
if(${WHISPER_COMPONENT_IMPORT_LIB} STREQUAL whisper)
|
||||
set(DYLIB_NAME ${CMAKE_SHARED_LIBRARY_PREFIX}${WHISPER_COMPONENT_IMPORT_LIB}.1${CMAKE_SHARED_LIBRARY_SUFFIX})
|
||||
else()
|
||||
set(DYLIB_NAME ${CMAKE_SHARED_LIBRARY_PREFIX}${WHISPER_COMPONENT_IMPORT_LIB}${CMAKE_SHARED_LIBRARY_SUFFIX})
|
||||
endif()
|
||||
add_custom_command(
|
||||
TARGET "${CMAKE_PROJECT_NAME}"
|
||||
POST_BUILD
|
||||
COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change "@rpath/${DYLIB_NAME}" "@loader_path/../Frameworks/${DYLIB_NAME}"
|
||||
$<TARGET_FILE:${CMAKE_PROJECT_NAME}>)
|
||||
else()
|
||||
add_library(${COMPONENT} ${LIB_TYPE} IMPORTED)
|
||||
|
||||
if(LIB_TYPE STREQUAL STATIC)
|
||||
set_target_properties(${COMPONENT} PROPERTIES IMPORTED_LOCATION "${WHISPER_STATIC_LIB_PATH}")
|
||||
else()
|
||||
set_target_properties(${COMPONENT} PROPERTIES IMPORTED_LOCATION "${WHISPER_SHARED_LIB_PATH}")
|
||||
set_target_properties(${COMPONENT} PROPERTIES IMPORTED_IMPLIB "${WHISPER_STATIC_LIB_PATH}")
|
||||
endif()
|
||||
set_target_properties(${COMPONENT} PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/include")
|
||||
target_link_libraries(Whispercpp INTERFACE ${COMPONENT})
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(ADD_WHISPER_RUNTIME_MODULE COMPONENT SOURCE_DIR LIB_DIR)
|
||||
whisper_lib_paths(${COMPONENT} ${LIB_DIR} WHISPER_STATIC_LIB_PATH WHISPER_SHARED_LIB_PATH WHISPER_SHARED_MODULE_PATH)
|
||||
lib_name(${COMPONENT} WHISPER_COMPONENT_IMPORT_LIB)
|
||||
|
||||
if(APPLE)
|
||||
target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM PUBLIC "${SOURCE_DIR}/include")
|
||||
target_sources(${CMAKE_PROJECT_NAME} PRIVATE "${WHISPER_SHARED_MODULE_PATH}")
|
||||
set_property(SOURCE "${WHISPER_SHARED_MODULE_PATH}" PROPERTY MACOSX_PACKAGE_LOCATION Frameworks)
|
||||
source_group("Frameworks" FILES "${WHISPER_SHARED_MODULE_PATH}")
|
||||
# add a codesigning step
|
||||
add_custom_command(
|
||||
TARGET "${CMAKE_PROJECT_NAME}"
|
||||
PRE_BUILD VERBATIM
|
||||
COMMAND /usr/bin/codesign --force --verify --verbose --sign "${CODESIGN_IDENTITY}"
|
||||
"${WHISPER_SHARED_MODULE_PATH}")
|
||||
add_custom_command(
|
||||
TARGET "${CMAKE_PROJECT_NAME}"
|
||||
POST_BUILD
|
||||
COMMAND
|
||||
${CMAKE_INSTALL_NAME_TOOL} -change "@rpath/${WHISPER_COMPONENT_IMPORT_LIB}${CMAKE_SHARED_MODULE_SUFFIX}"
|
||||
"@loader_path/../Frameworks/${WHISPER_COMPONENT_IMPORT_LIB}${CMAKE_SHARED_MODULE_SUFFIX}"
|
||||
$<TARGET_FILE:${CMAKE_PROJECT_NAME}>)
|
||||
else()
|
||||
add_library(${COMPONENT} SHARED IMPORTED)
|
||||
set_target_properties(${COMPONENT} PROPERTIES IMPORTED_LOCATION "${WHISPER_SHARED_LIB_PATH}")
|
||||
set_target_properties(${COMPONENT} PROPERTIES IMPORTED_IMPLIB "${WHISPER_STATIC_LIB_PATH}")
|
||||
set_target_properties(${COMPONENT} PROPERTIES IMPORTED_NO_SONAME TRUE)
|
||||
set_target_properties(${COMPONENT} PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/include")
|
||||
endif()
|
||||
endfunction()
|
||||
include(cmake/BuildWhispercppHelpers.cmake)
|
||||
|
||||
if(APPLE)
|
||||
add_compile_definitions(WHISPER_DYNAMIC_BACKENDS)
|
||||
|
||||
# check the "MACOS_ARCH" env var to figure out if this is x86 or arm64
|
||||
if($ENV{MACOS_ARCH} STREQUAL "x86_64")
|
||||
set(WHISPER_CPP_HASH "02446b1d508711b26cc778db48d5b8ef2dd7b0c98f5c9dfe39a1ad2ef9e3df07")
|
||||
set(WHISPER_CPP_HASH "e6fa37ea4f76d31a105dc557e90c41b9bb78a629bb3efa71b2c6f9ce029b77dd")
|
||||
|
||||
list(
|
||||
APPEND
|
||||
WHISPER_RUNTIME_MODULES
|
||||
@@ -162,7 +28,7 @@ if(APPLE)
|
||||
GGMLCPU-ALDERLAKE
|
||||
GGMLCPU-SAPPHIRERAPIDS)
|
||||
elseif($ENV{MACOS_ARCH} STREQUAL "arm64")
|
||||
set(WHISPER_CPP_HASH "ff2764b113e0f1fbafe0d8f86a339cd541d86a06d40a10eeac352050cc3be920")
|
||||
set(WHISPER_CPP_HASH "4d18abb80aba27edc534a1720b2e4c552474d3380df0174465295f6d23d13589")
|
||||
list(APPEND WHISPER_RUNTIME_MODULES GGMLCPU-APPLE_M1 GGMLCPU-APPLE_M2_M3 GGMLCPU-APPLE_M4)
|
||||
else()
|
||||
message(
|
||||
@@ -170,9 +36,10 @@ if(APPLE)
|
||||
"The MACOS_ARCH environment variable is not set to a valid value. Please set it to either `x86_64` or `arm64`")
|
||||
endif()
|
||||
set(WHISPER_CPP_URL
|
||||
"${PREBUILT_WHISPERCPP_URL_BASE}/whispercpp-macos-$ENV{MACOS_ARCH}-${PREBUILT_WHISPERCPP_VERSION}.tar.gz")
|
||||
"${PREBUILT_WHISPERCPP_URL_BASE}/whispercpp-macos-$ENV{MACOS_ARCH}-metalembedded-${PREBUILT_WHISPERCPP_VERSION}.tar.gz"
|
||||
)
|
||||
|
||||
set(WHISPER_LIBRARIES Whisper WhisperCoreML GGML GGMLBase)
|
||||
set(WHISPER_LIBRARIES Whisper Whisper_1 WhisperCoreML GGML GGMLBase)
|
||||
list(APPEND WHISPER_RUNTIME_MODULES GGMLMetal GGMLBlas)
|
||||
set(WHISPER_DEPENDENCY_LIBRARIES "-framework Accelerate" "-framework CoreML" "-framework Metal" ${BLAS_LIBRARIES})
|
||||
set(WHISPER_LIBRARY_TYPE SHARED)
|
||||
@@ -188,14 +55,8 @@ if(APPLE)
|
||||
set(WHISPER_SOURCE_DIR ${whispercpp_fetch_SOURCE_DIR})
|
||||
set(WHISPER_LIB_DIR ${whispercpp_fetch_SOURCE_DIR})
|
||||
|
||||
add_custom_command(
|
||||
TARGET "${CMAKE_PROJECT_NAME}"
|
||||
PRE_BUILD VERBATIM
|
||||
COMMAND /usr/bin/codesign --force --verify --verbose --sign "${CODESIGN_IDENTITY}"
|
||||
"${whispercpp_fetch_SOURCE_DIR}/lib/libomp.dylib")
|
||||
|
||||
file(GLOB WHISPER_DYLIBS ${whispercpp_fetch_SOURCE_DIR}/lib/*.dylib)
|
||||
install(FILES ${WHISPER_DYLIBS} DESTINATION "${CMAKE_PROJECT_NAME}.plugin/Contents/Frameworks")
|
||||
install_library_to_bundle(${whispercpp_fetch_SOURCE_DIR} libomp.dylib)
|
||||
# target_add_resource(${CMAKE_PROJECT_NAME} ${whispercpp_fetch_SOURCE_DIR}/bin/default.metallib)
|
||||
elseif(WIN32)
|
||||
add_compile_definitions(WHISPER_DYNAMIC_BACKENDS)
|
||||
|
||||
@@ -222,12 +83,12 @@ elseif(WIN32)
|
||||
"${PREBUILT_WHISPERCPP_URL_BASE}/whispercpp-windows${ARCH_PREFIX}${ACCELERATION_PREFIX}-${PREBUILT_WHISPERCPP_VERSION}.zip"
|
||||
)
|
||||
if(${ACCELERATION} STREQUAL "generic")
|
||||
set(WHISPER_CPP_HASH "affff7241d36aa09863d65fe5a2d581251a9955a4465186ffdec00c893abcaee")
|
||||
set(WHISPER_CPP_HASH "43a69a80d6668fa4714cd145b7826deaa592b454c6f7da8ac71e7062114f1a7d")
|
||||
elseif(${ACCELERATION} STREQUAL "nvidia")
|
||||
set(WHISPER_CPP_HASH "2b07afba9ad3489e6f173be6be7ffde2625ba5c0d84af7e306308676cabf67a6")
|
||||
set(WHISPER_CPP_HASH "0893975412bf720c76d4b92a910abdb8ebf7ac927c872e2bbb04db0b647f71fe")
|
||||
list(APPEND WHISPER_RUNTIME_MODULES GGMLCUDA)
|
||||
elseif(${ACCELERATION} STREQUAL "amd")
|
||||
set(WHISPER_CPP_HASH "9713220e1427b94f733255a25c2cf9f26577d2ce7eb55c48a6a0cc651313e9e5")
|
||||
set(WHISPER_CPP_HASH "656c242b658b20f8a60f8823b85385c6f03da17cfe401d6ef177ccd5749f2b0d")
|
||||
list(APPEND WHISPER_RUNTIME_MODULES GGMLHip)
|
||||
else()
|
||||
message(
|
||||
@@ -302,9 +163,9 @@ else()
|
||||
set(WHISPER_CPP_URL
|
||||
"${PREBUILT_WHISPERCPP_URL_BASE}/whispercpp-linux${ARCH_PREFIX}${ACCELERATION_PREFIX}-Release.tar.gz")
|
||||
if(${ACCELERATION} STREQUAL "generic")
|
||||
set(WHISPER_CPP_HASH "5a4f3baf7d7e030f3e5a29d78fdd06f069fe472ad0f9ca93d40ed222052a3fe5")
|
||||
set(WHISPER_CPP_HASH "77555023b0fa15ce486ef56c6768d31f3b728feee64172e74dd8f8c811b62e10")
|
||||
elseif(${ACCELERATION} STREQUAL "nvidia")
|
||||
set(WHISPER_CPP_HASH "a43dc8a44577e965caf9b0baaae74f30a9e00d99a296768021e7ccf0b9217878")
|
||||
set(WHISPER_CPP_HASH "397ea1409a3cc92d049130b5f874bbd9c06325e5a56cd2d08b3d8706ce619b7b")
|
||||
list(APPEND WHISPER_RUNTIME_MODULES GGMLCUDA)
|
||||
|
||||
# Find CUDA libraries and link against them
|
||||
@@ -319,7 +180,7 @@ else()
|
||||
CUDA::cuda_driver
|
||||
CUDA::OpenCL)
|
||||
elseif(${ACCELERATION} STREQUAL "amd")
|
||||
set(WHISPER_CPP_HASH "1a7592da41493e57ead23c97a420f2db11a4fe31049c9b01cdb310bff05fdca1")
|
||||
set(WHISPER_CPP_HASH "7e3c45e92abe3fe4c08009c4842a13937d4a30285fa49116a7a75802f0e6e64a")
|
||||
list(APPEND WHISPER_RUNTIME_MODULES GGMLHip)
|
||||
|
||||
# Find hip libraries and link against them
|
||||
|
||||
142
cmake/BuildWhispercppHelpers.cmake
Normal file
142
cmake/BuildWhispercppHelpers.cmake
Normal file
@@ -0,0 +1,142 @@
|
||||
# Get the name for the whisper library file from the CMake component name
|
||||
function(LIB_NAME COMPONENT WHISPER_COMPONENT_IMPORT_LIB)
|
||||
if((COMPONENT STREQUAL "Whisper") OR (COMPONENT STREQUAL "Whispercpp::Whisper"))
|
||||
if(APPLE)
|
||||
set(WHISPER_COMPONENT_IMPORT_LIB
|
||||
whisper.1.8.2
|
||||
PARENT_SCOPE)
|
||||
else()
|
||||
set(WHISPER_COMPONENT_IMPORT_LIB
|
||||
whisper
|
||||
PARENT_SCOPE)
|
||||
endif()
|
||||
elseif((COMPONENT STREQUAL "Whisper_1") OR (COMPONENT STREQUAL "Whispercpp::Whisper_1"))
|
||||
set(WHISPER_COMPONENT_IMPORT_LIB
|
||||
whisper.1
|
||||
PARENT_SCOPE)
|
||||
elseif((COMPONENT STREQUAL "GGML") OR (COMPONENT STREQUAL "Whispercpp::GGML"))
|
||||
set(WHISPER_COMPONENT_IMPORT_LIB
|
||||
ggml
|
||||
PARENT_SCOPE)
|
||||
elseif((COMPONENT STREQUAL "WhisperCoreML") OR (COMPONENT STREQUAL "Whispercpp::WhisperCoreML"))
|
||||
set(WHISPER_COMPONENT_IMPORT_LIB
|
||||
whisper.coreml
|
||||
PARENT_SCOPE)
|
||||
else()
|
||||
string(REGEX REPLACE "(Whispercpp::)?(GGML)" "\\2" COMPONENT ${COMPONENT})
|
||||
string(REGEX REPLACE "GGML(.*)" "\\1" LIB_SUFFIX ${COMPONENT})
|
||||
string(TOLOWER ${LIB_SUFFIX} IMPORT_LIB_SUFFIX)
|
||||
set(WHISPER_COMPONENT_IMPORT_LIB
|
||||
"ggml-${IMPORT_LIB_SUFFIX}"
|
||||
PARENT_SCOPE)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
# Get library paths for Whisper libs
|
||||
function(WHISPER_LIB_PATHS COMPONENT SOURCE_DIR WHISPER_STATIC_LIB_PATH WHISPER_SHARED_LIB_PATH
|
||||
WHISPER_SHARED_MODULE_PATH)
|
||||
lib_name(${COMPONENT} WHISPER_COMPONENT_IMPORT_LIB)
|
||||
|
||||
if(UNIX AND NOT APPLE)
|
||||
if(${LINUX_SOURCE_BUILD})
|
||||
set(STATIC_PATH ${SOURCE_DIR})
|
||||
set(SHARED_PATH ${SOURCE_DIR})
|
||||
set(SHARED_BIN_PATH ${SOURCE_DIR})
|
||||
else()
|
||||
set(STATIC_PATH ${SOURCE_DIR}/lib)
|
||||
set(SHARED_PATH ${SOURCE_DIR}/lib)
|
||||
set(SHARED_BIN_PATH ${SOURCE_DIR}/bin)
|
||||
endif()
|
||||
else()
|
||||
set(STATIC_PATH ${SOURCE_DIR}/${CMAKE_INSTALL_LIBDIR})
|
||||
set(SHARED_PATH ${SOURCE_DIR}/${CMAKE_INSTALL_LIBDIR})
|
||||
set(SHARED_BIN_PATH ${SOURCE_DIR}/${CMAKE_INSTALL_BINDIR})
|
||||
endif()
|
||||
|
||||
set(WHISPER_STATIC_LIB_PATH
|
||||
"${STATIC_PATH}/${CMAKE_STATIC_LIBRARY_PREFIX}${WHISPER_COMPONENT_IMPORT_LIB}${CMAKE_STATIC_LIBRARY_SUFFIX}"
|
||||
PARENT_SCOPE)
|
||||
set(WHISPER_SHARED_LIB_PATH
|
||||
"${SHARED_PATH}/${CMAKE_SHARED_LIBRARY_PREFIX}${WHISPER_COMPONENT_IMPORT_LIB}${CMAKE_SHARED_LIBRARY_SUFFIX}"
|
||||
PARENT_SCOPE)
|
||||
set(WHISPER_SHARED_MODULE_PATH
|
||||
"${SHARED_BIN_PATH}/${CMAKE_SHARED_MODULE_PREFIX}${WHISPER_COMPONENT_IMPORT_LIB}${CMAKE_SHARED_MODULE_SUFFIX}"
|
||||
PARENT_SCOPE)
|
||||
|
||||
# Debugging
|
||||
set(WHISPER_STATIC_LIB_PATH
|
||||
"${STATIC_PATH}/${CMAKE_STATIC_LIBRARY_PREFIX}${WHISPER_COMPONENT_IMPORT_LIB}${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
||||
set(WHISPER_SHARED_LIB_PATH
|
||||
"${SHARED_PATH}/${CMAKE_SHARED_LIBRARY_PREFIX}${WHISPER_COMPONENT_IMPORT_LIB}${CMAKE_SHARED_LIBRARY_SUFFIX}")
|
||||
set(WHISPER_SHARED_MODULE_PATH
|
||||
"${SHARED_BIN_PATH}/${CMAKE_SHARED_MODULE_PREFIX}${WHISPER_COMPONENT_IMPORT_LIB}${CMAKE_SHARED_MODULE_SUFFIX}")
|
||||
message(DEBUG "Whisper lib import path: " ${WHISPER_STATIC_LIB_PATH})
|
||||
message(DEBUG "Whisper shared lib import path: " ${WHISPER_SHARED_LIB_PATH})
|
||||
message(DEBUG "Whisper shared MODULE import path: " ${WHISPER_SHARED_MODULE_PATH})
|
||||
endfunction()
|
||||
|
||||
# Add a Whisper component to the build
|
||||
function(ADD_WHISPER_COMPONENT COMPONENT LIB_TYPE SOURCE_DIR LIB_DIR)
|
||||
whisper_lib_paths(${COMPONENT} ${LIB_DIR} WHISPER_STATIC_LIB_PATH WHISPER_SHARED_LIB_PATH WHISPER_SHARED_MODULE_PATH)
|
||||
lib_name(${COMPONENT} WHISPER_COMPONENT_IMPORT_LIB)
|
||||
|
||||
if(APPLE AND (LIB_TYPE STREQUAL SHARED))
|
||||
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE "${WHISPER_SHARED_LIB_PATH}")
|
||||
target_sources(${CMAKE_PROJECT_NAME} PRIVATE "${WHISPER_SHARED_LIB_PATH}")
|
||||
set_property(SOURCE "${WHISPER_SHARED_LIB_PATH}" PROPERTY MACOSX_PACKAGE_LOCATION Frameworks)
|
||||
source_group("Frameworks" FILES "${WHISPER_SHARED_LIB_PATH}")
|
||||
add_custom_command(
|
||||
TARGET "${CMAKE_PROJECT_NAME}"
|
||||
PRE_BUILD VERBATIM
|
||||
COMMAND /usr/bin/codesign --force --verify --verbose --sign "${CODESIGN_IDENTITY}" "${WHISPER_SHARED_LIB_PATH}")
|
||||
set(DYLIB_NAME ${CMAKE_SHARED_LIBRARY_PREFIX}${WHISPER_COMPONENT_IMPORT_LIB}${CMAKE_SHARED_LIBRARY_SUFFIX})
|
||||
add_custom_command(
|
||||
TARGET "${CMAKE_PROJECT_NAME}"
|
||||
POST_BUILD
|
||||
COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change "@rpath/${DYLIB_NAME}" "@loader_path/../Frameworks/${DYLIB_NAME}"
|
||||
$<TARGET_FILE:${CMAKE_PROJECT_NAME}>)
|
||||
else()
|
||||
add_library(${COMPONENT} ${LIB_TYPE} IMPORTED)
|
||||
|
||||
if(LIB_TYPE STREQUAL STATIC)
|
||||
set_target_properties(${COMPONENT} PROPERTIES IMPORTED_LOCATION "${WHISPER_STATIC_LIB_PATH}")
|
||||
else()
|
||||
set_target_properties(${COMPONENT} PROPERTIES IMPORTED_LOCATION "${WHISPER_SHARED_LIB_PATH}")
|
||||
set_target_properties(${COMPONENT} PROPERTIES IMPORTED_IMPLIB "${WHISPER_STATIC_LIB_PATH}")
|
||||
endif()
|
||||
set_target_properties(${COMPONENT} PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/include")
|
||||
target_link_libraries(Whispercpp INTERFACE ${COMPONENT})
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(ADD_WHISPER_RUNTIME_MODULE COMPONENT SOURCE_DIR LIB_DIR)
|
||||
whisper_lib_paths(${COMPONENT} ${LIB_DIR} WHISPER_STATIC_LIB_PATH WHISPER_SHARED_LIB_PATH WHISPER_SHARED_MODULE_PATH)
|
||||
lib_name(${COMPONENT} WHISPER_COMPONENT_IMPORT_LIB)
|
||||
|
||||
if(APPLE)
|
||||
target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM PUBLIC "${SOURCE_DIR}/include")
|
||||
target_sources(${CMAKE_PROJECT_NAME} PRIVATE "${WHISPER_SHARED_MODULE_PATH}")
|
||||
set_property(SOURCE "${WHISPER_SHARED_MODULE_PATH}" PROPERTY MACOSX_PACKAGE_LOCATION Frameworks)
|
||||
source_group("Frameworks" FILES "${WHISPER_SHARED_MODULE_PATH}")
|
||||
|
||||
# add a codesigning step
|
||||
add_custom_command(
|
||||
TARGET "${CMAKE_PROJECT_NAME}"
|
||||
PRE_BUILD VERBATIM
|
||||
COMMAND /usr/bin/codesign --force --verify --verbose --sign "${CODESIGN_IDENTITY}"
|
||||
"${WHISPER_SHARED_MODULE_PATH}")
|
||||
add_custom_command(
|
||||
TARGET "${CMAKE_PROJECT_NAME}"
|
||||
POST_BUILD
|
||||
COMMAND
|
||||
${CMAKE_INSTALL_NAME_TOOL} -change "@rpath/${WHISPER_COMPONENT_IMPORT_LIB}${CMAKE_SHARED_MODULE_SUFFIX}"
|
||||
"@loader_path/../Frameworks/${WHISPER_COMPONENT_IMPORT_LIB}${CMAKE_SHARED_MODULE_SUFFIX}"
|
||||
$<TARGET_FILE:${CMAKE_PROJECT_NAME}>)
|
||||
else()
|
||||
add_library(${COMPONENT} SHARED IMPORTED)
|
||||
set_target_properties(${COMPONENT} PROPERTIES IMPORTED_LOCATION "${WHISPER_SHARED_LIB_PATH}")
|
||||
set_target_properties(${COMPONENT} PROPERTIES IMPORTED_IMPLIB "${WHISPER_STATIC_LIB_PATH}")
|
||||
set_target_properties(${COMPONENT} PROPERTIES IMPORTED_NO_SONAME TRUE)
|
||||
set_target_properties(${COMPONENT} PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/include")
|
||||
endif()
|
||||
endfunction()
|
||||
@@ -52,17 +52,7 @@ FetchContent_Declare(
|
||||
FetchContent_MakeAvailable(onnxruntime)
|
||||
|
||||
if(APPLE)
|
||||
set(Onnxruntime_LIB "${onnxruntime_SOURCE_DIR}/lib/libonnxruntime.${Onnxruntime_VERSION}.dylib")
|
||||
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE "${Onnxruntime_LIB}")
|
||||
target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM PUBLIC "${onnxruntime_SOURCE_DIR}/include")
|
||||
target_sources(${CMAKE_PROJECT_NAME} PRIVATE "${Onnxruntime_LIB}")
|
||||
set_property(SOURCE "${Onnxruntime_LIB}" PROPERTY MACOSX_PACKAGE_LOCATION Frameworks)
|
||||
source_group("Frameworks" FILES "${Onnxruntime_LIB}")
|
||||
# add a codesigning step
|
||||
add_custom_command(
|
||||
TARGET "${CMAKE_PROJECT_NAME}"
|
||||
PRE_BUILD VERBATIM
|
||||
COMMAND /usr/bin/codesign --force --verify --verbose --sign "${CODESIGN_IDENTITY}" "${Onnxruntime_LIB}")
|
||||
install_library_to_bundle(${onnxruntime_SOURCE_DIR} libonnxruntime.${Onnxruntime_VERSION}.dylib BUILD_DEPENDENCY)
|
||||
add_custom_command(
|
||||
TARGET "${CMAKE_PROJECT_NAME}"
|
||||
POST_BUILD
|
||||
|
||||
@@ -18,5 +18,8 @@ if(CCACHE_PROGRAM)
|
||||
set(CMAKE_OBJC_COMPILER_LAUNCHER "${CCACHE_PROGRAM}")
|
||||
set(CMAKE_OBJCXX_COMPILER_LAUNCHER "${CCACHE_PROGRAM}")
|
||||
set(CMAKE_CUDA_COMPILER_LAUNCHER "${CCACHE_PROGRAM}")
|
||||
if(APPLE)
|
||||
set(CLANG_ENABLE_EXPLICIT_MODULES_WITH_COMPILER_LAUNCHER YES)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@@ -10,9 +10,11 @@ add_compile_options(-fopenmp-simd)
|
||||
if(XCODE)
|
||||
# Use Xcode's standard architecture selection
|
||||
set(CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD)")
|
||||
# Enable dSYM generation for Release builds
|
||||
# set(CMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT "dwarf-with-dsym") Enable dSYM generation for Release builds
|
||||
string(APPEND CMAKE_C_FLAGS_RELEASE " -g")
|
||||
string(APPEND CMAKE_CXX_FLAGS_RELEASE " -g")
|
||||
string(APPEND CMAKE_C_FLAGS_DEBUG " -g")
|
||||
string(APPEND CMAKE_CXX_FLAGS_DEBUG " -g")
|
||||
else()
|
||||
option(ENABLE_COMPILER_TRACE "Enable clang time-trace (requires Ninja)" OFF)
|
||||
mark_as_advanced(ENABLE_COMPILER_TRACE)
|
||||
|
||||
@@ -91,3 +91,33 @@ function(target_add_resource target resource)
|
||||
set_property(SOURCE "${resource}" PROPERTY MACOSX_PACKAGE_LOCATION Resources)
|
||||
source_group("Resources" FILES "${resource}")
|
||||
endfunction()
|
||||
|
||||
function(INSTALL_LIBRARY_TO_BUNDLE SOURCE_DIR LIB_NAME)
|
||||
set(options FRAMEWORK BUILD_DEPENDENCY)
|
||||
cmake_parse_arguments(INSTALL_LIBRARY_TO_BUNDLE "${options}" "" "" ${ARGN})
|
||||
if(APPLE)
|
||||
if(${INSTALL_LIBRARY_TO_BUNDLE_FRAMEWORK})
|
||||
set(LIB_DIR Frameworks)
|
||||
set(DEEP_SIGN "--deep")
|
||||
else()
|
||||
set(LIB_DIR lib)
|
||||
set(DEEP_SIGN "")
|
||||
endif()
|
||||
|
||||
set(LIB ${SOURCE_DIR}/${LIB_DIR}/${LIB_NAME})
|
||||
|
||||
if(${INSTALL_LIBRARY_TO_BUNDLE_BUILD_DEPENDENCY})
|
||||
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE "${LIB}")
|
||||
target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM PUBLIC "${SOURCE_DIR}/include")
|
||||
endif()
|
||||
|
||||
add_custom_command(
|
||||
TARGET "${CMAKE_PROJECT_NAME}"
|
||||
PRE_BUILD VERBATIM
|
||||
COMMAND /usr/bin/codesign --force ${DEEP_SIGN} --verify --verbose --sign "${CODESIGN_IDENTITY}" "${LIB}")
|
||||
|
||||
target_sources(${CMAKE_PROJECT_NAME} PRIVATE "${LIB}")
|
||||
set_property(SOURCE "${LIB}" PROPERTY MACOSX_PACKAGE_LOCATION Frameworks)
|
||||
source_group("Frameworks" FILES "${LIB}")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
@@ -69,8 +69,8 @@ set(CMAKE_XCODE_ATTRIBUTE_SWIFT_VERSION 5.0)
|
||||
# * Currently overruled by CMake's Xcode generator, requires adding '-g' flag to raw compiler command line for desired
|
||||
# output configuration. Report to KitWare.
|
||||
#
|
||||
set(CMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT[variant=Debug] dwarf)
|
||||
set(CMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT[variant=RelWithDebInfo] dwarf)
|
||||
set(CMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT[variant=Debug] dwarf-with-dsym)
|
||||
set(CMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT[variant=RelWithDebInfo] dwarf-with-dsym)
|
||||
set(CMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT[variant=Release] dwarf-with-dsym)
|
||||
set(CMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT[variant=MinSizeRel] dwarf-with-dsym)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user