Skip to content

Commit a1c8be9

Browse files
Add Ruby 4.0 build
1 parent 5e50d3e commit a1c8be9

File tree

10 files changed

+163
-1
lines changed

10 files changed

+163
-1
lines changed

Rakefile

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ require "ruby_wasm/rake_task"
99
require "ruby_wasm/packager"
1010
require "ruby_wasm/cli"
1111

12-
BUILD_SOURCES = %w[3.4 3.3 3.2 head]
12+
BUILD_SOURCES = %w[4.0 3.4 3.3 3.2 head]
1313
BUILD_PROFILES = %w[full minimal]
1414

1515
BUILDS =
@@ -38,6 +38,12 @@ NPM_PACKAGES = [
3838
target: "wasm32-unknown-wasip2",
3939
enable_component_model: true
4040
},
41+
{
42+
name: "ruby-4.0-wasm-wasi",
43+
ruby_version: "4.0",
44+
gemfile: "packages/npm-packages/ruby-4.0-wasm-wasi/Gemfile",
45+
target: "wasm32-unknown-wasip1"
46+
},
4147
{
4248
name: "ruby-3.4-wasm-wasi",
4349
ruby_version: "3.4",

lib/ruby_wasm/cli.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,16 @@ def self.build_config_aliases(root)
252252
all_default_exts: RubyWasm::Packager::ALL_DEFAULT_EXTS,
253253
wasi_sdk_version: "24.0"
254254
},
255+
{
256+
name: "4.0",
257+
src: {
258+
type: "tarball",
259+
url: "https://cache.ruby-lang.org/pub/ruby/4.0/ruby-4.0.0.tar.gz"
260+
},
261+
all_default_exts:
262+
"cgi/escape,continuation,coverage,date,digest/bubblebabble,digest,digest/md5,digest/rmd160,digest/sha1,digest/sha2,etc,fcntl,json,json/generator,json/parser,objspace,pathname,psych,rbconfig/sizeof,ripper,stringio,strscan,monitor,zlib,openssl",
263+
wasi_sdk_version: "24.0"
264+
},
255265
{
256266
name: "3.4",
257267
src: {

package-lock.json

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
*.tgz
2+
/tmp
3+
/bundle
4+
/vendor
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# frozen_string_literal: true
2+
3+
source "https://rubygems.org"
4+
5+
# We build ./vendor/cache/js-{version}.gem just before evaluating this Gemfile
6+
# so that Bundler builds extensions even from the local gem. (gem extensions
7+
# from "path:" gems are not built by Bundler.)
8+
# Thus even we specify version of "js" gem here, it should always installed
9+
# from the ./vendor/cache/js-{version}.gem, not from rubygems.org. To achieve this,
10+
# we always use non-exist version during development.
11+
require_relative "../../gems/js/lib/js/version.rb"
12+
gem "js", JS::VERSION
13+
gem "ruby_wasm", path: "../../../", group: [:build]
14+
gem "power_assert"
15+
gem "test-unit"
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
PATH
2+
remote: ../../..
3+
specs:
4+
ruby_wasm (2.7.2.dev)
5+
logger
6+
7+
GEM
8+
remote: https://rubygems.org/
9+
specs:
10+
js (2.7.2.dev)
11+
logger (1.7.0)
12+
power_assert (2.0.3)
13+
test-unit (3.6.2)
14+
power_assert
15+
16+
PLATFORMS
17+
ruby
18+
x86_64-linux
19+
20+
DEPENDENCIES
21+
js (= 2.7.2.dev)
22+
power_assert
23+
ruby_wasm!
24+
test-unit
25+
26+
BUNDLED WITH
27+
2.6.4
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# @ruby/4.0-wasm-wasi
2+
3+
[![npm version](https://badge.fury.io/js/@ruby%2F4.0-wasm-wasi.svg)](https://www.npmjs.com/package/@ruby/4.0-wasm-wasi)
4+
5+
This package provides WebAssembly binaries of CRuby built from the latest `4.0` source code targeting environments compatible with WASI Preview1.
6+
7+
See [`@ruby/wasm-wasi`](https://github.com/ruby/ruby.wasm/blob/main/packages/npm-packages/ruby-wasm-wasi/README.md) for how to use this package.
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
{
2+
"name": "@ruby/4.0-wasm-wasi",
3+
"version": "2.7.2",
4+
"description": "Ruby 4.0 built on WASI",
5+
"main": "./dist/cjs/index.js",
6+
"module": "./dist/esm/index.js",
7+
"exports": {
8+
".": {
9+
"browser": "./dist/esm/index.js",
10+
"umd": "./dist/umd/index.js",
11+
"import": "./dist/esm/index.js",
12+
"require": "./dist/cjs/index.js"
13+
},
14+
"./dist/*": {
15+
"browser": "./dist/esm/*.js",
16+
"umd": "./dist/umd/*.js",
17+
"import": "./dist/esm/*.js",
18+
"require": "./dist/cjs/*.js"
19+
},
20+
"./dist/*.wasm": {
21+
"browser": "./dist/*.wasm",
22+
"umd": "./dist/*.wasm",
23+
"import": "./dist/*.wasm",
24+
"require": "./dist/*.wasm"
25+
}
26+
},
27+
"files": [
28+
"dist",
29+
"README.md"
30+
],
31+
"scripts": {
32+
"test": "RUBY_NPM_PACKAGE_ROOT=../ruby-4.0-wasm-wasi npm -C ../ruby-wasm-wasi run test:run",
33+
"build:deps": "cd ../ruby-wasm-wasi && npm run build",
34+
"build:static:files": "../ruby-wasm-wasi/tools/pack-static-files.sh ./dist",
35+
"build:static:compat": "../ruby-wasm-wasi/tools/pack-compat-shim.mjs --dist=./dist --pkg=ruby-4.0-wasm-wasi",
36+
"build:static": "npm run build:static:files && npm run build:static:compat",
37+
"build:rollup": "rollup -c rollup.config.mjs",
38+
"build": "npm run build:deps && npm run build:static && npm run build:rollup && ../ruby-wasm-wasi/tools/post-build.sh ./dist"
39+
},
40+
"repository": "https://github.com/ruby/ruby.wasm",
41+
"homepage": "https://github.com/ruby/ruby.wasm/tree/main/packages/npm-packages/ruby-4.0-wasm-wasi",
42+
"publishConfig": {
43+
"access": "public"
44+
},
45+
"keywords": [
46+
"wasm",
47+
"webassembly",
48+
"wasi",
49+
"ruby"
50+
],
51+
"license": "MIT",
52+
"dependencies": {
53+
"@ruby/wasm-wasi": "^2.0.0"
54+
}
55+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import json from "@rollup/plugin-json";
2+
import { nodeResolve } from "@rollup/plugin-node-resolve";
3+
import fs from "fs";
4+
import path from "path";
5+
6+
/** @type {import('rollup').RollupOptions[]} */
7+
export default [
8+
{
9+
input: "src/browser.script.js",
10+
output: [
11+
{
12+
file: "dist/browser.script.iife.js",
13+
format: "iife",
14+
banner: "/* " + fs.readFileSync(path.resolve("../../../NOTICE"), "utf8") + "*/",
15+
}
16+
],
17+
plugins: [
18+
json(), nodeResolve()
19+
],
20+
},
21+
];
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
2+
import { main } from "@ruby/wasm-wasi/dist/browser.script"
3+
import * as pkg from "../package.json"
4+
5+
main(pkg)

0 commit comments

Comments
 (0)