cmake_minimum_required(VERSION 3.21) project(searchi_speech_runtime LANGUAGES C CXX) find_package(Git REQUIRED) execute_process(COMMAND "${GIT_EXECUTABLE}" -C "${WHISPER_SOURCE}" rev-parse HEAD OUTPUT_VARIABLE revision OUTPUT_STRIP_TRAILING_WHITESPACE RESULT_VARIABLE status) if(NOT status EQUAL 0 OR NOT revision STREQUAL "d1be6fde11ac6e0407606b4e42fe72d34add8037") message(FATAL_ERROR "Provide the pinned whisper.cpp source checkout") endif() option(SEARCHI_INTERNAL_CPU "Internal Windows VM CPU tool, not distribution" OFF) set(GGML_NATIVE OFF CACHE BOOL "" FORCE) set(GGML_OPENMP OFF CACHE BOOL "" FORCE) set(WHISPER_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) set(WHISPER_BUILD_TESTS OFF CACHE BOOL "" FORCE) foreach(provider CUDA SYCL HIP BLAS) set(GGML_${provider} OFF CACHE BOOL "" FORCE) endforeach() if(SEARCHI_INTERNAL_CPU) set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE) set(GGML_BACKEND_DL OFF CACHE BOOL "" FORCE) set(GGML_VULKAN OFF CACHE BOOL "" FORCE) set(GGML_METAL OFF CACHE BOOL "" FORCE) else() set(BUILD_SHARED_LIBS ON CACHE BOOL "" FORCE) set(GGML_BACKEND_DL ON CACHE BOOL "" FORCE) if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(AMD64|amd64|x86_64)$") set(GGML_CPU_ALL_VARIANTS ON CACHE BOOL "" FORCE) endif() if(APPLE) set(GGML_METAL ON CACHE BOOL "" FORCE) set(GGML_VULKAN OFF CACHE BOOL "" FORCE) else() find_package(Vulkan REQUIRED COMPONENTS glslc) set(GGML_VULKAN ON CACHE BOOL "" FORCE) set(GGML_METAL OFF CACHE BOOL "" FORCE) endif() endif() if(UNIX AND NOT APPLE AND NOT SEARCHI_INTERNAL_CPU) # The staged worker and every dynamic backend live together. RUNPATH is # non-transitive, so each shared target needs its own relocatable lookup. set(CMAKE_INSTALL_RPATH "$ORIGIN") set(CMAKE_BUILD_WITH_INSTALL_RPATH ON) endif() add_subdirectory("${WHISPER_SOURCE}" whisper) target_compile_features(whisper PRIVATE cxx_std_17) add_executable(searchi-speech-worker worker.cpp) target_compile_features(searchi-speech-worker PRIVATE cxx_std_17) target_link_libraries(searchi-speech-worker PRIVATE whisper) if(NOT SEARCHI_INTERNAL_CPU) target_compile_definitions(searchi-speech-worker PRIVATE SEARCHI_DISTRIBUTION_AUTO=1) endif() if(MSVC) target_compile_options(searchi-speech-worker PRIVATE /utf-8) endif() if(APPLE) set_target_properties(searchi-speech-worker PROPERTIES BUILD_RPATH "$ORIGIN;@loader_path" INSTALL_RPATH "$ORIGIN;@loader_path") elseif(UNIX) set_target_properties(searchi-speech-worker PROPERTIES BUILD_RPATH "$ORIGIN" INSTALL_RPATH "$ORIGIN") endif()