diff --git a/Rakefile b/Rakefile index 71b4f288e..49dd52f4c 100644 --- a/Rakefile +++ b/Rakefile @@ -16,7 +16,8 @@ BUILDS = BUILD_SOURCES .product(BUILD_PROFILES) .map { |src, profile| [src, "wasm32-unknown-wasip1", profile] } + - BUILD_SOURCES.map { |src| [src, "wasm32-unknown-emscripten", "full"] } + BUILD_SOURCES.map { |src| [src, "wasm32-unknown-emscripten", "full"] } + + BUILD_SOURCES.map { |src| [src, "wasm32-unknown-icp", "full"] } NPM_PACKAGES = [ { diff --git a/lib/ruby_wasm/build/product/crossruby.rb b/lib/ruby_wasm/build/product/crossruby.rb index 4ed9f2f9a..e4f0a8253 100644 --- a/lib/ruby_wasm/build/product/crossruby.rb +++ b/lib/ruby_wasm/build/product/crossruby.rb @@ -177,6 +177,7 @@ def initialize(params, build_dir, rubies_dir, baseruby, source, toolchain) end def configure(executor, reconfigure: false) + if !File.exist?("#{build_dir}/Makefile") || reconfigure args = configure_args(RbConfig::CONFIG["host"], toolchain) executor.system source.configure_file, *args, chdir: build_dir @@ -369,6 +370,13 @@ def configure_args(build_triple, toolchain) unless env_emcc_ldflags.empty? ldflags << env_emcc_ldflags end + when "wasm32-unknown-icp" + ldflags = ["-Xlinker", "--stack-first"] #, "-Xlinker", "stack-size=16777216"] + # ldflags.concat(%w[-s MODULARIZE=1]) + env_emcc_ldflags = ENV["RUBY_WASM_EMCC_LDFLAGS"] || "" + unless env_emcc_ldflags.empty? + ldflags << env_emcc_ldflags + end else raise "unknown target: #{target}" end diff --git a/lib/ruby_wasm/build/product/product.rb b/lib/ruby_wasm/build/product/product.rb index 726517c3a..a9581d3a1 100644 --- a/lib/ruby_wasm/build/product/product.rb +++ b/lib/ruby_wasm/build/product/product.rb @@ -17,6 +17,8 @@ def system_triplet_args args.concat(%W[--host wasm32-wasi]) when "wasm32-unknown-emscripten" args.concat(%W[--host wasm32-emscripten]) + when "wasm32-unknown-icp" + args.concat(%W[--host wasm32]) else raise "unknown target: #{@target.triple}" end diff --git a/lib/ruby_wasm/build/toolchain.rb b/lib/ruby_wasm/build/toolchain.rb index 67fa201f3..ecc44c59b 100644 --- a/lib/ruby_wasm/build/toolchain.rb +++ b/lib/ruby_wasm/build/toolchain.rb @@ -27,6 +27,8 @@ def self.get(target, options, build_dir = nil) ) when "wasm32-unknown-emscripten" return RubyWasm::Emscripten.new + when "wasm32-unknown-icp" + return RubyWasm::Icp.new else raise "unknown target: #{target}" end @@ -285,4 +287,25 @@ def find_tool(name) @tools[name] end end + + class Icp < Toolchain + def initialize + @tools = { + cc: "emcc", + cxx: "em++", + ld: "emcc", + ar: "emar", + ranlib: "emranlib" + } + @name = "emscripten" + end + + def install(executor) + end + + def find_tool(name) + Toolchain.check_executable(@tools[name]) + @tools[name] + end + end end