mirror of
https://github.com/ggerganov/whisper.cpp.git
synced 2025-06-25 12:11:36 +02:00
ruby : specify Apple frameworks explicitly on build (#3270)
* Add Apple frameworks to $LDFLAGS when needed * Add utility method to Options * Remove unnecessary propaty date from gemspec * Add Apple frameworks for CoreML build * Add Accelerate framework only for Apple platform * Fix ZipURI#cache signature * Download test fixtures if needed
This commit is contained in:
parent
e6c10cf3d5
commit
cead8f5357
1
bindings/ruby/.gitignore
vendored
1
bindings/ruby/.gitignore
vendored
@ -6,3 +6,4 @@ ext/ggml/
|
|||||||
ext/include/
|
ext/include/
|
||||||
ext/scripts/
|
ext/scripts/
|
||||||
ext/src/
|
ext/src/
|
||||||
|
test/fixtures/
|
||||||
|
@ -69,6 +69,21 @@ CLEAN.include LIB_FILE
|
|||||||
|
|
||||||
Rake::TestTask.new
|
Rake::TestTask.new
|
||||||
|
|
||||||
|
TEST_FIXTURE_AUDIO = "test/fixtures/jfk.wav"
|
||||||
|
TEST_FIXTURE_AUDIO_SRC = File.expand_path(File.join(__dir__, "..", "..", "samples", "jfk.wav"))
|
||||||
|
TEST_FIXTURE_AUDIO_DIR = TEST_FIXTURE_AUDIO.pathmap("%d")
|
||||||
|
directory TEST_FIXTURE_AUDIO_DIR
|
||||||
|
if File.exist? TEST_FIXTURE_AUDIO_SRC
|
||||||
|
file TEST_FIXTURE_AUDIO => [TEST_FIXTURE_AUDIO_SRC, TEST_FIXTURE_AUDIO_DIR] do |t|
|
||||||
|
symlink t.source, t.name
|
||||||
|
end
|
||||||
|
else
|
||||||
|
require "open-uri"
|
||||||
|
file TEST_FIXTURE_AUDIO => TEST_FIXTURE_AUDIO_DIR do |t|
|
||||||
|
File.write t.name, URI("https://github.com/ggml-org/whisper.cpp/raw/refs/heads/master/samples/jfk.wav").read
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
TEST_MEMORY_VIEW = "test/jfk_reader/jfk_reader.#{RbConfig::CONFIG['DLEXT']}"
|
TEST_MEMORY_VIEW = "test/jfk_reader/jfk_reader.#{RbConfig::CONFIG['DLEXT']}"
|
||||||
file TEST_MEMORY_VIEW => "test/jfk_reader/jfk_reader.c" do |t|
|
file TEST_MEMORY_VIEW => "test/jfk_reader/jfk_reader.c" do |t|
|
||||||
chdir "test/jfk_reader" do
|
chdir "test/jfk_reader" do
|
||||||
@ -76,6 +91,6 @@ file TEST_MEMORY_VIEW => "test/jfk_reader/jfk_reader.c" do |t|
|
|||||||
sh "make"
|
sh "make"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
CLEAN.include "test/jfk_reader/jfk_reader.{o,#{RbConfig::CONFIG['DLEXT']}}"
|
CLEAN.include TEST_MEMORY_VIEW
|
||||||
|
|
||||||
task test: [LIB_FILE, TEST_MEMORY_VIEW]
|
task test: [LIB_FILE, TEST_MEMORY_VIEW, TEST_FIXTURE_AUDIO]
|
||||||
|
@ -43,19 +43,40 @@ class Options
|
|||||||
@options[name] = [type, value]
|
@options[name] = [type, value]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
configure_accelerate
|
||||||
|
configure_metal
|
||||||
configure_coreml
|
configure_coreml
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# See ggml/src/ggml-cpu/CMakeLists.txt
|
||||||
|
def configure_accelerate
|
||||||
|
if RUBY_PLATFORM.match?(/darwin/) && enabled?("GGML_ACCELERATE")
|
||||||
|
$LDFLAGS << " -framework Accelerate"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# See ggml/src/ggml-metal/CMakeLists.txt
|
||||||
|
def configure_metal
|
||||||
|
$LDFLAGS << " -framework Foundation -framework Metal -framework MetalKit" if enabled?("GGML_METAL")
|
||||||
|
end
|
||||||
|
|
||||||
|
# See src/CmakeLists.txt
|
||||||
def configure_coreml
|
def configure_coreml
|
||||||
use_coreml = if @options["WHISPER_COREML"][1].nil?
|
if enabled?("WHISPER_COREML")
|
||||||
cmake_options["WHISPER_COREML"][1]
|
$LDFLAGS << " -framework Foundation -framework CoreML"
|
||||||
else
|
$CPPFLAGS << " -DRUBY_WHISPER_USE_COREML"
|
||||||
@options["WHISPER_COREML"][1]
|
end
|
||||||
end
|
|
||||||
$CPPFLAGS << " -DRUBY_WHISPER_USE_COREML" if use_coreml
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def option_name(name)
|
def option_name(name)
|
||||||
name.downcase.gsub("_", "-")
|
name.downcase.gsub("_", "-")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def enabled?(option)
|
||||||
|
if @options[option][1].nil?
|
||||||
|
cmake_options[option][1]
|
||||||
|
else
|
||||||
|
@options[option][1]
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
@ -132,13 +132,13 @@ module Whisper
|
|||||||
|
|
||||||
class ZipURI < URI
|
class ZipURI < URI
|
||||||
def cache
|
def cache
|
||||||
zip_path = Pathname(super)
|
zip_path = super
|
||||||
dest = unzipped_path
|
dest = unzipped_path
|
||||||
return if dest.exist? && dest.mtime >= zip_path.mtime
|
return if dest.exist? && dest.mtime >= zip_path.mtime
|
||||||
escaping dest do
|
escaping dest do
|
||||||
system "unzip", "-q", "-d", zip_path.dirname.to_path, zip_path.to_path, exception: true
|
system "unzip", "-q", "-d", zip_path.dirname.to_path, zip_path.to_path, exception: true
|
||||||
end
|
end
|
||||||
zip_path.to_path
|
zip_path
|
||||||
end
|
end
|
||||||
|
|
||||||
def clear_cache
|
def clear_cache
|
||||||
|
@ -412,7 +412,7 @@ module Whisper
|
|||||||
end
|
end
|
||||||
|
|
||||||
class ZipURI < URI
|
class ZipURI < URI
|
||||||
def cache: () -> String
|
def cache: () -> Pathname
|
||||||
def clear_cache: () -> void
|
def clear_cache: () -> void
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -3,7 +3,7 @@ require "whisper"
|
|||||||
require_relative "jfk_reader/jfk_reader"
|
require_relative "jfk_reader/jfk_reader"
|
||||||
|
|
||||||
class TestBase < Test::Unit::TestCase
|
class TestBase < Test::Unit::TestCase
|
||||||
AUDIO = File.join(__dir__, "..", "..", "..", "samples", "jfk.wav")
|
AUDIO = File.join(__dir__, "fixtures", "jfk.wav")
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
def whisper
|
def whisper
|
||||||
|
@ -4,7 +4,6 @@ Gem::Specification.new do |s|
|
|||||||
s.name = "whispercpp"
|
s.name = "whispercpp"
|
||||||
s.authors = ["Georgi Gerganov", "Todd A. Fisher"]
|
s.authors = ["Georgi Gerganov", "Todd A. Fisher"]
|
||||||
s.version = '1.3.3'
|
s.version = '1.3.3'
|
||||||
s.date = '2025-06-10'
|
|
||||||
s.description = %q{High-performance inference of OpenAI's Whisper automatic speech recognition (ASR) model via Ruby}
|
s.description = %q{High-performance inference of OpenAI's Whisper automatic speech recognition (ASR) model via Ruby}
|
||||||
s.email = 'todd.fisher@gmail.com'
|
s.email = 'todd.fisher@gmail.com'
|
||||||
s.extra_rdoc_files = ['LICENSE', 'README.md']
|
s.extra_rdoc_files = ['LICENSE', 'README.md']
|
||||||
|
Loading…
x
Reference in New Issue
Block a user