Class: Wardite::Cli::Cli
- Inherits:
-
Object
- Object
- Wardite::Cli::Cli
- Defined in:
- lib/wardite/cli/cli.rb
Instance Attribute Summary collapse
-
#file ⇒ Object
readonly
: String.
-
#invoke ⇒ Object
readonly
Returns the value of attribute invoke.
-
#mapdir ⇒ Object
readonly
: String?.
-
#memsize ⇒ Object
readonly
: Integer.
-
#wasi ⇒ Object
readonly
: bool.
-
#yjit ⇒ Object
readonly
: bool.
Instance Method Summary collapse
- #args ⇒ Object
-
#initialize(args) ⇒ Cli
constructor
A new instance of Cli.
- #invoke_function ⇒ Object
- #invoke_wasi ⇒ Object
- #mount_dst ⇒ Object
- #mount_src ⇒ Object
- #new_instance ⇒ Object
- #run ⇒ Object
Constructor Details
#initialize(args) ⇒ Cli
Returns a new instance of Cli.
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/wardite/cli/cli.rb', line 18 def initialize(args) @invoke = @mapdir = nil @wasi = true # default to true @yjit = false @memsize = 1 = OptionParser.new do |opts| opts.version = Wardite::VERSION opts.on("--invoke [fnname]", "Invoke the function") { |v| @invoke = v } opts.on("--mapdir [dirs]", "Map the directory") { |v| @mapdir = v } opts.on("--memsize [size_in_bytes]", "Initial memory size") { |v| @memsize = (v.to_i / (64 * 1024).to_f).ceil.to_i } opts.on("--no-wasi", "Disable WASI feature") {|_v| @wasi = false } opts.on("--yjit", "Enable yjit if available; setting WARDITE_YJIT_ON=1 has the same effect") {|_v| @yjit = true } opts.on("FILE.wasm") { } end .parse!(args) @file = args[0] || raise("require file argument") @args = (args[1..-1] || []) @args.unshift if @args[0] == '--' if (yjit || ENV["WARDITE_YJIT_ON"] == "1") && (defined? RubyVM::YJIT) RubyVM::YJIT.enable end end |
Instance Attribute Details
#file ⇒ Object (readonly)
: String
11 12 13 |
# File 'lib/wardite/cli/cli.rb', line 11 def file @file end |
#invoke ⇒ Object (readonly)
Returns the value of attribute invoke.
9 10 11 |
# File 'lib/wardite/cli/cli.rb', line 9 def invoke @invoke end |
#mapdir ⇒ Object (readonly)
: String?
10 11 12 |
# File 'lib/wardite/cli/cli.rb', line 10 def mapdir @mapdir end |
#memsize ⇒ Object (readonly)
: Integer
12 13 14 |
# File 'lib/wardite/cli/cli.rb', line 12 def memsize @memsize end |
#wasi ⇒ Object (readonly)
: bool
13 14 15 |
# File 'lib/wardite/cli/cli.rb', line 13 def wasi @wasi end |
#yjit ⇒ Object (readonly)
: bool
14 15 16 |
# File 'lib/wardite/cli/cli.rb', line 14 def yjit @yjit end |
Instance Method Details
#args ⇒ Object
54 55 56 57 58 59 60 61 62 |
# File 'lib/wardite/cli/cli.rb', line 54 def args @args.map do |a| if a.include? "." a.to_f else a.to_i end end end |
#invoke_function ⇒ Object
88 89 90 91 92 93 94 95 |
# File 'lib/wardite/cli/cli.rb', line 88 def invoke_function unless invoke raise "--invoke not set" end instance = new_instance ret = instance.runtime.call(invoke, args) $stderr.puts "return value: #{ret.inspect}" end |
#invoke_wasi ⇒ Object
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/wardite/cli/cli.rb', line 98 def invoke_wasi instance = new_instance #: ::Wardite::Instance unless instance.wasi raise "WASI not activated" end instance.wasi.argv = ["wardite"] + @args if mapdir && mount_dst && mount_src # TODO: support multiple mapdir instance.wasi.mapdir[mount_dst] = mount_src instance.wasi.set_preopened_dir(mount_dst, mount_src) end if defined? Bundler Bundler.with_original_env do instance.runtime._start end else instance.runtime._start end end |
#mount_dst ⇒ Object
127 128 129 130 131 132 |
# File 'lib/wardite/cli/cli.rb', line 127 def mount_dst m = mapdir&.split(":") if m m.size == 2 ? m[1] : m[0] end end |
#mount_src ⇒ Object
121 122 123 |
# File 'lib/wardite/cli/cli.rb', line 121 def mount_src mapdir&.split(":")&.first end |
#new_instance ⇒ Object
65 66 67 68 69 70 71 72 |
# File 'lib/wardite/cli/cli.rb', line 65 def new_instance f = File.open(file) ins = Wardite::BinaryLoader::load_from_buffer(f, enable_wasi: wasi); if memsize > 1 ins.store.memories[0].grow(memsize) end ins end |
#run ⇒ Object
75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/wardite/cli/cli.rb', line 75 def run if invoke invoke_function else if wasi invoke_wasi return end raise("requires function name to invoke") end end |