File size: 2,336 Bytes
a2bce18
54b2b95
 
7895d75
54b2b95
470918e
 
ae07b89
7895d75
 
ae07b89
470918e
 
 
7895d75
ae07b89
7895d75
 
ae07b89
54b2b95
ae07b89
54b2b95
7895d75
54b2b95
 
7cb9a0e
 
 
54b2b95
 
 
 
 
82ceab0
54b2b95
 
7cb9a0e
 
82ceab0
 
 
470918e
 
 
 
 
 
 
 
 
 
 
 
 
 
82ceab0
 
7cb9a0e
54b2b95
 
 
91607b6
54b2b95
82ceab0
 
 
 
91607b6
82ceab0
acad667
4bf69ed
728defc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
acad667
 
 
4bf69ed
 
 
 
728defc
91607b6
728defc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
require 'rake/clean'
require "bundler/gem_tasks"
require "rake/testtask"
require_relative "extsources"

SOURCES_DIR = "ext/sources"

SOURCES = FileList[]

EXTSOURCES.each do |src|
  basename = src.pathmap("%f")
  dest = basename == "LICENSE" ? basename
                               : src.pathmap("%{\\.\\./\\.\\.,#{SOURCES_DIR}}p")
                                    .pathmap("%{\\.\\./javascript,#{SOURCES_DIR}/bindings/javascript}p")
  dir = dest.pathmap("%d")
  file src
  directory dir
  file dest => [src, dir] do |t|
    cp t.source, t.name
  end
  SOURCES.include dest
end

CLEAN.include SOURCES

SRC = FileList["ext/*.{c,cpp,h}"]

task build: SOURCES

directory "pkg"
CLOBBER.include "pkg"

LIB_NAME = "whisper".ext(RbConfig::CONFIG["DLEXT"])
SO_FILE = File.join("ext", LIB_NAME)
LIB_FILE = File.join("lib", LIB_NAME)

file "ext/Makefile" => SRC + ["ext/extconf.rb"] + SOURCES do |t|
  chdir "ext" do
    ruby "extconf.rb"
  end
end
if File.exist? "ext/Makefile"
  task :make_clean do
    cd "ext" do
      sh "make", "clean"
    end
  end
  task clean: :make_clean
  task :make_distclean do
    cd "ext" do
      sh "make", "distclean"
    end
  end
  task clobber: :make_distclean
end

file SO_FILE => "ext/Makefile" do |t|
  chdir "ext" do
    sh "make"
  end
end
CLEAN.include SO_FILE

directory "lib"
file LIB_FILE => [SO_FILE, "lib"] do |t|
  copy t.source, t.name
end
CLEAN.include LIB_FILE

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']}"
file TEST_MEMORY_VIEW => "test/jfk_reader/jfk_reader.c" do |t|
  chdir "test/jfk_reader" do
    ruby "extconf.rb"
    sh "make"
  end
end
CLEAN.include TEST_MEMORY_VIEW

task test: [LIB_FILE, TEST_MEMORY_VIEW, TEST_FIXTURE_AUDIO]