Emscripten Compiler Frontend (emcc)
***********************************

The Emscripten Compiler Frontend ("emcc") is used to call the
Emscripten compiler from the command line. It is effectively a drop-in
replacement for a standard compiler like *gcc* or *clang*.


Command line syntax
===================

   emcc [options] file...

(Note that you will need "./emcc" if you want to run emcc from your
current directory.)

The input file(s) can be either source code files that *Clang* can
handle (C or C++), object files (produced by *emcc -c*), or LLVM
assembly files.


Arguments
---------

Most clang options will work, as will gcc options, for example:

   # Display this information
   emcc --help

   # Display compiler version information
   emcc --version

To see the full list of *Clang* options supported on the version of
*Clang* used by Emscripten, run "clang --help".

Options that are modified or new in *emcc* are listed below:

"-O0"
   [compile+link] No optimizations (default). This is the recommended
   setting for starting to port a project, as it includes various
   assertions.

   This and other optimization settings are meaningful both during
   compile and during link. During compile it affects LLVM
   optimizations, and during link it affects final optimization of the
   code in Binaryen as well as optimization of the JS. (For fast
   incremental builds "-O0" is best, while for release you should link
   with something higher.)

"-O1"
   [compile+link] Simple optimizations. During the compile step these
   include LLVM "-O1" optimizations. During the link step this does
   not include various runtime assertions in JS that *-O0* would do.

"-O2"
   [compile+link] Like "-O1", but enables more optimizations. During
   link this will also enable various JavaScript optimizations.

   Note:

     These JavaScript optimizations can reduce code size by removing
     things that the compiler does not see being used, in particular,
     parts of the runtime may be stripped if they are not exported on
     the "Module" object. The compiler is aware of code in --pre-js
     and --post-js, so you can safely use the runtime from there.
     Alternatively, you can use "EXPORTED_RUNTIME_METHODS", see
     src/settings.js.

"-O3"
   [compile+link] Like "-O2", but with additional optimizations that
   may take longer to run.

   Note:

     This is a good setting for a release build.

"-Os"
   [compile+link] Like "-O3", but focuses more on code size (and may
   make tradeoffs with speed). This can affect both wasm and
   JavaScript.

"-Oz"
   [compile+link] Like "-Os", but reduces code size even further, and
   may take longer to run. This can affect both wasm and JavaScript.

   Note:

     For more tips on optimizing your code, see Optimizing Code.

"-sOPTION[=VALUE]"
   [different OPTIONs affect at different stages, most at link time]
   Emscripten build options. For the available options, see
   src/settings.js.

   Note:

     If no value is specifed it will default to "1".

   Note:

     It is possible, with boolean options, to use the "NO_" prefix to
     reverse their meaning. For example, "-sEXIT_RUNTIME=0" is the
     same as "-sNO_EXIT_RUNTIME=1" and vice versa.  This is not
     recommended in most cases.

   Note:

     Lists can be specified as comma separated strings:

        -sEXPORTED_FUNCTIONS=foo,bar

   Note:

     We also support older list formats that involve more quoting.
     Lists can be specified with or without quotes around each element
     and with or without brackets around the list.  For example, all
     the following are equivalent:

        -sEXPORTED_FUNCTIONS="foo","bar"
        -sEXPORTED_FUNCTIONS=["foo","bar"]
        -sEXPORTED_FUNCTIONS=[foo,bar]

   Note:

     For lists that include brackets or quote, you need quotation
     marks (") around the list in most shells (to avoid errors being
     raised). Two examples are shown below:

        -sEXPORTED_FUNCTIONS="['liblib.so']"
        -s"EXPORTED_FUNCTIONS=['liblib.so']"

   You can also specify that the value of an option will be read from
   a file. For example, the following will set "EXPORTED_FUNCTIONS"
   based on the contents of the file at **path/to/file**.

      -sEXPORTED_FUNCTIONS=@/path/to/file

   Note:

     * In this case the file should contain a list of symbols, one per
       line.  For legacy use cases JSON-formatted files are also
       supported: e.g. "["_func1", "func2"]".

     * The specified file path must be absolute, not relative.

   Note:

     Options can be specified as a single argument with or without a
     space between the "-s" and option name.  e.g. "-sFOO" or "-s
     FOO".

