From 509457b1714a705809fe9819599dcb9a1265cf83 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Mon, 24 Jan 2022 17:00:31 -0800 Subject: [PATCH 1/4] [WasmFS] Support file embedding --- src/library_wasmfs.js | 3 ++- tests/test_other.py | 8 ++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/library_wasmfs.js b/src/library_wasmfs.js index c138349320140..bdbcc07ca3d57 100644 --- a/src/library_wasmfs.js +++ b/src/library_wasmfs.js @@ -50,7 +50,8 @@ var WasmfsLibrary = { createDataFile: function(parent, name, data, canRead, canWrite, canOwn) { // Data files must be cached until the file system itself has been initialized. var mode = FS.getMode(canRead, canWrite); - wasmFS$preloadedFiles.push({pathName: parent, fileData: data, mode: mode}); + var pathName = parent ? parent + '/' + name : name; + wasmFS$preloadedFiles.push({pathName: pathName, fileData: data, mode: mode}); }, createPath: function(parent, path, canRead, canWrite) { // Cache file path directory names. diff --git a/tests/test_other.py b/tests/test_other.py index d621006745c13..1ebfd9176b0c6 100644 --- a/tests/test_other.py +++ b/tests/test_other.py @@ -1502,7 +1502,11 @@ def test_include_file(self, args): result = self.run_js('a.out.js', engine=config.NODE_JS) self.assertContained('|hello from a file wi|', result) - def test_embed_file_dup(self): + @parameterized({ + '': ([],), + 'wasmfs': (['-sWASMFS'],), + }) + def test_embed_file_dup(self, args): ensure_dir(self.in_dir('tst', 'test1')) ensure_dir(self.in_dir('tst', 'test2')) @@ -1529,7 +1533,7 @@ def test_embed_file_dup(self): } ''') - self.run_process([EMXX, 'main.cpp', '--embed-file', 'tst']) + self.run_process([EMXX, 'main.cpp', '--embed-file', 'tst'] + args) self.assertContained('|frist|\n|sacond|\n|thard|\n', self.run_js('a.out.js')) def test_exclude_file(self): From a4e2462440a10b08c27038857eba05a0953990b0 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Tue, 25 Jan 2022 08:25:31 -0800 Subject: [PATCH 2/4] Standardize code to use name,null when no parent, remove null,name path --- src/library_wasmfs.js | 2 +- tools/file_packager.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/library_wasmfs.js b/src/library_wasmfs.js index bdbcc07ca3d57..11fe48c4adadc 100644 --- a/src/library_wasmfs.js +++ b/src/library_wasmfs.js @@ -50,7 +50,7 @@ var WasmfsLibrary = { createDataFile: function(parent, name, data, canRead, canWrite, canOwn) { // Data files must be cached until the file system itself has been initialized. var mode = FS.getMode(canRead, canWrite); - var pathName = parent ? parent + '/' + name : name; + var pathName = name ? parent + '/' + name : parent; wasmFS$preloadedFiles.push({pathName: pathName, fileData: data, mode: mode}); }, createPath: function(parent, path, canRead, canWrite) { diff --git a/tools/file_packager.py b/tools/file_packager.py index a05c9513fdb66..d00ba65376887 100755 --- a/tools/file_packager.py +++ b/tools/file_packager.py @@ -649,7 +649,7 @@ def generate_js(data_target, data_files, metadata): var content = HEAPU32[start32++]; var name = UTF8ToString(name_addr) // canOwn this data in the filesystem, it is a slice of wasm memory that will never change - Module['FS_createDataFile'](undefined, name, HEAP8.subarray(content, content + len), true, true, true); + Module['FS_createDataFile'](name, null, HEAP8.subarray(content, content + len), true, true, true); } while (HEAPU32[start32]);''' else: err('--obj-output is recommended when using --embed. This outputs an object file for linking directly into your application is more effecient than JS encoding') From e25d4e7a232dc79e6ea656faf38d5e03cb0f1ea4 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Tue, 25 Jan 2022 10:47:29 -0800 Subject: [PATCH 3/4] flip --- src/library_wasmfs.js | 2 +- tools/file_packager.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/library_wasmfs.js b/src/library_wasmfs.js index 11fe48c4adadc..bdbcc07ca3d57 100644 --- a/src/library_wasmfs.js +++ b/src/library_wasmfs.js @@ -50,7 +50,7 @@ var WasmfsLibrary = { createDataFile: function(parent, name, data, canRead, canWrite, canOwn) { // Data files must be cached until the file system itself has been initialized. var mode = FS.getMode(canRead, canWrite); - var pathName = name ? parent + '/' + name : parent; + var pathName = parent ? parent + '/' + name : name; wasmFS$preloadedFiles.push({pathName: pathName, fileData: data, mode: mode}); }, createPath: function(parent, path, canRead, canWrite) { diff --git a/tools/file_packager.py b/tools/file_packager.py index d00ba65376887..316be544453f7 100755 --- a/tools/file_packager.py +++ b/tools/file_packager.py @@ -602,7 +602,7 @@ def generate_js(data_target, data_files, metadata): } }, false, true); // canOwn this data in the filesystem, it is a slide into the heap that will never change\n''' create_data = '''// canOwn this data in the filesystem, it is a slide into the heap that will never change - Module['FS_createDataFile'](this.name, null, byteArray, true, true, true); + Module['FS_createDataFile'](null, this.name, byteArray, true, true, true); Module['removeRunDependency']('fp ' + that.name);''' if not options.lz4: @@ -649,7 +649,7 @@ def generate_js(data_target, data_files, metadata): var content = HEAPU32[start32++]; var name = UTF8ToString(name_addr) // canOwn this data in the filesystem, it is a slice of wasm memory that will never change - Module['FS_createDataFile'](name, null, HEAP8.subarray(content, content + len), true, true, true); + Module['FS_createDataFile'](null, name, HEAP8.subarray(content, content + len), true, true, true); } while (HEAPU32[start32]);''' else: err('--obj-output is recommended when using --embed. This outputs an object file for linking directly into your application is more effecient than JS encoding') From 6996c8f63b865a30a2bbee72afb2c10f7993d6a1 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Tue, 25 Jan 2022 12:24:30 -0800 Subject: [PATCH 4/4] Revert "flip" This reverts commit e25d4e7a232dc79e6ea656faf38d5e03cb0f1ea4. --- src/library_wasmfs.js | 2 +- tools/file_packager.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/library_wasmfs.js b/src/library_wasmfs.js index bdbcc07ca3d57..11fe48c4adadc 100644 --- a/src/library_wasmfs.js +++ b/src/library_wasmfs.js @@ -50,7 +50,7 @@ var WasmfsLibrary = { createDataFile: function(parent, name, data, canRead, canWrite, canOwn) { // Data files must be cached until the file system itself has been initialized. var mode = FS.getMode(canRead, canWrite); - var pathName = parent ? parent + '/' + name : name; + var pathName = name ? parent + '/' + name : parent; wasmFS$preloadedFiles.push({pathName: pathName, fileData: data, mode: mode}); }, createPath: function(parent, path, canRead, canWrite) { diff --git a/tools/file_packager.py b/tools/file_packager.py index 316be544453f7..d00ba65376887 100755 --- a/tools/file_packager.py +++ b/tools/file_packager.py @@ -602,7 +602,7 @@ def generate_js(data_target, data_files, metadata): } }, false, true); // canOwn this data in the filesystem, it is a slide into the heap that will never change\n''' create_data = '''// canOwn this data in the filesystem, it is a slide into the heap that will never change - Module['FS_createDataFile'](null, this.name, byteArray, true, true, true); + Module['FS_createDataFile'](this.name, null, byteArray, true, true, true); Module['removeRunDependency']('fp ' + that.name);''' if not options.lz4: @@ -649,7 +649,7 @@ def generate_js(data_target, data_files, metadata): var content = HEAPU32[start32++]; var name = UTF8ToString(name_addr) // canOwn this data in the filesystem, it is a slice of wasm memory that will never change - Module['FS_createDataFile'](null, name, HEAP8.subarray(content, content + len), true, true, true); + Module['FS_createDataFile'](name, null, HEAP8.subarray(content, content + len), true, true, true); } while (HEAPU32[start32]);''' else: err('--obj-output is recommended when using --embed. This outputs an object file for linking directly into your application is more effecient than JS encoding')