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.
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.
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/wardite/cli/cli.rb', line 17 def initialize(args) @invoke = @mapdir = nil @wasi = true # default to true @memsize = 1 = OptionParser.new do |opts| opts.on("--invoke [fnname]", "Invoke the function") { |v| @invoke = v } opts.on("--mapdir [dest[:src]]", "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("FILE.wasm") { } end .parse!(args) @file = args[0] || raise("require file argument") @args = (args[1..-1] || []) @args.unshift if @args[0] == '--' 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 |
Instance Method Details
#args ⇒ Object
44 45 46 47 48 49 50 51 52 |
# File 'lib/wardite/cli/cli.rb', line 44 def args @args.map do |a| if a.include? "." a.to_f else a.to_i end end end |
#invoke_function ⇒ Object
75 76 77 78 79 80 81 82 |
# File 'lib/wardite/cli/cli.rb', line 75 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
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/wardite/cli/cli.rb', line 85 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 end if defined? Bundler Bundler.with_original_env do instance.runtime._start end else instance.runtime._start end end |
#mount_dst ⇒ Object
113 114 115 116 117 118 |
# File 'lib/wardite/cli/cli.rb', line 113 def mount_dst m = mapdir&.split(":") if m m.size == 2 ? m[1] : m[0] end end |
#mount_src ⇒ Object
107 108 109 |
# File 'lib/wardite/cli/cli.rb', line 107 def mount_src mapdir&.split(":")&.first end |
#new_instance ⇒ Object
55 56 57 58 59 60 61 62 |
# File 'lib/wardite/cli/cli.rb', line 55 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
65 66 67 68 69 70 71 72 |
# File 'lib/wardite/cli/cli.rb', line 65 def run if invoke invoke_function else invoke_wasi if wasi raise("requires function name to invoke") end end |