"-g"
   [compile+link] Preserve debug information.

   * When compiling to object files, this is the same as in *Clang*
     and *gcc*, it adds DWARF debug information to the object files.

   * When linking, this is equivalent to -g3.

"-gseparate-dwarf[=FILENAME]"
   [same as -g3 if passed at compile time, otherwise applies at link]
   Preserve debug information, but in a separate file on the side.
   This is the same as "-g", but the main file will contain no debug
   info. Instead, debug info will be present in a file on the side, in
   "FILENAME" if provided, otherwise the same as the wasm file but
   with suffix ".debug.wasm". While the main file contains no debug
   info, it does contain a URL to where the debug file is, so that
   devtools can find it. You can use "-sSEPARATE_DWARF_URL=URL" to
   customize that location (this is useful if you want to host it on a
   different server, for example).

"-gsource-map"
   When linking, generate a source map using LLVM debug information
   (which must be present in object files, i.e., they should have been
   compiled with "-g").

"-g<level>"
   [compile+link] Controls the level of debuggability. Each level
   builds on the previous one:

      * "-g0": Make no effort to keep code debuggable.

      * "-g1": When linking, preserve whitespace in JavaScript.

      * "-g2": When linking, preserve function names in compiled code.

      * "-g3": When compiling to object files, keep debug info,
        including JS whitespace, function names, and LLVM debug info
        (DWARF) if any (this is the same as -g).

"--profiling"
   [same as -g2 if passed at compile time, otherwise applies at link]
   Use reasonable defaults when emitting JavaScript to make the build
   readable but still useful for profiling. This sets "-g2" (preserve
   whitespace and function names) and may also enable optimizations
   that affect performance and otherwise might not be performed in
   "-g2".

"--profiling-funcs"
   [link] Preserve function names in profiling, but otherwise minify
   whitespace and names as we normally do in optimized builds. This is
   useful if you want to look at profiler results based on function
   names, but do *not* intend to read the emitted code.

"--tracing"
   [link] Enable the Emscripten Tracing API.

"--emit-symbol-map"
   [link] Save a map file between function indexes in the wasm and
   function names. By storing the names on a file on the side, you can
   avoid shipping the names, and can still reconstruct meaningful
   stack traces by translating the indexes back to the names.

   Note:

     When used with "-sWASM=2", two symbol files are created.
     "[name].js.symbols" (with WASM symbols) and
     "[name].wasm.js.symbols" (with ASM.js symbols)

"-flto"
   [compile+link] Enables link-time optimizations (LTO).

"--closure 0|1|2"
   [link] Runs the *Closure Compiler*. Possible values are:

      * "0": No closure compiler (default in "-O2" and below).

      * "1": Run closure compiler. This greatly reduces the size of
        the support JavaScript code (everything but the WebAssembly or
        asm.js). Note that this increases compile time significantly.

      * "2": Run closure compiler on *all* the emitted code, even on
        **asm.js** output in **asm.js** mode. This can further reduce
        code size, but does prevent a significant amount of **asm.js**
        optimizations, so it is not recommended unless you want to
        reduce code size at all costs.

   Note:

     * Consider using "-sMODULARIZE" when using closure, as it
       minifies globals to names that might conflict with others in
       the global scope. "MODULARIZE" puts all the output into a
       function (see "src/settings.js").

     * Closure will minify the name of *Module* itself, by default!
       Using "MODULARIZE" will solve that as well. Another solution is
       to make sure a global variable called *Module* already exists
       before the closure-compiled code runs, because then it will
       reuse that variable.

     * If closure compiler hits an out-of-memory, try adjusting
       "JAVA_HEAP_SIZE" in the environment (for example, to 4096m for
       4GB).

     * Closure is only run if JavaScript opts are being done ("-O2" or
       above).

"--closure-args=<args>"
   [link] Pass arguments to the *Closure compiler*. This is an
   alternative to "EMCC_CLOSURE_ARGS".

   For example, one might want to pass an externs file to avoid
   minifying JS functions defined in "--pre-js" or "--post-js" files.
   To pass to Closure the "externs.js" file containing those public
   APIs that should not be minified, one would add the flag: "--
   closure-args=--externs=path/to/externs.js"

