1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
use std::{fs, process::Command};
use util::{get_project_dir, get_target_dir, RunOr};
fn main() {
println!("Building bench.cpp");
let build_dir = get_target_dir().unwrap();
fs::create_dir_all(&build_dir).unwrap();
let mut src_dir = get_project_dir().unwrap();
src_dir.push(file!());
src_dir.pop();
let container = "bench_cpp_builder";
let container_exists = Command::new("docker")
.arg("container")
.arg("inspect")
.arg(container)
.run_or_none()
.is_some();
if container_exists {
Command::new("docker")
.arg("kill")
.arg(container)
.run_or_panic();
}
Command::new("docker")
.arg("run")
.arg(format!("--name={}", container))
.arg(format!("--volume={}:/src:ro", src_dir.to_str().unwrap()))
.arg(format!("--volume={}:/build", build_dir.to_str().unwrap()))
.arg("--detach")
.arg("--entrypoint=sleep")
.arg("--rm")
.arg("sagansoftware/eosio.cdt:1.7.0")
.arg("30")
.run_or_panic();
Command::new("docker")
.arg("exec")
.arg(container)
.arg("eosio-cpp")
.arg("-o=/tmp/bench_cpp.wasm")
.arg("-abigen")
.arg("-abigen_output=/tmp/bench.json")
.arg("-contract=bench")
.arg("/src/contract.cpp")
.run_or_panic();
Command::new("docker")
.arg("exec")
.arg(container)
.arg("mv")
.arg("/tmp/bench_cpp.wasm")
.arg("/build")
.run_or_panic();
Command::new("docker")
.arg("exec")
.arg(container)
.arg("mv")
.arg("/tmp/bench_cpp.abi")
.arg("/build/bench.abi.json")
.run_or_panic();
Command::new("docker")
.arg("kill")
.arg(container)
.run_or_panic();
}