These directions should work for Python 2.7.x (last tested with 2.7.5).
First, uncompress Python into two separate directories, one for native and one for JavaScript.
In the JavaScript directory, do:
EMCONFIGURE_JS=1 emconfigure ./configure --without-threads --without-pymalloc --enable-shared --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 defines
for DOUBLE_IS_BIG_ENDIAN_IEEE754
, DOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754
,
and 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 will fail trying to run pgen
.
At this point, go to your native directory and run:
./configure --without-threads --without-pymalloc --enable-shared --disable-ipv6
Now, run make
in the native directory and then 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.
Now, you can link the bitcode file that you need:
llvm-link libpython2.7.so Modules/python.o -o python.bc
If you are on Mac OS X, you will want to look for libpython2.7.dylib
instead of libpython2.7.so
.
Thanks to rasjidw and everyone else who has helped with this!