Previous 199869 Revisions Next

r44682 Friday 5th February, 2016 at 04:37:36 UTC by Justin Kerk
Add a document with Emscripten build instructions
[docs]emscripten.txt*

trunk/docs/emscripten.txt
r0r253194
1Compiling MAME to JavaScript via Emscripten
2===========================================
3
4First, download and install Emscripten by following the instructions at the
5official site:
6
7https://kripken.github.io/emscripten-site/docs/getting_started/downloads.html
8
9Once Emscripten has been installed, it should be possible to compile MAME
10out-of-the-box using Emscripten's 'emmake' tool. Because a full MAME compile is
11too large to load into a web browser at once, you will want to use the SOURCES
12parameter to compile only a subset of the project, e.g. (in the mame directory):
13
14emmake make SUBTARGET=pacmantest SOURCES=src/mame/drivers/pacman.cpp
15
16The SOURCES parameter should have the path to at least one driver .cpp file.
17The make process will attempt to locate and include all dependencies necessary
18to produce a complete build including the specified driver(s). However,
19sometimes it is necessary to manually specify additional files (using commas) if
20this process misses something. E.g.:
21
22emmake make SUBTARGET=apple2e SOURCES=src/mame/drivers/apple2e.cpp,src/mame/machine/applefdc.cpp
23
24The value of the SUBTARGET parameter serves only to differentiate multiple
25builds and need not be set to any specific value.
26
27Other make parameters can also be used, e.g. -j for multithreaded compilation.
28
29When the compilation reaches the emcc phase, you may see a number of "unresolved
30symbol" warnings. At the moment, this is expected for OpenGL-related functions
31such as glPointSize. Any others may indicate that an additional dependency file
32needs to be specified in the SOURCES list. Unfortunately this process is not
33automated and you will need to search the source tree to locate the files
34supplying the missing symbols. You may also be able to get away with ignoring
35the warnings if the code path referencing them is not used at run-time.
36
37If all goes well, a .js file will be output to the current directory. This file
38cannot be run by itself, but requires an HTML loader to provide it with a canvas
39to output to and pass in command-line parameters. The Emularity project provides
40such a loader:
41
42https://github.com/db48x/emularity
43
44There are example .html files in that repository which can be edited to point
45to your newly compiled MAME js filename and pass in whatever parameters you
46desire. You will then need to place all of the following on a web server:
47
48* The compiled MAME .js file
49* The .js files from the Emularity package (loader.js, browserfs.js, etc.)
50* A .zip file with the ROMs for the MAME driver you would like to run (if any)
51* Any software files you would like to run with the MAME driver
52* An Emularity loader .html modified to point to all of the above
53
54You need to use a web server instead of opening the local files directly due to
55security restrictions in modern web browsers.
56
57If the result fails to run, you can open the Web Console in your browser to see
58any error output which may have been produced (e.g. missing or incorrect ROM
59files). A "ReferenceError: foo is not defined" error most likely indicates that
60a needed source file was omitted from the SOURCES list.


Previous 199869 Revisions Next


© 1997-2024 The MAME Team