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:

Then run the following command in Python-2.7.1 in order to build some tools for the host:

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:

If we don’t use a patch the first error is:

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:

And repeat the step above to configure and cross-compile Python for mips.

Finally install Python in ~/Python-2.7.1/install for example:

After that copy all necessary files in ~/Python-2.7.1/install to your target board and run the python test:

  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

  3. sai
    March 23rd, 2016 at 11:33 | #5

    @cnxsoft
    for arm, make file created successfully without errors. But when i make by using the command
    make HOSTPYTHON=./hostpython HOSTPGEN=./Parser/hostpgen BLDSHARED=”arm-none-linux-gnueabi-gcc -shared” CROSS_COMPILE=arm-none-linux- CROSS_COMPILE_TARGET=yes

    i got the error as

    arm-none-linux-gnueabi-gcc -c -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I. -IInclude -I./Include -DPy_BUILD_CORE -o Modules/python.o ./Modules/python.c
    In file included from Include/Python.h:58:0,
    from ./Modules/python.c:3:
    Include/pyport.h:243:13: error: #error “This platform’s pyconfig.h needs to define PY_FORMAT_LONG_LONG”
    make: *** [Modules/python.o] Error 1

    Help me to solve the issue..

  4. sai
    March 23rd, 2016 at 11:43 | #6

    It successfully created make file for arm, But while make by using the command

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

    i get the error as

    arm-none-linux-gnueabi-gcc -Xlinker -export-dynamic -o python \
    Modules/python.o \
    libpython2.7.a -lpthread -ldl -lpthread -lutil -lm
    File “./setup.py”, line 316
    self.announce(‘*** WARNING: renaming “%s” since importing it’
    ^
    IndentationError: expected an indented block
    make: *** [sharedmods] Error 1

    Help me to solve..

  5. March 23rd, 2016 at 11:47 | #7

    @sai
    Maybe it’s because of the compiler you use.

  6. sai
    March 24th, 2016 at 18:26 | #8

    To cross compiling Python 3.5 for arm, what the patch i have to use ? or any other process to cross compile.
    Suggest me

  7. sai
    March 25th, 2016 at 10:53 | #9

    cnxsoft :
    @sai
    Maybe it’s because of the compiler you use.

    thq

  8. Steven
    October 11th, 2016 at 13:26 | #10

    Hi all,

    when I’m executing this command “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” I’m getting the following error message:
    “configure: error: invalid variable name: `–host'” Do you have any idea whats causing this?

    Thank you

  9. October 11th, 2016 at 13:59 | #11

    @Steven
    Sorry there was some problems with the website platform (WordPress) .
    where double hyphen

    would show as a single hyphen

    I’ve now updated the post to fix the issue. The instructions are old so they may not work with the latest version Python, but should still work with Python 2.7.

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