[yocto] Crosscompiling python extensions with yocto generated toolchains!?

Daniel. danielhilst at gmail.com
Wed Jun 22 08:00:33 PDT 2016


s/founded/found/

2016-06-22 11:59 GMT-03:00 Daniel. <danielhilst at gmail.com>:
> The above script can also be founded here:
> https://gist.github.com/gkos/2fa8dd54712d0b92a3db52e472d9fc09
>
> Regards,
>
> 2016-06-22 11:57 GMT-03:00 Daniel. <danielhilst at gmail.com>:
>> Well, I've create a little script to create the needed variables used
>> by Yocto's python.
>>
>> Here it is:
>>
>> . $1
>> export BUILD_SYS=$(echo $CONFIGURE_FLAGS | tr -s ' ' '\n' | grep host
>> | cut -f2 -d=)
>> export HOST_SYS=$(echo $CONFIGURE_FLAGS | tr -s ' ' '\n' | grep build
>> | cut -f2 -d=)
>> export STAGING_INCDIR=${OECORE_TARGET_SYSROOT}/usr/include
>> export STAGING_LIBDIR=${OECORE_TARGET_SYSROOT}/usr/lib
>> export PATH=${OECORE_NATIVE_SYSROOT}/usr/bin/python-native:${PATH}
>>
>> I save it to a file and source it passing the environment-setup-*
>> scritp that lives at my ${TMPDIR} folder.
>>
>> After that I can crosscompile python extension to my target as usual
>> with `python setup.py build'
>>
>>
>> Regards,
>>
>>
>> 2016-06-20 17:43 GMT-03:00 Daniel. <danielhilst at gmail.com>:
>>> My first doubt was how to trully cross-compile python extensions. Since I
>>> can't find anything usefull on internet I ask my self: How OE does it? It
>>> seems that OE uses an patched distutils to get bits build. This "assumption"
>>> comes from what I see at distutils/sysconfig.py that lives at
>>> build/tmp/sysroot/.. folder. After more digging I found this patch:
>>> http://git.yoctoproject.org/cgit.cgi/poky/tree/meta/recipes-devtools/python/python-native/12-distutils-prefix-is-inside-staging-area.patch?h=daisy
>>>
>>> The variables are aplied by this patch to the python-native (since I'm still
>>> in Daisy, shame on me). At the top of the patch we see:
>>>
>>> The proper prefix is inside our staging area.
>>>
>>> So I'll try to contact these people to track the "proper fix". Since
>>> crosscompiling python extensions is lacking of
>>>
>>> documentation reading the source and talking to the gurus is the only option
>>> avaible right now :) .
>>>
>>>
>>> Regards,
>>>
>>>
>>>
>>> 2016-06-20 16:23 GMT-03:00 Khem Raj <raj.khem at gmail.com>:
>>>>
>>>> On Mon, Jun 20, 2016 at 12:08 PM, Daniel. <danielhilst at gmail.com> wrote:
>>>> > I've found this recipe "python-pycurl" with exports libcurl to python.
>>>> > What
>>>> > I did was build it and take a look at temp folder to stalk what line is
>>>> > used
>>>> > to compile that stuff. Here it is:
>>>> >
>>>> > distutils_do_compile() {
>>>> >
>>>> >
>>>> > STAGING_INCDIR=/home/geckos/yocto/yocto-daisy/build_x11/tmp/sysroots/pharosserver-imx6/usr/include
>>>> > \
>>>> >
>>>> >
>>>> > STAGING_LIBDIR=/home/geckos/yocto/yocto-daisy/build_x11/tmp/sysroots/pharosserver-imx6/usr/lib
>>>> > \
>>>> >          BUILD_SYS=x86_64-linux HOST_SYS=arm-poky-linux-gnueabi \
>>>> >
>>>> >
>>>> > /home/geckos/yocto/yocto-daisy/build_x11/tmp/sysroots/x86_64-linux/usr/bin/python-native/python
>>>> > setup.py build  || \
>>>> >          bbfatal "python setup.py build_ext execution failed."
>>>> >
>>>> > }
>>>> >
>>>> >
>>>> > So I go to my extension's source folder and paste
>>>> >
>>>> > STAGING_INCDIR=/home/geckos/yocto/yocto-daisy/build_x11/tmp/sysroots/pharosserver-imx6/usr/include
>>>> > \
>>>> >
>>>> > STAGING_LIBDIR=/home/geckos/yocto/yocto-daisy/build_x11/tmp/sysroots/pharosserver-imx6/usr/lib
>>>> > \
>>>> > BUILD_SYS=x86_64-linux HOST_SYS=arm-poky-linux-gnueabi \
>>>> >
>>>> > /home/geckos/yocto/yocto-daisy/build_x11/tmp/sysroots/x86_64-linux/usr/bin/python-native/python
>>>> > setup.py build
>>>> >
>>>> > and everything works fine, I got my extension compiled. So, in what
>>>> > magic
>>>> > are these enviroment variables envolved? STAGING_INCDIR
>>>> > and STAGING_LIBDIR are OE stuff, what are these BUILD_SYS and HOST_SYS
>>>> > related?! I'm still searching, anyway thanks Khen for
>>>> > pointing me meta-python sources. It helped me a lot.
>>>>
>>>>
>>>> OE has several classes where common operations are abstracted out and
>>>> you can see that in recipes
>>>> e.g. inherit setuptools etc. you should copy the recipe which is
>>>> closest to your package and modify it
>>>> to use your package source etc. and make other needed tweaks.
>>>>
>>>> >
>>>> > Regards,
>>>> >
>>>> >
>>>> > 2016-06-20 15:29 GMT-03:00 Daniel. <danielhilst at gmail.com>:
>>>> >>
>>>> >> Thank you Khem!!
>>>> >>
>>>> >> Regards,
>>>> >>
>>>> >> 2016-06-20 15:02 GMT-03:00 Khem Raj <raj.khem at gmail.com>:
>>>> >>>
>>>> >>> On Mon, Jun 20, 2016 at 10:44 AM, Daniel. <danielhilst at gmail.com>
>>>> >>> wrote:
>>>> >>> > Hi everybody..
>>>> >>> >
>>>> >>> > I've been playing with python extensions. Now I want to compile a
>>>> >>> > simple
>>>> >>> > hello world extension
>>>> >>> > to my Yocto's target, but I really can't find any good resource
>>>> >>> > about
>>>> >>> > doing
>>>> >>> > it. So what is the teory behind it?
>>>> >>> >
>>>> >>> > I know that I need python headers "Python.h and others" and that I
>>>> >>> > need
>>>> >>> > distutils installed. After that everything is done by distutils and
>>>> >>> > setup.py
>>>> >>> > script, but what is done is a mistery. I found distutilscross on
>>>> >>> > internet
>>>> >>> > but no documentation about it!?
>>>> >>> >
>>>> >>> > How are python extensions cross-compiled by Yocto? Can somebody
>>>> >>> > point
>>>> >>> > me an
>>>> >>> > example?!
>>>> >>>
>>>> >>> take a look at meta-python.
>>>> >>>
>>>> >>> http://cgit.openembedded.org/meta-openembedded/tree/meta-python
>>>> >>>
>>>> >>> You might find some examples close to what you are looking for.
>>>> >>>
>>>> >>> >
>>>> >>> > Regards,
>>>> >>> >
>>>> >>> > --
>>>> >>> > "Do or do not. There is no try"
>>>> >>> >   Yoda Master
>>>> >>> >
>>>> >>> > --
>>>> >>> > _______________________________________________
>>>> >>> > yocto mailing list
>>>> >>> > yocto at yoctoproject.org
>>>> >>> > https://lists.yoctoproject.org/listinfo/yocto
>>>> >>> >
>>>> >>
>>>> >>
>>>> >>
>>>> >>
>>>> >> --
>>>> >> "Do or do not. There is no try"
>>>> >>   Yoda Master
>>>> >
>>>> >
>>>> >
>>>> >
>>>> > --
>>>> > "Do or do not. There is no try"
>>>> >   Yoda Master
>>>
>>>
>>>
>>>
>>> --
>>> "Do or do not. There is no try"
>>>   Yoda Master
>>
>>
>>
>> --
>> "Do or do not. There is no try"
>>   Yoda Master
>
>
>
> --
> "Do or do not. There is no try"
>   Yoda Master



-- 
"Do or do not. There is no try"
  Yoda Master



More information about the yocto mailing list