wasm 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/assets/mruby/include/mrbconf.h +143 -0
- data/assets/mruby/include/mruby.h +1284 -0
- data/assets/mruby/include/mruby/array.h +279 -0
- data/assets/mruby/include/mruby/boxing_nan.h +102 -0
- data/assets/mruby/include/mruby/boxing_no.h +56 -0
- data/assets/mruby/include/mruby/boxing_word.h +136 -0
- data/assets/mruby/include/mruby/class.h +94 -0
- data/assets/mruby/include/mruby/common.h +72 -0
- data/assets/mruby/include/mruby/compile.h +194 -0
- data/assets/mruby/include/mruby/data.h +75 -0
- data/assets/mruby/include/mruby/debug.h +66 -0
- data/assets/mruby/include/mruby/dump.h +196 -0
- data/assets/mruby/include/mruby/error.h +75 -0
- data/assets/mruby/include/mruby/gc.h +91 -0
- data/assets/mruby/include/mruby/hash.h +182 -0
- data/assets/mruby/include/mruby/irep.h +62 -0
- data/assets/mruby/include/mruby/istruct.h +47 -0
- data/assets/mruby/include/mruby/khash.h +274 -0
- data/assets/mruby/include/mruby/numeric.h +161 -0
- data/assets/mruby/include/mruby/object.h +45 -0
- data/assets/mruby/include/mruby/opcode.h +161 -0
- data/assets/mruby/include/mruby/proc.h +131 -0
- data/assets/mruby/include/mruby/range.h +49 -0
- data/assets/mruby/include/mruby/re.h +16 -0
- data/assets/mruby/include/mruby/string.h +440 -0
- data/assets/mruby/include/mruby/throw.h +55 -0
- data/assets/mruby/include/mruby/value.h +309 -0
- data/assets/mruby/include/mruby/variable.h +138 -0
- data/assets/mruby/include/mruby/version.h +110 -0
- data/assets/mruby/libmruby.a +0 -0
- data/assets/mruby_init.c +16 -0
- data/assets/template.html +17 -0
- data/bin/ruby-wasm +150 -0
- data/build_config.rb +13 -0
- data/lib/wasm.rb +0 -5
- data/lib/wasm/version.rb +4 -2
- metadata +46 -65
- data/.gitignore +0 -9
- data/.travis.yml +0 -5
- data/Gemfile +0 -4
- data/LICENSE.txt +0 -21
- data/README.md +0 -40
- data/Rakefile +0 -10
- data/bin/console +0 -14
- data/bin/setup +0 -8
- data/wasm.gemspec +0 -26
@@ -0,0 +1,110 @@
|
|
1
|
+
/*
|
2
|
+
** mruby/version.h - mruby version definition
|
3
|
+
**
|
4
|
+
** See Copyright Notice in mruby.h
|
5
|
+
*/
|
6
|
+
|
7
|
+
#ifndef MRUBY_VERSION_H
|
8
|
+
#define MRUBY_VERSION_H
|
9
|
+
|
10
|
+
#include "common.h"
|
11
|
+
|
12
|
+
/**
|
13
|
+
* mruby version definition macros
|
14
|
+
*/
|
15
|
+
MRB_BEGIN_DECL
|
16
|
+
|
17
|
+
/*
|
18
|
+
* A passed in expression.
|
19
|
+
*/
|
20
|
+
#define MRB_STRINGIZE0(expr) #expr
|
21
|
+
|
22
|
+
/*
|
23
|
+
* Passes in an expression to MRB_STRINGIZE0.
|
24
|
+
*/
|
25
|
+
#define MRB_STRINGIZE(expr) MRB_STRINGIZE0(expr)
|
26
|
+
|
27
|
+
/*
|
28
|
+
* The version of Ruby used by mruby.
|
29
|
+
*/
|
30
|
+
#define MRUBY_RUBY_VERSION "1.9"
|
31
|
+
|
32
|
+
/*
|
33
|
+
* Ruby engine.
|
34
|
+
*/
|
35
|
+
#define MRUBY_RUBY_ENGINE "mruby"
|
36
|
+
|
37
|
+
/*
|
38
|
+
* Major release version number.
|
39
|
+
*/
|
40
|
+
#define MRUBY_RELEASE_MAJOR 1
|
41
|
+
|
42
|
+
/*
|
43
|
+
* Minor release version number.
|
44
|
+
*/
|
45
|
+
#define MRUBY_RELEASE_MINOR 4
|
46
|
+
|
47
|
+
/*
|
48
|
+
* Tiny release version number.
|
49
|
+
*/
|
50
|
+
#define MRUBY_RELEASE_TEENY 1
|
51
|
+
|
52
|
+
/*
|
53
|
+
* The mruby version.
|
54
|
+
*/
|
55
|
+
#define MRUBY_VERSION MRB_STRINGIZE(MRUBY_RELEASE_MAJOR) "." MRB_STRINGIZE(MRUBY_RELEASE_MINOR) "." MRB_STRINGIZE(MRUBY_RELEASE_TEENY)
|
56
|
+
|
57
|
+
/*
|
58
|
+
* Release number.
|
59
|
+
*/
|
60
|
+
#define MRUBY_RELEASE_NO (MRUBY_RELEASE_MAJOR * 100 * 100 + MRUBY_RELEASE_MINOR * 100 + MRUBY_RELEASE_TEENY)
|
61
|
+
|
62
|
+
/*
|
63
|
+
* Release year.
|
64
|
+
*/
|
65
|
+
#define MRUBY_RELEASE_YEAR 2018
|
66
|
+
|
67
|
+
/*
|
68
|
+
* Release month.
|
69
|
+
*/
|
70
|
+
#define MRUBY_RELEASE_MONTH 4
|
71
|
+
|
72
|
+
/*
|
73
|
+
* Release day.
|
74
|
+
*/
|
75
|
+
#define MRUBY_RELEASE_DAY 27
|
76
|
+
|
77
|
+
/*
|
78
|
+
* Release date as a string.
|
79
|
+
*/
|
80
|
+
#define MRUBY_RELEASE_DATE MRB_STRINGIZE(MRUBY_RELEASE_YEAR) "-" MRB_STRINGIZE(MRUBY_RELEASE_MONTH) "-" MRB_STRINGIZE(MRUBY_RELEASE_DAY)
|
81
|
+
|
82
|
+
/*
|
83
|
+
* The year mruby was first created.
|
84
|
+
*/
|
85
|
+
#define MRUBY_BIRTH_YEAR 2010
|
86
|
+
|
87
|
+
/*
|
88
|
+
* MRuby's authors.
|
89
|
+
*/
|
90
|
+
#define MRUBY_AUTHOR "mruby developers"
|
91
|
+
|
92
|
+
/*
|
93
|
+
* mruby's version, and release date.
|
94
|
+
*/
|
95
|
+
#define MRUBY_DESCRIPTION \
|
96
|
+
"mruby " MRUBY_VERSION \
|
97
|
+
" (" MRUBY_RELEASE_DATE ") " \
|
98
|
+
|
99
|
+
/*
|
100
|
+
* mruby's copyright information.
|
101
|
+
*/
|
102
|
+
#define MRUBY_COPYRIGHT \
|
103
|
+
"mruby - Copyright (c) " \
|
104
|
+
MRB_STRINGIZE(MRUBY_BIRTH_YEAR)"-" \
|
105
|
+
MRB_STRINGIZE(MRUBY_RELEASE_YEAR)" " \
|
106
|
+
MRUBY_AUTHOR \
|
107
|
+
|
108
|
+
MRB_END_DECL
|
109
|
+
|
110
|
+
#endif /* MRUBY_VERSION_H */
|
Binary file
|
data/assets/mruby_init.c
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#include <mruby.h>
|
2
|
+
#include <mruby/irep.h>
|
3
|
+
|
4
|
+
int main() {
|
5
|
+
mrb_state *mrb = mrb_open();
|
6
|
+
|
7
|
+
if (!mrb) { /* handle error */ }
|
8
|
+
|
9
|
+
mrb_load_irep(mrb, ruby_app);
|
10
|
+
|
11
|
+
// If an exception, print error
|
12
|
+
if (mrb->exc) mrb_print_error(mrb);
|
13
|
+
|
14
|
+
mrb_close(mrb);
|
15
|
+
return 0;
|
16
|
+
}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="en" dir="ltr">
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8">
|
5
|
+
<title>Ruby on WebAssembly</title>
|
6
|
+
<style>
|
7
|
+
body {
|
8
|
+
font-family: system-ui;
|
9
|
+
}
|
10
|
+
</style>
|
11
|
+
</head>
|
12
|
+
<body>
|
13
|
+
<h1>Ruby on WebAssembly</h1>
|
14
|
+
<p>Open the web console to see output and errors.</p>
|
15
|
+
</body>
|
16
|
+
<script src="app.js"></script>
|
17
|
+
</html>
|
data/bin/ruby-wasm
ADDED
@@ -0,0 +1,150 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'wasm/version'
|
3
|
+
|
4
|
+
# The installed gem directory
|
5
|
+
@gem_dir = "#{Gem::Specification.find_by_name('wasm').gem_dir}"
|
6
|
+
|
7
|
+
# Compilation optimizations flag
|
8
|
+
@optimize = false
|
9
|
+
|
10
|
+
# Extending `String` to include some fancy colors
|
11
|
+
class String
|
12
|
+
def colorize(c); "\e[#{c}m#{self}\e[0m" end
|
13
|
+
def bold; colorize('1') end
|
14
|
+
def success; colorize('1;32') end
|
15
|
+
def error; colorize('1;31') end
|
16
|
+
end
|
17
|
+
|
18
|
+
# Build a Ruby file
|
19
|
+
def build(rb_file)
|
20
|
+
|
21
|
+
# Clean up the build directory
|
22
|
+
FileUtils.rm_f 'build/app.c'
|
23
|
+
FileUtils.rm_f 'build/app.js'
|
24
|
+
FileUtils.rm_f 'build/app.wasm'
|
25
|
+
FileUtils.rm_f 'build/app.html'
|
26
|
+
|
27
|
+
# Check if source file provided is good
|
28
|
+
if !rb_file
|
29
|
+
puts 'Please provide a Ruby file to build'
|
30
|
+
exit
|
31
|
+
elsif !File.exists? rb_file
|
32
|
+
puts "Can't find file: #{rb_file}"
|
33
|
+
exit
|
34
|
+
end
|
35
|
+
|
36
|
+
# Create the build directory
|
37
|
+
FileUtils.mkdir_p 'build'
|
38
|
+
|
39
|
+
# Create MRuby bytecode from Ruby source file
|
40
|
+
`mrbc -Bruby_app -obuild/app.c #{rb_file}`
|
41
|
+
|
42
|
+
# Add MRuby init code to app bytecode
|
43
|
+
open('build/app.c', 'a') do |f|
|
44
|
+
f << "\n\n" << File.read("#{@gem_dir}/assets/mruby_init.c")
|
45
|
+
end
|
46
|
+
|
47
|
+
# Compile using Emscripten
|
48
|
+
`emcc -s WASM=1 #{ if @optimize then '-Os' end } -I #{@gem_dir + '/assets/mruby/include'} build/app.c #{@gem_dir + '/assets/mruby/libmruby.a'} -o build/app.js #{ if @optimize then '--closure 1' end }`
|
49
|
+
|
50
|
+
# Copy HTML template from gem assets to build directory
|
51
|
+
FileUtils.cp "#{@gem_dir}/assets/template.html", 'build/app.html'
|
52
|
+
|
53
|
+
# Clean up
|
54
|
+
FileUtils.rm_f 'build/app.c'
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
# Serve a build WebAssembly binary
|
59
|
+
def serve(open_browser)
|
60
|
+
|
61
|
+
if !File.exists? 'build/app.html'
|
62
|
+
puts 'No WebAssembly app built!'
|
63
|
+
exit
|
64
|
+
end
|
65
|
+
|
66
|
+
if open_browser
|
67
|
+
open_cmd = 'open'
|
68
|
+
|
69
|
+
case RUBY_PLATFORM
|
70
|
+
when /linux/
|
71
|
+
open_cmd = "xdg-#{open_cmd}"
|
72
|
+
when /mingw/
|
73
|
+
open_cmd = 'start'
|
74
|
+
end
|
75
|
+
|
76
|
+
Thread.new do
|
77
|
+
sleep 2
|
78
|
+
`#{open_cmd} http://localhost:8000/app.html`
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
`ruby -run -ehttpd ./build -p8000`
|
83
|
+
end
|
84
|
+
|
85
|
+
# Check for problems
|
86
|
+
def doctor
|
87
|
+
|
88
|
+
errors = false
|
89
|
+
|
90
|
+
puts "\nChecking for Emscripten tools"
|
91
|
+
|
92
|
+
# Check for `emcc`
|
93
|
+
print ' emcc...'
|
94
|
+
if `which emcc`.empty?
|
95
|
+
puts 'not found'.error
|
96
|
+
errors = true
|
97
|
+
else
|
98
|
+
puts 'found'.success
|
99
|
+
end
|
100
|
+
|
101
|
+
# Check for `emar`
|
102
|
+
print ' emar...'
|
103
|
+
if `which emar`.empty?
|
104
|
+
puts 'not found'.error
|
105
|
+
errors = true
|
106
|
+
else
|
107
|
+
puts 'found'.success
|
108
|
+
end
|
109
|
+
|
110
|
+
if errors
|
111
|
+
puts "\nErrors were found!\n\n"
|
112
|
+
puts "Did you run \`./emsdk_env.sh\` ?", "For help, check out the \"Getting Started\" guide on webassembly.org\n\n"
|
113
|
+
else
|
114
|
+
puts "\n👍 Everything looks good!\n\n"
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
118
|
+
|
119
|
+
# Check Command-line Arguments #################################################
|
120
|
+
|
121
|
+
usage = 'Ruby on WebAssembly'.bold + "\n
|
122
|
+
Usage: ruby-wasm <command> <options>
|
123
|
+
[-v|--version]
|
124
|
+
|
125
|
+
Summary of commands and options:
|
126
|
+
build <file.rb> Build a Ruby source file
|
127
|
+
--optimize Compile with all optimizations
|
128
|
+
serve Serve the build WebAssembly binary
|
129
|
+
-o|--open Open the default web browser after serving
|
130
|
+
doctor Check for problems with your WebAssembly toolchain
|
131
|
+
-v|--version Prints the installed version\n\n"
|
132
|
+
|
133
|
+
case ARGV[0]
|
134
|
+
when 'build'
|
135
|
+
if ARGV.delete '--optimize' then @optimize = true end
|
136
|
+
build ARGV[1]
|
137
|
+
when 'serve'
|
138
|
+
case ARGV[1]
|
139
|
+
when '-o', '--open'
|
140
|
+
serve(true)
|
141
|
+
else
|
142
|
+
serve(false)
|
143
|
+
end
|
144
|
+
when 'doctor'
|
145
|
+
doctor
|
146
|
+
when '-v', '--version'
|
147
|
+
puts WASM::VERSION
|
148
|
+
else
|
149
|
+
puts usage
|
150
|
+
end
|
data/build_config.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
MRuby::Build.new do |conf|
|
2
|
+
toolchain :gcc
|
3
|
+
conf.gembox 'default'
|
4
|
+
end
|
5
|
+
|
6
|
+
MRuby::CrossBuild.new('emscripten') do |conf|
|
7
|
+
toolchain :clang
|
8
|
+
conf.gembox 'default'
|
9
|
+
conf.cc.command = 'emcc'
|
10
|
+
conf.cc.flags = %W(-Os)
|
11
|
+
conf.linker.command = 'emcc'
|
12
|
+
conf.archiver.command = 'emar'
|
13
|
+
end
|
data/lib/wasm.rb
CHANGED
data/lib/wasm/version.rb
CHANGED
metadata
CHANGED
@@ -1,76 +1,59 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wasm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- Tom Black
|
8
8
|
autorequire:
|
9
|
-
bindir:
|
9
|
+
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '1.13'
|
20
|
-
type: :development
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '1.13'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: rake
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '10.0'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '10.0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: minitest
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '5.0'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '5.0'
|
55
|
-
description:
|
56
|
-
email:
|
57
|
-
- nasa42@gmail.com
|
58
|
-
executables: []
|
11
|
+
date: 2018-04-29 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Helping you get started with Ruby and WebAssembly
|
14
|
+
email: tom@blacktm.com
|
15
|
+
executables:
|
16
|
+
- ruby-wasm
|
59
17
|
extensions: []
|
60
18
|
extra_rdoc_files: []
|
61
19
|
files:
|
62
|
-
-
|
63
|
-
-
|
64
|
-
-
|
65
|
-
-
|
66
|
-
-
|
67
|
-
-
|
68
|
-
-
|
69
|
-
-
|
20
|
+
- assets/mruby/include/mrbconf.h
|
21
|
+
- assets/mruby/include/mruby.h
|
22
|
+
- assets/mruby/include/mruby/array.h
|
23
|
+
- assets/mruby/include/mruby/boxing_nan.h
|
24
|
+
- assets/mruby/include/mruby/boxing_no.h
|
25
|
+
- assets/mruby/include/mruby/boxing_word.h
|
26
|
+
- assets/mruby/include/mruby/class.h
|
27
|
+
- assets/mruby/include/mruby/common.h
|
28
|
+
- assets/mruby/include/mruby/compile.h
|
29
|
+
- assets/mruby/include/mruby/data.h
|
30
|
+
- assets/mruby/include/mruby/debug.h
|
31
|
+
- assets/mruby/include/mruby/dump.h
|
32
|
+
- assets/mruby/include/mruby/error.h
|
33
|
+
- assets/mruby/include/mruby/gc.h
|
34
|
+
- assets/mruby/include/mruby/hash.h
|
35
|
+
- assets/mruby/include/mruby/irep.h
|
36
|
+
- assets/mruby/include/mruby/istruct.h
|
37
|
+
- assets/mruby/include/mruby/khash.h
|
38
|
+
- assets/mruby/include/mruby/numeric.h
|
39
|
+
- assets/mruby/include/mruby/object.h
|
40
|
+
- assets/mruby/include/mruby/opcode.h
|
41
|
+
- assets/mruby/include/mruby/proc.h
|
42
|
+
- assets/mruby/include/mruby/range.h
|
43
|
+
- assets/mruby/include/mruby/re.h
|
44
|
+
- assets/mruby/include/mruby/string.h
|
45
|
+
- assets/mruby/include/mruby/throw.h
|
46
|
+
- assets/mruby/include/mruby/value.h
|
47
|
+
- assets/mruby/include/mruby/variable.h
|
48
|
+
- assets/mruby/include/mruby/version.h
|
49
|
+
- assets/mruby/libmruby.a
|
50
|
+
- assets/mruby_init.c
|
51
|
+
- assets/template.html
|
52
|
+
- bin/ruby-wasm
|
53
|
+
- build_config.rb
|
70
54
|
- lib/wasm.rb
|
71
55
|
- lib/wasm/version.rb
|
72
|
-
-
|
73
|
-
homepage: https://github.com/nasa42
|
56
|
+
homepage: https://github.com/blacktm/ruby-wasm
|
74
57
|
licenses:
|
75
58
|
- MIT
|
76
59
|
metadata: {}
|
@@ -90,10 +73,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
90
73
|
version: '0'
|
91
74
|
requirements: []
|
92
75
|
rubyforge_project:
|
93
|
-
rubygems_version: 2.
|
76
|
+
rubygems_version: 2.7.6
|
94
77
|
signing_key:
|
95
78
|
specification_version: 4
|
96
|
-
summary:
|
97
|
-
past experiences, has a probability of 92%), please contact me if you'd like to
|
98
|
-
take this gem name.
|
79
|
+
summary: Ruby on WebAssembly
|
99
80
|
test_files: []
|