1
1
require_relative "./toolchain/wit_bindgen"
2
2
3
3
module RubyWasm
4
- class Toolchain < :: Rake :: TaskLib
4
+ class Toolchain
5
5
attr_reader :name
6
6
7
7
def initialize
@@ -45,8 +45,9 @@ def self.check_executable(command)
45
45
46
46
%i[ cc ranlib ld ar ] . each do |name |
47
47
define_method ( name ) do
48
- @tools [ name ] ||= find_tool ( name )
49
- @tools [ name ]
48
+ @tools_cache ||= { }
49
+ @tools_cache [ name ] ||= find_tool ( name )
50
+ @tools_cache [ name ]
50
51
end
51
52
end
52
53
end
@@ -92,8 +93,7 @@ def initialize(
92
93
end
93
94
94
95
def find_tool ( name )
95
- unless File . exist? @tools [ name ]
96
- check_envvar ( "WASI_SDK_PATH" )
96
+ if !File . exist? ( @tools [ name ] ) && !ENV [ "WASI_SDK_PATH" ] . nil?
97
97
raise "missing tool '#{ name } ' at #{ @tools [ name ] } "
98
98
end
99
99
@tools [ name ]
@@ -103,18 +103,6 @@ def wasm_opt
103
103
@wasm_opt_path
104
104
end
105
105
106
- def define_task
107
- @task ||= fetch_task
108
- end
109
-
110
- def install_task
111
- @task
112
- end
113
-
114
- def binaryen_install_task
115
- @binaryen_install_task
116
- end
117
-
118
106
def download_url ( version_major , version_minor )
119
107
version = "#{ version_major } .#{ version_minor } "
120
108
assets = [
@@ -150,43 +138,37 @@ def binaryen_download_url(version)
150
138
"https://github.com/WebAssembly/binaryen/releases/download/version_#{ @binaryen_version } /#{ asset } "
151
139
end
152
140
153
- def fetch_task
154
- required = [ ]
155
- if @need_fetch_wasi_sdk
156
- wasi_sdk_tarball =
157
- File . join ( File . dirname ( @wasi_sdk_path ) , "wasi-sdk.tar.gz" )
158
- file wasi_sdk_tarball do
159
- mkdir_p File . dirname ( wasi_sdk_tarball )
160
- sh "curl -L -o #{ wasi_sdk_tarball } #{ self . download_url ( @version_major , @version_minor ) } "
161
- end
162
- wasi_sdk =
163
- file_create @wasi_sdk_path => wasi_sdk_tarball do
164
- mkdir_p @wasi_sdk_path
165
- sh "tar -C #{ @wasi_sdk_path } --strip-component 1 -xzf #{ wasi_sdk_tarball } "
166
- end
167
- required << wasi_sdk
141
+ def install_wasi_sdk
142
+ return unless @need_fetch_wasi_sdk
143
+ wasi_sdk_tarball =
144
+ File . join ( File . dirname ( @wasi_sdk_path ) , "wasi-sdk.tar.gz" )
145
+ unless File . exist? wasi_sdk_tarball
146
+ FileUtils . mkdir_p File . dirname ( wasi_sdk_tarball )
147
+ system "curl -L -o #{ wasi_sdk_tarball } #{ self . download_url ( @version_major , @version_minor ) } "
148
+ end
149
+ unless File . exist? @wasi_sdk_path
150
+ FileUtils . mkdir_p @wasi_sdk_path
151
+ system "tar -C #{ @wasi_sdk_path } --strip-component 1 -xzf #{ wasi_sdk_tarball } "
168
152
end
153
+ end
169
154
170
- if @need_fetch_binaryen
171
- binaryen_tarball =
172
- File . expand_path ( "../binaryen.tar.gz" , @binaryen_path )
173
- file binaryen_tarball do
174
- mkdir_p File . dirname ( binaryen_tarball )
175
- sh "curl -L -o #{ binaryen_tarball } #{ self . binaryen_download_url ( @binaryen_version ) } "
176
- end
155
+ def install_binaryen
156
+ return unless @need_fetch_binaryen
157
+ binaryen_tarball = File . expand_path ( "../binaryen.tar.gz" , @binaryen_path )
158
+ unless File . exist? binaryen_tarball
159
+ FileUtils . mkdir_p File . dirname ( binaryen_tarball )
160
+ system "curl -L -o #{ binaryen_tarball } #{ self . binaryen_download_url ( @binaryen_version ) } "
161
+ end
177
162
178
- binaryen =
179
- file_create @binaryen_path => binaryen_tarball do
180
- mkdir_p @binaryen_path
181
- sh "tar -C #{ @binaryen_path } --strip-component 1 -xzf #{ binaryen_tarball } "
182
- end
183
- @binaryen_install_task ||= task "binaryen:install" => [ binaryen ]
184
- required << binaryen
185
- else
186
- # no-op when already available
187
- @binaryen_install_task ||= task "binaryen:install"
163
+ unless File . exist? @binaryen_path
164
+ FileUtils . mkdir_p @binaryen_path
165
+ system "tar -C #{ @binaryen_path } --strip-component 1 -xzf #{ binaryen_tarball } "
188
166
end
189
- multitask "wasi-sdk:install" => required
167
+ end
168
+
169
+ def install
170
+ install_wasi_sdk
171
+ install_binaryen
190
172
end
191
173
end
192
174
@@ -196,12 +178,7 @@ def initialize
196
178
@name = "emscripten"
197
179
end
198
180
199
- def define_task
200
- @task ||= task "emscripten:install"
201
- end
202
-
203
- def install_task
204
- @task
181
+ def install
205
182
end
206
183
207
184
def find_tool ( name )
0 commit comments