-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcpp-wasm-build
executable file
·73 lines (67 loc) · 1.6 KB
/
cpp-wasm-build
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
#!/usr/bin/env node
// -*- mode: js -*-
const fs = require('fs');
const path = require('path');
const lockfile = require('proper-lockfile');
const loaderRunner = require('loader-runner');
async function sleep(ms) {
return new Promise(resolve => { setTimeout(resolve, ms); });
}
async function lock(filename) {
while (true) {
try {
return await lockfile.lock(filename);
}
catch(err) {
await sleep(500);
}
}
}
async function runLoader(filename, config) {
return new Promise((resolve, reject) => {
loaderRunner.runLoaders(
{
resource: filename,
loaders: [{
loader: require.resolve('cpp-wasm-loader'),
options: config
}],
context: { minimize: true },
readResource: fs.readFile.bind(fs),
},
(err, result) => {
if (err) {
reject(err);
}
else {
resolve(result);
}
}
);
});
}
async function main() {
const filename = process.argv[2];
const config = JSON.parse(process.argv[3] || '{}');
const flags_ = config.emccFlags;
config.emccFlags = (flags/*, mode*/) => {
flags = flags.filter(flag => !/^-O/.test(flag));
if (flags_) {
flags = flags.concat(flags_);
}
return flags;
};
//console.error('config', config);
process.chdir(path.dirname(filename));
const unlock = await lock(filename);
try {
const result = await runLoader(filename, config);
const output = result.result[0];
//console.error('result = ', output);
console.log(output);
}
finally {
unlock();
}
}
main().catch(err => { throw err; });