"--pre-js <file>"
   [link] Specify a file whose contents are added before the emitted
   code and optimized together with it. Note that this might not
   literally be the very first thing in the JS output, for example if
   "MODULARIZE" is used (see "src/settings.js"). If you want that, you
   can just prepend to the output from emscripten; the benefit of "--
   pre-js" is that it optimizes the code with the rest of the
   emscripten output, which allows better dead code elimination and
   minification, and it should only be used for that purpose. In
   particular, "--pre-js" code should not alter the main output from
   emscripten in ways that could confuse the optimizer, such as using
   "--pre-js" + "--post-js" to put all the output in an inner function
   scope (see "MODULARIZE" for that).

   *--pre-js* (but not *--post-js*) is also useful for specifying
   things on the "Module" object, as it appears before the JS looks at
   "Module" (for example, you can define "Module['print']" there).

"--post-js <file>"
   [link] Like "--pre-js", but emits a file *after* the emitted code.

"--extern-pre-js <file>"
   [link] Specify a file whose contents are prepended to the
   JavaScript output. This file is prepended to the final JavaScript
   output, *after* all other work has been done, including
   optimization, optional "MODULARIZE"-ation, instrumentation like
   "SAFE_HEAP", etc. This is the same as prepending this file after
   "emcc" finishes running, and is just a convenient way to do that.
   (For comparison, "--pre-js" and "--post-js" optimize the code
   together with everything else, keep it in the same scope if running
   *MODULARIZE*, etc.).

"--extern-post-js <file>"
   [link] Like "--extern-pre-js", but appends to the end.

"--embed-file <file>"
   [link] Specify a file (with path) to embed inside the generated
   JavaScript. The path is relative to the current directory at
   compile time. If a directory is passed here, its entire contents
   will be embedded.

   For example, if the command includes "--embed-file dir/file.dat",
   then "dir/file.dat" must exist relative to the directory where you
   run *emcc*.

   Note:

     Embedding files is much less efficient than preloading them. You
     should only use it for small files, in small numbers. Instead use
     "--preload-file", which emits efficient binary data.

   For more information about the "--embed-file" options, see
   Packaging Files.

"--preload-file <name>"
   [link] Specify a file to preload before running the compiled code
   asynchronously. The path is relative to the current directory at
   compile time. If a directory is passed here, its entire contents
   will be embedded.

   Preloaded files are stored in **filename.data**, where
   **filename.html** is the main file you are compiling to. To run
   your code, you will need both the **.html** and the **.data**.

   Note:

     This option is similar to --embed-file, except that it is only
     relevant when generating HTML (it uses asynchronous binary
     *XHRs*), or JavaScript that will be used in a web page.

   *emcc* runs tools/file_packager to do the actual packaging of
   embedded and preloaded files. You can run the file packager
   yourself if you want (see Packaging using the file packager tool).
   You should then put the output of the file packager in an emcc "--
   pre-js", so that it executes before your main compiled code.

   For more information about the "--preload-file" options, see
   Packaging Files.

"--exclude-file <name>"
   [link] Files and directories to be excluded from --embed-file and
   --preload-file. Wildcards (*) are supported.

"--use-preload-plugins"
   [link] Tells the file packager to run preload plugins on the files
   as they are loaded. This performs tasks like decoding images and
   audio using the browser's codecs.

"--shell-file <path>"
   [link] The path name to a skeleton HTML file used when generating
   HTML output. The shell file used needs to have this token inside
   it: "{{{ SCRIPT }}}".

   Note:

     * See src/shell.html and src/shell_minimal.html for examples.

     * This argument is ignored if a target other than HTML is
       specified using the "-o" option.

"--source-map-base <base-url>"
   [link] The URL for the location where WebAssembly source maps will
   be published. When this option is provided, the **.wasm** file is
   updated to have a "sourceMappingURL" section. The resulting URL
   will have format: "<base-url>" + "<wasm-file-name>" + ".map".

"--minify 0"
   [same as -g1 if passed at compile time, otherwise applies at link]
   Identical to "-g1".

"--js-transform <cmd>"
   [link] Specifies a "<cmd>" to be called on the generated code
   before it is optimized. This lets you modify the JavaScript, for
   example adding or removing some code, in a way that those
   modifications will be optimized together with the generated code.

   "<cmd>" will be called with the file name of the generated code as
   a parameter. To modify the code, you can read the original data and
   then append to it or overwrite it with the modified data.

   "<cmd>" is interpreted as a space-separated list of arguments, for
   example, "<cmd>" of **python processor.py** will cause a Python
   script to be run.

"--bind"
   [link] Links against embind library.  Deprecated: Use "-lembind"
   instead.

