[OE-core] [meta-clang] oe-core and meta-clang llvm coexsting?
Martin Kelly
mkelly at xevo.com
Fri Mar 31 22:53:03 UTC 2017
On 03/30/2017 04:58 PM, Martin Kelly wrote:
> On 03/30/2017 12:31 PM, Khem Raj wrote:
>>
>>
>> On 3/30/17 12:20 PM, Martin Kelly wrote:
>>> Hi,
>>>
>>> I'm trying to integrate the meta-clang version of LLVM 4.0 (used for
>>> recipes that need a newer LLVM version) alongside the oe-core version of
>>> LLVM 3.3 (used for mesa). I'd like some recipes to use LLVM 4.0 and some
>>> to use LLVM 3.3 and for them not to collide with each other.
>>>
>>> Right now, once the meta-clang layer is enabled, the recipes collide
>>> because they both provide llvm-common.bb. I tried explicitly versioning
>>> llvm-common, which makes them no longer collide. However, mesa then
>>> fails to build because the meta-clang version of LLVM installs
>>> llvm-config into the native common sysroot in
>>
>> merging all llvm-common into a single recipe might be good
>
I thought more about this issue. Absent some clever solution that allows
us to unify the wrappers (which is difficult due to the issues I
mentioned in the last mail), I think we have three routes that could
work to at least allow meta-clang and meta-oe to exist in the same Yocto
workspace without breakage:
(a) Instead of installing llvm-config into
${SYSROOT_DESTDIR}${bindir_crossscripts} -- which causes collisions when
meta-clang and meta-oe both try to overwrite the same shared file --
install into ${D}{bindir}llvm-config, and install the binary llvm-config
into ${D}${bindir}/llvm-config${PV}. Recipes requiring LLVM will then
need to depend on either llvm-common3.3 or llvm-common4.0, but at least
there will be no collision or ambiguity which one gets used.
(b) Use a common wrapper in
${SYSROOT_DESTDIR}${bindir_crossscripts}/llvm-config that does what the
meta-oe current version does; just exec
${SYSROOT_DESTDIR}${bindir_crossscripts}/llvm-config${WANT_LLVM_RELEASE}.
Let the meta-oe LLVM 3.3 install the binary llvm-config into
${SYSROOT_DESTDIR}${bindir_crossscripts}/llvm-config3.3 and let the
meta-clang LLVM 4.0 install its wrapper llvm-config into
${SYSROOT_DESTDIR}${bindir_crossscripts}/llvm-config4.0. meta-clang will
have to use the second wrapper script because it needs to edit
TARGET_CFLAGS and similar to avoid compiling target binaries using
native flags (due to the CMake LLVM build which appears not to respect
cross-compile).
(c) Use a common llvm-config wrapper in
${SYSROOT_DESTDIR}${bindir_crossscripts}/llvm-config that does a
hardcoded check for WANT_LLVM_RELEASE. If the version is 4.0 or greater,
then edit the TARGET_CFLAGS and similar, otherwise don't.
It seems to me that all these options are undesireable, but (a) is
probably least so.
Khem and others: which option would you like me to pursue, or do you
have an alternate suggestion?
Thanks,
Martin
More information about the Openembedded-core
mailing list