Cross-compiling Python for MIPS and ARM Platforms
Python programming language is used in several open source projects such as Sugar OS and Xibo. Let’s see if we can cross-compile it in Ubuntu 10.10 using a mips compiler.
I’ll use the instructions given at http://randomsplat.com/id5-cross-compiling-python-for-embedded-linux.html.
Let’s download Python 2.7.1 first and extract the source code:
tar xjvf Python-2.7.1.tar.bz2
Then run the following command in Python-2.7.1 in order to build some tools for the host:
./configure
make python Parser/pgen
mv python hostpython
mv Parser/pgen Parser/hostpgen
make distclean
There is no patch for Python 2.7.1 cross-compilation in the link above, so let’s just try to configure and build it:
CC=mipsel-linux-gcc CXX=mipsel-linux-g++ AR=mipsel-linux-ar RANLIB=mipsel-linux-ranlib ./configure –host=mipsel-linux –target=mipsel-linux –prefix=/python
make HOSTPYTHON=./hostpython HOSTPGEN=./Parser/hostpgen BLDSHARED=”mipsel-linux-gcc -shared” CROSS_COMPILE=mipsel-linux- CROSS_COMPILE_TARGET=yes
If we don’t use a patch the first error is:
Include/pyport.h:243:13: error: #error “This platform’s pyconfig.h needs to define PY_FORMAT_LONG_LONG”
So I used some older patch to create a new patch: http://www.cnx-software.com/patch/python-2.7.1-cross-compile.patch. You can download it an apply it as follows:
patch -p1 < python-2.7.1-cross-compile.patch
And repeat the step above to configure and cross-compile Python for mips.
Finally install Python in ~/Python-2.7.1/install for example:
make install HOSTPYTHON=./hostpython BLDSHARED=”mipsel-linux-gcc -shared” CROSS_COMPILE=mipsel-linux- CROSS_COMPILE_TARGET=yes prefix=~/Python-2.7.1/install
After that copy all necessary files in ~/Python-2.7.1/install to your target board and run the python test:
python lib/Python2.7/test/test___all___.py















hi,
what should I type for ARM instead of MIPS ?
thank you
You need to change that part:
CC=mipsel-linux-gcc CXX=mipsel-linux-g++ AR=mipsel-linux-ar RANLIB=mipsel-linux-ranlib ./configure –host=mipsel-linux –target=mipsel-linux –prefix=/pythonmake HOSTPYTHON=./hostpython HOSTPGEN=./Parser/hostpgen BLDSHARED=”mipsel-linux-gcc -shared” CROSS_COMPILE=mipsel-linux- CROSS_COMPILE_TARGET=yes
But it depends on the name of your ARM cross-compiler. If you are using Linaro gcc: arm-linux-gnueabi-gcc, then it would be something like:
CC=arm-linux-gnueabi-gcc CXX=arm-linux-gnueabi-g++ AR=arm-linux-gnueabi-ar RANLIB=arm-linux-gnueabi-ranlib ./configure –host=arm-linux-gnueabi –target=arm-linux-gnueabi –prefix=/pythonmake HOSTPYTHON=./hostpython HOSTPGEN=./Parser/hostpgen BLDSHARED=”mipsel-linux-gcc -shared” CROSS_COMPILE=arm-linux-gnueabi- CROSS_COMPILE_TARGET=yes
And how add support for dbus and glib to python running on arm ? I made this procedure and everything works just fine but I need also dbus python module, do you have any guide how to do it ?
Sorry, I haven’t done this. But the code for dbus and glib can be downloaded so I suppose it should not be a problem.
I’ve checked the code at http://dbus.freedesktop.org/releases/dbus-python/
It seems you can just do something like: