require 'rake/clean' require "bundler/gem_tasks" require "pathname" require "yaml" require "rake/testtask" extsources = YAML.load_file("extsources.yaml") SOURCES = FileList[] extsources.each do |src| basename = src.pathmap("%f") dest = basename == "LICENSE" ? basename : basename.pathmap("ext/%f") file src file dest => src do |t| cp t.source, t.name end SOURCES.include dest end CLEAN.include SOURCES CLEAN.include FileList[ "ext/*.o", "ext/*.metal", "ext/whisper.{so,bundle,dll}", "ext/depend" ] task build: FileList[ "ext/Makefile", "ext/ruby_whisper.h", "ext/ruby_whisper.cpp", "whispercpp.gemspec", ] directory "pkg" CLOBBER.include "pkg" TEST_MODEL = "../../models/ggml-base.en.bin" LIB_NAME = "whisper".ext(RbConfig::CONFIG["DLEXT"]) SO_FILE = File.join("ext", LIB_NAME) LIB_FILE = File.join("lib", LIB_NAME) file "ext/Makefile" => ["ext/extconf.rb", "ext/ruby_whisper.h", "ext/ruby_whisper.cpp"] + SOURCES do |t| Dir.chdir "ext" do ruby "extconf.rb" end end file SO_FILE => "ext/Makefile" do |t| Dir.chdir "ext" do sh "make" end end CLEAN.include LIB_FILE directory "lib" file LIB_FILE => [SO_FILE, "lib"] do |t| copy t.source, t.name end Rake::TestTask.new do |t| t.test_files = FileList["tests/test_*.rb"] end task test: [TEST_MODEL, LIB_FILE] file TEST_MODEL do Dir.chdir "../.." do sh "./models/download-ggml-model.sh base.en" end end