diff --git a/system/lib/wasmfs/backend.h b/system/lib/wasmfs/backend.h index d8e584c01136a..60daf884d5746 100644 --- a/system/lib/wasmfs/backend.h +++ b/system/lib/wasmfs/backend.h @@ -21,6 +21,8 @@ class Backend { virtual std::shared_ptr createDirectory(mode_t mode) = 0; virtual std::shared_ptr createSymlink(std::string target) = 0; + virtual bool shouldMountSpecialFiles() { return true; } + virtual ~Backend() = default; }; diff --git a/system/lib/wasmfs/backends/node_backend.cpp b/system/lib/wasmfs/backends/node_backend.cpp index a3a7ad19b32f3..5358ca3bc65cf 100644 --- a/system/lib/wasmfs/backends/node_backend.cpp +++ b/system/lib/wasmfs/backends/node_backend.cpp @@ -294,6 +294,8 @@ class NodeBackend : public Backend { std::shared_ptr createSymlink(std::string target) override { WASMFS_UNREACHABLE("TODO: implement NodeBackend::createSymlink"); } + + virtual bool shouldMountSpecialFiles() override { return false; } }; // TODO: symlink diff --git a/system/lib/wasmfs/wasmfs.cpp b/system/lib/wasmfs/wasmfs.cpp index 7a771a8ff4bd0..8cc68ca3053bf 100644 --- a/system/lib/wasmfs/wasmfs.cpp +++ b/system/lib/wasmfs/wasmfs.cpp @@ -106,8 +106,13 @@ std::shared_ptr WasmFS::initRootDirectory() { // The root directory is its own parent. lockedRoot.setParent(rootDirectory); + // Don't mount special files if not needed (e.g. in NODERAWFS mode). + if (!rootBackend->shouldMountSpecialFiles()) { + return rootDirectory; + } + // If the /dev/ directory does not already exist, create it. (It may already - // exist in NODERAWFS mode, or if those files have been preloaded.) + // exist if those files have been preloaded.) auto devDir = lockedRoot.insertDirectory("dev", S_IRUGO | S_IXUGO); if (devDir) { auto lockedDev = devDir->locked(); diff --git a/test/codesize/test_codesize_cxx_wasmfs.json b/test/codesize/test_codesize_cxx_wasmfs.json index 9d83f3e7f89b1..579edead6e4ca 100644 --- a/test/codesize/test_codesize_cxx_wasmfs.json +++ b/test/codesize/test_codesize_cxx_wasmfs.json @@ -1,10 +1,10 @@ { "a.out.js": 7023, "a.out.js.gz": 3310, - "a.out.nodebug.wasm": 172714, - "a.out.nodebug.wasm.gz": 63316, - "total": 179737, - "total_gz": 66626, + "a.out.nodebug.wasm": 172741, + "a.out.nodebug.wasm.gz": 63348, + "total": 179764, + "total_gz": 66658, "sent": [ "__cxa_throw", "_abort_js", diff --git a/test/codesize/test_codesize_files_wasmfs.json b/test/codesize/test_codesize_files_wasmfs.json index 327251e75f6b3..cfb4980397a26 100644 --- a/test/codesize/test_codesize_files_wasmfs.json +++ b/test/codesize/test_codesize_files_wasmfs.json @@ -1,10 +1,10 @@ { "a.out.js": 5465, "a.out.js.gz": 2575, - "a.out.nodebug.wasm": 58418, - "a.out.nodebug.wasm.gz": 18067, - "total": 63883, - "total_gz": 20642, + "a.out.nodebug.wasm": 58443, + "a.out.nodebug.wasm.gz": 18094, + "total": 63908, + "total_gz": 20669, "sent": [ "a (emscripten_date_now)", "b (emscripten_err)", diff --git a/test/test_other.py b/test/test_other.py index f5fab92327817..448025913feb2 100644 --- a/test/test_other.py +++ b/test/test_other.py @@ -5553,6 +5553,8 @@ def test_fsync(self, args): def test_fs_dev_random(self): if WINDOWS and self.get_setting('NODERAWFS'): self.skipTest('Crashes on Windows and NodeFS') + if self.get_setting('NODERAWFS') and self.get_setting('WASMFS'): + self.skipTest('https://github.com/emscripten-core/emscripten/issues/24830') self.do_runf('fs/test_fs_dev_random.c', 'success') @parameterized({ @@ -13256,6 +13258,8 @@ def test_unistd_chown(self): @wasmfs_all_backends def test_wasmfs_getdents(self): + if self.get_setting('NODERAWFS'): + self.skipTest('test expectations assumes /dev is virtualized') # Run only in WASMFS for now. self.set_setting('FORCE_FILESYSTEM') self.do_run_in_out_file_test('wasmfs/wasmfs_getdents.c')