From e68a5cf6dbc85cd32fb1bdb149b429ac581880f8 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Thu, 28 Mar 2024 05:24:35 +0000 Subject: [PATCH 1/4] Rename `wasm32-unknown-wasi` to `wasm32-unknown-wasip1` in the build system WASI community is going to be introducing pN suffix to the target triples to distinguish the different versions of the WASI Preview versions (e.g. `wasm32-unknown-wasip1` for WASI Preview1) to prepare the upcoming WASI Preview2 and so on. Other projects are also following this change: * https://github.com/WebAssembly/wasi-libc/pull/478 * https://github.com/rust-lang/compiler-team/issues/607 --- CONTRIBUTING.md | 12 ++++++------ README.md | 12 ++++++------ Rakefile | 14 +++++++------- lib/ruby_wasm/build/product/crossruby.rb | 2 +- lib/ruby_wasm/build/product/openssl.rb | 2 +- lib/ruby_wasm/build/product/product.rb | 2 +- lib/ruby_wasm/build/product/wasi_vfs.rb | 2 +- lib/ruby_wasm/build/toolchain.rb | 2 +- lib/ruby_wasm/cli.rb | 2 +- lib/ruby_wasm/packager.rb | 4 ++-- rakelib/packaging.rake | 2 +- 11 files changed, 28 insertions(+), 28 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d6d824132e..a0c8f7891c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -21,7 +21,7 @@ $ rake --tasks $ rake build:download_prebuilt # Build Ruby (if you need to build Ruby by yourself) -$ rake build:head-wasm32-unknown-wasi-full +$ rake build:head-wasm32-unknown-wasip1-full # Build npm package $ rake npm:ruby-head-wasm-wasi @@ -48,15 +48,15 @@ To select a build profile, see [profiles section in README](https://github.com/r ```console # Build only a specific combination of ruby version, profile, and target -$ rake build:head-wasm32-unknown-wasi-full +$ rake build:head-wasm32-unknown-wasip1-full # Clean up the build directory -$ rake build:head-wasm32-unknown-wasi-full:clean +$ rake build:head-wasm32-unknown-wasip1-full:clean # Force to re-execute "make install" -$ rake build:head-wasm32-unknown-wasi-full:remake +$ rake build:head-wasm32-unknown-wasip1-full:remake # Output is in the `rubies` directory -$ tree -L 3 rubies/head-wasm32-unknown-wasi-full -rubies/head-wasm32-unknown-wasi-full/ +$ tree -L 3 rubies/head-wasm32-unknown-wasip1-full +rubies/head-wasm32-unknown-wasip1-full/ ├── usr │   └── local │   ├── bin diff --git a/README.md b/README.md index fe8d3110c1..f69a0c8006 100644 --- a/README.md +++ b/README.md @@ -40,18 +40,18 @@ Dependencies: [wasmtime](https://github.com/bytecodealliance/wasmtime) ```console $ gem install ruby_wasm # Download a prebuilt Ruby release -$ curl -LO https://github.com/ruby/ruby.wasm/releases/latest/download/ruby-3.3-wasm32-unknown-wasi-full.tar.gz -$ tar xfz ruby-3.3-wasm32-unknown-wasi-full.tar.gz +$ curl -LO https://github.com/ruby/ruby.wasm/releases/latest/download/ruby-3.3-wasm32-unknown-wasip1-full.tar.gz +$ tar xfz ruby-3.3-wasm32-unknown-wasip1-full.tar.gz # Extract ruby binary not to pack itself -$ mv ruby-3.3-wasm32-unknown-wasi-full/usr/local/bin/ruby ruby.wasm +$ mv ruby-3.3-wasm32-unknown-wasip1-full/usr/local/bin/ruby ruby.wasm # Put your app code $ mkdir src $ echo "puts 'Hello'" > src/my_app.rb # Pack the whole directory under /usr and your app dir -$ rbwasm pack ruby.wasm --dir ./src::/src --dir ./ruby-3.3-wasm32-unknown-wasi-full/usr::/usr -o my-ruby-app.wasm +$ rbwasm pack ruby.wasm --dir ./src::/src --dir ./ruby-3.3-wasm32-unknown-wasip1-full/usr::/usr -o my-ruby-app.wasm # Run the packed scripts $ wasmtime my-ruby-app.wasm /src/my_app.rb @@ -110,8 +110,8 @@ A _build_ is a combination of ruby version, _profile_, and _target_. - wasm32-unknown-wasi - Targeting WASI-compatible environments (e.g. Node.js, browsers with polyfill, wasmtime, and so on) + wasm32-unknown-wasip1 + Targeting [WASI Preview1](https://github.com/WebAssembly/WASI/tree/main/legacy/preview1)-compatible environments (e.g. Node.js, browsers with polyfill, wasmtime, and so on) wasm32-unknown-emscripten diff --git a/Rakefile b/Rakefile index f771fbbc8c..5cec1876a8 100644 --- a/Rakefile +++ b/Rakefile @@ -15,7 +15,7 @@ BUILD_PROFILES = %w[full minimal] BUILDS = BUILD_SOURCES .product(BUILD_PROFILES) - .map { |src, profile| [src, "wasm32-unknown-wasi", profile] } + + .map { |src, profile| [src, "wasm32-unknown-wasip1", profile] } + BUILD_SOURCES.map { |src| [src, "wasm32-unknown-emscripten", "full"] } NPM_PACKAGES = [ @@ -29,26 +29,26 @@ NPM_PACKAGES = [ name: "ruby-head-wasm-wasi", ruby_version: "head", gemfile: "packages/npm-packages/ruby-wasm-wasi/Gemfile", - target: "wasm32-unknown-wasi" + target: "wasm32-unknown-wasip1" }, { name: "ruby-3.3-wasm-wasi", ruby_version: "3.3", gemfile: "packages/npm-packages/ruby-wasm-wasi/Gemfile", - target: "wasm32-unknown-wasi" + target: "wasm32-unknown-wasip1" }, { name: "ruby-3.2-wasm-wasi", ruby_version: "3.2", gemfile: "packages/npm-packages/ruby-wasm-wasi/Gemfile", - target: "wasm32-unknown-wasi" + target: "wasm32-unknown-wasip1" }, - { name: "ruby-wasm-wasi", target: "wasm32-unknown-wasi" } + { name: "ruby-wasm-wasi", target: "wasm32-unknown-wasip1" } ] STANDALONE_PACKAGES = [ - { name: "ruby", build: "head-wasm32-unknown-wasi-full" }, - { name: "irb", build: "head-wasm32-unknown-wasi-full" } + { name: "ruby", build: "head-wasm32-unknown-wasip1-full" }, + { name: "irb", build: "head-wasm32-unknown-wasip1-full" } ] LIB_ROOT = File.dirname(__FILE__) diff --git a/lib/ruby_wasm/build/product/crossruby.rb b/lib/ruby_wasm/build/product/crossruby.rb index f28c3da94d..12a1b4cc65 100644 --- a/lib/ruby_wasm/build/product/crossruby.rb +++ b/lib/ruby_wasm/build/product/crossruby.rb @@ -293,7 +293,7 @@ def configure_args(build_triple, toolchain) args << %Q(--with-baseruby=#{baseruby_path}) case target - when "wasm32-unknown-wasi" + when /^wasm32-unknown-wasi/ xldflags << @wasi_vfs.lib_wasi_vfs_a if @wasi_vfs # TODO: Find a way to force cast or update API # @type var wasi_sdk_path: untyped diff --git a/lib/ruby_wasm/build/product/openssl.rb b/lib/ruby_wasm/build/product/openssl.rb index 5299aa73ba..5ce127dcea 100644 --- a/lib/ruby_wasm/build/product/openssl.rb +++ b/lib/ruby_wasm/build/product/openssl.rb @@ -42,7 +42,7 @@ def configure_args --libdir=lib -Wl,--allow-undefined ] - if @target.triple == "wasm32-unknown-wasi" + if @target.triple.start_with?("wasm32-unknown-wasi") args.concat %w[ -D_WASI_EMULATED_SIGNAL -D_WASI_EMULATED_PROCESS_CLOCKS diff --git a/lib/ruby_wasm/build/product/product.rb b/lib/ruby_wasm/build/product/product.rb index 6784d689d4..8e0c78ce36 100644 --- a/lib/ruby_wasm/build/product/product.rb +++ b/lib/ruby_wasm/build/product/product.rb @@ -13,7 +13,7 @@ def initialize(target, toolchain) def system_triplet_args args = [] case @target.triple - when "wasm32-unknown-wasi" + when /^wasm32-unknown-wasi/ args.concat(%W[--host wasm32-wasi]) when "wasm32-unknown-emscripten" args.concat(%W[--host wasm32-emscripten]) diff --git a/lib/ruby_wasm/build/product/wasi_vfs.rb b/lib/ruby_wasm/build/product/wasi_vfs.rb index 9366d901a4..1afdd5fb5d 100644 --- a/lib/ruby_wasm/build/product/wasi_vfs.rb +++ b/lib/ruby_wasm/build/product/wasi_vfs.rb @@ -12,7 +12,7 @@ def initialize(build_dir) def lib_product_build_dir File.join( @build_dir, - "wasm32-unknown-wasi", + "wasm32-unknown-wasip1", "wasi-vfs-#{WASI_VFS_VERSION}" ) end diff --git a/lib/ruby_wasm/build/toolchain.rb b/lib/ruby_wasm/build/toolchain.rb index 21287b5295..0347371c7d 100644 --- a/lib/ruby_wasm/build/toolchain.rb +++ b/lib/ruby_wasm/build/toolchain.rb @@ -18,7 +18,7 @@ def check_envvar(name) def self.get(target, build_dir = nil) case target - when "wasm32-unknown-wasi" + when /^wasm32-unknown-wasi/ return RubyWasm::WASISDK.new(build_dir: build_dir) when "wasm32-unknown-emscripten" return RubyWasm::Emscripten.new diff --git a/lib/ruby_wasm/cli.rb b/lib/ruby_wasm/cli.rb index f0f1001e17..b71629c554 100644 --- a/lib/ruby_wasm/cli.rb +++ b/lib/ruby_wasm/cli.rb @@ -50,7 +50,7 @@ def build(args) reconfigure: false, clean: false, ruby_version: "3.3", - target_triplet: "wasm32-unknown-wasi", + target_triplet: "wasm32-unknown-wasip1", profile: "full", stdlib: true, disable_gems: false, diff --git a/lib/ruby_wasm/packager.rb b/lib/ruby_wasm/packager.rb index 7706c5ba58..d926ca66b1 100644 --- a/lib/ruby_wasm/packager.rb +++ b/lib/ruby_wasm/packager.rb @@ -35,7 +35,7 @@ def package(executor, dest_dir, options) fs.remove_non_runtime_files(executor) fs.remove_stdlib(executor) unless options[:stdlib] - if full_build_options[:target] == "wasm32-unknown-wasi" && !support_dynamic_linking? + if full_build_options[:target] == "wasm32-unknown-wasip1" && !support_dynamic_linking? # wasi-vfs supports only WASI target wasi_vfs = RubyWasmExt::WasiVfs.new wasi_vfs.map_dir("/bundle", fs.bundle_dir) @@ -72,7 +72,7 @@ def support_dynamic_linking? # Retrieves the build options used for building Ruby itself. def build_options default = { - target: RubyWasm::Target.new("wasm32-unknown-wasi"), + target: RubyWasm::Target.new("wasm32-unknown-wasip1"), default_exts: ALL_DEFAULT_EXTS } override = @config || {} diff --git a/rakelib/packaging.rake b/rakelib/packaging.rake index 167fcb9244..0f2847972b 100644 --- a/rakelib/packaging.rake +++ b/rakelib/packaging.rake @@ -61,7 +61,7 @@ namespace :npm do end dist_dir = File.join(pkg_dir, "dist") mkdir_p dist_dir - if pkg[:target] == "wasm32-unknown-wasi" + if pkg[:target].start_with?("wasm32-unknown-wasi") Dir.chdir(cwd || base_dir) do sh env, *build_command, From 5a0c68bf67500f9ee3098466eafd63c724b64ee3 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Thu, 28 Mar 2024 05:33:41 +0000 Subject: [PATCH 2/4] Rename builder image too --- .github/workflows/build.yml | 2 +- builders/wasm32-unknown-wasip1 | 1 + rakelib/ci.rake | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) create mode 120000 builders/wasm32-unknown-wasip1 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c20d26ec6b..75878fa108 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -45,7 +45,7 @@ jobs: fail-fast: false matrix: entry: - - { target: wasm32-unknown-wasi } + - { target: wasm32-unknown-wasip1 } - { target: wasm32-unknown-emscripten } runs-on: ubuntu-20.04 steps: diff --git a/builders/wasm32-unknown-wasip1 b/builders/wasm32-unknown-wasip1 new file mode 120000 index 0000000000..f10c32372c --- /dev/null +++ b/builders/wasm32-unknown-wasip1 @@ -0,0 +1 @@ +wasm32-unknown-wasi \ No newline at end of file diff --git a/rakelib/ci.rake b/rakelib/ci.rake index 898f7291f1..727c1b2e55 100644 --- a/rakelib/ci.rake +++ b/rakelib/ci.rake @@ -86,7 +86,7 @@ def rake_task_matrix task: "standalone:#{pkg[:name]}", artifact: "packages/standalone/#{pkg[:name]}/dist", artifact_name: "standalone-#{pkg[:name]}", - builder: "wasm32-unknown-wasi", + builder: "wasm32-unknown-wasip1", rubies_cache_key: ruby_cache_keys[pkg[:build]] } end From 9a421f25bc91a28e74c776a1d06077f79ac9768c Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Thu, 28 Mar 2024 14:39:50 +0900 Subject: [PATCH 3/4] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f69a0c8006..ac795e966a 100644 --- a/README.md +++ b/README.md @@ -111,7 +111,7 @@ A _build_ is a combination of ruby version, _profile_, and _target_. wasm32-unknown-wasip1 - Targeting [WASI Preview1](https://github.com/WebAssembly/WASI/tree/main/legacy/preview1)-compatible environments (e.g. Node.js, browsers with polyfill, wasmtime, and so on) + Targeting WASI Preview1 compatible environments (e.g. Node.js, browsers with polyfill, wasmtime, and so on) wasm32-unknown-emscripten From 47faa3dc4f79c1aff63e1f9cbacdee6cf16a95ea Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Thu, 28 Mar 2024 05:53:56 +0000 Subject: [PATCH 4/4] Exclude builders/ directory from gem package `rake native gem` somehow fails due to symlinks under builders/ directory. --- ruby_wasm.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby_wasm.gemspec b/ruby_wasm.gemspec index cc456e9c88..ce958e355a 100644 --- a/ruby_wasm.gemspec +++ b/ruby_wasm.gemspec @@ -22,7 +22,7 @@ Gem::Specification.new do |spec| spec.files = Dir.chdir(__dir__) do `git ls-files -z`.split("\x0").reject do |f| (f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|travis|circleci)|appveyor)}) || - f.match(%r{\Apackages/}) + f.match(%r{\A(?:packages|builders)/}) end end spec.bindir = "exe"