[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