apparently I am unable to upload the tarball to the group. I will try to post it on my public FTP site shortly. It sucks you cant upload to this forum. I just wasted about 10 minutes trying to get an upload working... Oh well.
Thanks. On Tuesday, August 8, 2017 at 12:52:40 PM UTC-7, Michael Uman wrote: > > Ok, > > Last night I put together an example of the problem I am encountering. I > am sure others have run into this issue before so there must be a solution, > may I hear an answer soon. I will attach a gzipped tarball of a simple > example project showing how my loader script can use a module required() by > it. > > I have reduced the module pattern used by Emscripten into a simple > Javascript module, but also provided a simple C 'Hello World' which > compiles with the included Makefile using emmake. > > I also will reproduce in this message the simple Javscript example, both > loader and module, for your viewing pleasure. > > *loader.js* > /** > * loader > * > * This Javascript module demonstrates loading an emscripten module > dynamically > * into the nodeJS environment. > */ > > var argc = process.argv.length; > if (argc != 3) { > console.log("ERROR: Must specify the decoder filename!"); > process.exit(-10); > } > var decoderFileName = process.argv[2]; > console.log("attempting to load decoder " + decoderFileName); > > var fs = require('fs'); > var DecoderModule = require( decoderFileName ); > > var Module = { > noInitialRun: true, > preRun: function() { > console.log("module prerun executed!"); > }, > postRun: function() { > console.log("module postrun executed!"); > } > } > > // Load the decoder into the Module namespace. > > DecoderModule(Module); > > // Call the main entry point and then perform the tasks.. > Module._main(); > Module._performTask1(); > var result = Module._performTask2(2, 4); > console.log("result of task2 = " + result); > > > > And now for the simple Javascript module which mirrors the module pattern > generated by Emscripten > > *test.js* > /** > * This code uses the design pattern of the emscripten module created with > * -s MODULARIZE=1 -s EXPORT_NAME="'DecoderModule'" > * > * I have taken some short-cuts but believe this code approximates the > module > * well enough to experiment with. > */ > > var DecoderModule = function(DecoderModule) { > console.log("DecoderModule() called!");; > > if (typeof DecoderModule.preRun === 'function') > DecoderModule.preRun(); > > DecoderModule._main = function() { > console.log("Hello world from the world of Javascript!"); > } > > DecoderModule._performTask1 = function() { > console.log("performTask1 called!"); > return "function1 called!"; > } > > DecoderModule._performTask2 = function(a, b) { > console.log("performTask2 called!"); > return (a + (a * b)); > } > > if (DecoderModule.noInitialRun == false) > DecoderModule._main(); > > if (typeof DecoderModule.postRun === 'function') > DecoderModule.postRun(); > > return DecoderModule; > } > > // The next line enables the module to be 'required()' by the loader > module. > // HOW TO GET THIS AUTOMATICALLY GENERATED? > module.exports = DecoderModule; > > > > > Take notice, please, of the last few lines of the modules code... Here is > where the DecoderModule function is exported from the module. THIS IS THE > SECRET to being able to load it into the nodeJS environment using the > require() statement. Without it all is lost in this department. > > I run the code like this: > > $> nodejs ./load.js ./test.js > > attempting to load decoder ./test.js > DecoderModule() called! > module prerun executed! > module postrun executed! > Hello world from the world of Javascript! > performTask1 called! > performTask2 called! > result of task2 = 10 > > > > > Now you can download my tarball and attempt to build the C version using > Emscripten. The Makefile is simple: > > # Makefile > # > > EMSCRIPTEN_FLAGS=-s MODULARIZE=1 -s EXPORT_NAME="'DecoderModule'" > > component.js : component.c > $(CC) -o component.js component.c $(EMSCRIPTEN_FLAGS) > > clean: > rm component.js > > You can make the component.js module using 'emmake make' on this. > > In my archive I provide a compiled version of the C module but with the > needed 'module.exports = DecoderModule' line which seems to me to be the > deal-breaker in being able to get output code in my module which I can use > in the NodeJS test bench application I am working on. > > Thank you, > > Michael A. Uman > Sr. Software Engineer, Sigma Designs, Inc. > > -- You received this message because you are subscribed to the Google Groups "emscripten-discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to emscripten-discuss+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.