Skip to content

Commit 9b5d90f

Browse files
committed
Fix dynamic linking on MacOS
1 parent 37abafe commit 9b5d90f

2 files changed

Lines changed: 37 additions & 26 deletions

File tree

cmake/BuildWhispercpp.cmake

Lines changed: 31 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -73,32 +73,40 @@ function(ADD_WHISPER_COMPONENT COMPONENT LIB_TYPE SOURCE_DIR LIB_DIR)
7373
whisper_lib_paths(${COMPONENT} ${LIB_DIR} WHISPER_STATIC_LIB_PATH WHISPER_SHARED_LIB_PATH WHISPER_SHARED_MODULE_PATH)
7474
lib_name(${COMPONENT} WHISPER_COMPONENT_IMPORT_LIB)
7575

76-
add_library(${COMPONENT} ${LIB_TYPE} IMPORTED)
77-
78-
if(LIB_TYPE STREQUAL STATIC)
79-
set_target_properties(${COMPONENT} PROPERTIES IMPORTED_LOCATION "${WHISPER_STATIC_LIB_PATH}")
76+
if(APPLE AND (LIB_TYPE STREQUAL SHARED))
77+
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE "${WHISPER_SHARED_LIB_PATH}")
78+
target_sources(${CMAKE_PROJECT_NAME} PRIVATE "${WHISPER_SHARED_LIB_PATH}")
79+
set_property(SOURCE "${WHISPER_SHARED_LIB_PATH}" PROPERTY MACOSX_PACKAGE_LOCATION Frameworks)
80+
source_group("Frameworks" FILES "${WHISPER_SHARED_LIB_PATH}")
81+
add_custom_command(
82+
TARGET "${CMAKE_PROJECT_NAME}"
83+
PRE_BUILD VERBATIM
84+
COMMAND /usr/bin/codesign --force --verify --verbose --sign "${CODESIGN_IDENTITY}" "${WHISPER_SHARED_LIB_PATH}")
85+
message(STATUS "lib name: ${WHISPER_COMPONENT_IMPORT_LIB}")
86+
if(${WHISPER_COMPONENT_IMPORT_LIB} STREQUAL whisper)
87+
set(DYLIB_NAME ${CMAKE_SHARED_LIBRARY_PREFIX}${WHISPER_COMPONENT_IMPORT_LIB}.1${CMAKE_SHARED_LIBRARY_SUFFIX})
88+
else()
89+
set(DYLIB_NAME ${CMAKE_SHARED_LIBRARY_PREFIX}${WHISPER_COMPONENT_IMPORT_LIB}${CMAKE_SHARED_LIBRARY_SUFFIX})
90+
endif()
91+
add_custom_command(
92+
TARGET "${CMAKE_PROJECT_NAME}"
93+
POST_BUILD
94+
COMMAND
95+
${CMAKE_INSTALL_NAME_TOOL} -change "@rpath/${DYLIB_NAME}"
96+
"@loader_path/../Frameworks/${DYLIB_NAME}"
97+
$<TARGET_FILE:${CMAKE_PROJECT_NAME}>)
8098
else()
81-
if(APPLE)
82-
add_custom_command(
83-
TARGET "${CMAKE_PROJECT_NAME}"
84-
PRE_BUILD VERBATIM
85-
COMMAND /usr/bin/codesign --force --verify --verbose --sign "${CODESIGN_IDENTITY}" "${WHISPER_SHARED_LIB_PATH}")
86-
add_custom_command(
87-
TARGET "${CMAKE_PROJECT_NAME}"
88-
PRE_BUILD
89-
COMMAND
90-
${CMAKE_INSTALL_NAME_TOOL} -id
91-
"@rpath/${CMAKE_SHARED_LIBRARY_PREFIX}${WHISPER_COMPONENT_IMPORT_LIB}${CMAKE_SHARED_LIBRARY_SUFFIX}"
92-
$<TARGET_FILE:${COMPONENT}>)
93-
set_target_properties(${COMPONENT} PROPERTIES INSTALL_RPATH "@loader_path/../Frameworks")
94-
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES INSTALL_RPATH "@loader_path/../Frameworks")
99+
add_library(${COMPONENT} ${LIB_TYPE} IMPORTED)
100+
101+
if(LIB_TYPE STREQUAL STATIC)
102+
set_target_properties(${COMPONENT} PROPERTIES IMPORTED_LOCATION "${WHISPER_STATIC_LIB_PATH}")
103+
else()
104+
set_target_properties(${COMPONENT} PROPERTIES IMPORTED_LOCATION "${WHISPER_SHARED_LIB_PATH}")
105+
set_target_properties(${COMPONENT} PROPERTIES IMPORTED_IMPLIB "${WHISPER_STATIC_LIB_PATH}")
95106
endif()
96-
set_target_properties(${COMPONENT} PROPERTIES IMPORTED_LOCATION "${WHISPER_SHARED_LIB_PATH}")
97-
set_target_properties(${COMPONENT} PROPERTIES IMPORTED_IMPLIB "${WHISPER_STATIC_LIB_PATH}")
107+
set_target_properties(${COMPONENT} PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/include")
108+
target_link_libraries(Whispercpp INTERFACE ${COMPONENT})
98109
endif()
99-
set_target_properties(${COMPONENT} PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/include")
100-
target_link_libraries(Whispercpp INTERFACE ${COMPONENT})
101-
# endif()
102110
endfunction()
103111

104112
function(ADD_WHISPER_RUNTIME_MODULE COMPONENT SOURCE_DIR LIB_DIR)

src/transcription-filter.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,13 @@ void enumerate_gpu_devices(transcription_filter_data *gf)
6464
// Load CPU backends
6565
auto path = std::filesystem::path(obs_get_module_binary_path(obs_current_module()))
6666
.parent_path();
67-
#ifndef _WIN32
68-
// Linux and mac have modules in a subdirectory, Windows does not
67+
#if !defined(_WIN32) && defined(__linux__)
68+
// Linux has modules in a subdirectory, Windows does not
6969
path /= "obs-localvocal";
70-
#endif // _WIN32
70+
#elif !defined(_WIN32)
71+
// MacOS is just weird
72+
path = path.parent_path() / "Frameworks";
73+
#endif
7174

7275
obs_log(LOG_INFO, "Loading dynamic backends from %s", path.string().c_str());
7376
ggml_backend_load_all_from_path(path.string().c_str());

0 commit comments

Comments
 (0)