ruby_wasm 2.6.2-x86_64-darwin → 2.7.0-x86_64-darwin
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 +8 -6
- data/Gemfile +2 -1
- data/NOTICE +1 -2
- data/README.md +1 -1
- data/Rakefile +9 -3
- data/docs/api.md +1 -1
- data/docs/cheat_sheet.md +8 -8
- data/lib/ruby_wasm/3.1/ruby_wasm.bundle +0 -0
- data/lib/ruby_wasm/3.2/ruby_wasm.bundle +0 -0
- data/lib/ruby_wasm/3.3/ruby_wasm.bundle +0 -0
- data/lib/ruby_wasm/build/product/crossruby.rb +11 -3
- data/lib/ruby_wasm/cli.rb +9 -3
- data/lib/ruby_wasm/packager/core.rb +56 -38
- data/lib/ruby_wasm/packager/file_system.rb +0 -1
- data/lib/ruby_wasm/packager.rb +1 -1
- data/lib/ruby_wasm/version.rb +1 -1
- data/package-lock.json +1515 -7900
- data/package.json +4 -3
- data/rakelib/check.rake +5 -1
- data/rakelib/ci.rake +11 -5
- data/rakelib/doc.rake +11 -14
- data/rakelib/packaging.rake +98 -59
- data/rakelib/version.rake +19 -1
- data/sbom.spdx.json +114 -0
- data/sig/ruby_wasm/build.rbs +1 -0
- metadata +3 -5
- data/tools/clang-format-diff.sh +0 -18
- data/tools/exe/rbminify +0 -12
- data/tools/lib/syntax_tree/minify_ruby.rb +0 -63
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0a009971fbdd7e7ba5fecf2fa83833b570fc15d0c471db7ae6e84248a0386857
|
4
|
+
data.tar.gz: d66968df89e5fb5062cd42ad9fa71a45c1397e64e768ba86dafe916ca13ed5f3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 29c2274ba5b0e7eca9ebf3b0b7450aa31209dd407f118f4e61b96b19f8d7e22aa990da6f65d51828bf565de9a2a2c8ddccafd21689303deb09678232192efef5
|
7
|
+
data.tar.gz: 2df93b6d257a4fe72e83037d6b1ec7679c338f12abf215dd426be6e8925caffadabb5d4320d5deb2e9e1cb68d0fc012e87aa153a7868fdad296835042b424efd
|
data/CONTRIBUTING.md
CHANGED
@@ -9,8 +9,6 @@ This document describes development setup and pointers for diving into this proj
|
|
9
9
|
$ git clone https://github.com/ruby/ruby.wasm --recursive
|
10
10
|
$ cd ruby.wasm
|
11
11
|
$ ./bin/setup
|
12
|
-
# Just for building vendor/jco (will be removed soon)
|
13
|
-
$ rustup target add wasm32-wasi
|
14
12
|
# Compile extension library
|
15
13
|
$ bundle exec rake compile
|
16
14
|
$ rake --tasks
|
@@ -26,9 +24,9 @@ $ rake build:download_prebuilt
|
|
26
24
|
$ rake build:head-wasm32-unknown-wasip1-full
|
27
25
|
|
28
26
|
# Build npm package
|
29
|
-
$ rake npm:ruby-head-wasm-
|
27
|
+
$ rake npm:ruby-head-wasm-wasip2:build
|
30
28
|
# Test npm package
|
31
|
-
$ rake npm:ruby-head-wasm-
|
29
|
+
$ rake npm:ruby-head-wasm-wasip2:check
|
32
30
|
```
|
33
31
|
|
34
32
|
If you need to re-build Ruby, please clean `./rubies` directory, and run `rake npm:ruby-head-wasm-wasi` again.
|
@@ -111,9 +109,13 @@ $ rake 'bump_version[0.6.0]'
|
|
111
109
|
$ git commit -m"Bump version to 0.6.0"
|
112
110
|
$ git tag 0.6.0
|
113
111
|
$ git push origin 0.6.0
|
114
|
-
|
112
|
+
# After GitHub Actions "Build gems" is done
|
113
|
+
# https://github.com/ruby/ruby.wasm/actions/workflows/build-gems.yml
|
114
|
+
$ gh run download <run-id>
|
115
|
+
$ for pkg in cross-gem/pkg/ruby_wasm-*; do gem push $pkg; done
|
115
116
|
$ gem build && gem push ruby_wasm-*.gem && rm ruby_wasm-*.gem
|
116
117
|
$ (cd packages/gems/js/ && gem build && gem push js-*.gem && rm js-*.gem)
|
118
|
+
$ rake bump_dev_version
|
117
119
|
```
|
118
120
|
|
119
121
|
## Release Channels
|
@@ -127,5 +129,5 @@ $ npm install --save @ruby/wasm-wasi@latest
|
|
127
129
|
# or if you want the nightly snapshot
|
128
130
|
$ npm install --save @ruby/wasm-wasi@next
|
129
131
|
# or you can specify the exact snapshot version
|
130
|
-
$ npm install --save @ruby/wasm-wasi@2.
|
132
|
+
$ npm install --save @ruby/wasm-wasi@2.7.0-2024-11-11-a
|
131
133
|
```
|
data/Gemfile
CHANGED
data/NOTICE
CHANGED
@@ -1264,8 +1264,7 @@ Licensed under the Apache License 2.0 https://www.openssl.org/source/license.htm
|
|
1264
1264
|
https://github.com/kateinoigakukun/wasi-vfs
|
1265
1265
|
|
1266
1266
|
```
|
1267
|
-
|
1268
|
-
Licensed under the MIT License
|
1267
|
+
Licensed under the Apache License v2.0 with LLVM Exceptions
|
1269
1268
|
```
|
1270
1269
|
|
1271
1270
|
---
|
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.
|
26
|
+
<script src="https://cdn.jsdelivr.net/npm/@ruby/3.3-wasm-wasi@2.7.0/dist/browser.script.iife.js"></script>
|
27
27
|
<script type="text/ruby">
|
28
28
|
require "js"
|
29
29
|
|
data/Rakefile
CHANGED
@@ -28,20 +28,26 @@ NPM_PACKAGES = [
|
|
28
28
|
{
|
29
29
|
name: "ruby-head-wasm-wasi",
|
30
30
|
ruby_version: "head",
|
31
|
-
gemfile: "packages/npm-packages/ruby-wasm-wasi/Gemfile",
|
31
|
+
gemfile: "packages/npm-packages/ruby-head-wasm-wasi/Gemfile",
|
32
32
|
target: "wasm32-unknown-wasip1",
|
33
|
+
},
|
34
|
+
{
|
35
|
+
name: "ruby-head-wasm-wasip2",
|
36
|
+
ruby_version: "head",
|
37
|
+
gemfile: "packages/npm-packages/ruby-head-wasm-wasip2/Gemfile",
|
38
|
+
target: "wasm32-unknown-wasip2",
|
33
39
|
enable_component_model: true,
|
34
40
|
},
|
35
41
|
{
|
36
42
|
name: "ruby-3.3-wasm-wasi",
|
37
43
|
ruby_version: "3.3",
|
38
|
-
gemfile: "packages/npm-packages/ruby-wasm-wasi/Gemfile",
|
44
|
+
gemfile: "packages/npm-packages/ruby-3.3-wasm-wasi/Gemfile",
|
39
45
|
target: "wasm32-unknown-wasip1"
|
40
46
|
},
|
41
47
|
{
|
42
48
|
name: "ruby-3.2-wasm-wasi",
|
43
49
|
ruby_version: "3.2",
|
44
|
-
gemfile: "packages/npm-packages/ruby-wasm-wasi/Gemfile",
|
50
|
+
gemfile: "packages/npm-packages/ruby-3.2-wasm-wasi/Gemfile",
|
45
51
|
target: "wasm32-unknown-wasip1"
|
46
52
|
},
|
47
53
|
{ name: "ruby-wasm-wasi", target: "wasm32-unknown-wasip1" }
|
data/docs/api.md
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
- [Ruby API](https://ruby.github.io/ruby.wasm/JS.html)
|
2
|
-
- [JavaScript API](https://github.
|
2
|
+
- [JavaScript API](https://ruby.github.io/ruby.wasm/npm/@ruby/wasm-wasi/)
|
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.
|
41
|
+
<script src="https://cdn.jsdelivr.net/npm/@ruby/3.3-wasm-wasi@2.7.0/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.
|
55
|
-
const response = await fetch("https://cdn.jsdelivr.net/npm/@ruby/3.3-wasm-wasi@2.
|
54
|
+
import { DefaultRubyVM } from "https://cdn.jsdelivr.net/npm/@ruby/wasm-wasi@2.7.0/dist/browser/+esm";
|
55
|
+
const response = await fetch("https://cdn.jsdelivr.net/npm/@ruby/3.3-wasm-wasi@2.7.0/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.
|
72
|
+
<script src="https://cdn.jsdelivr.net/npm/@ruby/wasm-wasi@2.7.0/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.
|
76
|
+
const response = await fetch("https://cdn.jsdelivr.net/npm/@ruby/3.3-wasm-wasi@2.7.0/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.
|
131
|
+
<script src="https://cdn.jsdelivr.net/npm/@ruby/3.3-wasm-wasi@2.7.0/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.
|
147
|
-
const response = await fetch("https://cdn.jsdelivr.net/npm/@ruby/3.3-wasm-wasi@2.
|
146
|
+
import { DefaultRubyVM } from "https://cdn.jsdelivr.net/npm/@ruby/wasm-wasi@2.7.0/dist/browser/+esm";
|
147
|
+
const response = await fetch("https://cdn.jsdelivr.net/npm/@ruby/3.3-wasm-wasi@2.7.0/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,14 +71,14 @@ module RubyWasm
|
|
71
71
|
return
|
72
72
|
end
|
73
73
|
objdir = product_build_dir crossruby
|
74
|
-
rbconfig_rb =
|
74
|
+
rbconfig_rb = crossruby.rbconfig_rb
|
75
75
|
raise "rbconfig.rb not found" unless rbconfig_rb
|
76
76
|
extconf_args = [
|
77
77
|
"-C", objdir,
|
78
78
|
"#{@srcdir}/extconf.rb",
|
79
79
|
"--target-rbconfig=#{rbconfig_rb}",
|
80
80
|
]
|
81
|
-
extconf_args << "--
|
81
|
+
extconf_args << "--disable-component-model" unless @features.support_component_model?
|
82
82
|
executor.system crossruby.baseruby_path, *extconf_args
|
83
83
|
end
|
84
84
|
|
@@ -111,7 +111,7 @@ module RubyWasm
|
|
111
111
|
"-I#{crossruby.build_dir}",
|
112
112
|
"--",
|
113
113
|
]
|
114
|
-
extconf_args << "--
|
114
|
+
extconf_args << "--disable-component-model" unless @features.support_component_model?
|
115
115
|
# Clear RUBYOPT to avoid loading unrelated bundle setup
|
116
116
|
executor.system crossruby.baseruby_path,
|
117
117
|
*extconf_args,
|
@@ -222,6 +222,10 @@ module RubyWasm
|
|
222
222
|
end
|
223
223
|
install_dir = File.join(build_dir, "install")
|
224
224
|
if !File.exist?(install_dir) || remake || reconfigure
|
225
|
+
unless target.pic?
|
226
|
+
# HACK: force static linking for non-pic target
|
227
|
+
executor.rm_f File.join(build_dir, "ruby")
|
228
|
+
end
|
225
229
|
executor.system "make",
|
226
230
|
"-j#{executor.process_count}",
|
227
231
|
"install",
|
@@ -301,6 +305,10 @@ module RubyWasm
|
|
301
305
|
File.expand_path("../crossruby/extinit.c.erb", __FILE__)
|
302
306
|
end
|
303
307
|
|
308
|
+
def rbconfig_rb
|
309
|
+
Dir.glob(File.join(dest_dir, "usr/local/lib/ruby/*/wasm32-wasi/rbconfig.rb")).first
|
310
|
+
end
|
311
|
+
|
304
312
|
def baseruby_path
|
305
313
|
File.join(@baseruby.install_dir, "bin/ruby")
|
306
314
|
end
|
data/lib/ruby_wasm/cli.rb
CHANGED
@@ -310,7 +310,10 @@ module RubyWasm
|
|
310
310
|
|
311
311
|
def derive_packager(options)
|
312
312
|
__skip__ = definition = nil
|
313
|
-
|
313
|
+
features = RubyWasm::FeatureSet.derive_from_env
|
314
|
+
# The head ruby & dynamic linking uses "bundle" command to build gems instead of in-process integration.
|
315
|
+
use_in_process_gem_building = !(options[:ruby_version] == "head" && features.support_dynamic_linking?)
|
316
|
+
__skip__ = if defined?(Bundler) && !options[:disable_gems] && use_in_process_gem_building
|
314
317
|
begin
|
315
318
|
# Silence Bundler UI if --print-ruby-cache-key is specified not to bother the JSON output.
|
316
319
|
level = options[:print_ruby_cache_key] ? :silent : Bundler.ui.level
|
@@ -321,10 +324,10 @@ module RubyWasm
|
|
321
324
|
Bundler.ui.level = old_level
|
322
325
|
end
|
323
326
|
end
|
324
|
-
RubyWasm.logger.info "Using Gemfile: #{definition.gemfiles}" if definition
|
327
|
+
RubyWasm.logger.info "Using Gemfile: #{definition.gemfiles.map(&:to_s).join(", ")}" if definition
|
325
328
|
RubyWasm::Packager.new(
|
326
329
|
root, build_config(options), definition,
|
327
|
-
features:
|
330
|
+
features: features,
|
328
331
|
)
|
329
332
|
end
|
330
333
|
|
@@ -332,6 +335,9 @@ module RubyWasm
|
|
332
335
|
ruby_core_build = packager.ruby_core_build
|
333
336
|
require "digest"
|
334
337
|
digest = Digest::SHA256.new
|
338
|
+
# The build system key is used to invalidate the cache when the build system is updated.
|
339
|
+
build_system_key = 1
|
340
|
+
digest.update(build_system_key.to_s)
|
335
341
|
ruby_core_build.cache_key(digest)
|
336
342
|
hexdigest = digest.hexdigest
|
337
343
|
require "json"
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require "forwardable"
|
2
|
+
require "pathname"
|
2
3
|
|
3
4
|
class RubyWasm::Packager::Core
|
4
5
|
def initialize(packager)
|
@@ -19,7 +20,6 @@ class RubyWasm::Packager::Core
|
|
19
20
|
def build_strategy
|
20
21
|
@build_strategy ||=
|
21
22
|
begin
|
22
|
-
has_exts = @packager.specs.any? { |spec| spec.extensions.any? }
|
23
23
|
if @packager.features.support_dynamic_linking?
|
24
24
|
DynamicLinking.new(@packager)
|
25
25
|
else
|
@@ -59,14 +59,6 @@ class RubyWasm::Packager::Core
|
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
62
|
-
def wasi_exec_model
|
63
|
-
# TODO: Detect WASI exec-model from binary exports (_start or _initialize)
|
64
|
-
use_js_gem = @packager.specs.any? do |spec|
|
65
|
-
spec.name == "js"
|
66
|
-
end
|
67
|
-
use_js_gem ? "reactor" : "command"
|
68
|
-
end
|
69
|
-
|
70
62
|
def with_unbundled_env(&block)
|
71
63
|
__skip__ = if defined?(Bundler)
|
72
64
|
Bundler.with_unbundled_env(&block)
|
@@ -138,12 +130,16 @@ class RubyWasm::Packager::Core
|
|
138
130
|
wasi_sdk_path = toolchain.wasi_sdk_path
|
139
131
|
libraries << File.join(wasi_sdk_path, "share/wasi-sysroot/lib/wasm32-wasi", lib)
|
140
132
|
end
|
141
|
-
wasi_adapter = RubyWasm::Packager::ComponentAdapter.wasi_snapshot_preview1(wasi_exec_model)
|
142
|
-
adapters = [wasi_adapter]
|
143
133
|
dl_openable_libs = []
|
144
134
|
dl_openable_libs << [File.dirname(ruby_root), Dir.glob(File.join(ruby_root, "lib", "ruby", "**", "*.so"))]
|
145
135
|
dl_openable_libs << [gem_home, Dir.glob(File.join(gem_home, "**", "*.so"))]
|
146
136
|
|
137
|
+
has_js_so = dl_openable_libs.any? do |root, libs|
|
138
|
+
libs.any? { |lib| lib.end_with?("/js.so") }
|
139
|
+
end
|
140
|
+
wasi_adapter = RubyWasm::Packager::ComponentAdapter.wasi_snapshot_preview1(has_js_so ? "reactor" : "command")
|
141
|
+
adapters = [wasi_adapter]
|
142
|
+
|
147
143
|
linker = RubyWasmExt::ComponentLink.new
|
148
144
|
linker.use_built_in_libdl(true)
|
149
145
|
linker.stub_missing_functions(false)
|
@@ -151,11 +147,13 @@ class RubyWasm::Packager::Core
|
|
151
147
|
|
152
148
|
linker.library("ruby", module_bytes, false)
|
153
149
|
|
150
|
+
RubyWasm.logger.info "Linking Ruby with extensions"
|
151
|
+
|
154
152
|
libraries.each do |lib|
|
155
153
|
# Non-DL openable libraries should be referenced as base name
|
156
154
|
lib_name = File.basename(lib)
|
157
155
|
module_bytes = File.binread(lib)
|
158
|
-
RubyWasm.logger.
|
156
|
+
RubyWasm.logger.debug "Linking #{lib_name} (#{module_bytes.size} bytes)"
|
159
157
|
linker.library(lib_name, module_bytes, false)
|
160
158
|
end
|
161
159
|
|
@@ -164,7 +162,7 @@ class RubyWasm::Packager::Core
|
|
164
162
|
# DL openable lib_name should be a relative path from ruby_root
|
165
163
|
lib_name = "/" + Pathname.new(lib).relative_path_from(Pathname.new(File.dirname(root))).to_s
|
166
164
|
module_bytes = File.binread(lib)
|
167
|
-
RubyWasm.logger.
|
165
|
+
RubyWasm.logger.debug "Linking #{lib_name} (#{module_bytes.size} bytes)"
|
168
166
|
linker.library(lib_name, module_bytes, true)
|
169
167
|
end
|
170
168
|
end
|
@@ -174,7 +172,7 @@ class RubyWasm::Packager::Core
|
|
174
172
|
# e.g. wasi_snapshot_preview1.command.wasm -> wasi_snapshot_preview1
|
175
173
|
adapter_name = adapter_name.split(".")[0]
|
176
174
|
module_bytes = File.binread(adapter)
|
177
|
-
RubyWasm.logger.
|
175
|
+
RubyWasm.logger.debug "Linking adapter #{adapter_name}=#{adapter} (#{module_bytes.size} bytes)"
|
178
176
|
linker.adapter(adapter_name, module_bytes)
|
179
177
|
end
|
180
178
|
return linker.encode()
|
@@ -187,31 +185,43 @@ class RubyWasm::Packager::Core
|
|
187
185
|
baseruby.build(executor)
|
188
186
|
end
|
189
187
|
|
190
|
-
|
191
|
-
|
192
|
-
ext_feature = File.dirname(ext) # e.g. "ext/cgi/escape"
|
193
|
-
ext_srcdir = File.join(spec.full_gem_path, ext_feature)
|
194
|
-
ext_relative_path = File.join(spec.full_name, ext_feature)
|
195
|
-
prod = RubyWasm::CrossRubyExtProduct.new(
|
196
|
-
ext_srcdir,
|
197
|
-
build.toolchain,
|
198
|
-
features: @packager.features,
|
199
|
-
ext_relative_path: ext_relative_path
|
200
|
-
)
|
201
|
-
[prod, spec]
|
202
|
-
end
|
203
|
-
end
|
188
|
+
crossruby = build.crossruby
|
189
|
+
rbconfig_rb = crossruby.rbconfig_rb
|
204
190
|
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
191
|
+
options = @packager.full_build_options
|
192
|
+
target_triplet = options[:target]
|
193
|
+
|
194
|
+
local_path = File.join("bundle", target_triplet)
|
195
|
+
env = {
|
196
|
+
"BUNDLE_APP_CONFIG" => File.join(".bundle", target_triplet),
|
197
|
+
"BUNDLE_PATH" => local_path,
|
198
|
+
"BUNDLE_WITHOUT" => "build",
|
199
|
+
# Do not auto-switch bundler version by Gemfile.lock
|
200
|
+
"BUNDLE_VERSION" => "system",
|
201
|
+
# FIXME: BUNDLE_PATH is set as a installation destination here, but
|
202
|
+
# it is also used as a source of gems to be loaded by RubyGems itself.
|
203
|
+
# RubyGems loads "psych" gem and if Gemfile includes "psych" gem,
|
204
|
+
# RubyGems tries to load "psych" gem from BUNDLE_PATH at the second
|
205
|
+
# time of "bundle install" command. But the extension of "psych" gem
|
206
|
+
# under BUNDLE_PATH is built for Wasm target, not for host platform,
|
207
|
+
# so it fails to load the extension.
|
208
|
+
#
|
209
|
+
# Thus we preload psych from the default LOAD_PATH here to avoid
|
210
|
+
# loading Wasm version of psych.so via `Kernel#require` patched by
|
211
|
+
# RubyGems.
|
212
|
+
"RUBYOPT" => "-rpsych",
|
213
|
+
}
|
214
|
+
|
215
|
+
args = [
|
216
|
+
File.join(baseruby.install_dir, "bin", "bundle"),
|
217
|
+
"install",
|
218
|
+
"--standalone",
|
219
|
+
"--target-rbconfig",
|
220
|
+
rbconfig_rb,
|
221
|
+
]
|
222
|
+
|
223
|
+
executor.system(*args, env: env)
|
224
|
+
executor.cp_r(local_path, gem_home)
|
215
225
|
end
|
216
226
|
|
217
227
|
def cache_key(digest)
|
@@ -337,6 +347,14 @@ class RubyWasm::Packager::Core
|
|
337
347
|
# No-op because we already built extensions as part of the Ruby build
|
338
348
|
end
|
339
349
|
|
350
|
+
def wasi_exec_model
|
351
|
+
# TODO: Detect WASI exec-model from binary exports (_start or _initialize)
|
352
|
+
use_js_gem = @packager.specs.any? do |spec|
|
353
|
+
spec.name == "js"
|
354
|
+
end
|
355
|
+
use_js_gem ? "reactor" : "command"
|
356
|
+
end
|
357
|
+
|
340
358
|
def link_gem_exts(executor, ruby_root, gem_home, module_bytes)
|
341
359
|
return module_bytes unless @packager.features.support_component_model?
|
342
360
|
|
@@ -44,7 +44,6 @@ class RubyWasm::Packager::FileSystem
|
|
44
44
|
when "enc"
|
45
45
|
# Remove all encodings except for encdb.so and transdb.so
|
46
46
|
enc_dir = File.join(@ruby_root, "lib", "ruby", ruby_version, "wasm32-wasi", "enc")
|
47
|
-
puts File.join(enc_dir, "**/*.so")
|
48
47
|
Dir.glob(File.join(enc_dir, "**/*.so")).each do |entry|
|
49
48
|
next if entry.end_with?("encdb.so", "transdb.so")
|
50
49
|
RubyWasm.logger.debug "Removing stdlib encoding: #{entry}"
|
data/lib/ruby_wasm/packager.rb
CHANGED
@@ -34,7 +34,7 @@ class RubyWasm::Packager
|
|
34
34
|
|
35
35
|
ruby_core.build_gem_exts(executor, fs.bundle_dir)
|
36
36
|
|
37
|
-
fs.package_gems
|
37
|
+
fs.package_gems unless features.support_component_model?
|
38
38
|
fs.remove_non_runtime_files(executor)
|
39
39
|
if options[:stdlib]
|
40
40
|
options[:without_stdlib_components].each do |component|
|
data/lib/ruby_wasm/version.rb
CHANGED