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:
Tabitha Cromarty
2025-11-21 00:14:06 +00:00
committed by GitHub
parent 67e259fab4
commit 0650b14ba1
11 changed files with 203 additions and 175 deletions

View File

@@ -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

View File

@@ -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()

View File

@@ -13,9 +13,9 @@ If youre looking for a hosted desktop recording API, consider checking out [R
[![GitHub stars](https://badgen.net/github/stars/locaal-ai/obs-localvocal)](https://GitHub.com/locaal-ai/obs-localvocal/stargazers/)
<br/>
Download:</br>
[![Static Badge](https://img.shields.io/badge/Windows%20(generic)-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) [![Static Badge](https://img.shields.io/badge/Windows%20(NVidia)-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) [![Static Badge](https://img.shields.io/badge/Windows%20(AMD)-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)
[![Static Badge](https://img.shields.io/badge/mac%20Intel-000000?style=for-the-badge&logo=apple&logoColor=white)](https://github.com/locaal-ai/obs-localvocal/releases/download/0.5.1/obs-localvocal-0.5.1-macos-x86_64.pkg) [![Static Badge](https://img.shields.io/badge/mac%20M1/2/3-0a0a0a?style=for-the-badge&logo=apple&logoColor=white)](https://github.com/locaal-ai/obs-localvocal/releases/download/0.5.1/obs-localvocal-0.5.1-macos-arm64.pkg)
[![Static Badge](https://img.shields.io/badge/Linux%20(generic)-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) [![Static Badge](https://img.shields.io/badge/Linux%20(NVidia)-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) [![Static Badge](https://img.shields.io/badge/Linux%20(AMD)-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)
[![Static Badge](https://img.shields.io/badge/Windows%20(generic)-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) [![Static Badge](https://img.shields.io/badge/Windows%20(NVidia)-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) [![Static Badge](https://img.shields.io/badge/Windows%20(AMD)-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)
[![Static Badge](https://img.shields.io/badge/mac%20Intel-000000?style=for-the-badge&logo=apple&logoColor=white)](https://github.com/locaal-ai/obs-localvocal/releases/download/0.5.2/obs-localvocal-0.5.2-macos-x86_64.pkg) [![Static Badge](https://img.shields.io/badge/mac%20M1/2/3-0a0a0a?style=for-the-badge&logo=apple&logoColor=white)](https://github.com/locaal-ai/obs-localvocal/releases/download/0.5.2/obs-localvocal-0.5.2-macos-arm64.pkg)
[![Static Badge](https://img.shields.io/badge/Linux%20(generic)-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) [![Static Badge](https://img.shields.io/badge/Linux%20(NVidia)-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) [![Static Badge](https://img.shields.io/badge/Linux%20(AMD)-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>

View File

@@ -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",

View File

@@ -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

View 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()

View File

@@ -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

View File

@@ -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()

View File

@@ -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)

View File

@@ -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()

View File

@@ -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)