"--ignore-dynamic-linking"
   [link] Tells the compiler to ignore dynamic linking (the user will
   need to manually link to the shared libraries later on).

   Normally *emcc* will simply link in code from the dynamic library
   as though it were statically linked, which will fail if the same
   dynamic library is linked more than once. With this option, dynamic
   linking is ignored, which allows the build system to proceed
   without errors.

"--js-library <lib>"
   [link] A JavaScript library to use in addition to those in
   Emscripten's core libraries (src/library_*).

"-v"
   [general] Turns on verbose output.

   This will print the internal sub-commands run by emscripten as well
   as "-v" to *Clang*.

   Tip:

     "emcc -v" is a useful tool for diagnosing errors. It works with
     or without other arguments.

"--check"
   [general] Runs Emscripten's internal sanity checks and reports any
   issues with the current configuration.

"--cache <directory>"
   [general] Sets the directory to use as the Emscripten cache. The
   Emscripten cache is used to store pre-built versions of "libc",
   "libcxx" and other libraries.

   If using this in combination with "--clear-cache", be sure to
   specify this argument first.

   The Emscripten cache defaults to "emscripten/cache" but can be
   overridden using the "EM_CACHE" environment variable or "CACHE"
   config setting.

"--clear-cache"
   [general] Manually clears the cache of compiled Emscripten system
   libraries (libc++, libc++abi, libc).

   This is normally handled automatically, but if you update LLVM in-
   place (instead of having a different directory for a new version),
   the caching mechanism can get confused. Clearing the cache can fix
   weird problems related to cache incompatibilities, like *Clang*
   failing to link with library files. This also clears other cached
   data. After the cache is cleared, this process will exit.

   By default this will also clear any download ports since the ports
   directory is usually within the cache directory.

"--clear-ports"
   [general] Manually clears the local copies of ports from the
   Emscripten Ports repos (sdl2, etc.). This also clears the cache, to
   remove their builds.

   You should only need to do this if a problem happens and you want
   all ports that you use to be downloaded and built from scratch.
   After this operation is complete, this process will exit.

"--show-ports"
   [general] Shows the list of available projects in the Emscripten
   Ports repos. After this operation is complete, this process will
   exit.

"--memory-init-file 0|1"
   [link] Specifies whether to emit a separate memory initialization
   file.

      Note:

        Note that this is only relevant when *not* emitting wasm, as
        wasm embeds the memory init data in the wasm binary.

   Possible values are:

      * "0": Do not emit a separate memory initialization file.
        Instead keep the static initialization inside the generated
        JavaScript as text. This is the default setting if compiling
        with -O0 or -O1 link-time optimization flags.

      * "1": Emit a separate memory initialization file in binary
        format. This is more efficient than storing it as text inside
        JavaScript, but does mean you have another file to publish.
        The binary file will also be loaded asynchronously, which
        means "main()" will not be called until the file is downloaded
        and applied; you cannot call any C functions until it arrives.
        This is the default setting when compiling with -O2 or higher.

        Note:

          The safest way to ensure that it is safe to call C functions
          (the initialisation file has loaded) is to call a notifier
          function from "main()".

        Note:

          If you assign a network request to
          "Module.memoryInitializerRequest" (before the script runs),
          then it will use that request instead of automatically
          starting a download for you. This is beneficial in that you
          can, in your HTML, fire off a request for the memory init
          file before the script actually arrives. For this to work,
          the network request should be an XMLHttpRequest with
          responseType set to "'arraybuffer'". (You can also put any
          other object here, all it must provide is a ".response"
          property containing an ArrayBuffer.)

"-Wwarn-absolute-paths"
   [compile+link] Enables warnings about the use of absolute paths in
   "-I" and "-L" command line directives. This is used to warn against
   unintentional use of absolute paths, which is sometimes dangerous
   when referring to nonportable local system headers.

"--proxy-to-worker"
   [link] Runs the main application code in a worker, proxying events
   to it and output from it. If emitting HTML, this emits a **.html**
   file, and a separate **.js** file containing the JavaScript to be
   run in a worker. If emitting JavaScript, the target file name
   contains the part to be run on the main thread, while a second
   **.js** file with suffix ".worker.js" will contain the worker
   portion.

