Home > Linux, Linux 2.6, Programming > Cross-compiling Python for MIPS and ARM Platforms

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

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter

Categories: Linux, Linux 2.6, Programming Tags: arm, cross-compilation, mips, python, ubuntu
  1. novita
    August 25th, 2011 at 12:53 | #1

    hi,

    what should I type for ARM instead of MIPS ?

    thank you

    • August 25th, 2011 at 12:58 | #2

      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=/python

      make 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=/python

      make HOSTPYTHON=./hostpython HOSTPGEN=./Parser/hostpgen BLDSHARED=”mipsel-linux-gcc -shared” CROSS_COMPILE=arm-linux-gnueabi- CROSS_COMPILE_TARGET=yes

  2. maciej walczak
    October 8th, 2011 at 00:04 | #3

    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 ?

    • October 8th, 2011 at 08:17 | #4

      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:

      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
      make install

  1. March 4th, 2012 at 14:31 | #1
  2. April 16th, 2013 at 22:29 | #2