[OE-core] CMake error? CMAKE_AR-NOTFOUND

Samuel Stirtzel s.stirtzel at googlemail.com
Thu Jan 26 10:53:35 UTC 2012


2012/1/26 Samuel Stirtzel <s.stirtzel at googlemail.com>:
> 2012/1/25 Khem Raj <raj.khem at gmail.com>:
>> On Wed, Jan 25, 2012 at 12:31 AM, Samuel Stirtzel
>> <s.stirtzel at googlemail.com> wrote:
>>> 2012/1/25 Samuel Stirtzel <s.stirtzel at googlemail.com>:
>>>> 2012/1/24 Richard Purdie <richard.purdie at linuxfoundation.org>:
>>>>> On Tue, 2012-01-24 at 14:30 +0100, Samuel Stirtzel wrote:
>>>>>> Hi,
>>>>>> currently I try to build a native software that needs CMake, it is a
>>>>>> required tool to cross compile another software.
>>>>>> An it seems that CMAKE_AR is set to an invalid value (CMAKE_AR-NOTFOUND).
>>>>>> The cmake.bbclass has no entry about this.
>>>>>>
>>>>>> By searching the web, the only information found was that it can be
>>>>>> set to ${GCC_PATH}/dld.
>>>>>> As I am usually not working with CMake where can I find the native
>>>>>> "ar" or "dld" executable in OpenEmbedded?
>>>>>>
>>>>>> Using the archiver from my hosts /usr/bin/ar seems to be wrong since
>>>>>> in cmake.bbclass "set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY )"
>>>>>> prohibits it.
>>>>>
>>>>> In the same way the class figures out OECMAKE_C_COMPILER from ${CC}, you
>>>>> probably need to figure out ar from ${AR} and pass it to the cmake
>>>>> configuration.
>>>>>
>>>>> Note I know very little about cmake so I'm of less help with that
>>>>> piece ;-).
>>>>
>>>> After looking around in all ends of OE-core it shows up that this
>>>> error is caused by binutils.inc.
>>>> Finding ar would be no problem itself, but if the binary is not
>>>> installed or gets deleted after building binutils-native it is
>>>> impossible to locate it.
>>>>
>>>> In binutils.inc do_install:
>>>> rm ${D}${bindir}/ar ${D}${bindir}/strings
>>> Sorry I pasted the wrong line, this was for cross compiling.
>>> From the do_install_virtclass-native:
>>> # We only want libiberty, libbfd and libopcodes
>>> rm -rf ${D}${bindir}
>>>
>>> but the effect is still the same..
>>>>
>>>> Well I still wonder why my target sysroot has ar if it gets deleted here...
>>>>
>>
>> because its installed using post_install script.
>>
>>>> Anyone knows why ar is being removed in do_install?
>>
>> since post_install will install it as a symlink
>>
> Well that made me wonder too, because yesterday I thought that it
> would use ${D}${bindir} instead of ${bindir}.
>
> Ok I double checked this and it looks strange...
> Everything further needs some explanation, looking up the used
> variables will explain why ar is missing.
>
>
> Therefore I added some quick debug stuff:
> die "D = ${D}, bindir = ${bindir}"
> -die 'D = /work/oe-core/tmp-eglibc/work/x86_64-linux/binutils-native-2.22-r2/image,
> bindir = /work/oe-core/tmp-eglibc/sysroots/x86_64-linux/usr/bin'

> die "Target prefix = ${TARGET_PREFIX}"
> -die 'Target prefix = '
>
> Inserted in the code this will look like the following (quotation
marks where only inserted for visibility):
> do_install_virtclass_native:
> rm -rf ${D}${bindir}
> rm -rf '/work/oe-core/tmp-eglibc/work/x86_64-linux/binutils-native-2.22-r2/image/work/oe-core/tmp-eglibc/sysroots/x86_64-linux/usr/bin'
>
> do_pkg_postinst:
> update-alternatives --install ${bindir}/ar ar ${TARGET_PREFIX}ar 100
> update-alternatives --install
> '/work/oe-core/tmp-eglibc/sysroots/x86_64-linux/usr/bin'/ar ar ''ar
> 100
>
>
>
> This looks pretty weird.
It looks like instead of ${bindir} it should point to
> "/work/oe-core/tmp-eglibc/work/x86_64-linux/binutils-native-2.22-r2/binutils-2.22/build.x86_64-linux.x86_64-linux/binutils/",
> where ar is located.
> Any ideas what went wrong?

Minor cleanup to make it easier to read.

-- 
Regards
Samuel




More information about the Openembedded-core mailing list