Skip to content

Commit fd7f0a9

Browse files
committed
[WiP] Try to fix Closure when building with -sENVIRONMENT=web
Details: ``` building:ERROR: Closure compiler run failed: building:ERROR: /tmp/emscripten_temp_j4p9p4rt/vips-es6.jso3.js:5791:28: ERROR - [JSC_UNDEFINED_VARIABLE] variable process is undeclared 5791| var wasmfsNodeIsWindows = !!process.platform.match(/^win/); ^^^^^^^ building:ERROR: /tmp/emscripten_temp_j4p9p4rt/vips-es6.jso3.js:6006:15: ERROR - [JSC_UNDEFINED_VARIABLE] variable require is undeclared 6006| var nodePath = require("node:path"); ^^^^^^^ 2 error(s), 0 warning(s) ```
1 parent 7263eff commit fd7f0a9

File tree

2 files changed

+49
-4
lines changed

2 files changed

+49
-4
lines changed

src/lib/libwasmfs_node.js

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,28 @@
55
*/
66

77
addToLibrary({
8-
$wasmfsNodeIsWindows: "!!process.platform.match(/^win/)",
9-
$nodePath: "require('node:path')",
8+
#if !ENVIRONMENT_MAY_BE_NODE
9+
_wasmfs_node_readdir: (path_p, vec) => {},
10+
_wasmfs_node_get_mode: (path_p, mode_p) => {},
11+
_wasmfs_node_stat_size: (path_p, size_p) => {},
12+
_wasmfs_node_fstat_size: (fd, size_p) => {},
13+
_wasmfs_node_insert_file: (path_p, mode) => {},
14+
_wasmfs_node_insert_directory: (path_p, mode) => {},
15+
_wasmfs_node_unlink: (path_p) => {},
16+
_wasmfs_node_rmdir: (path_p) => {},
17+
_wasmfs_node_truncate: (path_p, len) => {},
18+
_wasmfs_node_ftruncate: (fd, len) => {},
19+
_wasmfs_node_open: (path_p, mode_p) => {},
20+
_wasmfs_node_rename: (from_path_p, to_path_p) => {},
21+
_wasmfs_node_symlink: (target_path_p, linkpath_path_p) => {},
22+
_wasmfs_node_readlink: (path_p, target_p, bufsize) => {},
23+
_wasmfs_node_close: (fd) => {},
24+
_wasmfs_node_read: (fd, buf_p, len, pos, nread_p) => {},
25+
_wasmfs_node_write: (fd, buf_p, len, pos, nwritten_p) => {},
26+
_wasmfs_node_path_get_root: (path_p, target_p, bufsize) => {},
27+
#else
28+
$wasmfsNodeIsWindows: "!!globalThis.process?.platform.match(/^win/)",
29+
$nodePath: "ENVIRONMENT_IS_NODE ? require('node:path') : undefined",
1030

1131
$wasmfsNodeConvertNodeCode__deps: ['$ERRNO_CODES'],
1232
$wasmfsNodeConvertNodeCode: (e) => {
@@ -194,7 +214,7 @@ addToLibrary({
194214
});
195215
},
196216

197-
_wasmfs_node_close__deps: [],
217+
_wasmfs_node_close__deps: ['$wasmfsTry'],
198218
_wasmfs_node_close: (fd) => {
199219
return wasmfsTry(() => {
200220
fs.closeSync(fd);
@@ -228,5 +248,5 @@ addToLibrary({
228248
_wasmfs_node_path_get_root: (path_p, target_p, bufsize) => {
229249
return stringToUTF8(nodePath.parse(UTF8ToString(path_p)).root, target_p, bufsize);
230250
},
231-
251+
#endif
232252
});

test/test_other.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9292,6 +9292,31 @@ def test_noderawfs_open_abspath(self):
92929292
''')
92939293
self.do_runf('open.c', cflags=['-sNODERAWFS'], args=[os.path.abspath('foo')])
92949294

9295+
def test_wasmfs_nodefs_stubs(self):
9296+
# This is essentially equivalent to building with `-sWASMFS -sNODERAWFS`, except that
9297+
# the Wasm binary can also be used on the web. Ensure that this use case is supported.
9298+
create_file('main.c', r'''
9299+
#include <emscripten/emscripten.h>
9300+
#include <emscripten/wasmfs.h>
9301+
9302+
EM_JS(bool, is_node, (), { return ENVIRONMENT_IS_NODE; });
9303+
9304+
backend_t wasmfs_create_root_dir() {
9305+
return is_node() ? wasmfs_create_node_backend("")
9306+
: wasmfs_create_memory_backend();
9307+
}
9308+
9309+
backend_t wasmfs_create_working_dir(backend_t root_backend) {
9310+
return is_node() ? wasmfs_create_node_backend(".")
9311+
: root_backend;
9312+
}
9313+
9314+
int main(int argc, char** argv) {
9315+
return 0;
9316+
}
9317+
''')
9318+
self.run_process([EMCC, 'main.c', '-sWASMFS', '-sENVIRONMENT=web'])
9319+
92959320
def test_noderawfs_readfile_prerun(self):
92969321
create_file('foo', 'bar')
92979322
self.add_pre_run("console.log(FS.readFile('foo', { encoding: 'utf8' }));")

0 commit comments

Comments
 (0)