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
--
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core