Skip to content

Commit 5014dc8

Browse files
committed
feat: support wasm
1 parent 54c5d03 commit 5014dc8

File tree

4 files changed

+58
-29
lines changed

4 files changed

+58
-29
lines changed

Rakefile

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,25 @@ namespace :mruby do
1919
host_agent.clean_all
2020
host_agent.mruby_download
2121
end
22-
host_agent.mruby_config
23-
if !host_agent.mruby_build_dir.exist?
22+
23+
config_changed = host_agent.config_changed
24+
if config_changed
25+
host_agent.mruby_config
26+
end
27+
28+
if !host_agent.mruby_build_dir.exist? || config_changed
2429
host_agent.mruby_build
2530
end
2631
end
2732

2833
task :init_wasm => [:"mruby:init"] do
29-
wasm_agent.mruby_config
30-
if !wasm_agent.mruby_build_dir.exist?
34+
35+
config_changed = wasm_agent.config_changed
36+
if config_changed
37+
wasm_agent.mruby_config
38+
end
39+
40+
if !wasm_agent.mruby_build_dir.exist? || config_changed
3141
wasm_agent.mruby_build
3242
end
3343
end
@@ -48,6 +58,11 @@ task :build => [:"mruby:init"] do
4858
host_agent.build
4959
end
5060

61+
desc "run wasm program"
62+
task :"run:wasm" => [:"mruby:init_wasm"] do
63+
wasm_agent.run
64+
end
65+
5166
desc "build wasm program"
5267
task :"build:wasm" => [:"mruby:init_wasm"] do
5368
wasm_agent.build

config/wasm.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
MRuby::Build.new do |conf|
22
toolchain :gcc
3+
conf.gem :mgem => 'mruby-os'
34
conf.gembox 'default'
45
end
56

task/agent/base.rb

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@
22
require_relative "./utils"
33

44
class BaseAgent
5+
56
include Utils
67

78
attr_accessor :platform
89
attr_reader :mruby_dir, :cache_dir, :build_dir, :mruby_build_dir
910
attr_reader :mruby, :mrbc
11+
attr_reader :custom_build_config_file, :copied_custom_build_config_file
1012
def initialize(app_name:, debug: false)
1113
@app_name = app_name
1214

@@ -102,6 +104,11 @@ def mruby_config
102104
shell_cp @custom_build_config_file, @copied_custom_build_config_file
103105
end
104106

107+
def config_changed
108+
file_content_change? @custom_build_config_file, @copied_custom_build_config_file
109+
end
110+
111+
105112
def clean_dir(dir_path)
106113
shell_rm dir_path
107114
end
@@ -150,12 +157,10 @@ def build_to_c_code
150157
end
151158
end
152159

153-
def wrap_code
154-
155-
end
156160

157161
def run
158-
pack_code(@cache_dir)
162+
shell_clean @cache_dir
163+
pack_code @cache_dir
159164
shell "#{@mruby} #{@cache_dir}/main.rb"
160165
end
161166

task/agent/wasm.rb

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -18,34 +18,42 @@ def build
1818
shell_clean @build_dir
1919
@host_agent.pack_code(@build_dir)
2020
@host_agent.build_to_c_code
21-
build_code
21+
build_code @build_dir
2222
build_clean
2323
end
2424

25-
def web_template
26-
File.open("#{@build_dir}/main.c", "w") do |f|
25+
def generate_web_template(dir_path)
26+
File.open("#{dir_path}/index.html", "w") do |f|
2727
template = <<-CODE
28-
#include <mruby.h>
29-
#include <mruby/irep.h>
30-
extern const uint8_t #{@code_wrapper_name}[];
31-
32-
int
33-
main(void)
34-
{
35-
mrb_state *mrb = mrb_open();
36-
if (!mrb) { /* handle error */ }
37-
mrb_load_irep(mrb, #{@code_wrapper_name});
38-
mrb_close(mrb);
39-
return 0;
40-
}
41-
28+
<!DOCTYPE html>
29+
<html lang="en">
30+
<head>
31+
<meta charset="UTF-8">
32+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
33+
<title>Document</title>
34+
</head>
35+
<body>
36+
<h1>Hello World</h1>
37+
<script src="./app.js"></script>
38+
</body>
39+
</html>
4240
CODE
4341

44-
f.puts template
45-
end
42+
f.puts template
43+
end
44+
end
45+
46+
def serve(dir_path)
47+
system("ruby -run -e httpd #{dir_path}")
48+
end
49+
50+
def run
51+
build
52+
serve @build_dir
4653
end
4754

48-
def build_code
49-
shell "emcc -s WASM=1 -Os -I #{@mruby_include_dir} #{@build_dir}/*.c #{@mruby_lib_dir}/libmruby.a -lm -o #{@build_dir}/#{@app_name}.js --closure 1"
55+
def build_code(dir_path)
56+
shell "emcc -s WASM=1 -Os -I #{@mruby_include_dir} #{dir_path}/*.c #{@mruby_lib_dir}/libmruby.a -lm -o #{dir_path}/#{@app_name}.js --closure 1"
57+
generate_web_template(dir_path)
5058
end
5159
end

0 commit comments

Comments
 (0)