"--emrun"
   [link] Enables the generated output to be aware of the emrun
   command line tool. This allows "stdout", "stderr" and
   "exit(returncode)" capture when running the generated application
   through *emrun*. (This enables *EXIT_RUNTIME=1*, allowing normal
   runtime exiting with return code passing.)

"--cpuprofiler"
   [link] Embeds a simple CPU profiler onto the generated page. Use
   this to perform cursory interactive performance profiling.

"--memoryprofiler"
   [link] Embeds a memory allocation tracker onto the generated page.
   Use this to profile the application usage of the Emscripten HEAP.

"--threadprofiler"
   [link] Embeds a thread activity profiler onto the generated page.
   Use this to profile the application usage of pthreads when
   targeting multithreaded builds (-sUSE_PTHREADS=1/2).

"--em-config <path>"
   [general] Specifies the location of the **.emscripten**
   configuration file.  If not specified emscripten will search for
   ".emscripten" first in the emscripten directory itself, and then in
   the user's home directory ("~/.emscripten"). This can be overridden
   using the "EM_CONFIG" environment variable.

"--default-obj-ext <.ext>"
   [compile] Specifies the output suffix to use when compiling with
   "-c" in the absence of "-o".  For example, when compiling multiple
   sources files with "emcc -c *.c" the compiler will normally output
   files with the ".o" extension, but "--default-obj-ext .obj" can be
   used to instead generate files with the *.obj* extension.

"--valid-abspath <path>"
   [compile+link] Note an allowed absolute path, which we should not
   warn about (absolute include paths normally are warned about, since
   they may refer to the local system headers etc. which we need to
   avoid when cross-compiling).

"-o <target>"
   [link] When linking an executable, the "target" file name extension
   defines the output type to be generated:

      * <name> **.js** : JavaScript (+ separate **<name>.wasm** file
        if emitting WebAssembly). (default)

      * <name> **.mjs** : ES6 JavaScript module (+ separate
        **<name>.wasm** file if emitting WebAssembly).

      * <name> **.html** : HTML + separate JavaScript file
        (**<name>.js**; + separate **<name>.wasm** file if emitting
        WebAssembly).

      * <name> **.wasm** : WebAssembly without JavaScript support code
        ("standalone wasm"; this enables "STANDALONE_WASM").

   These rules only apply when linking.  When compiling to object code
   (See *-c* below) the name of the output file is irrelevant.

   Note:

     If "--memory-init-file" is used, a **.mem** file will be created
     in addition to the generated **.js** and/or **.html** file.

"-c"
   [compile] Tells *emcc* to emit an object file which can then be
   linked with other object files to produce an executable.

"--output_eol windows|linux"
   [link] Specifies the line ending to generate for the text files
   that are outputted. If "--output_eol windows" is passed, the final
   output files will have Windows rn line endings in them. With "--
   output_eol linux", the final generated files will be written with
   Unix n line endings.

"--cflags"
   [other] Prints out the flags "emcc" would pass to "clang" to
   compile source code to object form. You can use this to invoke
   clang yourself, and then run "emcc" on those outputs just for the
   final linking+conversion to JS.


Environment variables
=====================

*emcc* is affected by several environment variables, as listed below:

   * "EMMAKEN_JUST_CONFIGURE" [other]

   * "EMCC_AUTODEBUG" [compile+link]

   * "EMCC_CFLAGS" [compile+link]

   * "EMCC_CORES" [general]

   * "EMCC_DEBUG" [general]

   * "EMCC_DEBUG_SAVE" [general]

   * "EMCC_FORCE_STDLIBS" [link]

   * "EMCC_ONLY_FORCED_STDLIBS" [link]

   * "EMCC_LOCAL_PORTS" [compile+link]

   * "EMCC_STDERR_FILE" [general]

   * "EMCC_CLOSURE_ARGS" [link] arguments to be passed to *Closure
     Compiler*

   * "EMCC_STRICT" [general]

   * "EMCC_SKIP_SANITY_CHECK" [general]

   * "EM_IGNORE_SANITY" [general]

   * "EM_CONFIG" [general]

   * "EM_LLVM_ROOT" [compile+link]

   * "_EMCC_CCACHE" [general] Internal setting that is set to 1 by
     emsdk when integrating with ccache compiler frontend

Search for 'os.environ' in emcc.py to see how these are used. The most
interesting is possibly "EMCC_DEBUG", which forces the compiler to
dump its build and temporary files to a temporary directory where they
can be reviewed.
