mirror of
https://github.com/ggerganov/whisper.cpp.git
synced 2025-07-08 06:57:09 +02:00
* Add a test for segment * Check option existence * Use more proper variable to define build option * Assert Core ML enabled * Define Whisper::VERSION * Add test for Whisper::VERSION * Add signature of Whisper::VERSION
86 lines
2.2 KiB
Ruby
86 lines
2.2 KiB
Ruby
class Options
|
|
def initialize(cmake="cmake")
|
|
@cmake = cmake
|
|
@options = {}
|
|
|
|
configure
|
|
end
|
|
|
|
def to_s
|
|
@options
|
|
.reject {|name, (type, value)| value.nil?}
|
|
.collect {|name, (type, value)| "-D #{name}=#{value == true ? "ON" : value == false ? "OFF" : value.shellescape}"}
|
|
.join(" ")
|
|
end
|
|
|
|
def cmake_options
|
|
return @cmake_options if @cmake_options
|
|
|
|
output = nil
|
|
Dir.chdir __dir__ do
|
|
output = `#{@cmake.shellescape} -S sources -B build -L`
|
|
end
|
|
@cmake_options = output.lines.drop_while {|line| line.chomp != "-- Cache values"}.drop(1)
|
|
.filter_map {|line|
|
|
option, value = line.chomp.split("=", 2)
|
|
name, type = option.split(":", 2)
|
|
[
|
|
name,
|
|
[
|
|
type,
|
|
type == "BOOL" ? value == "ON" : value
|
|
]
|
|
]
|
|
}.to_h
|
|
end
|
|
|
|
private
|
|
|
|
def configure
|
|
cmake_options.each_pair do |name, (type, default_value)|
|
|
option = option_name(name)
|
|
value = type == "BOOL" ? enable_config(option) : arg_config("--#{option}")
|
|
@options[name] = [type, value]
|
|
end
|
|
|
|
configure_accelerate
|
|
configure_metal
|
|
configure_coreml
|
|
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
|
|
if enabled?("WHISPER_COREML")
|
|
$LDFLAGS << " -framework Foundation -framework CoreML"
|
|
$defs << "-DRUBY_WHISPER_USE_COREML"
|
|
end
|
|
end
|
|
|
|
def option_name(name)
|
|
name.downcase.gsub("_", "-")
|
|
end
|
|
|
|
def enabled?(option)
|
|
op = @options[option]
|
|
raise "Option not exist: #{option}" unless op
|
|
raise "Option not boolean: #{option}(#{op[0]})" unless op[0] == "BOOL"
|
|
if op[1].nil?
|
|
cmake_options[option][1]
|
|
else
|
|
op[1]
|
|
end
|
|
end
|
|
end
|