Skip to content

Commit 7555a59

Browse files
Remove rake dependency from toolchain product
1 parent cab5a13 commit 7555a59

File tree

4 files changed

+38
-60
lines changed

4 files changed

+38
-60
lines changed

lib/ruby_wasm/build_system/product/crossruby.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ def build_exts
130130
def build(remake: false, reconfigure: false)
131131
FileUtils.mkdir_p dest_dir
132132
FileUtils.mkdir_p build_dir
133+
@toolchain.install
133134
[@source, @baseruby, @libyaml, @zlib, @wasi_vfs].each(&:build)
134135
dep_tasks.each(&:invoke)
135136
configure(reconfigure: reconfigure)
@@ -196,7 +197,7 @@ def baseruby_path
196197
end
197198

198199
def dep_tasks
199-
[@toolchain.install_task] + @dep_tasks
200+
@dep_tasks
200201
end
201202

202203
def configure_args(build_triple, toolchain)

lib/ruby_wasm/build_system/toolchain.rb

Lines changed: 33 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
require_relative "./toolchain/wit_bindgen"
22

33
module RubyWasm
4-
class Toolchain < ::Rake::TaskLib
4+
class Toolchain
55
attr_reader :name
66

77
def initialize
@@ -45,8 +45,9 @@ def self.check_executable(command)
4545

4646
%i[cc ranlib ld ar].each do |name|
4747
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]
5051
end
5152
end
5253
end
@@ -92,8 +93,7 @@ def initialize(
9293
end
9394

9495
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?
9797
raise "missing tool '#{name}' at #{@tools[name]}"
9898
end
9999
@tools[name]
@@ -103,18 +103,6 @@ def wasm_opt
103103
@wasm_opt_path
104104
end
105105

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-
118106
def download_url(version_major, version_minor)
119107
version = "#{version_major}.#{version_minor}"
120108
assets = [
@@ -150,43 +138,37 @@ def binaryen_download_url(version)
150138
"https://github.com/WebAssembly/binaryen/releases/download/version_#{@binaryen_version}/#{asset}"
151139
end
152140

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}"
168152
end
153+
end
169154

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
177162

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}"
188166
end
189-
multitask "wasi-sdk:install" => required
167+
end
168+
169+
def install
170+
install_wasi_sdk
171+
install_binaryen
190172
end
191173
end
192174

@@ -196,12 +178,7 @@ def initialize
196178
@name = "emscripten"
197179
end
198180

199-
def define_task
200-
@task ||= task "emscripten:install"
201-
end
202-
203-
def install_task
204-
@task
181+
def install
205182
end
206183

207184
def find_tool(name)

lib/ruby_wasm/rake_task.rb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,7 @@ def initialize(
4040
@target = target
4141
@build_dir = build_dir || File.join(Dir.pwd, "build")
4242
@rubies_dir = rubies_dir || File.join(Dir.pwd, "rubies")
43-
@toolchain =
44-
add_product (toolchain || RubyWasm::Toolchain.get(target, @build_dir))
43+
@toolchain = (toolchain || RubyWasm::Toolchain.get(target, @build_dir))
4544

4645
@libyaml = RubyWasm::LibYAMLProduct.new(@build_dir, @target, @toolchain)
4746
@zlib = RubyWasm::ZlibProduct.new(@build_dir, @target, @toolchain)

tasks/packaging.rake

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,9 @@ namespace :npm do
2020
pkg_dir = "#{Dir.pwd}/packages/npm-packages/#{pkg[:name]}"
2121

2222
desc "Build npm package #{pkg[:name]}"
23-
task pkg[:name] => ["build:#{pkg[:build]}", wasi_sdk.binaryen_install_task] do
23+
task pkg[:name] => ["build:#{pkg[:build]}"] do
2424
wasi_vfs.install_cli
25+
wasi_sdk.install_binaryen
2526
sh "npm ci", chdir: pkg_dir
2627
sh tools, "#{pkg_dir}/build-package.sh #{base_dir}/rubies/#{pkg[:build]}"
2728
sh "npm pack", chdir: pkg_dir

0 commit comments

Comments
 (0)