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: SOURCES + FileList[ "ext/extconf.rb", "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"]) LIB_FILE = File.join("lib", LIB_NAME) directory "lib" task LIB_FILE => SOURCES + ["lib"] do |t| Dir.chdir "ext" do sh "ruby extconf.rb" sh "make" end mv "ext/#{LIB_NAME}", t.name end CLEAN.include LIB_FILE 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