Class: RubyWasm::Binaryen

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby_wasm/build/toolchain.rb,
sig/ruby_wasm/build.rbs

Instance Method Summary collapse

Constructor Details

#initialize(build_dir: nil, binaryen_version: 108) ⇒ Binaryen

Returns a new instance of Binaryen.

Parameters:

  • build_dir: (String, nil) (defaults to: nil)
  • binaryen_version: (Integer) (defaults to: 108)


196
197
198
199
200
201
202
203
204
205
206
207
# File 'lib/ruby_wasm/build/toolchain.rb', line 196

def initialize(build_dir: nil, binaryen_version: 108)
  @wasm_opt_path = Toolchain.find_path("wasm-opt")
  @need_fetch_binaryen = @wasm_opt_path.nil?
  if @need_fetch_binaryen
    if build_dir.nil?
      raise "build_dir is required when wasm-opt not installed in PATH"
    end
    @binaryen_path = File.join(build_dir, "toolchain", "binaryen")
    @binaryen_version = binaryen_version
    @wasm_opt_path = File.join(@binaryen_path, "bin", "wasm-opt")
  end
end

Instance Method Details

#binaryen_pathString

Returns:

  • (String)


213
214
215
# File 'lib/ruby_wasm/build/toolchain.rb', line 213

def binaryen_path
  @binaryen_path
end

#binaryen_versionInteger

Returns:

  • (Integer)


217
218
219
# File 'lib/ruby_wasm/build/toolchain.rb', line 217

def binaryen_version
  @binaryen_version
end

#download_url(version) ⇒ String

Parameters:

  • version (Integer)

Returns:

  • (String)


221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
# File 'lib/ruby_wasm/build/toolchain.rb', line 221

def download_url(version)
  assets = [
    [
      /x86_64-linux/,
      "binaryen-version_#{@binaryen_version}-x86_64-linux.tar.gz"
    ],
    [
      /x86_64-darwin/,
      "binaryen-version_#{@binaryen_version}-x86_64-macos.tar.gz"
    ],
    [
      /arm64e?-darwin/,
      "binaryen-version_#{@binaryen_version}-arm64-macos.tar.gz"
    ]
  ]
  asset = assets.find { |os, _| os =~ RUBY_PLATFORM }&.at(1)
  if asset.nil?
    raise "unsupported platform for fetching Binaryen: #{RUBY_PLATFORM}"
  end
  "https://github.com/WebAssembly/binaryen/releases/download/version_#{@binaryen_version}/#{asset}"
end

#install(executor) ⇒ void

This method returns an undefined value.

Parameters:



243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
# File 'lib/ruby_wasm/build/toolchain.rb', line 243

def install(executor)
  return unless @need_fetch_binaryen
  binaryen_tarball = File.expand_path("../binaryen.tar.gz", @binaryen_path)
  unless File.exist? binaryen_tarball
    FileUtils.mkdir_p File.dirname(binaryen_tarball)
    executor.system "curl",
                    "-L",
                    "-o",
                    binaryen_tarball,
                    self.download_url(@binaryen_version)
  end

  unless File.exist? @binaryen_path
    FileUtils.mkdir_p @binaryen_path
    executor.system "tar",
                    "-C",
                    @binaryen_path,
                    "--strip-component",
                    "1",
                    "-xzf",
                    binaryen_tarball
  end
end

#wasm_optString

Returns:

  • (String)


209
210
211
# File 'lib/ruby_wasm/build/toolchain.rb', line 209

def wasm_opt
  @wasm_opt_path
end