mirror of
https://github.com/ggerganov/whisper.cpp.git
synced 2024-11-07 08:34:37 +01:00
147 lines
4.5 KiB
CMake
147 lines
4.5 KiB
CMake
# dependencies
|
|
|
|
find_package(Threads REQUIRED)
|
|
|
|
# third-party
|
|
|
|
if (WHISPER_SDL2)
|
|
# SDL2
|
|
find_package(SDL2 REQUIRED)
|
|
|
|
string(STRIP "${SDL2_LIBRARIES}" SDL2_LIBRARIES)
|
|
|
|
message(STATUS "SDL2_INCLUDE_DIRS = ${SDL2_INCLUDE_DIRS}")
|
|
message(STATUS "SDL2_LIBRARIES = ${SDL2_LIBRARIES}")
|
|
endif()
|
|
|
|
if (WHISPER_CLBLAST)
|
|
find_package(CLBlast REQUIRED)
|
|
endif()
|
|
|
|
# common
|
|
|
|
set(TARGET common)
|
|
|
|
unset(COMMON_EXTRA_LIBS)
|
|
|
|
if (WHISPER_FFMPEG)
|
|
# As of cmake 3.27, there is no official cmake support for FindFFmpeg.
|
|
# Consequnelty we added a FindFFmpeg.cmake script the cmake subfolder:
|
|
# whisper.cpp does not need the full ffmpeg libs, just AVFORMAT AVCODEC AVUTIL SWRESAMPLE
|
|
# libswresample performs highly optimized audio resampling, rematrixing and sample format conversion operations
|
|
# libavcodec provides a generic encoding/decoding framework and contains multiple decoders and encoders for audio, video and subtitle streams, and several bitstream filters.
|
|
# libavformat provides a generic framework for multiplexing and demultiplexing (muxing and demuxing) audio, video and subtitle streams.
|
|
find_package(FFmpeg REQUIRED)
|
|
|
|
if (NOT ${FFMPEG_FOUND})
|
|
message(FATAL_ERROR "Cannot find ffmpeg libs/headers")
|
|
endif()
|
|
|
|
message(STATUS "Found ffmpeg libs: ${FFMPEG_LIBRARIES}")
|
|
message(STATUS "Found ffmpeg headers in: ${FFMPEG_INCLUDE_DIRS}")
|
|
message(STATUS "ffmpeg definitions: ${FFMPEG_DEFINITIONS}")
|
|
message(STATUS "Found avformat ${AVFORMAT_VERSION}")
|
|
|
|
include_directories(${FFMPEG_INCLUDE_DIRS})
|
|
add_compile_definitions(WHISPER_FFMPEG)
|
|
|
|
list(APPEND COMMON_EXTRA_LIBS ${FFMPEG_LIBRARIES})
|
|
|
|
set(COMMON_SOURCES_FFMPEG ffmpeg-transcode.cpp)
|
|
endif()
|
|
|
|
|
|
add_library(${TARGET} STATIC
|
|
common.h
|
|
common.cpp
|
|
common-ggml.h
|
|
common-ggml.cpp
|
|
grammar-parser.h
|
|
grammar-parser.cpp
|
|
${COMMON_SOURCES_FFMPEG}
|
|
)
|
|
|
|
include(DefaultTargetOptions)
|
|
|
|
target_link_libraries(${TARGET} PRIVATE whisper ${COMMON_EXTRA_LIBS})
|
|
|
|
set_target_properties(${TARGET} PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
|
set_target_properties(${TARGET} PROPERTIES FOLDER "libs")
|
|
|
|
if (WHISPER_SDL2)
|
|
# common-sdl
|
|
|
|
set(TARGET common-sdl)
|
|
|
|
add_library(${TARGET} STATIC
|
|
common-sdl.h
|
|
common-sdl.cpp
|
|
)
|
|
|
|
include(DefaultTargetOptions)
|
|
|
|
target_include_directories(${TARGET} PUBLIC ${SDL2_INCLUDE_DIRS})
|
|
target_link_libraries (${TARGET} PRIVATE ${SDL2_LIBRARIES})
|
|
|
|
set_target_properties(${TARGET} PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
|
set_target_properties(${TARGET} PROPERTIES FOLDER "libs")
|
|
endif()
|
|
|
|
# add json lib
|
|
add_library(json_cpp INTERFACE)
|
|
target_include_directories(json_cpp INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})
|
|
|
|
# examples
|
|
|
|
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
|
|
|
|
if (EMSCRIPTEN)
|
|
add_subdirectory(whisper.wasm)
|
|
set_target_properties(libmain PROPERTIES FOLDER "libs")
|
|
add_subdirectory(stream.wasm)
|
|
set_target_properties(libstream PROPERTIES FOLDER "libs")
|
|
add_subdirectory(command.wasm)
|
|
set_target_properties(libcommand PROPERTIES FOLDER "libs")
|
|
add_subdirectory(talk.wasm)
|
|
set_target_properties(libtalk PROPERTIES FOLDER "libs")
|
|
add_subdirectory(bench.wasm)
|
|
set_target_properties(libbench PROPERTIES FOLDER "libs")
|
|
elseif(CMAKE_JS_VERSION)
|
|
add_subdirectory(addon.node)
|
|
set_target_properties(addon.node PROPERTIES FOLDER "examples")
|
|
else()
|
|
add_subdirectory(main)
|
|
set_target_properties(main PROPERTIES FOLDER "examples")
|
|
if (WHISPER_SDL2)
|
|
add_subdirectory(stream)
|
|
set_target_properties(stream PROPERTIES FOLDER "examples")
|
|
endif (WHISPER_SDL2)
|
|
add_subdirectory(server)
|
|
set_target_properties(server PROPERTIES FOLDER "examples")
|
|
if (WHISPER_SDL2)
|
|
add_subdirectory(command)
|
|
set_target_properties(command PROPERTIES FOLDER "examples")
|
|
endif (WHISPER_SDL2)
|
|
add_subdirectory(bench)
|
|
set_target_properties(bench PROPERTIES FOLDER "examples")
|
|
add_subdirectory(quantize)
|
|
set_target_properties(quantize PROPERTIES FOLDER "examples")
|
|
if (WHISPER_SDL2)
|
|
add_subdirectory(talk)
|
|
set_target_properties(talk PROPERTIES FOLDER "examples")
|
|
add_subdirectory(talk-llama)
|
|
set_target_properties(talk-llama PROPERTIES FOLDER "examples")
|
|
add_subdirectory(lsp)
|
|
set_target_properties(lsp PROPERTIES FOLDER "examples")
|
|
if (GGML_SYCL)
|
|
add_subdirectory(sycl)
|
|
set_target_properties(sycl PROPERTIES FOLDER "examples")
|
|
endif()
|
|
endif (WHISPER_SDL2)
|
|
endif()
|
|
|
|
if (WHISPER_SDL2)
|
|
add_subdirectory(wchess)
|
|
set_target_properties(wchess PROPERTIES FOLDER "examples")
|
|
endif (WHISPER_SDL2)
|