ruby_wasm 2.6.1-x86_64-linux → 2.6.2-x86_64-linux
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +1 -1
- data/README.md +1 -1
- data/Rakefile +3 -2
- data/docs/cheat_sheet.md +8 -8
- data/lib/ruby_wasm/3.1/ruby_wasm.so +0 -0
- data/lib/ruby_wasm/3.2/ruby_wasm.so +0 -0
- data/lib/ruby_wasm/3.3/ruby_wasm.so +0 -0
- data/lib/ruby_wasm/build/product/crossruby.rb +5 -2
- data/lib/ruby_wasm/build/toolchain.rb +1 -1
- data/lib/ruby_wasm/cli.rb +4 -2
- data/lib/ruby_wasm/packager/core.rb +31 -29
- data/lib/ruby_wasm/packager.rb +17 -2
- data/lib/ruby_wasm/version.rb +1 -1
- data/package-lock.json +840 -386
- data/package.json +2 -2
- data/rakelib/packaging.rake +4 -3
- data/sig/ruby_wasm/build.rbs +1 -0
- data/sig/ruby_wasm/ext.rbs +8 -0
- data/sig/ruby_wasm/packager.rbs +2 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 47a8c9ca7e203b1b2d4761e7879c5ae71c20866c917162a5298019139442c1bc
|
4
|
+
data.tar.gz: 0e4141902cf843831dab9540b19290f58061b413d1d0a55e01d4c8fa066acc5c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f13dc14ad582e8e80c1ed84d054f351145f95eb8659884e51040c027457e05d0fd91f0b547498b16112cd881e1b4d74cdc0928505d09aeeb937a4aeccbd4c537
|
7
|
+
data.tar.gz: 0d0d66395d4ad20425897b33c153ad5ebabce1dd7daea5bd05b20bc3efb3d8d6f1c9e6dbb00d85227e8d2d54bb5f1e8ba5cc5f1515103fed7a66f495c221d7d9
|
data/CONTRIBUTING.md
CHANGED
@@ -127,5 +127,5 @@ $ npm install --save @ruby/wasm-wasi@latest
|
|
127
127
|
# or if you want the nightly snapshot
|
128
128
|
$ npm install --save @ruby/wasm-wasi@next
|
129
129
|
# or you can specify the exact snapshot version
|
130
|
-
$ npm install --save @ruby/wasm-wasi@2.6.
|
130
|
+
$ npm install --save @ruby/wasm-wasi@2.6.2-2024-06-29-a
|
131
131
|
```
|
data/README.md
CHANGED
@@ -23,7 +23,7 @@ Create and save `index.html` page with the following contents:
|
|
23
23
|
|
24
24
|
```html
|
25
25
|
<html>
|
26
|
-
<script src="https://cdn.jsdelivr.net/npm/@ruby/3.3-wasm-wasi@2.6.
|
26
|
+
<script src="https://cdn.jsdelivr.net/npm/@ruby/3.3-wasm-wasi@2.6.2/dist/browser.script.iife.js"></script>
|
27
27
|
<script type="text/ruby">
|
28
28
|
require "js"
|
29
29
|
|
data/Rakefile
CHANGED
@@ -68,10 +68,11 @@ class BuildTask < Struct.new(:name, :target, :build_command)
|
|
68
68
|
def ruby_cache_key
|
69
69
|
return @key if @key
|
70
70
|
require "open3"
|
71
|
+
env = { "RUBY_WASM_ROOT" => LIB_ROOT }
|
71
72
|
cmd = build_command + ["--print-ruby-cache-key"]
|
72
|
-
stdout, status = Open3.capture2(*cmd)
|
73
|
+
stdout, status = Open3.capture2(env, *cmd)
|
73
74
|
unless status.success?
|
74
|
-
raise "Command failed with status (#{status.exitstatus}): #{cmd.join ""}"
|
75
|
+
raise "Command failed with status (#{status.exitstatus}): #{cmd.join " "}"
|
75
76
|
end
|
76
77
|
require "json"
|
77
78
|
@key = JSON.parse(stdout)
|
data/docs/cheat_sheet.md
CHANGED
@@ -38,7 +38,7 @@ The easiest way to run Ruby on browser is to use `browser.script.iife.js` script
|
|
38
38
|
|
39
39
|
```html
|
40
40
|
<html>
|
41
|
-
<script src="https://cdn.jsdelivr.net/npm/@ruby/3.3-wasm-wasi@2.6.
|
41
|
+
<script src="https://cdn.jsdelivr.net/npm/@ruby/3.3-wasm-wasi@2.6.2/dist/browser.script.iife.js"></script>
|
42
42
|
<script type="text/ruby">
|
43
43
|
require "js"
|
44
44
|
JS.global[:document].write "Hello, world!"
|
@@ -51,8 +51,8 @@ If you want to control Ruby VM from JavaScript, you can use `@ruby/wasm-wasi` pa
|
|
51
51
|
```html
|
52
52
|
<html>
|
53
53
|
<script type="module">
|
54
|
-
import { DefaultRubyVM } from "https://cdn.jsdelivr.net/npm/@ruby/wasm-wasi@2.6.
|
55
|
-
const response = await fetch("https://cdn.jsdelivr.net/npm/@ruby/3.3-wasm-wasi@2.6.
|
54
|
+
import { DefaultRubyVM } from "https://cdn.jsdelivr.net/npm/@ruby/wasm-wasi@2.6.2/dist/browser/+esm";
|
55
|
+
const response = await fetch("https://cdn.jsdelivr.net/npm/@ruby/3.3-wasm-wasi@2.6.2/dist/ruby+stdlib.wasm");
|
56
56
|
const module = await WebAssembly.compileStreaming(response);
|
57
57
|
const { vm } = await DefaultRubyVM(module);
|
58
58
|
|
@@ -69,11 +69,11 @@ If you want to control Ruby VM from JavaScript, you can use `@ruby/wasm-wasi` pa
|
|
69
69
|
|
70
70
|
```html
|
71
71
|
<html>
|
72
|
-
<script src="https://cdn.jsdelivr.net/npm/@ruby/wasm-wasi@2.6.
|
72
|
+
<script src="https://cdn.jsdelivr.net/npm/@ruby/wasm-wasi@2.6.2/dist/browser.umd.js"></script>
|
73
73
|
<script>
|
74
74
|
const main = async () => {
|
75
75
|
const { DefaultRubyVM } = window["ruby-wasm-wasi"];
|
76
|
-
const response = await fetch("https://cdn.jsdelivr.net/npm/@ruby/3.3-wasm-wasi@2.6.
|
76
|
+
const response = await fetch("https://cdn.jsdelivr.net/npm/@ruby/3.3-wasm-wasi@2.6.2/dist/ruby+stdlib.wasm");
|
77
77
|
const module = await WebAssembly.compileStreaming(response);
|
78
78
|
const { vm } = await DefaultRubyVM(module);
|
79
79
|
|
@@ -128,7 +128,7 @@ end
|
|
128
128
|
|
129
129
|
```html
|
130
130
|
<html>
|
131
|
-
<script src="https://cdn.jsdelivr.net/npm/@ruby/3.3-wasm-wasi@2.6.
|
131
|
+
<script src="https://cdn.jsdelivr.net/npm/@ruby/3.3-wasm-wasi@2.6.2/dist/browser.script.iife.js"></script>
|
132
132
|
<script type="text/ruby" data-eval="async">
|
133
133
|
require "js"
|
134
134
|
|
@@ -143,8 +143,8 @@ Or using `@ruby/wasm-wasi` package API `RubyVM#evalAsync`:
|
|
143
143
|
```html
|
144
144
|
<html>
|
145
145
|
<script type="module">
|
146
|
-
import { DefaultRubyVM } from "https://cdn.jsdelivr.net/npm/@ruby/wasm-wasi@2.6.
|
147
|
-
const response = await fetch("https://cdn.jsdelivr.net/npm/@ruby/3.3-wasm-wasi@2.6.
|
146
|
+
import { DefaultRubyVM } from "https://cdn.jsdelivr.net/npm/@ruby/wasm-wasi@2.6.2/dist/browser/+esm";
|
147
|
+
const response = await fetch("https://cdn.jsdelivr.net/npm/@ruby/3.3-wasm-wasi@2.6.2/dist/ruby+stdlib.wasm");
|
148
148
|
const module = await WebAssembly.compileStreaming(response);
|
149
149
|
const { vm } = await DefaultRubyVM(module);
|
150
150
|
|
Binary file
|
Binary file
|
Binary file
|
@@ -71,7 +71,6 @@ module RubyWasm
|
|
71
71
|
return
|
72
72
|
end
|
73
73
|
objdir = product_build_dir crossruby
|
74
|
-
source = crossruby.source
|
75
74
|
rbconfig_rb = Dir.glob(File.join(crossruby.dest_dir, "usr/local/lib/ruby/*/wasm32-wasi/rbconfig.rb")).first
|
76
75
|
raise "rbconfig.rb not found" unless rbconfig_rb
|
77
76
|
extconf_args = [
|
@@ -80,7 +79,7 @@ module RubyWasm
|
|
80
79
|
"--target-rbconfig=#{rbconfig_rb}",
|
81
80
|
]
|
82
81
|
extconf_args << "--enable-component-model" if @features.support_component_model?
|
83
|
-
executor.system
|
82
|
+
executor.system crossruby.baseruby_path, *extconf_args
|
84
83
|
end
|
85
84
|
|
86
85
|
def do_legacy_extconf(executor, crossruby)
|
@@ -359,6 +358,10 @@ module RubyWasm
|
|
359
358
|
args << %Q(wasmoptflags=#{@wasmoptflags.join(" ")})
|
360
359
|
end
|
361
360
|
args << "--disable-install-doc"
|
361
|
+
unless @params.target.pic?
|
362
|
+
# TODO: Remove this hack after dropping Ruby 3.2 support
|
363
|
+
args << "ac_cv_func_dlopen=no"
|
364
|
+
end
|
362
365
|
args
|
363
366
|
end
|
364
367
|
end
|
data/lib/ruby_wasm/cli.rb
CHANGED
@@ -216,7 +216,9 @@ module RubyWasm
|
|
216
216
|
local_source = { type: "local", path: src_name }
|
217
217
|
# @type var local_source: RubyWasm::Packager::build_source
|
218
218
|
local_source = local_source.merge(name: "local", patches: [])
|
219
|
-
|
219
|
+
# FIXME: We should have a way to specify extensions to be included by users.
|
220
|
+
# For now, assume all default extensions available in the head revision are available.
|
221
|
+
return [local_source, RubyWasm::Packager::ALL_DEFAULT_EXTS]
|
220
222
|
end
|
221
223
|
# Otherwise, it's an unknown source.
|
222
224
|
raise(
|
@@ -242,7 +244,7 @@ module RubyWasm
|
|
242
244
|
},
|
243
245
|
"3.3" => {
|
244
246
|
type: "tarball",
|
245
|
-
url: "https://cache.ruby-lang.org/pub/ruby/3.3/ruby-3.3.
|
247
|
+
url: "https://cache.ruby-lang.org/pub/ruby/3.3/ruby-3.3.3.tar.gz",
|
246
248
|
all_default_exts: "bigdecimal,cgi/escape,continuation,coverage,date,dbm,digest/bubblebabble,digest,digest/md5,digest/rmd160,digest/sha1,digest/sha2,etc,fcntl,fiber,gdbm,json,json/generator,json/parser,nkf,objspace,pathname,psych,racc/cparse,rbconfig/sizeof,ripper,stringio,strscan,monitor,zlib,openssl",
|
247
249
|
},
|
248
250
|
"3.2" => {
|
@@ -67,6 +67,14 @@ class RubyWasm::Packager::Core
|
|
67
67
|
use_js_gem ? "reactor" : "command"
|
68
68
|
end
|
69
69
|
|
70
|
+
def with_unbundled_env(&block)
|
71
|
+
__skip__ = if defined?(Bundler)
|
72
|
+
Bundler.with_unbundled_env(&block)
|
73
|
+
else
|
74
|
+
block.call
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
70
78
|
def cache_key(digest)
|
71
79
|
raise NotImplementedError
|
72
80
|
end
|
@@ -87,27 +95,22 @@ class RubyWasm::Packager::Core
|
|
87
95
|
end
|
88
96
|
build.crossruby.clean(executor) if options[:clean]
|
89
97
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
end
|
98
|
+
self.with_unbundled_env do
|
99
|
+
build.crossruby.build(
|
100
|
+
executor,
|
101
|
+
remake: options[:remake],
|
102
|
+
reconfigure: options[:reconfigure]
|
103
|
+
)
|
104
|
+
end
|
98
105
|
|
99
|
-
__skip__ =
|
100
|
-
if defined?(Bundler)
|
101
|
-
Bundler.with_unbundled_env(&do_build)
|
102
|
-
else
|
103
|
-
do_build.call
|
104
|
-
end
|
105
106
|
build.crossruby.artifact
|
106
107
|
end
|
107
108
|
|
108
109
|
def build_gem_exts(executor, gem_home)
|
109
110
|
build = derive_build
|
110
|
-
self.
|
111
|
+
self.with_unbundled_env do
|
112
|
+
self._build_gem_exts(executor, build, gem_home)
|
113
|
+
end
|
111
114
|
end
|
112
115
|
|
113
116
|
def link_gem_exts(executor, ruby_root, gem_home, module_bytes)
|
@@ -178,6 +181,12 @@ class RubyWasm::Packager::Core
|
|
178
181
|
end
|
179
182
|
|
180
183
|
def _build_gem_exts(executor, build, gem_home)
|
184
|
+
build.toolchain.install
|
185
|
+
baseruby = build.baseruby
|
186
|
+
unless Dir.exist?(baseruby.install_dir)
|
187
|
+
baseruby.build(executor)
|
188
|
+
end
|
189
|
+
|
181
190
|
exts = specs_with_extensions.flat_map do |spec, exts|
|
182
191
|
exts.map do |ext|
|
183
192
|
ext_feature = File.dirname(ext) # e.g. "ext/cgi/escape"
|
@@ -269,21 +278,14 @@ class RubyWasm::Packager::Core
|
|
269
278
|
end
|
270
279
|
build.crossruby.clean(executor) if options[:clean]
|
271
280
|
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
end
|
281
|
+
self.with_unbundled_env do
|
282
|
+
build.crossruby.build(
|
283
|
+
executor,
|
284
|
+
remake: options[:remake],
|
285
|
+
reconfigure: options[:reconfigure]
|
286
|
+
)
|
287
|
+
end
|
280
288
|
|
281
|
-
__skip__ =
|
282
|
-
if defined?(Bundler)
|
283
|
-
Bundler.with_unbundled_env(&do_build)
|
284
|
-
else
|
285
|
-
do_build.call
|
286
|
-
end
|
287
289
|
build.crossruby.artifact
|
288
290
|
end
|
289
291
|
|
data/lib/ruby_wasm/packager.rb
CHANGED
@@ -44,7 +44,7 @@ class RubyWasm::Packager
|
|
44
44
|
fs.remove_stdlib(executor)
|
45
45
|
end
|
46
46
|
|
47
|
-
if full_build_options[:target] == "wasm32-unknown-wasip1" && !features.
|
47
|
+
if full_build_options[:target] == "wasm32-unknown-wasip1" && !features.support_component_model?
|
48
48
|
# wasi-vfs supports only WASI target
|
49
49
|
wasi_vfs = RubyWasmExt::WasiVfs.new
|
50
50
|
wasi_vfs.map_dir("/bundle", fs.bundle_dir)
|
@@ -54,6 +54,20 @@ class RubyWasm::Packager
|
|
54
54
|
end
|
55
55
|
wasm_bytes = ruby_core.link_gem_exts(executor, fs.ruby_root, fs.bundle_dir, wasm_bytes)
|
56
56
|
|
57
|
+
if features.support_component_model?
|
58
|
+
wasi_virt = RubyWasmExt::WasiVirt.new
|
59
|
+
wasi_virt.allow_all
|
60
|
+
[
|
61
|
+
{ guest: "/bundle", host: fs.bundle_dir },
|
62
|
+
{ guest: "/usr", host: File.dirname(fs.ruby_root) }
|
63
|
+
].each do |map|
|
64
|
+
map => { guest:, host: }
|
65
|
+
RubyWasm.logger.debug "Adding files into VFS: #{host} => #{guest}"
|
66
|
+
wasi_virt.map_dir(guest, host)
|
67
|
+
end
|
68
|
+
wasm_bytes = wasi_virt.compose(wasm_bytes)
|
69
|
+
end
|
70
|
+
|
57
71
|
wasm_bytes = RubyWasmExt.preinitialize(wasm_bytes) if options[:optimize]
|
58
72
|
wasm_bytes
|
59
73
|
end
|
@@ -68,8 +82,9 @@ class RubyWasm::Packager
|
|
68
82
|
# Retrieves the specs from the Bundler definition, excluding the excluded gems.
|
69
83
|
def specs
|
70
84
|
return [] unless @definition
|
71
|
-
@specs ||= @definition.resolve.materialize(@definition.requested_dependencies)
|
85
|
+
__skip__ = @specs ||= @definition.resolve.materialize(@definition.requested_dependencies)
|
72
86
|
.reject { |spec| EXCLUDED_GEMS.include?(spec.name) }
|
87
|
+
.reject { |spec| spec.is_a?(Bundler::LazySpecification) }
|
73
88
|
@specs
|
74
89
|
end
|
75
90
|
|
data/lib/ruby_wasm/version.rb
CHANGED