[oe] Prebuilt toolchains

Gary Thomas gary at mlbassoc.com
Mon Nov 16 22:40:42 UTC 2009


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 Thomas                 |  Consulting for the
MLB Associates              |    Embedded world
------------------------------------------------------------




More information about the Openembedded-devel mailing list