[oe] Prebuilt toolchains
Mike Turquette
mturquette at gmail.com
Tue Nov 17 03:12:38 UTC 2009
On Mon, Nov 16, 2009 at 4:40 PM, Gary Thomas <gary at mlbassoc.com> wrote:
> On 11/13/2009 04:00 PM, Gary Thomas wrote:
>>
>> On 11/13/2009 11:41 AM, Chris Conroy wrote:
>>>
>>> On Fri, 2009-11-13 at 10:25 -0700, Gary Thomas wrote:
>>>>
>>>> This helped me find the problem - libgcc was required by busybox and
>>>> the default provider for libgcc included gcc-cross.
>>>>
>>>> I ended up with only these [few] changes to get my own toolchain to
>>>> do the job:
>>>>
>>>> #
>>>> # Use prebuilt compiler components
>>>> #
>>>> TOOLCHAIN = "external"
>>>> HOST_SYS = "${TARGET_ARCH}-${TARGET_OS}"
>>>> TARGET_SYS = "${TARGET_ARCH}-${TARGET_OS}"
>>>> ASSUME_PROVIDED += " linux-libc-headers "
>>>> ASSUME_PROVIDED += " virtual/${TARGET_PREFIX}gcc "
>>>> ASSUME_PROVIDED += " virtual/${TARGET_PREFIX}gcc-cross "
>>>> ASSUME_PROVIDED += " virtual/${TARGET_PREFIX}gcc-initial "
>>>> ASSUME_PROVIDED += " virtual/${TARGET_PREFIX}gcc-intermediate "
>>>> ASSUME_PROVIDED += " virtual/${TARGET_PREFIX}binutils "
>>>> ASSUME_PROVIDED += " virtual/${TARGET_PREFIX}libc-for-gcc "
>>>> ASSUME_PROVIDED += " libgcc "
>>>> ASSUME_PROVIDED += " virtual/libc "
>>>> ASSUME_PROVIDED += " virtual/libintl "
>>>> ASSUME_PROVIDED += " virtual/libiconv "
>>>> export TARGET_LDFLAGS = "-L${STAGING_DIR_TARGET}${layout_libdir} \
>>>> -Wl,-rpath-link,${STAGING_DIR_TARGET}${layout_libdir} \
>>>> -Wl,-O1"
>>>>
>>>> The HOST_SYS and TARGET_SYS changes were necessary because my toolchain
>>>> is called 'powerpc-linux-XXX', not 'powerpc-oe-linux-XXX'.
>>>>
>>>> I chose these changes (instead of just your advice) because I was
>>>> already
>>>> down this path. Sadly, this incantation *did* complete the build, but
>>>> the
>>>> resulting file system did not import any of the "provided" libraries
>>>> from
>>>> my external toolchain. Did I miss something that would let the build
>>>> import these libraries?
>>>
>>> Yeah, this is the problem with ASSUME_PROVIDED as I see it. It removes
>>> the build system knowledge of these things and basically gives the
>>> responsibility for managing them back to you. Not good.
>>>
>>>>
>>>> Finally, in an effort to explore and understand more, I tried your
>>>> method:
>>>> #
>>>> # Use prebuilt compiler components
>>>> #
>>>> TOOLCHAIN = "external"
>>>> HOST_SYS = "${TARGET_ARCH}-${TARGET_OS}"
>>>> TARGET_SYS = "${TARGET_ARCH}-${TARGET_OS}"
>>>> export TARGET_LDFLAGS = "-L${STAGING_DIR_TARGET}${layout_libdir} \
>>>> -Wl,-rpath-link,${STAGING_DIR_TARGET}${layout_libdir} \
>>>> -Wl,-O1"
>>>> PREFERRED_PROVIDER_linux-libc-headers = "external-toolchain"
>>>> PREFERRED_PROVIDER_glibc-thread-db = "external-toolchain"
>>>> PREFERRED_PROVIDER_libstdc++-dev = "external-toolchain"
>>>> PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc = "external-toolchain"
>>>> PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}g++ = "external-toolchain"
>>>> PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc-initial =
>>>> "external-toolchain"
>>>> PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc-intermediate =
>>>> "external-toolchain"
>>>> PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}binutils =
>>>> "external-toolchain"
>>>> PREFERRED_PROVIDER_virtual/binutils = "external-toolchain"
>>>> PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}libc-for-gcc =
>>>> "external-toolchain"
>>>> PREFERRED_PROVIDER_virtual/libc = "external-toolchain"
>>>> PREFERRED_PROVIDER_virtual/libintl = "external-toolchain"
>>>> PREFERRED_PROVIDER_virtual/libiconv = "external-toolchain"
>>>>
>>>> Which led to these errors right away:
>>>> ERROR: Conflicting PREFERRED_PROVIDER entries were found which
>>>> resulted in an attempt to select multiple providers
>>>> (['/local/Angstrom_BeagleBoard
>>>> /openembedded/recipes/glibc/glibc_2.6.1.bb',
>>>>
>>>> '/local/Angstrom_BeagleBoard/openembedded/recipes/meta/external-toolchain.bb'])
>>>> for runtime dependecy libsegfault
>>>> The entries resulting in this conflict were:
>>>> ['PREFERRED_PROVIDER_virtual/libc = glibc',
>>>> 'PREFERRED_PROVIDER_virtual/libintl = external-toolchain']
>>>> ERROR: Conflicting PREFERRED_PROVIDER entries were found which
>>>> resulted in an attempt to select multiple providers
>>>>
>>>> (['/local/Angstrom_BeagleBoard/openembedded/recipes/gcc/gcc-cross_4.4.2.bb',
>>>>
>>>>
>>>> '/local/Angstrom_BeagleBoard/openembedded/recipes/meta/external-toolchain.bb'])
>>>> for runtime dependecy libgcc
>>>> The entries resulting in this conflict were:
>>>> ['PREFERRED_PROVIDER_virtual/powerpc-linux-gcc = gcc-cross',
>>>> 'PREFERRED_PROVIDER_virtual/libintl = external-toolchain']
>>>>
>>>
>>> You may need to edit the RPROVIDES of your toolchain. Here's what mine
>>> looks like:
>>>
>>> RPROVIDES = " glibc-dbg glibc catchsegv sln nscd ldd localedef
>>> glibc-utils glibc-dev glibc-locale libsegfault glibc-extra-nss
>>> glibc-thread-db glibc-pcprofile \
>>> libgcc libgcc-dev libstdc++-dev libstdc++"
>>> PACKAGES_DYNAMIC = "glibc-gconv-*"
>>> INHIBIT_DEFAULT_DEPS = "1"
>>
>> Still no joy, I'm afraid. I now get a *huge* series of messages like
>> these:
>>
>> NOTE: preferred version 2.11.4.1 of xf86-video-geode not available (for
>> item libsegfault)
>> NOTE: preferred version 1.0.1 of font-screen-cyrillic not available (for
>> item libsegfault)
>> NOTE: preferred version 1.2.4 of opie-securityplugin-dummy not available
>> (for item libsegfault)
>> NOTE: preferred version 6.9.0 of xf86-video-ati not available (for item
>> libsegfault)
>> NOTE: preferred version 12.5.1 of xf86-input-vmmouse not available (for
>> item libsegfault)
>> ERROR: Conflicting PREFERRED_PROVIDER entries were found which resulted
>> in an attempt to select multiple providers
>>
>> (['/local/Angstrom_BeagleBoard/openembedded/recipes/gcc/gcc-cross_4.4.2.bb',
>>
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/xorg-lib/libxpm_3.5.7.bb',
>>
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/xorg-lib/libice_1.0.4.bb',
>>
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/xorg-lib/libxrandr_1.2.3.bb',
>>
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/xorg-lib/libxfixes_4.0.3.bb',
>>
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/xorg-lib/libxinerama_1.0.3.bb',
>>
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/libqpe/libqpe-opie_1.2.4.bb',
>>
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/xorg-lib/libx11_1.1.5.bb',
>>
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/xorg-proto/xproto_7.0.13.bb',
>>
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/xorg-lib/libxt_1.0.5.bb',
>>
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/xorg-lib/libxv_1.0.4.bb',
>>
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/xorg-lib/libxcursor_1.1.9.bb',
>>
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/xorg-lib/libxrender_0.9.4.bb',
>>
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/xorg-xserver/xserver-xorg_1.5.3.bb',
>>
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/gcc/gcc-cross-intermediate_4.4.2.bb',
>>
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/xorg-lib/libxext_1.0.4.bb',
>>
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/xorg-lib/libxi_1.2.0.bb',
>>
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/xorg-lib/libxmu_1.0.4.bb',
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/glibc/glibc_2.6.1.bb',
>>
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/binutils/binutils-cross_2.20.bb',
>>
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/glibc/glibc-initial_2.6.1.bb',
>>
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/xorg-lib/libxcomposite_0.4.0.bb',
>>
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/xorg-lib/libsm_1.1.0.bb',
>>
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/xorg-lib/libxft_2.1.13.bb',
>>
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/gcc/gcc-cross-initial_4.4.2.bb',
>>
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/xorg-app/xrandr_1.2.3.bb',
>>
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/xorg-lib/libxaw_1.0.4.bb',
>>
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/xorg-lib/libxxf86vm_1.0.2.bb',
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/qte/qte-mt_2.3.10.bb',
>>
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/xorg-lib/libxdamage_1.1.1.bb',
>>
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/linux-libc-headers/linux-libc-headers_2.6.23.bb',
>>
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/gnome/gconf-dbus_svn.bb',
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/avahi/avahi_0.6.24.bb',
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/libgpewidget/libgpewidget_0.117.bb',
>>
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/libsdl/libsdl-x11_1.2.11.bb',
>>
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/meta/external-toolchain.bb',
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/linux/linux_2.6.31.bb',
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/gtk+/gtk+_2.14.2.bb',
>>
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/libusb/libusb_0.1.12.bb',
>> '/local/Angstrom_BeagleBoard/openembedded/recipes/db/db3_3.2.9.bb']) for
>> runtime dependecy libsegfault
>> The entries resulting in this conflict were:
>> ['PREFERRED_PROVIDER_virtual/powerpc-linux-gcc = gcc-cross',
>> 'PREFERRED_PROVIDER_libxpm = libxpm', 'PREFERRED_PROVIDER_libice =
>> libice', 'PREFERRED_PROVIDER_libxrandr = libxrandr',
>> 'PREFERRED_PROVIDER_libxfixes = libxfixes',
>> 'PREFERRED_PROVIDER_libxinerama = libxinerama',
>> 'PREFERRED_PROVIDER_virtual/libqpe1 = libqpe-opie',
>> 'PREFERRED_PROVIDER_virtual/libx11 = libx11', 'PREFERRED_PROVIDER_xproto
>> = xproto', 'PREFERRED_PROVIDER_libxt = libxt', 'PREFERRED_PROVIDER_libxv
>> = libxv', 'PREFERRED_PROVIDER_libxcursor = libxcursor',
>> 'PREFERRED_PROVIDER_libxrender = libxrender',
>> 'PREFERRED_PROVIDER_virtual/xserver = xserver-xorg',
>> 'PREFERRED_PROVIDER_virtual/powerpc-linux-gcc-intermediate =
>> gcc-cross-intermediate', 'PREFERRED_PROVIDER_libxext = libxext',
>> 'PREFERRED_PROVIDER_libxi = libxi', 'PREFERRED_PROVIDER_libxmu =
>> libxmu', 'PREFERRED_PROVIDER_virtual/libc = glibc',
>> 'PREFERRED_PROVIDER_virtual/powerpc-linux-binutils = binutils-cross',
>> 'PREFERRED_PROVIDER_virtual/powerpc-linux-libc-initial = glibc-initial',
>> 'PREFERRED_PROVIDER_libxcomposite = libxcomposite',
>> 'PREFERRED_PROVIDER_libsm = libsm', 'PREFERRED_PROVIDER_libxft =
>> libxft', 'PREFERRED_PROVIDER_virtual/powerpc-linux-gcc-initial =
>> gcc-cross-initial', 'PREFERRED_PROVIDER_xrandr = xrandr',
>> 'PREFERRED_PROVIDER_libxaw = libxaw', 'PREFERRED_PROVIDER_libxxf86vm =
>> libxxf86vm', 'PREFERRED_PROVIDER_virtual/libqte2 = qte-mt',
>> 'PREFERRED_PROVIDER_libxdamage = libxdamage',
>> 'PREFERRED_PROVIDER_linux-libc-headers = linux-libc-headers',
>> 'PREFERRED_PROVIDER_gconf = gconf-dbus', 'PREFERRED_PROVIDER_avahi =
>> avahi', 'PREFERRED_PROVIDER_libgpewidget = libgpewidget',
>> 'PREFERRED_PROVIDER_virtual/libsdl = libsdl-x11',
>> 'PREFERRED_PROVIDER_virtual/libintl = external-toolchain',
>> 'PREFERRED_PROVIDER_virtual/kernel = linux', 'PREFERRED_PROVIDER_gtk+ =
>> gtk+', 'PREFERRED_PROVIDER_virtual/libusb0 = libusb',
>> 'PREFERRED_PROVIDER_virtual/db = db3']
>>
>> Why is this so hard?? I just want to use the tools I already
>> have (and my customers are comfortable with)!
>>
>
> Any ideas how I can move forward with this?
Gary,
I haven't (yet) dug into org.oe.dev much myself, but I did extend and
enhance some recipes for building Code Sourcery toolchains in Poky
originally written by the Opened Hand crew. You won't be able to use
the "POKYMODE" system out of the box, but most of the ideas are there
(relevant PROVIDES, RPROVIDES, etc). You might draw some inspiration
from,
http://git.pokylinux.org/cgit.cgi/poky/tree/meta/packages/meta/external-csl-toolchain_2008q3-72.bb
and
http://git.pokylinux.org/cgit.cgi/poky/tree/meta/conf/distro/include/poky-external-csl2008q3.inc
Hope you find it helpful,
Mike
> --
> ------------------------------------------------------------
> Gary Thomas | Consulting for the
> MLB Associates | Embedded world
> ------------------------------------------------------------
>
> _______________________________________________
> Openembedded-devel mailing list
> Openembedded-devel at lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-devel
>
More information about the Openembedded-devel
mailing list