Building Python with Emscripten

These directions should work for Python 2.7.x (last tested with 2.7.8) and are based on https://github.com/aidanhs/empython

First, uncompress Python into two separate directories, one for native and one for JavaScript.

In the JavaScript directory, do:

BASECFLAGS=-m32 LDFLAGS=-m32 emconfigure ./configure --without-threads --without-pymalloc --disable-shared --without-signal-module --disable-ipv6

If you are on Mac OS X, you will also want disable-toolbox-glue. If you are on an older version of Python (such as 2.7.2), you may not need the --disable-ipv6 option.

If you are on Python 2.7.4 or later, you will need to edit the Makefile generated and remove the MULTIARCH= line(s). You will also need to edit pyconfig.h and remove the define for HAVE_GCC_ASM_FOR_X87.

On Python 2.7.2, you will need to edit pyconfig.h and remove HAVE_GCC_ASM_FOR_X87, HAVE_SIG* except for SIGNAL_H and add #define PY_NO_SHORT_FLOAT_REPR.

Now, you can run make. It may fail trying to run pgen.

If so, go to your native directory and run:

./configure && make Parser/pgen

Now, copy the generated Parser/pgen to your JavaScript directory. Back in your JavaScript directory, be sure to flag the pgen executable as executable:

chmod +x Parser/pgen

Now, run make again.

You will get an error about trying to run python or python.exe. This can be ignored (unless you want to build C modules, in which case you will need to copy a native build of Python and edit Modules/Setup appropriately).

The bitcode file you need has already been linked, so just rename it

mv python python.bc