[oe] Prebuilt toolchains

Chris Conroy Chris.Conroy at hillcrestlabs.com
Fri Nov 13 18:41:36 UTC 2009


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"






More information about the Openembedded-devel mailing list