Skip to contentSkip to conversation

llvm: Add recipe for 5.0

PATCH In review Khem Raj 3 participants 11 messages Jul 29, 2017 – Jul 30, 2017

lore
Share & tools
lore

Khem Raj

author
#0 lore raw

v3 cover llvm: Add recipe for 5.0

Create a recipe just for building llvm, which is needed by many other packages e.g. mesa can use it for llvmpipe

Fix mesa to work with llvm 5.0.0

Add supporting recipes needed to build llvm

The following changes since commit 28fc6ba761ed4a47efa7c43e7f7dff5e2fe72b5e:

core-image-minimal-initramfs: use initramfs-framework by default (2017-07-27 22:20:16 +0100)

are available in the git repository at:

git://git.openembedded.org/openembedded-core-contrib kraj/llvm
http://cgit.openembedded.org/openembedded-core-contrib/log/?h=kraj/llvm

Khem Raj (4):
ninja: Add recipe
re2c: Transfer recipe from meta-oe and upgrade to 0.16
llvm: Add recipe for 5.0
mesa: Fix build when building with llvmpipe

 ...LibraryInfo-Undefine-libc-functions-if-th.patch |  93 ++++++++++++
 .../0002-llvm-allow-env-override-of-exe-path.patch |  39 +++++
 meta/recipes-devtools/llvm/llvm_git.bb             | 166 +++++++++++++++++++++
 meta/recipes-devtools/ninja/ninja_1.7.2.bb         |  29 ++++
 ...1-ac-fix-build-after-LLVM-5.0-SVN-r300718.patch |  40 +++++
 ...allivm-Fix-build-against-LLVM-SVN-r302589.patch |  49 ++++++
 .../mesa/files/llvm-config-version.patch           |  23 +++
 meta/recipes-graphics/mesa/mesa.inc                |   7 +-
 meta/recipes-graphics/mesa/mesa_17.1.5.bb          |   3 +
 meta/recipes-support/re2c/re2c_0.16.bb             |  15 ++
 10 files changed, 462 insertions(+), 2 deletions(-)
 create mode 100644 meta/recipes-devtools/llvm/llvm/0001-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch
 create mode 100644 meta/recipes-devtools/llvm/llvm/0002-llvm-allow-env-override-of-exe-path.patch
 create mode 100644 meta/recipes-devtools/llvm/llvm_git.bb
 create mode 100644 meta/recipes-devtools/ninja/ninja_1.7.2.bb
 create mode 100644 meta/recipes-graphics/mesa/files/0001-ac-fix-build-after-LLVM-5.0-SVN-r300718.patch
 create mode 100644 meta/recipes-graphics/mesa/files/0002-gallivm-Fix-build-against-LLVM-SVN-r302589.patch
 create mode 100644 meta/recipes-graphics/mesa/files/llvm-config-version.patch
 create mode 100644 meta/recipes-support/re2c/re2c_0.16.bb
Signature · 1 line
2.13.3
author
#1 lore raw

PATCH v3 1/4 ninja: Add recipe

llvm is using it, therefore move it from meta-oe

---
 meta/recipes-devtools/ninja/ninja_1.7.2.bb | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)
 create mode 100644 meta/recipes-devtools/ninja/ninja_1.7.2.bb
meta/recipes-devtools/ninja/ninja_1.7.2.bb new file +29 -0
new file mode 100644
index 0000000000..20dca2f0af
@@ -0,0 +1,29 @@
+SUMMARY = "Ninja is a small build system with a focus on speed."
+HOMEPAGE = "http://martine.github.com/ninja/"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a81586a64ad4e476c791cda7e2f2c52e"
+
+DEPENDS = "re2c-native ninja-native"
+
+SRCREV = "717b7b4a31db6027207588c0fb89c3ead384747b"
+
+SRC_URI = "git://github.com/martine/ninja.git;branch=release"
+
+S = "${WORKDIR}/git"
+
+do_configure[noexec] = "1"
+
+do_compile_class-native() {
+	./configure.py --bootstrap
+}
+
+do_compile() {
+	./configure.py
+	ninja
+}
+
+do_install() {
+	install -D -m 0755  ${S}/ninja ${D}${bindir}/ninja
+}
+
+BBCLASSEXTEND = "native nativesdk"
Signature · 1 line
2.13.3
author
#2 lore raw

PATCH v3 2/4 re2c: Transfer recipe from meta-oe and upgrade to 0.16

In reply to Khem Raj

ninja needs it.

---
 meta/recipes-support/re2c/re2c_0.16.bb | 15 +++++++++++++++
 1 file changed, 15 insertions(+)
 create mode 100644 meta/recipes-support/re2c/re2c_0.16.bb
meta/recipes-support/re2c/re2c_0.16.bb new file +15 -0
new file mode 100644
index 0000000000..e82502c5f2
@@ -0,0 +1,15 @@
+SUMMARY = "Tool for writing very fast and very flexible scanners"
+HOMEPAGE = "http://re2c.sourceforge.net/"
+AUTHOR = "Marcus Börger <[email protected]>"
+SECTION = "devel"
+LICENSE = "PD"
+LIC_FILES_CHKSUM = "file://README;beginline=146;md5=881056c9add17f8019ccd8c382ba963a"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BPN}-${PV}.tar.gz \
+"
+SRC_URI[md5sum] = "3bf508fabd52ed7334647d0ccb956e8d"
+SRC_URI[sha256sum] = "48c12564297641cceb5ff05aead57f28118db6277f31e2262437feba89069e84"
+
+BBCLASSEXTEND = "native"
+
+inherit autotools
Signature · 1 line
2.13.3
author
#3 lore raw

PATCH v3 3/4 llvm: Add recipe for 5.0

In reply to Khem Raj

Based on recipe from meta-oe and clang recipe from meta-clang Needed by mesa

Fixes
[YOCTO #11529]

---
 ...LibraryInfo-Undefine-libc-functions-if-th.patch |  93 ++++++++++++
 .../0002-llvm-allow-env-override-of-exe-path.patch |  39 +++++
 meta/recipes-devtools/llvm/llvm_git.bb             | 166 +++++++++++++++++++++
 3 files changed, 298 insertions(+)
 create mode 100644 meta/recipes-devtools/llvm/llvm/0001-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch
 create mode 100644 meta/recipes-devtools/llvm/llvm/0002-llvm-allow-env-override-of-exe-path.patch
 create mode 100644 meta/recipes-devtools/llvm/llvm_git.bb
meta/recipes-devtools/llvm/llvm/0001-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch new file +93 -0
new file mode 100644
index 0000000000..e251799259
@@ -0,0 +1,93 @@
+From 28293e48cf1a52004c6a78de448718441f9e05f9 Mon Sep 17 00:00:00 2001
+From: Khem Raj <[email protected]>
+Date: Sat, 21 May 2016 00:33:20 +0000
+Subject: [PATCH 1/2] llvm: TargetLibraryInfo: Undefine libc functions if they
+ are macros
+
+musl defines some functions as macros and not inline functions
+if this is the case then make sure to undefine them
+
+Signed-off-by: Khem Raj <[email protected]>
+---
+Upstream-Status: Pending
+
+ include/llvm/Analysis/TargetLibraryInfo.def | 21 +++++++++++++++++++++
+ 1 file changed, 21 insertions(+)
+
+diff --git a/include/llvm/Analysis/TargetLibraryInfo.def b/include/llvm/Analysis/TargetLibraryInfo.def
+index 9cbe917c146..aff8419cf54 100644
+--- a/include/llvm/Analysis/TargetLibraryInfo.def
++++ b/include/llvm/Analysis/TargetLibraryInfo.def
+@@ -656,6 +656,9 @@ TLI_DEFINE_STRING_INTERNAL("fmodl")
+ TLI_DEFINE_ENUM_INTERNAL(fopen)
+ TLI_DEFINE_STRING_INTERNAL("fopen")
+ /// FILE *fopen64(const char *filename, const char *opentype)
++#ifdef fopen64
++#undef fopen64
++#endif
+ TLI_DEFINE_ENUM_INTERNAL(fopen64)
+ TLI_DEFINE_STRING_INTERNAL("fopen64")
+ /// int fprintf(FILE *stream, const char *format, ...);
+@@ -691,6 +694,9 @@ TLI_DEFINE_STRING_INTERNAL("fseek")
+ /// int fseeko(FILE *stream, off_t offset, int whence);
+ TLI_DEFINE_ENUM_INTERNAL(fseeko)
+ TLI_DEFINE_STRING_INTERNAL("fseeko")
++#ifdef fseeko64
++#undef fseeko64
++#endif
+ /// int fseeko64(FILE *stream, off64_t offset, int whence)
+ TLI_DEFINE_ENUM_INTERNAL(fseeko64)
+ TLI_DEFINE_STRING_INTERNAL("fseeko64")
+@@ -701,6 +707,9 @@ TLI_DEFINE_STRING_INTERNAL("fsetpos")
+ TLI_DEFINE_ENUM_INTERNAL(fstat)
+ TLI_DEFINE_STRING_INTERNAL("fstat")
+ /// int fstat64(int filedes, struct stat64 *buf)
++#ifdef fstat64
++#undef fstat64
++#endif
+ TLI_DEFINE_ENUM_INTERNAL(fstat64)
+ TLI_DEFINE_STRING_INTERNAL("fstat64")
+ /// int fstatvfs(int fildes, struct statvfs *buf);
+@@ -716,6 +725,9 @@ TLI_DEFINE_STRING_INTERNAL("ftell")
+ TLI_DEFINE_ENUM_INTERNAL(ftello)
+ TLI_DEFINE_STRING_INTERNAL("ftello")
+ /// off64_t ftello64(FILE *stream)
++#ifdef ftello64
++#undef ftello64
++#endif
+ TLI_DEFINE_ENUM_INTERNAL(ftello64)
+ TLI_DEFINE_STRING_INTERNAL("ftello64")
+ /// int ftrylockfile(FILE *file);
+@@ -836,6 +848,9 @@ TLI_DEFINE_STRING_INTERNAL("logl")
+ TLI_DEFINE_ENUM_INTERNAL(lstat)
+ TLI_DEFINE_STRING_INTERNAL("lstat")
+ /// int lstat64(const char *path, struct stat64 *buf);
++#ifdef lstat64
++#undef lstat64
++#endif
+ TLI_DEFINE_ENUM_INTERNAL(lstat64)
+ TLI_DEFINE_STRING_INTERNAL("lstat64")
+ /// void *malloc(size_t size);
+@@ -1055,6 +1070,9 @@ TLI_DEFINE_STRING_INTERNAL("sscanf")
+ TLI_DEFINE_ENUM_INTERNAL(stat)
+ TLI_DEFINE_STRING_INTERNAL("stat")
+ /// int stat64(const char *path, struct stat64 *buf);
++#ifdef stat64
++#undef stat64
++#endif
+ TLI_DEFINE_ENUM_INTERNAL(stat64)
+ TLI_DEFINE_STRING_INTERNAL("stat64")
+ /// int statvfs(const char *path, struct statvfs *buf);
+@@ -1184,6 +1202,9 @@ TLI_DEFINE_STRING_INTERNAL("times")
+ TLI_DEFINE_ENUM_INTERNAL(tmpfile)
+ TLI_DEFINE_STRING_INTERNAL("tmpfile")
+ /// FILE *tmpfile64(void)
++#ifdef tmpfile64
++#undef tmpfile64
++#endif
+ TLI_DEFINE_ENUM_INTERNAL(tmpfile64)
+ TLI_DEFINE_STRING_INTERNAL("tmpfile64")
+ /// int toascii(int c);
+-- 
+2.13.1
+
meta/recipes-devtools/llvm/llvm/0002-llvm-allow-env-override-of-exe-path.patch new file +39 -0
new file mode 100644
index 0000000000..832bd729ef
@@ -0,0 +1,39 @@
+From d776487bac17650704614248d19d1e6b35775001 Mon Sep 17 00:00:00 2001
+From: Martin Kelly <[email protected]>
+Date: Fri, 19 May 2017 00:22:57 -0700
+Subject: [PATCH 2/2] llvm: allow env override of exe path
+
+When using a native llvm-config from inside a sysroot, we need llvm-config to
+return the libraries, include directories, etc. from inside the sysroot rather
+than from the native sysroot. Thus provide an env override for calling
+llvm-config from a target sysroot.
+
+Signed-off-by: Martin Kelly <[email protected]>
+Signed-off-by: Khem Raj <[email protected]>
+---
+Upstream-Status: Pending
+
+ tools/llvm-config/llvm-config.cpp | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/tools/llvm-config/llvm-config.cpp b/tools/llvm-config/llvm-config.cpp
+index 08b096afb05..d8d7742744e 100644
+--- a/tools/llvm-config/llvm-config.cpp
++++ b/tools/llvm-config/llvm-config.cpp
+@@ -225,6 +225,13 @@ Typical components:\n\
+ 
+ /// \brief Compute the path to the main executable.
+ std::string GetExecutablePath(const char *Argv0) {
++  // Hack for Yocto: we need to override the root path when we are using
++  // llvm-config from within a target sysroot.
++  const char *Sysroot = std::getenv("YOCTO_ALTERNATE_EXE_PATH");
++  if (Sysroot != nullptr) {
++    return Sysroot;
++  }
++
+   // This just needs to be some symbol in the binary; C++ doesn't
+   // allow taking the address of ::main however.
+   void *P = (void *)(intptr_t)GetExecutablePath;
+-- 
+2.13.1
+
meta/recipes-devtools/llvm/llvm_git.bb new file +166 -0

166 lines not on this page · raw message

Signature · 1 line
2.13.3
#4 lore raw

Fails like this for me:

| FAILED: tools/llvm-cvtres/Opts.inc.tmp
| cd
/data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/build && /data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/build/NATIVE/bin/llvm-tblgen -gen-opt-parser-defs -I /data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/git/tools/llvm-cvtres -I
/data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/git/include /data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/git/tools/llvm-cvtres/Opts.td -o tools/llvm-cvtres/Opts.inc.tmp -d tools/llvm-cvtres/Opts.inc.d
| /bin/sh: 1:
/data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/build/NATIVE/bin/llvm-tblgen:
not found

It is there though:

$ ls -l
/data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/build/NATIVE/bin/llvm-tblgen
-rwxr-xr-x 1 ross ross 49807224 Jul 29 12:25
/data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/build/NATIVE/bin/llvm-tblgen

$ /data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/build/NATIVE/bin/llvm-tblgen -bash:
/data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/build/NATIVE/bin/llvm-tblgen:
No such file or directory

Might be related to having uninative enabled?

Ross

Quoted 382 lines · Khem Raj

Based on recipe from meta-oe and clang recipe from meta-clang Needed by mesa

Fixes
[YOCTO #11529]

---
 ...LibraryInfo-Undefine-libc-functions-if-th.patch |  93 ++++++++++++
 .../0002-llvm-allow-env-override-of-exe-path.patch |  39 +++++
 meta/recipes-devtools/llvm/llvm_git.bb             | 166
+++++++++++++++++++++
 3 files changed, 298 insertions(+)
 create mode 100644 meta/recipes-devtools/llvm/llvm/0001-llvm-
TargetLibraryInfo-Undefine-libc-functions-if-th.patch
 create mode 100644 meta/recipes-devtools/llvm/llvm/0002-llvm-allow-env-
override-of-exe-path.patch
 create mode 100644 meta/recipes-devtools/llvm/llvm_git.bb
(quoted diff) +0 -0

TargetLibraryInfo-Undefine-libc-functions-if-th.patch b/meta/recipes-devtools/llvm/llvm/0001-llvm-TargetLibraryInfo-Undefine- libc-functions-if-th.patch
new file mode 100644
index 0000000000..e251799259

meta/recipes-devtools/llvm/llvm/0001-llvm- new file +0 -0

TargetLibraryInfo-Undefine-libc-functions-if-th.patch

meta/recipes-devtools/llvm/llvm/0001-llvm- new file +4 -0
@@ -0,0 +1,93 @@
+From 28293e48cf1a52004c6a78de448718441f9e05f9 Mon Sep 17 00:00:00 2001
+From: Khem Raj <[email protected]>
+Date: Sat, 21 May 2016 00:33:20 +0000
+Subject: [PATCH 1/2] llvm: TargetLibraryInfo: Undefine libc functions if

they
+ are macros

meta/recipes-devtools/llvm/llvm/0001-llvm- new file +12 -0
+
+musl defines some functions as macros and not inline functions
+if this is the case then make sure to undefine them
+
+Signed-off-by: Khem Raj <[email protected]>
+---
+Upstream-Status: Pending
+
+ include/llvm/Analysis/TargetLibraryInfo.def | 21 +++++++++++++++++++++
+ 1 file changed, 21 insertions(+)
+
+diff --git a/include/llvm/Analysis/TargetLibraryInfo.def

b/include/llvm/Analysis/TargetLibraryInfo.def

meta/recipes-devtools/llvm/llvm/0001-llvm- new file +76 -0
+index 9cbe917c146..aff8419cf54 100644
+--- a/include/llvm/Analysis/TargetLibraryInfo.def
++++ b/include/llvm/Analysis/TargetLibraryInfo.def
+@@ -656,6 +656,9 @@ TLI_DEFINE_STRING_INTERNAL("fmodl")
+ TLI_DEFINE_ENUM_INTERNAL(fopen)
+ TLI_DEFINE_STRING_INTERNAL("fopen")
+ /// FILE *fopen64(const char *filename, const char *opentype)
++#ifdef fopen64
++#undef fopen64
++#endif
+ TLI_DEFINE_ENUM_INTERNAL(fopen64)
+ TLI_DEFINE_STRING_INTERNAL("fopen64")
+ /// int fprintf(FILE *stream, const char *format, ...);
+@@ -691,6 +694,9 @@ TLI_DEFINE_STRING_INTERNAL("fseek")
+ /// int fseeko(FILE *stream, off_t offset, int whence);
+ TLI_DEFINE_ENUM_INTERNAL(fseeko)
+ TLI_DEFINE_STRING_INTERNAL("fseeko")
++#ifdef fseeko64
++#undef fseeko64
++#endif
+ /// int fseeko64(FILE *stream, off64_t offset, int whence)
+ TLI_DEFINE_ENUM_INTERNAL(fseeko64)
+ TLI_DEFINE_STRING_INTERNAL("fseeko64")
+@@ -701,6 +707,9 @@ TLI_DEFINE_STRING_INTERNAL("fsetpos")
+ TLI_DEFINE_ENUM_INTERNAL(fstat)
+ TLI_DEFINE_STRING_INTERNAL("fstat")
+ /// int fstat64(int filedes, struct stat64 *buf)
++#ifdef fstat64
++#undef fstat64
++#endif
+ TLI_DEFINE_ENUM_INTERNAL(fstat64)
+ TLI_DEFINE_STRING_INTERNAL("fstat64")
+ /// int fstatvfs(int fildes, struct statvfs *buf);
+@@ -716,6 +725,9 @@ TLI_DEFINE_STRING_INTERNAL("ftell")
+ TLI_DEFINE_ENUM_INTERNAL(ftello)
+ TLI_DEFINE_STRING_INTERNAL("ftello")
+ /// off64_t ftello64(FILE *stream)
++#ifdef ftello64
++#undef ftello64
++#endif
+ TLI_DEFINE_ENUM_INTERNAL(ftello64)
+ TLI_DEFINE_STRING_INTERNAL("ftello64")
+ /// int ftrylockfile(FILE *file);
+@@ -836,6 +848,9 @@ TLI_DEFINE_STRING_INTERNAL("logl")
+ TLI_DEFINE_ENUM_INTERNAL(lstat)
+ TLI_DEFINE_STRING_INTERNAL("lstat")
+ /// int lstat64(const char *path, struct stat64 *buf);
++#ifdef lstat64
++#undef lstat64
++#endif
+ TLI_DEFINE_ENUM_INTERNAL(lstat64)
+ TLI_DEFINE_STRING_INTERNAL("lstat64")
+ /// void *malloc(size_t size);
+@@ -1055,6 +1070,9 @@ TLI_DEFINE_STRING_INTERNAL("sscanf")
+ TLI_DEFINE_ENUM_INTERNAL(stat)
+ TLI_DEFINE_STRING_INTERNAL("stat")
+ /// int stat64(const char *path, struct stat64 *buf);
++#ifdef stat64
++#undef stat64
++#endif
+ TLI_DEFINE_ENUM_INTERNAL(stat64)
+ TLI_DEFINE_STRING_INTERNAL("stat64")
+ /// int statvfs(const char *path, struct statvfs *buf);
+@@ -1184,6 +1202,9 @@ TLI_DEFINE_STRING_INTERNAL("times")
+ TLI_DEFINE_ENUM_INTERNAL(tmpfile)
+ TLI_DEFINE_STRING_INTERNAL("tmpfile")
+ /// FILE *tmpfile64(void)
++#ifdef tmpfile64
++#undef tmpfile64
++#endif
+ TLI_DEFINE_ENUM_INTERNAL(tmpfile64)
+ TLI_DEFINE_STRING_INTERNAL("tmpfile64")
+ /// int toascii(int c);
+--
+2.13.1
+
meta/recipes-devtools/llvm/llvm/0002-llvm-allow-env- renamed from meta/recipes-devtools/llvm/llvm/0002-llvm-allow-env-override-of-exe-path.patch +0 -0

override-of-exe-path.patch
new file mode 100644
index 0000000000..832bd729ef

meta/recipes-devtools/llvm/llvm/0002-llvm-allow-env- new file +0 -0

override-of-exe-path.patch

meta/recipes-devtools/llvm/llvm/0002-llvm-allow-env- new file +6 -0
@@ -0,0 +1,39 @@
+From d776487bac17650704614248d19d1e6b35775001 Mon Sep 17 00:00:00 2001
+From: Martin Kelly <[email protected]>
+Date: Fri, 19 May 2017 00:22:57 -0700
+Subject: [PATCH 2/2] llvm: allow env override of exe path
+
+When using a native llvm-config from inside a sysroot, we need

llvm-config to
+return the libraries, include directories, etc. from inside the sysroot rather

meta/recipes-devtools/llvm/llvm/0002-llvm-allow-env- new file +12 -0
+than from the native sysroot. Thus provide an env override for calling
+llvm-config from a target sysroot.
+
+Signed-off-by: Martin Kelly <[email protected]>
+Signed-off-by: Khem Raj <[email protected]>
+---
+Upstream-Status: Pending
+
+ tools/llvm-config/llvm-config.cpp | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/tools/llvm-config/llvm-config.cpp b/tools/llvm-config/llvm-

config.cpp

meta/recipes-devtools/llvm/llvm/0002-llvm-allow-env- new file +20 -0
+index 08b096afb05..d8d7742744e 100644
+--- a/tools/llvm-config/llvm-config.cpp
++++ b/tools/llvm-config/llvm-config.cpp
+@@ -225,6 +225,13 @@ Typical components:\n\
+
+ /// \brief Compute the path to the main executable.
+ std::string GetExecutablePath(const char *Argv0) {
++  // Hack for Yocto: we need to override the root path when we are using
++  // llvm-config from within a target sysroot.
++  const char *Sysroot = std::getenv("YOCTO_ALTERNATE_EXE_PATH");
++  if (Sysroot != nullptr) {
++    return Sysroot;
++  }
++
+   // This just needs to be some symbol in the binary; C++ doesn't
+   // allow taking the address of ::main however.
+   void *P = (void *)(intptr_t)GetExecutablePath;
+--
+2.13.1
+
meta/recipes-devtools/llvm/llvm_git.bb new file +9 -0
new file mode 100644
index 0000000000..7b51d2153f
@@ -0,0 +1,166 @@
+# Copyright (C) 2017 Khem Raj <[email protected]>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+DESCRIPTION = "The LLVM Compiler Infrastructure"
+HOMEPAGE = "http://llvm.org"
+LICENSE = "NCSA"
+SECTION = "devel"
+
+LIC_FILES_CHKSUM = "file://LICENSE.TXT;md5=e825e017edc35cfd58e26116e52517

71"

meta/recipes-devtools/llvm/llvm_git.bb new file +16 -0
+
+DEPENDS = "libffi libxml2-native zlib ninja-native"
+
+RDEPENDS_${PN}_append_class-target = " ncurses-terminfo"
+
+inherit perlnative pythonnative cmake pkgconfig
+
+PROVIDES += "llvm${PV}"
+
+LLVM_RELEASE = "${PV}"
+LLVM_DIR = "llvm${LLVM_RELEASE}"
+
+SRCREV = "9a5c333388cbb54a0ce3a67c4f539f5e590a089b"
+PV = "5.0"
+PATCH_VERSION = "0"
+SRC_URI = "git://github.com/llvm-mirror/llvm.git;branch=release_50;

protocol=http \
+ file://0001-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch
\

meta/recipes-devtools/llvm/llvm_git.bb new file +35 -0
+           file://0002-llvm-allow-env-override-of-exe-path.patch \
+          "
+S = "${WORKDIR}/git"
+
+LLVM_INSTALL_DIR = "${WORKDIR}/llvm-install"
+def get_llvm_arch(bb, d, arch_var):
+    import re
+    a = d.getVar(arch_var, True)
+    if   re.match('(i.86|athlon|x86.64)$', a):         return 'X86'
+    elif re.match('arm$', a):                          return 'ARM'
+    elif re.match('armeb$', a):                        return 'ARM'
+    elif re.match('aarch64$', a):                      return 'AArch64'
+    elif re.match('aarch64_be$', a):                   return 'AArch64'
+    elif re.match('mips(isa|)(32|64|)(r6|)(el|)$', a): return 'Mips'
+    elif re.match('p(pc|owerpc)(|64)', a):             return 'PowerPC'
+    else:
+        bb.error("cannot map '%s' to a supported llvm architecture" % a)
+    return ""
+
+def get_llvm_target_arch(bb, d):
+    return get_llvm_arch(bb, d, 'TARGET_ARCH')
+#
+# Default to build all OE-Core supported target arches (user overridable).
+#
+LLVM_TARGETS ?= "${@get_llvm_target_arch(bb, d)}"
+LLVM_TARGETS_prepend_x86 = "AMDGPU;"
+LLVM_TARGETS_prepend_x86-64 = "AMDGPU;"
+
+EXTRA_OECMAKE += "-DLLVM_ENABLE_ASSERTIONS=OFF \
+                  -DLLVM_ENABLE_EXPENSIVE_CHECKS=OFF \
+                  -DLLVM_ENABLE_PIC=ON \
+                  -DLLVM_BINDINGS_LIST='' \
+                  -DLLVM_LINK_LLVM_DYLIB=ON \
+                  -DLLVM_ENABLE_FFI=ON \
+                  -DFFI_INCLUDE_DIR=$(pkg-config --variable=includedir

libffi) \

meta/recipes-devtools/llvm/llvm_git.bb new file +10 -0
+                  -DLLVM_OPTIMIZED_TABLEGEN=ON \
+                  -DLLVM_TARGETS_TO_BUILD="${LLVM_TARGETS}" \
+                  -DCMAKE_CROSSCOMPILING:BOOL=ON \
+                  -G Ninja \
+                 "
+EXTRA_OECMAKE_remove_class-native = "-DCMAKE_CROSSCOMPILING:BOOL=ON"
+
+do_configure_prepend() {
+# Fix paths in llvm-config
+       sed -i "s|sys::path::parent_path(CurrentPath))\.str()|sys::

path::parent_path(sys::path::parent_path(CurrentPath))).str()|g" ${S}/tools/llvm-config/llvm-config.cpp
+ sed -ri "s#/(bin|include|lib)(/?\")#/\1/${LLVM_DIR}\2#g"
${S}/tools/llvm-config/llvm-config.cpp
+ sed -ri "s#lib/${LLVM_DIR}#${baselib}/${LLVM_DIR}#g"
${S}/tools/llvm-config/llvm-config.cpp

meta/recipes-devtools/llvm/llvm_git.bb new file +9 -0
+}
+
+do_compile() {
+       NINJA_STATUS="[%p] " ninja -v ${PARALLEL_MAKE}
+}
+
+do_install() {
+       NINJA_STATUS="[%p] " DESTDIR=${LLVM_INSTALL_DIR} ninja -v install
+       install -D -m 0755 ${B}/NATIVE/bin/llvm-config

${D}${libdir}/${LLVM_DIR}/llvm-config-host

meta/recipes-devtools/llvm/llvm_git.bb new file +6 -0
+
+       install -d ${D}${bindir}/${LLVM_DIR}
+       cp -r ${LLVM_INSTALL_DIR}${bindir}/* ${D}${bindir}/${LLVM_DIR}/
+
+       install -d ${D}${includedir}/${LLVM_DIR}
+       cp -r ${LLVM_INSTALL_DIR}${includedir}/*

${D}${includedir}/${LLVM_DIR}/

meta/recipes-devtools/llvm/llvm_git.bb new file +4 -0
+
+       install -d ${D}${libdir}/${LLVM_DIR}
+
+       # The LLVM sources have "/lib" embedded and so we cannot

completely rely on the ${libdir} variable

meta/recipes-devtools/llvm/llvm_git.bb new file +2 -0
+       if [ -d ${LLVM_INSTALL_DIR}${libdir}/ ]; then
+               cp -r ${LLVM_INSTALL_DIR}${libdir}/*

${D}${libdir}/${LLVM_DIR}/

meta/recipes-devtools/llvm/llvm_git.bb new file +2 -0
+       elif [ -d ${LLVM_INSTALL_DIR}${prefix}/lib ]; then
+               cp -r ${LLVM_INSTALL_DIR}${prefix}/lib/*

${D}${libdir}/${LLVM_DIR}/

meta/recipes-devtools/llvm/llvm_git.bb new file +2 -0
+       elif [ -d ${LLVM_INSTALL_DIR}${prefix}/lib64 ]; then
+               cp -r ${LLVM_INSTALL_DIR}${prefix}/lib64/*

${D}${libdir}/${LLVM_DIR}/

meta/recipes-devtools/llvm/llvm_git.bb new file +6 -0
+       fi
+
+       # Remove unnecessary cmake files
+       rm -rf ${D}${libdir}/${LLVM_DIR}/cmake
+
+       ln -s ${LLVM_DIR}/libLLVM-${PV}${SOLIBSDEV}

${D}${libdir}/libLLVM-${PV}${SOLIBSDEV}

meta/recipes-devtools/llvm/llvm_git.bb new file +45 -0
+
+       # We'll have to delete the libLLVM.so due to multiple reasons...
+       rm -rf ${D}${libdir}/${LLVM_DIR}/libLLVM.so
+       rm -rf ${D}${libdir}/${LLVM_DIR}/libLTO.so
+}
+
+PACKAGES += "${PN}-bugpointpasses ${PN}-llvmhello"
+ALLOW_EMPTY_${PN} = "1"
+ALLOW_EMPTY_${PN}-staticdev = "1"
+FILES_${PN} = ""
+FILES_${PN}-staticdev = ""
+FILES_${PN}-dbg = " \
+    ${bindir}/${LLVM_DIR}/.debug \
+    ${libdir}/${LLVM_DIR}/.debug/BugpointPasses.so \
+    ${libdir}/${LLVM_DIR}/.debug/LLVMHello.so \
+    ${libdir}/${LLVM_DIR}/.debug/libLTO.so* \
+    ${libdir}/${LLVM_DIR}/.debug/llvm-config-host \
+    /usr/src/debug \
+"
+
+FILES_${PN}-dev = " \
+    ${bindir}/${LLVM_DIR} \
+    ${includedir}/${LLVM_DIR} \
+    ${libdir}/${LLVM_DIR}/llvm-config-host \
+"
+
+RRECOMMENDS_${PN}-dev += "${PN}-bugpointpasses ${PN}-llvmhello"
+
+FILES_${PN}-bugpointpasses = "\
+    ${libdir}/${LLVM_DIR}/BugpointPasses.so \
+"
+FILES_${PN} += "\
+    ${libdir}/${LLVM_DIR}/libLTO.so.* \
+"
+
+FILES_${PN}-llvmhello = "\
+    ${libdir}/${LLVM_DIR}/LLVMHello.so \
+"
+
+PACKAGES_DYNAMIC = "^libllvm${LLVM_RELEASE}-.*$"
+NOAUTOPACKAGEDEBUG = "1"
+
+INSANE_SKIP_${MLPREFIX}libllvm${LLVM_RELEASE}-llvm-${LLVM_RELEASE}.${PATCH_VERSION}
+= "dev-so"
+INSANE_SKIP_${MLPREFIX}libllvm${LLVM_RELEASE}-llvm-${LLVM_RELEASE} +=

"dev-so"

meta/recipes-devtools/llvm/llvm_git.bb new file +6 -0
+INSANE_SKIP_${MLPREFIX}libllvm${LLVM_RELEASE}-llvm += "dev-so"
+
+python llvm_populate_packages() {
+    libdir = bb.data.expand('${libdir}', d)
+    libllvm_libdir = bb.data.expand('${libdir}/${LLVM_DIR}', d)
+    split_dbg_packages = do_split_packages(d, libllvm_libdir+'/.debug',

'^lib(.*)\.so$', 'libllvm${LLVM_RELEASE}-%s-dbg', 'Split debug package for %s', allow_dirs=True)
+ split_packages = do_split_packages(d, libdir, '^lib(.*)\.so$',
'libllvm${LLVM_RELEASE}-%s', 'Split package for %s', allow_dirs=True, allow_links=True, recursive=True)
+ split_staticdev_packages = do_split_packages(d, libllvm_libdir,
'^lib(.*)\.a$', 'libllvm${LLVM_RELEASE}-%s-staticdev', 'Split staticdev package for %s', allow_dirs=True)

meta/recipes-devtools/llvm/llvm_git.bb new file +4 -0
+    if split_packages:
+        pn = d.getVar('PN', True)
+        d.appendVar('RDEPENDS_' + pn, ' '+' '.join(split_packages))
+        d.appendVar('RDEPENDS_' + pn + '-dbg', ' '+'

'.join(split_dbg_packages))
+ d.appendVar('RDEPENDS_' + pn + '-staticdev', ' '+'
'.join(split_staticdev_packages))

meta/recipes-devtools/llvm/llvm_git.bb new file +5 -1
+}
+
+PACKAGESPLITFUNCS_prepend = "llvm_populate_packages "
+
+BBCLASSEXTEND = "native nativesdk"
--

2.13.3

--
_______________________________________________
Openembedded-core mailing list
[email protected]
http://lists.openembedded.org/mailman/listinfo/openembedded-core

#5 lore raw

Replicated without uninative, so it's not that.

Ross

Quoted 418 lines · Ross

Fails like this for me:

| FAILED: tools/llvm-cvtres/Opts.inc.tmp
| cd /data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/build && /data/poky-tmp/master/build/work/corei7-64-poky-linux/ llvm/5.0-r0/build/NATIVE/bin/llvm-tblgen -gen-opt-parser-defs -I /data/poky-tmp/master/build/work/corei7-64-poky-linux/ llvm/5.0-r0/git/tools/llvm-cvtres -I /data/poky-tmp/master/build/ work/corei7-64-poky-linux/llvm/5.0-r0/git/include /data/poky-tmp/master/build/work/corei7-64-poky-linux/ llvm/5.0-r0/git/tools/llvm-cvtres/Opts.td -o tools/llvm-cvtres/Opts.inc.tmp -d tools/llvm-cvtres/Opts.inc.d
| /bin/sh: 1: /data/poky-tmp/master/build/work/corei7-64-poky-linux/ llvm/5.0-r0/build/NATIVE/bin/llvm-tblgen: not found

It is there though:

$ ls -l /data/poky-tmp/master/build/work/corei7-64-poky-linux/
llvm/5.0-r0/build/NATIVE/bin/llvm-tblgen
-rwxr-xr-x 1 ross ross 49807224 Jul 29 12:25 /data/poky-tmp/master/build/
work/corei7-64-poky-linux/llvm/5.0-r0/build/NATIVE/bin/llvm-tblgen
$ /data/poky-tmp/master/build/work/corei7-64-poky-linux/
llvm/5.0-r0/build/NATIVE/bin/llvm-tblgen
-bash: /data/poky-tmp/master/build/work/corei7-64-poky-linux/
llvm/5.0-r0/build/NATIVE/bin/llvm-tblgen: No such file or directory

Might be related to having uninative enabled?

Ross

Quoted 382 lines · Khem Raj

Based on recipe from meta-oe and clang recipe from meta-clang Needed by mesa

Fixes
[YOCTO #11529]

---
 ...LibraryInfo-Undefine-libc-functions-if-th.patch |  93 ++++++++++++
 .../0002-llvm-allow-env-override-of-exe-path.patch |  39 +++++
 meta/recipes-devtools/llvm/llvm_git.bb             | 166
+++++++++++++++++++++
 3 files changed, 298 insertions(+)
 create mode 100644 meta/recipes-devtools/llvm/llv
m/0001-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch
 create mode 100644 meta/recipes-devtools/llvm/llv
m/0002-llvm-allow-env-override-of-exe-path.patch
 create mode 100644 meta/recipes-devtools/llvm/llvm_git.bb
(quoted diff) +0 -0

o-Undefine-libc-functions-if-th.patch b/meta/recipes-devtools/llvm/l lvm/0001-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch new file mode 100644
index 0000000000..e251799259

meta/recipes-devtools/llvm/llvm/0001-llvm-TargetLibraryInf new file +0 -0

o-Undefine-libc-functions-if-th.patch

meta/recipes-devtools/llvm/llvm/0001-llvm-TargetLibraryInf new file +4 -0
@@ -0,0 +1,93 @@
+From 28293e48cf1a52004c6a78de448718441f9e05f9 Mon Sep 17 00:00:00 2001
+From: Khem Raj <[email protected]>
+Date: Sat, 21 May 2016 00:33:20 +0000
+Subject: [PATCH 1/2] llvm: TargetLibraryInfo: Undefine libc functions if

they
+ are macros

meta/recipes-devtools/llvm/llvm/0001-llvm-TargetLibraryInf new file +12 -0
+
+musl defines some functions as macros and not inline functions
+if this is the case then make sure to undefine them
+
+Signed-off-by: Khem Raj <[email protected]>
+---
+Upstream-Status: Pending
+
+ include/llvm/Analysis/TargetLibraryInfo.def | 21 +++++++++++++++++++++
+ 1 file changed, 21 insertions(+)
+
+diff --git a/include/llvm/Analysis/TargetLibraryInfo.def

b/include/llvm/Analysis/TargetLibraryInfo.def

meta/recipes-devtools/llvm/llvm/0001-llvm-TargetLibraryInf new file +76 -0
+index 9cbe917c146..aff8419cf54 100644
+--- a/include/llvm/Analysis/TargetLibraryInfo.def
++++ b/include/llvm/Analysis/TargetLibraryInfo.def
+@@ -656,6 +656,9 @@ TLI_DEFINE_STRING_INTERNAL("fmodl")
+ TLI_DEFINE_ENUM_INTERNAL(fopen)
+ TLI_DEFINE_STRING_INTERNAL("fopen")
+ /// FILE *fopen64(const char *filename, const char *opentype)
++#ifdef fopen64
++#undef fopen64
++#endif
+ TLI_DEFINE_ENUM_INTERNAL(fopen64)
+ TLI_DEFINE_STRING_INTERNAL("fopen64")
+ /// int fprintf(FILE *stream, const char *format, ...);
+@@ -691,6 +694,9 @@ TLI_DEFINE_STRING_INTERNAL("fseek")
+ /// int fseeko(FILE *stream, off_t offset, int whence);
+ TLI_DEFINE_ENUM_INTERNAL(fseeko)
+ TLI_DEFINE_STRING_INTERNAL("fseeko")
++#ifdef fseeko64
++#undef fseeko64
++#endif
+ /// int fseeko64(FILE *stream, off64_t offset, int whence)
+ TLI_DEFINE_ENUM_INTERNAL(fseeko64)
+ TLI_DEFINE_STRING_INTERNAL("fseeko64")
+@@ -701,6 +707,9 @@ TLI_DEFINE_STRING_INTERNAL("fsetpos")
+ TLI_DEFINE_ENUM_INTERNAL(fstat)
+ TLI_DEFINE_STRING_INTERNAL("fstat")
+ /// int fstat64(int filedes, struct stat64 *buf)
++#ifdef fstat64
++#undef fstat64
++#endif
+ TLI_DEFINE_ENUM_INTERNAL(fstat64)
+ TLI_DEFINE_STRING_INTERNAL("fstat64")
+ /// int fstatvfs(int fildes, struct statvfs *buf);
+@@ -716,6 +725,9 @@ TLI_DEFINE_STRING_INTERNAL("ftell")
+ TLI_DEFINE_ENUM_INTERNAL(ftello)
+ TLI_DEFINE_STRING_INTERNAL("ftello")
+ /// off64_t ftello64(FILE *stream)
++#ifdef ftello64
++#undef ftello64
++#endif
+ TLI_DEFINE_ENUM_INTERNAL(ftello64)
+ TLI_DEFINE_STRING_INTERNAL("ftello64")
+ /// int ftrylockfile(FILE *file);
+@@ -836,6 +848,9 @@ TLI_DEFINE_STRING_INTERNAL("logl")
+ TLI_DEFINE_ENUM_INTERNAL(lstat)
+ TLI_DEFINE_STRING_INTERNAL("lstat")
+ /// int lstat64(const char *path, struct stat64 *buf);
++#ifdef lstat64
++#undef lstat64
++#endif
+ TLI_DEFINE_ENUM_INTERNAL(lstat64)
+ TLI_DEFINE_STRING_INTERNAL("lstat64")
+ /// void *malloc(size_t size);
+@@ -1055,6 +1070,9 @@ TLI_DEFINE_STRING_INTERNAL("sscanf")
+ TLI_DEFINE_ENUM_INTERNAL(stat)
+ TLI_DEFINE_STRING_INTERNAL("stat")
+ /// int stat64(const char *path, struct stat64 *buf);
++#ifdef stat64
++#undef stat64
++#endif
+ TLI_DEFINE_ENUM_INTERNAL(stat64)
+ TLI_DEFINE_STRING_INTERNAL("stat64")
+ /// int statvfs(const char *path, struct statvfs *buf);
+@@ -1184,6 +1202,9 @@ TLI_DEFINE_STRING_INTERNAL("times")
+ TLI_DEFINE_ENUM_INTERNAL(tmpfile)
+ TLI_DEFINE_STRING_INTERNAL("tmpfile")
+ /// FILE *tmpfile64(void)
++#ifdef tmpfile64
++#undef tmpfile64
++#endif
+ TLI_DEFINE_ENUM_INTERNAL(tmpfile64)
+ TLI_DEFINE_STRING_INTERNAL("tmpfile64")
+ /// int toascii(int c);
+--
+2.13.1
+
meta/recipes-devtools/llvm/llvm/0002-llvm-allow-env-overri renamed from meta/recipes-devtools/llvm/llvm/0002-llvm-allow-env-override-of-exe-path.patch +0 -0

de-of-exe-path.patch
new file mode 100644
index 0000000000..832bd729ef

meta/recipes-devtools/llvm/llvm/0002-llvm-allow-env-overri new file +0 -0

de-of-exe-path.patch

meta/recipes-devtools/llvm/llvm/0002-llvm-allow-env-overri new file +6 -0
@@ -0,0 +1,39 @@
+From d776487bac17650704614248d19d1e6b35775001 Mon Sep 17 00:00:00 2001
+From: Martin Kelly <[email protected]>
+Date: Fri, 19 May 2017 00:22:57 -0700
+Subject: [PATCH 2/2] llvm: allow env override of exe path
+
+When using a native llvm-config from inside a sysroot, we need

llvm-config to
+return the libraries, include directories, etc. from inside the sysroot rather

meta/recipes-devtools/llvm/llvm/0002-llvm-allow-env-overri new file +12 -0
+than from the native sysroot. Thus provide an env override for calling
+llvm-config from a target sysroot.
+
+Signed-off-by: Martin Kelly <[email protected]>
+Signed-off-by: Khem Raj <[email protected]>
+---
+Upstream-Status: Pending
+
+ tools/llvm-config/llvm-config.cpp | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/tools/llvm-config/llvm-config.cpp

b/tools/llvm-config/llvm-config.cpp

meta/recipes-devtools/llvm/llvm/0002-llvm-allow-env-overri new file +20 -0
+index 08b096afb05..d8d7742744e 100644
+--- a/tools/llvm-config/llvm-config.cpp
++++ b/tools/llvm-config/llvm-config.cpp
+@@ -225,6 +225,13 @@ Typical components:\n\
+
+ /// \brief Compute the path to the main executable.
+ std::string GetExecutablePath(const char *Argv0) {
++  // Hack for Yocto: we need to override the root path when we are using
++  // llvm-config from within a target sysroot.
++  const char *Sysroot = std::getenv("YOCTO_ALTERNATE_EXE_PATH");
++  if (Sysroot != nullptr) {
++    return Sysroot;
++  }
++
+   // This just needs to be some symbol in the binary; C++ doesn't
+   // allow taking the address of ::main however.
+   void *P = (void *)(intptr_t)GetExecutablePath;
+--
+2.13.1
+
meta/recipes-devtools/llvm/llvm_git.bb new file +9 -0
new file mode 100644
index 0000000000..7b51d2153f
@@ -0,0 +1,166 @@
+# Copyright (C) 2017 Khem Raj <[email protected]>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+DESCRIPTION = "The LLVM Compiler Infrastructure"
+HOMEPAGE = "http://llvm.org"
+LICENSE = "NCSA"
+SECTION = "devel"
+
+LIC_FILES_CHKSUM = "file://LICENSE.TXT;md5=e825e0

17edc35cfd58e26116e5251771"

meta/recipes-devtools/llvm/llvm_git.bb new file +16 -0
+
+DEPENDS = "libffi libxml2-native zlib ninja-native"
+
+RDEPENDS_${PN}_append_class-target = " ncurses-terminfo"
+
+inherit perlnative pythonnative cmake pkgconfig
+
+PROVIDES += "llvm${PV}"
+
+LLVM_RELEASE = "${PV}"
+LLVM_DIR = "llvm${LLVM_RELEASE}"
+
+SRCREV = "9a5c333388cbb54a0ce3a67c4f539f5e590a089b"
+PV = "5.0"
+PATCH_VERSION = "0"
+SRC_URI = "git://github.com/llvm-mirror/llvm.git;branch=release_50;pro

tocol=http \
+ file://0001-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch
\

meta/recipes-devtools/llvm/llvm_git.bb new file +23 -0
+           file://0002-llvm-allow-env-override-of-exe-path.patch \
+          "
+S = "${WORKDIR}/git"
+
+LLVM_INSTALL_DIR = "${WORKDIR}/llvm-install"
+def get_llvm_arch(bb, d, arch_var):
+    import re
+    a = d.getVar(arch_var, True)
+    if   re.match('(i.86|athlon|x86.64)$', a):         return 'X86'
+    elif re.match('arm$', a):                          return 'ARM'
+    elif re.match('armeb$', a):                        return 'ARM'
+    elif re.match('aarch64$', a):                      return 'AArch64'
+    elif re.match('aarch64_be$', a):                   return 'AArch64'
+    elif re.match('mips(isa|)(32|64|)(r6|)(el|)$', a): return 'Mips'
+    elif re.match('p(pc|owerpc)(|64)', a):             return 'PowerPC'
+    else:
+        bb.error("cannot map '%s' to a supported llvm architecture" % a)
+    return ""
+
+def get_llvm_target_arch(bb, d):
+    return get_llvm_arch(bb, d, 'TARGET_ARCH')
+#
+# Default to build all OE-Core supported target arches (user

overridable).

meta/recipes-devtools/llvm/llvm_git.bb new file +12 -0
+#
+LLVM_TARGETS ?= "${@get_llvm_target_arch(bb, d)}"
+LLVM_TARGETS_prepend_x86 = "AMDGPU;"
+LLVM_TARGETS_prepend_x86-64 = "AMDGPU;"
+
+EXTRA_OECMAKE += "-DLLVM_ENABLE_ASSERTIONS=OFF \
+                  -DLLVM_ENABLE_EXPENSIVE_CHECKS=OFF \
+                  -DLLVM_ENABLE_PIC=ON \
+                  -DLLVM_BINDINGS_LIST='' \
+                  -DLLVM_LINK_LLVM_DYLIB=ON \
+                  -DLLVM_ENABLE_FFI=ON \
+                  -DFFI_INCLUDE_DIR=$(pkg-config --variable=includedir

libffi) \

meta/recipes-devtools/llvm/llvm_git.bb new file +10 -0
+                  -DLLVM_OPTIMIZED_TABLEGEN=ON \
+                  -DLLVM_TARGETS_TO_BUILD="${LLVM_TARGETS}" \
+                  -DCMAKE_CROSSCOMPILING:BOOL=ON \
+                  -G Ninja \
+                 "
+EXTRA_OECMAKE_remove_class-native = "-DCMAKE_CROSSCOMPILING:BOOL=ON"
+
+do_configure_prepend() {
+# Fix paths in llvm-config
+       sed -i "s|sys::path::parent_path(CurrentPath))\.str()|sys::path::

parent_path(sys::path::parent_path(CurrentPath))).str()|g" ${S}/tools/llvm-config/llvm-config.cpp
+ sed -ri "s#/(bin|include|lib)(/?\")#/\1/${LLVM_DIR}\2#g"
${S}/tools/llvm-config/llvm-config.cpp
+ sed -ri "s#lib/${LLVM_DIR}#${baselib}/${LLVM_DIR}#g"
${S}/tools/llvm-config/llvm-config.cpp

meta/recipes-devtools/llvm/llvm_git.bb new file +9 -0
+}
+
+do_compile() {
+       NINJA_STATUS="[%p] " ninja -v ${PARALLEL_MAKE}
+}
+
+do_install() {
+       NINJA_STATUS="[%p] " DESTDIR=${LLVM_INSTALL_DIR} ninja -v install
+       install -D -m 0755 ${B}/NATIVE/bin/llvm-config

${D}${libdir}/${LLVM_DIR}/llvm-config-host

meta/recipes-devtools/llvm/llvm_git.bb new file +6 -0
+
+       install -d ${D}${bindir}/${LLVM_DIR}
+       cp -r ${LLVM_INSTALL_DIR}${bindir}/* ${D}${bindir}/${LLVM_DIR}/
+
+       install -d ${D}${includedir}/${LLVM_DIR}
+       cp -r ${LLVM_INSTALL_DIR}${includedir}/*

${D}${includedir}/${LLVM_DIR}/

meta/recipes-devtools/llvm/llvm_git.bb new file +4 -0
+
+       install -d ${D}${libdir}/${LLVM_DIR}
+
+       # The LLVM sources have "/lib" embedded and so we cannot

completely rely on the ${libdir} variable

meta/recipes-devtools/llvm/llvm_git.bb new file +2 -0
+       if [ -d ${LLVM_INSTALL_DIR}${libdir}/ ]; then
+               cp -r ${LLVM_INSTALL_DIR}${libdir}/*

${D}${libdir}/${LLVM_DIR}/

meta/recipes-devtools/llvm/llvm_git.bb new file +2 -0
+       elif [ -d ${LLVM_INSTALL_DIR}${prefix}/lib ]; then
+               cp -r ${LLVM_INSTALL_DIR}${prefix}/lib/*

${D}${libdir}/${LLVM_DIR}/

meta/recipes-devtools/llvm/llvm_git.bb new file +2 -0
+       elif [ -d ${LLVM_INSTALL_DIR}${prefix}/lib64 ]; then
+               cp -r ${LLVM_INSTALL_DIR}${prefix}/lib64/*

${D}${libdir}/${LLVM_DIR}/

meta/recipes-devtools/llvm/llvm_git.bb new file +6 -0
+       fi
+
+       # Remove unnecessary cmake files
+       rm -rf ${D}${libdir}/${LLVM_DIR}/cmake
+
+       ln -s ${LLVM_DIR}/libLLVM-${PV}${SOLIBSDEV}

${D}${libdir}/libLLVM-${PV}${SOLIBSDEV}

meta/recipes-devtools/llvm/llvm_git.bb new file +45 -0
+
+       # We'll have to delete the libLLVM.so due to multiple reasons...
+       rm -rf ${D}${libdir}/${LLVM_DIR}/libLLVM.so
+       rm -rf ${D}${libdir}/${LLVM_DIR}/libLTO.so
+}
+
+PACKAGES += "${PN}-bugpointpasses ${PN}-llvmhello"
+ALLOW_EMPTY_${PN} = "1"
+ALLOW_EMPTY_${PN}-staticdev = "1"
+FILES_${PN} = ""
+FILES_${PN}-staticdev = ""
+FILES_${PN}-dbg = " \
+    ${bindir}/${LLVM_DIR}/.debug \
+    ${libdir}/${LLVM_DIR}/.debug/BugpointPasses.so \
+    ${libdir}/${LLVM_DIR}/.debug/LLVMHello.so \
+    ${libdir}/${LLVM_DIR}/.debug/libLTO.so* \
+    ${libdir}/${LLVM_DIR}/.debug/llvm-config-host \
+    /usr/src/debug \
+"
+
+FILES_${PN}-dev = " \
+    ${bindir}/${LLVM_DIR} \
+    ${includedir}/${LLVM_DIR} \
+    ${libdir}/${LLVM_DIR}/llvm-config-host \
+"
+
+RRECOMMENDS_${PN}-dev += "${PN}-bugpointpasses ${PN}-llvmhello"
+
+FILES_${PN}-bugpointpasses = "\
+    ${libdir}/${LLVM_DIR}/BugpointPasses.so \
+"
+FILES_${PN} += "\
+    ${libdir}/${LLVM_DIR}/libLTO.so.* \
+"
+
+FILES_${PN}-llvmhello = "\
+    ${libdir}/${LLVM_DIR}/LLVMHello.so \
+"
+
+PACKAGES_DYNAMIC = "^libllvm${LLVM_RELEASE}-.*$"
+NOAUTOPACKAGEDEBUG = "1"
+
+INSANE_SKIP_${MLPREFIX}libllvm${LLVM_RELEASE}-llvm-${LLVM_RELEASE}.${PATCH_VERSION}
+= "dev-so"
+INSANE_SKIP_${MLPREFIX}libllvm${LLVM_RELEASE}-llvm-${LLVM_RELEASE} +=

"dev-so"

meta/recipes-devtools/llvm/llvm_git.bb new file +6 -0
+INSANE_SKIP_${MLPREFIX}libllvm${LLVM_RELEASE}-llvm += "dev-so"
+
+python llvm_populate_packages() {
+    libdir = bb.data.expand('${libdir}', d)
+    libllvm_libdir = bb.data.expand('${libdir}/${LLVM_DIR}', d)
+    split_dbg_packages = do_split_packages(d, libllvm_libdir+'/.debug',

'^lib(.*)\.so$', 'libllvm${LLVM_RELEASE}-%s-dbg', 'Split debug package for %s', allow_dirs=True)
+ split_packages = do_split_packages(d, libdir, '^lib(.*)\.so$',
'libllvm${LLVM_RELEASE}-%s', 'Split package for %s', allow_dirs=True, allow_links=True, recursive=True)
+ split_staticdev_packages = do_split_packages(d, libllvm_libdir,
'^lib(.*)\.a$', 'libllvm${LLVM_RELEASE}-%s-staticdev', 'Split staticdev package for %s', allow_dirs=True)

meta/recipes-devtools/llvm/llvm_git.bb new file +4 -0
+    if split_packages:
+        pn = d.getVar('PN', True)
+        d.appendVar('RDEPENDS_' + pn, ' '+' '.join(split_packages))
+        d.appendVar('RDEPENDS_' + pn + '-dbg', ' '+'

'.join(split_dbg_packages))
+ d.appendVar('RDEPENDS_' + pn + '-staticdev', ' '+'
'.join(split_staticdev_packages))

meta/recipes-devtools/llvm/llvm_git.bb new file +5 -1
+}
+
+PACKAGESPLITFUNCS_prepend = "llvm_populate_packages "
+
+BBCLASSEXTEND = "native nativesdk"
--

2.13.3

--
_______________________________________________
Openembedded-core mailing list
[email protected]
http://lists.openembedded.org/mailman/listinfo/openembedded-core

author
#6 lore raw
Quoted 29 lines · Ross

Replicated without uninative, so it's not that.

Ross

Quoted 24 lines · Ross

Fails like this for me:

| FAILED: tools/llvm-cvtres/Opts.inc.tmp
| cd
/data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/build && /data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/build/NATIVE/bin/llvm-tblgen -gen-opt-parser-defs -I /data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/git/tools/llvm-cvtres -I
/data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/git/include /data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/git/tools/llvm-cvtres/Opts.td -o tools/llvm-cvtres/Opts.inc.tmp -d tools/llvm-cvtres/Opts.inc.d
| /bin/sh: 1:
/data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/build/NATIVE/bin/llvm-tblgen:
not found

It is there though:

$ ls -l
/data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/build/NATIVE/bin/llvm-tblgen
-rwxr-xr-x 1 ross ross 49807224 Jul 29 12:25
/data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/build/NATIVE/bin/llvm-tblgen
Quoted 7 lines
Quoted 7 lines

$ /data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/build/NATIVE/bin/llvm-tblgen -bash:
/data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/build/NATIVE/bin/llvm-tblgen:
No such file or directory

Might be related to having uninative enabled?

Not really, I think it could be build race. I will take a look

Quoted 392 lines
Quoted 391 lines

Ross

Quoted 384 lines · Khem Raj

Based on recipe from meta-oe and clang recipe from meta-clang Needed by mesa

Fixes
[YOCTO #11529]

---
 ...LibraryInfo-Undefine-libc-functions-if-th.patch |  93 ++++++++++++
 .../0002-llvm-allow-env-override-of-exe-path.patch |  39 +++++
 meta/recipes-devtools/llvm/llvm_git.bb             | 166
+++++++++++++++++++++
 3 files changed, 298 insertions(+)
 create mode 100644
meta/recipes-devtools/llvm/llvm/0001-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch
 create mode 100644
meta/recipes-devtools/llvm/llvm/0002-llvm-allow-env-override-of-exe-path.patch
 create mode 100644 meta/recipes-devtools/llvm/llvm_git.bb

diff --git a/meta/recipes-devtools/llvm/llvm/0001-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch b/meta/recipes-devtools/llvm/llvm/0001-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch new file mode 100644
index 0000000000..e251799259
--- /dev/null
+++
b/meta/recipes-devtools/llvm/llvm/0001-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch

meta/recipes-devtools/llvm/llvm/0001-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch new file +4 -0
@@ -0,0 +1,93 @@
+From 28293e48cf1a52004c6a78de448718441f9e05f9 Mon Sep 17 00:00:00 2001
+From: Khem Raj <[email protected]>
+Date: Sat, 21 May 2016 00:33:20 +0000
+Subject: [PATCH 1/2] llvm: TargetLibraryInfo: Undefine libc functions if

they
+ are macros

meta/recipes-devtools/llvm/llvm/0001-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch new file +12 -0
+
+musl defines some functions as macros and not inline functions
+if this is the case then make sure to undefine them
+
+Signed-off-by: Khem Raj <[email protected]>
+---
+Upstream-Status: Pending
+
+ include/llvm/Analysis/TargetLibraryInfo.def | 21 +++++++++++++++++++++
+ 1 file changed, 21 insertions(+)
+
+diff --git a/include/llvm/Analysis/TargetLibraryInfo.def

b/include/llvm/Analysis/TargetLibraryInfo.def

meta/recipes-devtools/llvm/llvm/0001-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch new file +76 -0
+index 9cbe917c146..aff8419cf54 100644
+--- a/include/llvm/Analysis/TargetLibraryInfo.def
++++ b/include/llvm/Analysis/TargetLibraryInfo.def
+@@ -656,6 +656,9 @@ TLI_DEFINE_STRING_INTERNAL("fmodl")
+ TLI_DEFINE_ENUM_INTERNAL(fopen)
+ TLI_DEFINE_STRING_INTERNAL("fopen")
+ /// FILE *fopen64(const char *filename, const char *opentype)
++#ifdef fopen64
++#undef fopen64
++#endif
+ TLI_DEFINE_ENUM_INTERNAL(fopen64)
+ TLI_DEFINE_STRING_INTERNAL("fopen64")
+ /// int fprintf(FILE *stream, const char *format, ...);
+@@ -691,6 +694,9 @@ TLI_DEFINE_STRING_INTERNAL("fseek")
+ /// int fseeko(FILE *stream, off_t offset, int whence);
+ TLI_DEFINE_ENUM_INTERNAL(fseeko)
+ TLI_DEFINE_STRING_INTERNAL("fseeko")
++#ifdef fseeko64
++#undef fseeko64
++#endif
+ /// int fseeko64(FILE *stream, off64_t offset, int whence)
+ TLI_DEFINE_ENUM_INTERNAL(fseeko64)
+ TLI_DEFINE_STRING_INTERNAL("fseeko64")
+@@ -701,6 +707,9 @@ TLI_DEFINE_STRING_INTERNAL("fsetpos")
+ TLI_DEFINE_ENUM_INTERNAL(fstat)
+ TLI_DEFINE_STRING_INTERNAL("fstat")
+ /// int fstat64(int filedes, struct stat64 *buf)
++#ifdef fstat64
++#undef fstat64
++#endif
+ TLI_DEFINE_ENUM_INTERNAL(fstat64)
+ TLI_DEFINE_STRING_INTERNAL("fstat64")
+ /// int fstatvfs(int fildes, struct statvfs *buf);
+@@ -716,6 +725,9 @@ TLI_DEFINE_STRING_INTERNAL("ftell")
+ TLI_DEFINE_ENUM_INTERNAL(ftello)
+ TLI_DEFINE_STRING_INTERNAL("ftello")
+ /// off64_t ftello64(FILE *stream)
++#ifdef ftello64
++#undef ftello64
++#endif
+ TLI_DEFINE_ENUM_INTERNAL(ftello64)
+ TLI_DEFINE_STRING_INTERNAL("ftello64")
+ /// int ftrylockfile(FILE *file);
+@@ -836,6 +848,9 @@ TLI_DEFINE_STRING_INTERNAL("logl")
+ TLI_DEFINE_ENUM_INTERNAL(lstat)
+ TLI_DEFINE_STRING_INTERNAL("lstat")
+ /// int lstat64(const char *path, struct stat64 *buf);
++#ifdef lstat64
++#undef lstat64
++#endif
+ TLI_DEFINE_ENUM_INTERNAL(lstat64)
+ TLI_DEFINE_STRING_INTERNAL("lstat64")
+ /// void *malloc(size_t size);
+@@ -1055,6 +1070,9 @@ TLI_DEFINE_STRING_INTERNAL("sscanf")
+ TLI_DEFINE_ENUM_INTERNAL(stat)
+ TLI_DEFINE_STRING_INTERNAL("stat")
+ /// int stat64(const char *path, struct stat64 *buf);
++#ifdef stat64
++#undef stat64
++#endif
+ TLI_DEFINE_ENUM_INTERNAL(stat64)
+ TLI_DEFINE_STRING_INTERNAL("stat64")
+ /// int statvfs(const char *path, struct statvfs *buf);
+@@ -1184,6 +1202,9 @@ TLI_DEFINE_STRING_INTERNAL("times")
+ TLI_DEFINE_ENUM_INTERNAL(tmpfile)
+ TLI_DEFINE_STRING_INTERNAL("tmpfile")
+ /// FILE *tmpfile64(void)
++#ifdef tmpfile64
++#undef tmpfile64
++#endif
+ TLI_DEFINE_ENUM_INTERNAL(tmpfile64)
+ TLI_DEFINE_STRING_INTERNAL("tmpfile64")
+ /// int toascii(int c);
+--
+2.13.1
+

diff --git a/meta/recipes-devtools/llvm/llvm/0002-llvm-allow-env-override-of-exe-path.patch b/meta/recipes-devtools/llvm/llvm/0002-llvm-allow-env-override-of-exe-path.patch new file mode 100644
index 0000000000..832bd729ef
--- /dev/null
+++
b/meta/recipes-devtools/llvm/llvm/0002-llvm-allow-env-override-of-exe-path.patch

meta/recipes-devtools/llvm/llvm/0002-llvm-allow-env-override-of-exe-path.patch new file +6 -0
@@ -0,0 +1,39 @@
+From d776487bac17650704614248d19d1e6b35775001 Mon Sep 17 00:00:00 2001
+From: Martin Kelly <[email protected]>
+Date: Fri, 19 May 2017 00:22:57 -0700
+Subject: [PATCH 2/2] llvm: allow env override of exe path
+
+When using a native llvm-config from inside a sysroot, we need

llvm-config to
+return the libraries, include directories, etc. from inside the sysroot rather

meta/recipes-devtools/llvm/llvm/0002-llvm-allow-env-override-of-exe-path.patch new file +12 -0
+than from the native sysroot. Thus provide an env override for calling
+llvm-config from a target sysroot.
+
+Signed-off-by: Martin Kelly <[email protected]>
+Signed-off-by: Khem Raj <[email protected]>
+---
+Upstream-Status: Pending
+
+ tools/llvm-config/llvm-config.cpp | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/tools/llvm-config/llvm-config.cpp

b/tools/llvm-config/llvm-config.cpp

meta/recipes-devtools/llvm/llvm/0002-llvm-allow-env-override-of-exe-path.patch new file +8 -0
+index 08b096afb05..d8d7742744e 100644
+--- a/tools/llvm-config/llvm-config.cpp
++++ b/tools/llvm-config/llvm-config.cpp
+@@ -225,6 +225,13 @@ Typical components:\n\
+
+ /// \brief Compute the path to the main executable.
+ std::string GetExecutablePath(const char *Argv0) {
++  // Hack for Yocto: we need to override the root path when we are

using

++  // llvm-config from within a target sysroot.
++  const char *Sysroot = std::getenv("YOCTO_ALTERNATE_EXE_PATH");
++  if (Sysroot != nullptr) {

++ return Sysroot;
++ }
++

meta/recipes-devtools/llvm/llvm/0002-llvm-allow-env-override-of-exe-path.patch new file +6 -0
+   // This just needs to be some symbol in the binary; C++ doesn't
+   // allow taking the address of ::main however.
+   void *P = (void *)(intptr_t)GetExecutablePath;
+--
+2.13.1
+
meta/recipes-devtools/llvm/llvm_git.bb new file +9 -0
new file mode 100644
index 0000000000..7b51d2153f
@@ -0,0 +1,166 @@
+# Copyright (C) 2017 Khem Raj <[email protected]>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+DESCRIPTION = "The LLVM Compiler Infrastructure"
+HOMEPAGE = "http://llvm.org"
+LICENSE = "NCSA"
+SECTION = "devel"
+
+LIC_FILES_CHKSUM =

"file://LICENSE.TXT;md5=e825e017edc35cfd58e26116e5251771"

meta/recipes-devtools/llvm/llvm_git.bb new file +16 -0
+
+DEPENDS = "libffi libxml2-native zlib ninja-native"
+
+RDEPENDS_${PN}_append_class-target = " ncurses-terminfo"
+
+inherit perlnative pythonnative cmake pkgconfig
+
+PROVIDES += "llvm${PV}"
+
+LLVM_RELEASE = "${PV}"
+LLVM_DIR = "llvm${LLVM_RELEASE}"
+
+SRCREV = "9a5c333388cbb54a0ce3a67c4f539f5e590a089b"
+PV = "5.0"
+PATCH_VERSION = "0"
+SRC_URI =

"git://github.com/llvm-mirror/llvm.git;branch=release_50;protocol=http \
+ file://0001-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch \

meta/recipes-devtools/llvm/llvm_git.bb new file +23 -0
+           file://0002-llvm-allow-env-override-of-exe-path.patch \
+          "
+S = "${WORKDIR}/git"
+
+LLVM_INSTALL_DIR = "${WORKDIR}/llvm-install"
+def get_llvm_arch(bb, d, arch_var):
+    import re
+    a = d.getVar(arch_var, True)
+    if   re.match('(i.86|athlon|x86.64)$', a):         return 'X86'
+    elif re.match('arm$', a):                          return 'ARM'
+    elif re.match('armeb$', a):                        return 'ARM'
+    elif re.match('aarch64$', a):                      return 'AArch64'
+    elif re.match('aarch64_be$', a):                   return 'AArch64'
+    elif re.match('mips(isa|)(32|64|)(r6|)(el|)$', a): return 'Mips'
+    elif re.match('p(pc|owerpc)(|64)', a):             return 'PowerPC'
+    else:
+        bb.error("cannot map '%s' to a supported llvm architecture" % a)
+    return ""
+
+def get_llvm_target_arch(bb, d):
+    return get_llvm_arch(bb, d, 'TARGET_ARCH')
+#
+# Default to build all OE-Core supported target arches (user

overridable).

meta/recipes-devtools/llvm/llvm_git.bb new file +12 -0
+#
+LLVM_TARGETS ?= "${@get_llvm_target_arch(bb, d)}"
+LLVM_TARGETS_prepend_x86 = "AMDGPU;"
+LLVM_TARGETS_prepend_x86-64 = "AMDGPU;"
+
+EXTRA_OECMAKE += "-DLLVM_ENABLE_ASSERTIONS=OFF \
+                  -DLLVM_ENABLE_EXPENSIVE_CHECKS=OFF \
+                  -DLLVM_ENABLE_PIC=ON \
+                  -DLLVM_BINDINGS_LIST='' \
+                  -DLLVM_LINK_LLVM_DYLIB=ON \
+                  -DLLVM_ENABLE_FFI=ON \
+                  -DFFI_INCLUDE_DIR=$(pkg-config --variable=includedir

libffi) \

meta/recipes-devtools/llvm/llvm_git.bb new file +10 -0
+                  -DLLVM_OPTIMIZED_TABLEGEN=ON \
+                  -DLLVM_TARGETS_TO_BUILD="${LLVM_TARGETS}" \
+                  -DCMAKE_CROSSCOMPILING:BOOL=ON \
+                  -G Ninja \
+                 "
+EXTRA_OECMAKE_remove_class-native = "-DCMAKE_CROSSCOMPILING:BOOL=ON"
+
+do_configure_prepend() {
+# Fix paths in llvm-config
+       sed -i

"s|sys::path::parent_path(CurrentPath))\.str()|sys::path::parent_path(sys::path::parent_path(CurrentPath))).str()|g" ${S}/tools/llvm-config/llvm-config.cpp
+ sed -ri "s#/(bin|include|lib)(/?\")#/\1/${LLVM_DIR}\2#g"
${S}/tools/llvm-config/llvm-config.cpp
+ sed -ri "s#lib/${LLVM_DIR}#${baselib}/${LLVM_DIR}#g"
${S}/tools/llvm-config/llvm-config.cpp

meta/recipes-devtools/llvm/llvm_git.bb new file +9 -0
+}
+
+do_compile() {
+       NINJA_STATUS="[%p] " ninja -v ${PARALLEL_MAKE}
+}
+
+do_install() {
+       NINJA_STATUS="[%p] " DESTDIR=${LLVM_INSTALL_DIR} ninja -v install
+       install -D -m 0755 ${B}/NATIVE/bin/llvm-config

${D}${libdir}/${LLVM_DIR}/llvm-config-host

meta/recipes-devtools/llvm/llvm_git.bb new file +6 -0
+
+       install -d ${D}${bindir}/${LLVM_DIR}
+       cp -r ${LLVM_INSTALL_DIR}${bindir}/* ${D}${bindir}/${LLVM_DIR}/
+
+       install -d ${D}${includedir}/${LLVM_DIR}
+       cp -r ${LLVM_INSTALL_DIR}${includedir}/*

${D}${includedir}/${LLVM_DIR}/

meta/recipes-devtools/llvm/llvm_git.bb new file +4 -0
+
+       install -d ${D}${libdir}/${LLVM_DIR}
+
+       # The LLVM sources have "/lib" embedded and so we cannot

completely rely on the ${libdir} variable

meta/recipes-devtools/llvm/llvm_git.bb new file +2 -0
+       if [ -d ${LLVM_INSTALL_DIR}${libdir}/ ]; then
+               cp -r ${LLVM_INSTALL_DIR}${libdir}/*

${D}${libdir}/${LLVM_DIR}/

meta/recipes-devtools/llvm/llvm_git.bb new file +2 -0
+       elif [ -d ${LLVM_INSTALL_DIR}${prefix}/lib ]; then
+               cp -r ${LLVM_INSTALL_DIR}${prefix}/lib/*

${D}${libdir}/${LLVM_DIR}/

meta/recipes-devtools/llvm/llvm_git.bb new file +2 -0
+       elif [ -d ${LLVM_INSTALL_DIR}${prefix}/lib64 ]; then
+               cp -r ${LLVM_INSTALL_DIR}${prefix}/lib64/*

${D}${libdir}/${LLVM_DIR}/

meta/recipes-devtools/llvm/llvm_git.bb new file +6 -0
+       fi
+
+       # Remove unnecessary cmake files
+       rm -rf ${D}${libdir}/${LLVM_DIR}/cmake
+
+       ln -s ${LLVM_DIR}/libLLVM-${PV}${SOLIBSDEV}

${D}${libdir}/libLLVM-${PV}${SOLIBSDEV}

meta/recipes-devtools/llvm/llvm_git.bb new file +45 -0
+
+       # We'll have to delete the libLLVM.so due to multiple reasons...
+       rm -rf ${D}${libdir}/${LLVM_DIR}/libLLVM.so
+       rm -rf ${D}${libdir}/${LLVM_DIR}/libLTO.so
+}
+
+PACKAGES += "${PN}-bugpointpasses ${PN}-llvmhello"
+ALLOW_EMPTY_${PN} = "1"
+ALLOW_EMPTY_${PN}-staticdev = "1"
+FILES_${PN} = ""
+FILES_${PN}-staticdev = ""
+FILES_${PN}-dbg = " \
+    ${bindir}/${LLVM_DIR}/.debug \
+    ${libdir}/${LLVM_DIR}/.debug/BugpointPasses.so \
+    ${libdir}/${LLVM_DIR}/.debug/LLVMHello.so \
+    ${libdir}/${LLVM_DIR}/.debug/libLTO.so* \
+    ${libdir}/${LLVM_DIR}/.debug/llvm-config-host \
+    /usr/src/debug \
+"
+
+FILES_${PN}-dev = " \
+    ${bindir}/${LLVM_DIR} \
+    ${includedir}/${LLVM_DIR} \
+    ${libdir}/${LLVM_DIR}/llvm-config-host \
+"
+
+RRECOMMENDS_${PN}-dev += "${PN}-bugpointpasses ${PN}-llvmhello"
+
+FILES_${PN}-bugpointpasses = "\
+    ${libdir}/${LLVM_DIR}/BugpointPasses.so \
+"
+FILES_${PN} += "\
+    ${libdir}/${LLVM_DIR}/libLTO.so.* \
+"
+
+FILES_${PN}-llvmhello = "\
+    ${libdir}/${LLVM_DIR}/LLVMHello.so \
+"
+
+PACKAGES_DYNAMIC = "^libllvm${LLVM_RELEASE}-.*$"
+NOAUTOPACKAGEDEBUG = "1"
+
 
+INSANE_SKIP_${MLPREFIX}libllvm${LLVM_RELEASE}-llvm-${LLVM_RELEASE}.${PATCH_VERSION}
+= "dev-so"
+INSANE_SKIP_${MLPREFIX}libllvm${LLVM_RELEASE}-llvm-${LLVM_RELEASE} +=

"dev-so"

meta/recipes-devtools/llvm/llvm_git.bb new file +6 -0
+INSANE_SKIP_${MLPREFIX}libllvm${LLVM_RELEASE}-llvm += "dev-so"
+
+python llvm_populate_packages() {
+    libdir = bb.data.expand('${libdir}', d)
+    libllvm_libdir = bb.data.expand('${libdir}/${LLVM_DIR}', d)
+    split_dbg_packages = do_split_packages(d, libllvm_libdir+'/.debug',

'^lib(.*)\.so$', 'libllvm${LLVM_RELEASE}-%s-dbg', 'Split debug package for %s', allow_dirs=True)
+ split_packages = do_split_packages(d, libdir, '^lib(.*)\.so$',
'libllvm${LLVM_RELEASE}-%s', 'Split package for %s', allow_dirs=True, allow_links=True, recursive=True)
+ split_staticdev_packages = do_split_packages(d, libllvm_libdir,
'^lib(.*)\.a$', 'libllvm${LLVM_RELEASE}-%s-staticdev', 'Split staticdev package for %s', allow_dirs=True)

meta/recipes-devtools/llvm/llvm_git.bb new file +4 -0
+    if split_packages:
+        pn = d.getVar('PN', True)
+        d.appendVar('RDEPENDS_' + pn, ' '+' '.join(split_packages))
+        d.appendVar('RDEPENDS_' + pn + '-dbg', ' '+'

'.join(split_dbg_packages))
+ d.appendVar('RDEPENDS_' + pn + '-staticdev', ' '+'
'.join(split_staticdev_packages))

meta/recipes-devtools/llvm/llvm_git.bb new file +5 -1
+}
+
+PACKAGESPLITFUNCS_prepend = "llvm_populate_packages "
+
+BBCLASSEXTEND = "native nativesdk"
--

2.13.3

--
_______________________________________________
Openembedded-core mailing list
[email protected]
http://lists.openembedded.org/mailman/listinfo/openembedded-core

author
#7 lore raw
In reply to Burton, Ross

Ross

I have refreshed the pull branch which should hopefully address mesa configure issue you are seeing along with llvm fix to adjust with clang layer

Quoted 458 lines · Ross

Replicated without uninative, so it's not that.

Ross

On 29 July 2017 at 12:39, Burton, Ross <[email protected] <mailto:[email protected]>> wrote:

    Fails like this for me:

    | FAILED: tools/llvm-cvtres/Opts.inc.tmp
    | cd
    /data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/build
    &&
    /data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/build/NATIVE/bin/llvm-tblgen
    -gen-opt-parser-defs -I
    /data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/git/tools/llvm-cvtres
    -I
    /data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/git/include
    /data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/git/tools/llvm-cvtres/Opts.td
    -o tools/llvm-cvtres/Opts.inc.tmp -d tools/llvm-cvtres/Opts.inc.d
    | /bin/sh: 1:
    /data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/build/NATIVE/bin/llvm-tblgen:
    not found

    It is there though:

    $ ls -l
    /data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/build/NATIVE/bin/llvm-tblgen
    -rwxr-xr-x 1 ross ross 49807224 Jul 29 12:25
    /data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/build/NATIVE/bin/llvm-tblgen

    $
    /data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/build/NATIVE/bin/llvm-tblgen
    -bash:
    /data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/build/NATIVE/bin/llvm-tblgen:
    No such file or directory

    Might be related to having uninative enabled?

    Ross


    On 29 July 2017 at 09:35, Khem Raj <[email protected]
    <mailto:[email protected]>> wrote:

        Based on recipe from meta-oe and clang recipe from meta-clang
        Needed by mesa

        Fixes
        [YOCTO #11529]

        Signed-off-by: Khem Raj <[email protected]
        <mailto:[email protected]>>
        ---
         ...LibraryInfo-Undefine-libc-functions-if-th.patch |  93
        ++++++++++++
         .../0002-llvm-allow-env-override-of-exe-path.patch |  39 +++++
         meta/recipes-devtools/llvm/llvm_git.bb <http://llvm_git.bb>   
                 | 166 +++++++++++++++++++++
         3 files changed, 298 insertions(+)
         create mode 100644
        meta/recipes-devtools/llvm/llvm/0001-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch
         create mode 100644
        meta/recipes-devtools/llvm/llvm/0002-llvm-allow-env-override-of-exe-path.patch
         create mode 100644 meta/recipes-devtools/llvm/llvm_git.bb
        <http://llvm_git.bb>

        diff --git
        a/meta/recipes-devtools/llvm/llvm/0001-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch
        b/meta/recipes-devtools/llvm/llvm/0001-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch
        new file mode 100644
        index 0000000000..e251799259
        --- /dev/null
        +++
        b/meta/recipes-devtools/llvm/llvm/0001-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch
        @@ -0,0 +1,93 @@
        +From 28293e48cf1a52004c6a78de448718441f9e05f9 Mon Sep 17
        00:00:00 2001
        +From: Khem Raj <[email protected] <mailto:[email protected]>>
        +Date: Sat, 21 May 2016 00:33:20 +0000
        +Subject: [PATCH 1/2] llvm: TargetLibraryInfo: Undefine libc
        functions if they
        + are macros
        +
        +musl defines some functions as macros and not inline functions
        +if this is the case then make sure to undefine them
        +
        +Signed-off-by: Khem Raj <[email protected]
        <mailto:[email protected]>>
        +---
        +Upstream-Status: Pending
        +
        + include/llvm/Analysis/TargetLibraryInfo.def | 21
        +++++++++++++++++++++
        + 1 file changed, 21 insertions(+)
        +
        +diff --git a/include/llvm/Analysis/TargetLibraryInfo.def
        b/include/llvm/Analysis/TargetLibraryInfo.def
        +index 9cbe917c146..aff8419cf54 100644
        +--- a/include/llvm/Analysis/TargetLibraryInfo.def
        ++++ b/include/llvm/Analysis/TargetLibraryInfo.def
        +@@ -656,6 +656,9 @@ TLI_DEFINE_STRING_INTERNAL("fmodl")
        + TLI_DEFINE_ENUM_INTERNAL(fopen)
        + TLI_DEFINE_STRING_INTERNAL("fopen")
        + /// FILE *fopen64(const char *filename, const char *opentype)
        ++#ifdef fopen64
        ++#undef fopen64
        ++#endif
        + TLI_DEFINE_ENUM_INTERNAL(fopen64)
        + TLI_DEFINE_STRING_INTERNAL("fopen64")
        + /// int fprintf(FILE *stream, const char *format, ...);
        +@@ -691,6 +694,9 @@ TLI_DEFINE_STRING_INTERNAL("fseek")
        + /// int fseeko(FILE *stream, off_t offset, int whence);
        + TLI_DEFINE_ENUM_INTERNAL(fseeko)
        + TLI_DEFINE_STRING_INTERNAL("fseeko")
        ++#ifdef fseeko64
        ++#undef fseeko64
        ++#endif
        + /// int fseeko64(FILE *stream, off64_t offset, int whence)
        + TLI_DEFINE_ENUM_INTERNAL(fseeko64)
        + TLI_DEFINE_STRING_INTERNAL("fseeko64")
        +@@ -701,6 +707,9 @@ TLI_DEFINE_STRING_INTERNAL("fsetpos")
        + TLI_DEFINE_ENUM_INTERNAL(fstat)
        + TLI_DEFINE_STRING_INTERNAL("fstat")
        + /// int fstat64(int filedes, struct stat64 *buf)
        ++#ifdef fstat64
        ++#undef fstat64
        ++#endif
        + TLI_DEFINE_ENUM_INTERNAL(fstat64)
        + TLI_DEFINE_STRING_INTERNAL("fstat64")
        + /// int fstatvfs(int fildes, struct statvfs *buf);
        +@@ -716,6 +725,9 @@ TLI_DEFINE_STRING_INTERNAL("ftell")
        + TLI_DEFINE_ENUM_INTERNAL(ftello)
        + TLI_DEFINE_STRING_INTERNAL("ftello")
        + /// off64_t ftello64(FILE *stream)
        ++#ifdef ftello64
        ++#undef ftello64
        ++#endif
        + TLI_DEFINE_ENUM_INTERNAL(ftello64)
        + TLI_DEFINE_STRING_INTERNAL("ftello64")
        + /// int ftrylockfile(FILE *file);
        +@@ -836,6 +848,9 @@ TLI_DEFINE_STRING_INTERNAL("logl")
        + TLI_DEFINE_ENUM_INTERNAL(lstat)
        + TLI_DEFINE_STRING_INTERNAL("lstat")
        + /// int lstat64(const char *path, struct stat64 *buf);
        ++#ifdef lstat64
        ++#undef lstat64
        ++#endif
        + TLI_DEFINE_ENUM_INTERNAL(lstat64)
        + TLI_DEFINE_STRING_INTERNAL("lstat64")
        + /// void *malloc(size_t size);
        +@@ -1055,6 +1070,9 @@ TLI_DEFINE_STRING_INTERNAL("sscanf")
        + TLI_DEFINE_ENUM_INTERNAL(stat)
        + TLI_DEFINE_STRING_INTERNAL("stat")
        + /// int stat64(const char *path, struct stat64 *buf);
        ++#ifdef stat64
        ++#undef stat64
        ++#endif
        + TLI_DEFINE_ENUM_INTERNAL(stat64)
        + TLI_DEFINE_STRING_INTERNAL("stat64")
        + /// int statvfs(const char *path, struct statvfs *buf);
        +@@ -1184,6 +1202,9 @@ TLI_DEFINE_STRING_INTERNAL("times")
        + TLI_DEFINE_ENUM_INTERNAL(tmpfile)
        + TLI_DEFINE_STRING_INTERNAL("tmpfile")
        + /// FILE *tmpfile64(void)
        ++#ifdef tmpfile64
        ++#undef tmpfile64
        ++#endif
        + TLI_DEFINE_ENUM_INTERNAL(tmpfile64)
        + TLI_DEFINE_STRING_INTERNAL("tmpfile64")
        + /// int toascii(int c);
        +--
        +2.13.1
        +
        diff --git
        a/meta/recipes-devtools/llvm/llvm/0002-llvm-allow-env-override-of-exe-path.patch
        b/meta/recipes-devtools/llvm/llvm/0002-llvm-allow-env-override-of-exe-path.patch
        new file mode 100644
        index 0000000000..832bd729ef
        --- /dev/null
        +++
        b/meta/recipes-devtools/llvm/llvm/0002-llvm-allow-env-override-of-exe-path.patch
        @@ -0,0 +1,39 @@
        +From d776487bac17650704614248d19d1e6b35775001 Mon Sep 17
        00:00:00 2001
        +From: Martin Kelly <[email protected] <mailto:[email protected]>>
        +Date: Fri, 19 May 2017 00:22:57 -0700
        +Subject: [PATCH 2/2] llvm: allow env override of exe path
        +
        +When using a native llvm-config from inside a sysroot, we need
        llvm-config to
        +return the libraries, include directories, etc. from inside the
        sysroot rather
        +than from the native sysroot. Thus provide an env override for
        calling
        +llvm-config from a target sysroot.
        +
        +Signed-off-by: Martin Kelly <[email protected]
        <mailto:[email protected]>>
        +Signed-off-by: Khem Raj <[email protected]
        <mailto:[email protected]>>
        +---
        +Upstream-Status: Pending
        +
        + tools/llvm-config/llvm-config.cpp | 7 +++++++
        + 1 file changed, 7 insertions(+)
        +
        +diff --git a/tools/llvm-config/llvm-config.cpp
        b/tools/llvm-config/llvm-config.cpp
        +index 08b096afb05..d8d7742744e 100644
        +--- a/tools/llvm-config/llvm-config.cpp
        ++++ b/tools/llvm-config/llvm-config.cpp
        +@@ -225,6 +225,13 @@ Typical components:\n\
        +
        + /// \brief Compute the path to the main executable.
        + std::string GetExecutablePath(const char *Argv0) {
        ++  // Hack for Yocto: we need to override the root path when we
        are using
        ++  // llvm-config from within a target sysroot.
        ++  const char *Sysroot = std::getenv("YOCTO_ALTERNATE_EXE_PATH");
        ++  if (Sysroot != nullptr) {
        ++    return Sysroot;
        ++  }
        ++
        +   // This just needs to be some symbol in the binary; C++ doesn't
        +   // allow taking the address of ::main however.
        +   void *P = (void *)(intptr_t)GetExecutablePath;
        +--
        +2.13.1
        +
        diff --git a/meta/recipes-devtools/llvm/llvm_git.bb
        <http://llvm_git.bb> b/meta/recipes-devtools/llvm/llvm_git.bb
        <http://llvm_git.bb>
        new file mode 100644
        index 0000000000..7b51d2153f
        --- /dev/null
        +++ b/meta/recipes-devtools/llvm/llvm_git.bb <http://llvm_git.bb>
        @@ -0,0 +1,166 @@
        +# Copyright (C) 2017 Khem Raj <[email protected]
        <mailto:[email protected]>>
        +# Released under the MIT license (see COPYING.MIT for the terms)
        +
        +DESCRIPTION = "The LLVM Compiler Infrastructure"
        +HOMEPAGE = "http://llvm.org"
        +LICENSE = "NCSA"
        +SECTION = "devel"
        +
        +LIC_FILES_CHKSUM =
        "file://LICENSE.TXT;md5=e825e017edc35cfd58e26116e5251771"
        +
        +DEPENDS = "libffi libxml2-native zlib ninja-native"
        +
        +RDEPENDS_${PN}_append_class-target = " ncurses-terminfo"
        +
        +inherit perlnative pythonnative cmake pkgconfig
        +
        +PROVIDES += "llvm${PV}"
        +
        +LLVM_RELEASE = "${PV}"
        +LLVM_DIR = "llvm${LLVM_RELEASE}"
        +
        +SRCREV = "9a5c333388cbb54a0ce3a67c4f539f5e590a089b"
        +PV = "5.0"
        +PATCH_VERSION = "0"
        +SRC_URI =
        "git://github.com/llvm-mirror/llvm.git;branch=release_50;protocol=http
        <http://github.com/llvm-mirror/llvm.git;branch=release_50;protocol=http>
        \
        +         
         file://0001-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch
        \
        +           file://0002-llvm-allow-env-override-of-exe-path.patch \
        +          "
        +S = "${WORKDIR}/git"
        +
        +LLVM_INSTALL_DIR = "${WORKDIR}/llvm-install"
        +def get_llvm_arch(bb, d, arch_var):
        +    import re
        +    a = d.getVar(arch_var, True)
        +    if   re.match('(i.86|athlon|x86.64)$', a):         return 'X86'
        +    elif re.match('arm$', a):                          return 'ARM'
        +    elif re.match('armeb$', a):                        return 'ARM'
        +    elif re.match('aarch64$', a):                      return
        'AArch64'
        +    elif re.match('aarch64_be$', a):                   return
        'AArch64'
        +    elif re.match('mips(isa|)(32|64|)(r6|)(el|)$', a): return
        'Mips'
        +    elif re.match('p(pc|owerpc)(|64)', a):             return
        'PowerPC'
        +    else:
        +        bb.error("cannot map '%s' to a supported llvm
        architecture" % a)
        +    return ""
        +
        +def get_llvm_target_arch(bb, d):
        +    return get_llvm_arch(bb, d, 'TARGET_ARCH')
        +#
        +# Default to build all OE-Core supported target arches (user
        overridable).
        +#
        +LLVM_TARGETS ?= "${@get_llvm_target_arch(bb, d)}"
        +LLVM_TARGETS_prepend_x86 = "AMDGPU;"
        +LLVM_TARGETS_prepend_x86-64 = "AMDGPU;"
        +
        +EXTRA_OECMAKE += "-DLLVM_ENABLE_ASSERTIONS=OFF \
        +                  -DLLVM_ENABLE_EXPENSIVE_CHECKS=OFF \
        +                  -DLLVM_ENABLE_PIC=ON \
        +                  -DLLVM_BINDINGS_LIST='' \
        +                  -DLLVM_LINK_LLVM_DYLIB=ON \
        +                  -DLLVM_ENABLE_FFI=ON \
        +                  -DFFI_INCLUDE_DIR=$(pkg-config
        --variable=includedir libffi) \
        +                  -DLLVM_OPTIMIZED_TABLEGEN=ON \
        +                  -DLLVM_TARGETS_TO_BUILD="${LLVM_TARGETS}" \
        +                  -DCMAKE_CROSSCOMPILING:BOOL=ON \
        +                  -G Ninja \
        +                 "
        +EXTRA_OECMAKE_remove_class-native =
        "-DCMAKE_CROSSCOMPILING:BOOL=ON"
        +
        +do_configure_prepend() {
        +# Fix paths in llvm-config
        +       sed -i
        "s|sys::path::parent_path(CurrentPath))\.str()|sys::path::parent_path(sys::path::parent_path(CurrentPath))).str()|g"
        ${S}/tools/llvm-config/llvm-config.cpp
        +       sed -ri "s#/(bin|include|lib)(/?\")#/\1/${LLVM_DIR}\2#g"
        ${S}/tools/llvm-config/llvm-config.cpp
        +       sed -ri "s#lib/${LLVM_DIR}#${baselib}/${LLVM_DIR}#g"
        ${S}/tools/llvm-config/llvm-config.cpp
        +}
        +
        +do_compile() {
        +       NINJA_STATUS="[%p] " ninja -v ${PARALLEL_MAKE}
        +}
        +
        +do_install() {
        +       NINJA_STATUS="[%p] " DESTDIR=${LLVM_INSTALL_DIR} ninja
        -v install
        +       install -D -m 0755 ${B}/NATIVE/bin/llvm-config
        ${D}${libdir}/${LLVM_DIR}/llvm-config-host
        +
        +       install -d ${D}${bindir}/${LLVM_DIR}
        +       cp -r ${LLVM_INSTALL_DIR}${bindir}/*
        ${D}${bindir}/${LLVM_DIR}/
        +
        +       install -d ${D}${includedir}/${LLVM_DIR}
        +       cp -r ${LLVM_INSTALL_DIR}${includedir}/*
        ${D}${includedir}/${LLVM_DIR}/
        +
        +       install -d ${D}${libdir}/${LLVM_DIR}
        +
        +       # The LLVM sources have "/lib" embedded and so we cannot
        completely rely on the ${libdir} variable
        +       if [ -d ${LLVM_INSTALL_DIR}${libdir}/ ]; then
        +               cp -r ${LLVM_INSTALL_DIR}${libdir}/*
        ${D}${libdir}/${LLVM_DIR}/
        +       elif [ -d ${LLVM_INSTALL_DIR}${prefix}/lib ]; then
        +               cp -r ${LLVM_INSTALL_DIR}${prefix}/lib/*
        ${D}${libdir}/${LLVM_DIR}/
        +       elif [ -d ${LLVM_INSTALL_DIR}${prefix}/lib64 ]; then
        +               cp -r ${LLVM_INSTALL_DIR}${prefix}/lib64/*
        ${D}${libdir}/${LLVM_DIR}/
        +       fi
        +
        +       # Remove unnecessary cmake files
        +       rm -rf ${D}${libdir}/${LLVM_DIR}/cmake
        +
        +       ln -s ${LLVM_DIR}/libLLVM-${PV}${SOLIBSDEV}
        ${D}${libdir}/libLLVM-${PV}${SOLIBSDEV}
        +
        +       # We'll have to delete the libLLVM.so due to multiple
        reasons...
        +       rm -rf ${D}${libdir}/${LLVM_DIR}/libLLVM.so
        +       rm -rf ${D}${libdir}/${LLVM_DIR}/libLTO.so
        +}
        +
        +PACKAGES += "${PN}-bugpointpasses ${PN}-llvmhello"
        +ALLOW_EMPTY_${PN} = "1"
        +ALLOW_EMPTY_${PN}-staticdev = "1"
        +FILES_${PN} = ""
        +FILES_${PN}-staticdev = ""
        +FILES_${PN}-dbg = " \
        +    ${bindir}/${LLVM_DIR}/.debug \
        +    ${libdir}/${LLVM_DIR}/.debug/BugpointPasses.so \
        +    ${libdir}/${LLVM_DIR}/.debug/LLVMHello.so \
        +    ${libdir}/${LLVM_DIR}/.debug/libLTO.so* \
        +    ${libdir}/${LLVM_DIR}/.debug/llvm-config-host \
        +    /usr/src/debug \
        +"
        +
        +FILES_${PN}-dev = " \
        +    ${bindir}/${LLVM_DIR} \
        +    ${includedir}/${LLVM_DIR} \
        +    ${libdir}/${LLVM_DIR}/llvm-config-host \
        +"
        +
        +RRECOMMENDS_${PN}-dev += "${PN}-bugpointpasses ${PN}-llvmhello"
        +
        +FILES_${PN}-bugpointpasses = "\
        +    ${libdir}/${LLVM_DIR}/BugpointPasses.so \
        +"
        +FILES_${PN} += "\
        +    ${libdir}/${LLVM_DIR}/libLTO.so.* \
        +"
        +
        +FILES_${PN}-llvmhello = "\
        +    ${libdir}/${LLVM_DIR}/LLVMHello.so \
        +"
        +
        +PACKAGES_DYNAMIC = "^libllvm${LLVM_RELEASE}-.*$"
        +NOAUTOPACKAGEDEBUG = "1"
        +
        +INSANE_SKIP_${MLPREFIX}libllvm${LLVM_RELEASE}-llvm-${LLVM_RELEASE}.${PATCH_VERSION}
        += "dev-so"
        +INSANE_SKIP_${MLPREFIX}libllvm${LLVM_RELEASE}-llvm-${LLVM_RELEASE}
        += "dev-so"
        +INSANE_SKIP_${MLPREFIX}libllvm${LLVM_RELEASE}-llvm += "dev-so"
        +
        +python llvm_populate_packages() {
        +    libdir = bb.data.expand('${libdir}', d)
        +    libllvm_libdir = bb.data.expand('${libdir}/${LLVM_DIR}', d)
        +    split_dbg_packages = do_split_packages(d,
        libllvm_libdir+'/.debug', '^lib(.*)\.so$',
        'libllvm${LLVM_RELEASE}-%s-dbg', 'Split debug package for %s',
        allow_dirs=True)
        +    split_packages = do_split_packages(d, libdir,
        '^lib(.*)\.so$', 'libllvm${LLVM_RELEASE}-%s', 'Split package for
        %s', allow_dirs=True, allow_links=True, recursive=True)
        +    split_staticdev_packages = do_split_packages(d,
        libllvm_libdir, '^lib(.*)\.a$',
        'libllvm${LLVM_RELEASE}-%s-staticdev', 'Split staticdev package
        for %s', allow_dirs=True)
        +    if split_packages:
        +        pn = d.getVar('PN', True)
        +        d.appendVar('RDEPENDS_' + pn, ' '+' '.join(split_packages))
        +        d.appendVar('RDEPENDS_' + pn + '-dbg', ' '+'
        '.join(split_dbg_packages))
        +        d.appendVar('RDEPENDS_' + pn + '-staticdev', ' '+'
        '.join(split_staticdev_packages))
        +}
        +
        +PACKAGESPLITFUNCS_prepend = "llvm_populate_packages "
        +
        +BBCLASSEXTEND = "native nativesdk"
        --
        2.13.3

        --
        _______________________________________________
        Openembedded-core mailing list
        [email protected]
        <mailto:[email protected]>
        http://lists.openembedded.org/mailman/listinfo/openembedded-core
        <http://lists.openembedded.org/mailman/listinfo/openembedded-core>
author
#8 lore raw
In reply to Burton, Ross

Ross

I have refreshed the pull branch which should hopefully address mesa configure issue you are seeing along with llvm fix

Quoted 458 lines · Ross

Replicated without uninative, so it's not that.

Ross

On 29 July 2017 at 12:39, Burton, Ross <[email protected] <mailto:[email protected]>> wrote:

    Fails like this for me:

    | FAILED: tools/llvm-cvtres/Opts.inc.tmp
    | cd
    /data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/build
    &&
    /data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/build/NATIVE/bin/llvm-tblgen
    -gen-opt-parser-defs -I
    /data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/git/tools/llvm-cvtres
    -I
    /data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/git/include
    /data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/git/tools/llvm-cvtres/Opts.td
    -o tools/llvm-cvtres/Opts.inc.tmp -d tools/llvm-cvtres/Opts.inc.d
    | /bin/sh: 1:
    /data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/build/NATIVE/bin/llvm-tblgen:
    not found

    It is there though:

    $ ls -l
    /data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/build/NATIVE/bin/llvm-tblgen
    -rwxr-xr-x 1 ross ross 49807224 Jul 29 12:25
    /data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/build/NATIVE/bin/llvm-tblgen

    $
    /data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/build/NATIVE/bin/llvm-tblgen
    -bash:
    /data/poky-tmp/master/build/work/corei7-64-poky-linux/llvm/5.0-r0/build/NATIVE/bin/llvm-tblgen:
    No such file or directory

    Might be related to having uninative enabled?

    Ross


    On 29 July 2017 at 09:35, Khem Raj <[email protected]
    <mailto:[email protected]>> wrote:

        Based on recipe from meta-oe and clang recipe from meta-clang
        Needed by mesa

        Fixes
        [YOCTO #11529]

        Signed-off-by: Khem Raj <[email protected]
        <mailto:[email protected]>>
        ---
         ...LibraryInfo-Undefine-libc-functions-if-th.patch |  93
        ++++++++++++
         .../0002-llvm-allow-env-override-of-exe-path.patch |  39 +++++
         meta/recipes-devtools/llvm/llvm_git.bb <http://llvm_git.bb>   
                 | 166 +++++++++++++++++++++
         3 files changed, 298 insertions(+)
         create mode 100644
        meta/recipes-devtools/llvm/llvm/0001-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch
         create mode 100644
        meta/recipes-devtools/llvm/llvm/0002-llvm-allow-env-override-of-exe-path.patch
         create mode 100644 meta/recipes-devtools/llvm/llvm_git.bb
        <http://llvm_git.bb>

        diff --git
        a/meta/recipes-devtools/llvm/llvm/0001-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch
        b/meta/recipes-devtools/llvm/llvm/0001-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch
        new file mode 100644
        index 0000000000..e251799259
        --- /dev/null
        +++
        b/meta/recipes-devtools/llvm/llvm/0001-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch
        @@ -0,0 +1,93 @@
        +From 28293e48cf1a52004c6a78de448718441f9e05f9 Mon Sep 17
        00:00:00 2001
        +From: Khem Raj <[email protected] <mailto:[email protected]>>
        +Date: Sat, 21 May 2016 00:33:20 +0000
        +Subject: [PATCH 1/2] llvm: TargetLibraryInfo: Undefine libc
        functions if they
        + are macros
        +
        +musl defines some functions as macros and not inline functions
        +if this is the case then make sure to undefine them
        +
        +Signed-off-by: Khem Raj <[email protected]
        <mailto:[email protected]>>
        +---
        +Upstream-Status: Pending
        +
        + include/llvm/Analysis/TargetLibraryInfo.def | 21
        +++++++++++++++++++++
        + 1 file changed, 21 insertions(+)
        +
        +diff --git a/include/llvm/Analysis/TargetLibraryInfo.def
        b/include/llvm/Analysis/TargetLibraryInfo.def
        +index 9cbe917c146..aff8419cf54 100644
        +--- a/include/llvm/Analysis/TargetLibraryInfo.def
        ++++ b/include/llvm/Analysis/TargetLibraryInfo.def
        +@@ -656,6 +656,9 @@ TLI_DEFINE_STRING_INTERNAL("fmodl")
        + TLI_DEFINE_ENUM_INTERNAL(fopen)
        + TLI_DEFINE_STRING_INTERNAL("fopen")
        + /// FILE *fopen64(const char *filename, const char *opentype)
        ++#ifdef fopen64
        ++#undef fopen64
        ++#endif
        + TLI_DEFINE_ENUM_INTERNAL(fopen64)
        + TLI_DEFINE_STRING_INTERNAL("fopen64")
        + /// int fprintf(FILE *stream, const char *format, ...);
        +@@ -691,6 +694,9 @@ TLI_DEFINE_STRING_INTERNAL("fseek")
        + /// int fseeko(FILE *stream, off_t offset, int whence);
        + TLI_DEFINE_ENUM_INTERNAL(fseeko)
        + TLI_DEFINE_STRING_INTERNAL("fseeko")
        ++#ifdef fseeko64
        ++#undef fseeko64
        ++#endif
        + /// int fseeko64(FILE *stream, off64_t offset, int whence)
        + TLI_DEFINE_ENUM_INTERNAL(fseeko64)
        + TLI_DEFINE_STRING_INTERNAL("fseeko64")
        +@@ -701,6 +707,9 @@ TLI_DEFINE_STRING_INTERNAL("fsetpos")
        + TLI_DEFINE_ENUM_INTERNAL(fstat)
        + TLI_DEFINE_STRING_INTERNAL("fstat")
        + /// int fstat64(int filedes, struct stat64 *buf)
        ++#ifdef fstat64
        ++#undef fstat64
        ++#endif
        + TLI_DEFINE_ENUM_INTERNAL(fstat64)
        + TLI_DEFINE_STRING_INTERNAL("fstat64")
        + /// int fstatvfs(int fildes, struct statvfs *buf);
        +@@ -716,6 +725,9 @@ TLI_DEFINE_STRING_INTERNAL("ftell")
        + TLI_DEFINE_ENUM_INTERNAL(ftello)
        + TLI_DEFINE_STRING_INTERNAL("ftello")
        + /// off64_t ftello64(FILE *stream)
        ++#ifdef ftello64
        ++#undef ftello64
        ++#endif
        + TLI_DEFINE_ENUM_INTERNAL(ftello64)
        + TLI_DEFINE_STRING_INTERNAL("ftello64")
        + /// int ftrylockfile(FILE *file);
        +@@ -836,6 +848,9 @@ TLI_DEFINE_STRING_INTERNAL("logl")
        + TLI_DEFINE_ENUM_INTERNAL(lstat)
        + TLI_DEFINE_STRING_INTERNAL("lstat")
        + /// int lstat64(const char *path, struct stat64 *buf);
        ++#ifdef lstat64
        ++#undef lstat64
        ++#endif
        + TLI_DEFINE_ENUM_INTERNAL(lstat64)
        + TLI_DEFINE_STRING_INTERNAL("lstat64")
        + /// void *malloc(size_t size);
        +@@ -1055,6 +1070,9 @@ TLI_DEFINE_STRING_INTERNAL("sscanf")
        + TLI_DEFINE_ENUM_INTERNAL(stat)
        + TLI_DEFINE_STRING_INTERNAL("stat")
        + /// int stat64(const char *path, struct stat64 *buf);
        ++#ifdef stat64
        ++#undef stat64
        ++#endif
        + TLI_DEFINE_ENUM_INTERNAL(stat64)
        + TLI_DEFINE_STRING_INTERNAL("stat64")
        + /// int statvfs(const char *path, struct statvfs *buf);
        +@@ -1184,6 +1202,9 @@ TLI_DEFINE_STRING_INTERNAL("times")
        + TLI_DEFINE_ENUM_INTERNAL(tmpfile)
        + TLI_DEFINE_STRING_INTERNAL("tmpfile")
        + /// FILE *tmpfile64(void)
        ++#ifdef tmpfile64
        ++#undef tmpfile64
        ++#endif
        + TLI_DEFINE_ENUM_INTERNAL(tmpfile64)
        + TLI_DEFINE_STRING_INTERNAL("tmpfile64")
        + /// int toascii(int c);
        +--
        +2.13.1
        +
        diff --git
        a/meta/recipes-devtools/llvm/llvm/0002-llvm-allow-env-override-of-exe-path.patch
        b/meta/recipes-devtools/llvm/llvm/0002-llvm-allow-env-override-of-exe-path.patch
        new file mode 100644
        index 0000000000..832bd729ef
        --- /dev/null
        +++
        b/meta/recipes-devtools/llvm/llvm/0002-llvm-allow-env-override-of-exe-path.patch
        @@ -0,0 +1,39 @@
        +From d776487bac17650704614248d19d1e6b35775001 Mon Sep 17
        00:00:00 2001
        +From: Martin Kelly <[email protected] <mailto:[email protected]>>
        +Date: Fri, 19 May 2017 00:22:57 -0700
        +Subject: [PATCH 2/2] llvm: allow env override of exe path
        +
        +When using a native llvm-config from inside a sysroot, we need
        llvm-config to
        +return the libraries, include directories, etc. from inside the
        sysroot rather
        +than from the native sysroot. Thus provide an env override for
        calling
        +llvm-config from a target sysroot.
        +
        +Signed-off-by: Martin Kelly <[email protected]
        <mailto:[email protected]>>
        +Signed-off-by: Khem Raj <[email protected]
        <mailto:[email protected]>>
        +---
        +Upstream-Status: Pending
        +
        + tools/llvm-config/llvm-config.cpp | 7 +++++++
        + 1 file changed, 7 insertions(+)
        +
        +diff --git a/tools/llvm-config/llvm-config.cpp
        b/tools/llvm-config/llvm-config.cpp
        +index 08b096afb05..d8d7742744e 100644
        +--- a/tools/llvm-config/llvm-config.cpp
        ++++ b/tools/llvm-config/llvm-config.cpp
        +@@ -225,6 +225,13 @@ Typical components:\n\
        +
        + /// \brief Compute the path to the main executable.
        + std::string GetExecutablePath(const char *Argv0) {
        ++  // Hack for Yocto: we need to override the root path when we
        are using
        ++  // llvm-config from within a target sysroot.
        ++  const char *Sysroot = std::getenv("YOCTO_ALTERNATE_EXE_PATH");
        ++  if (Sysroot != nullptr) {
        ++    return Sysroot;
        ++  }
        ++
        +   // This just needs to be some symbol in the binary; C++ doesn't
        +   // allow taking the address of ::main however.
        +   void *P = (void *)(intptr_t)GetExecutablePath;
        +--
        +2.13.1
        +
        diff --git a/meta/recipes-devtools/llvm/llvm_git.bb
        <http://llvm_git.bb> b/meta/recipes-devtools/llvm/llvm_git.bb
        <http://llvm_git.bb>
        new file mode 100644
        index 0000000000..7b51d2153f
        --- /dev/null
        +++ b/meta/recipes-devtools/llvm/llvm_git.bb <http://llvm_git.bb>
        @@ -0,0 +1,166 @@
        +# Copyright (C) 2017 Khem Raj <[email protected]
        <mailto:[email protected]>>
        +# Released under the MIT license (see COPYING.MIT for the terms)
        +
        +DESCRIPTION = "The LLVM Compiler Infrastructure"
        +HOMEPAGE = "http://llvm.org"
        +LICENSE = "NCSA"
        +SECTION = "devel"
        +
        +LIC_FILES_CHKSUM =
        "file://LICENSE.TXT;md5=e825e017edc35cfd58e26116e5251771"
        +
        +DEPENDS = "libffi libxml2-native zlib ninja-native"
        +
        +RDEPENDS_${PN}_append_class-target = " ncurses-terminfo"
        +
        +inherit perlnative pythonnative cmake pkgconfig
        +
        +PROVIDES += "llvm${PV}"
        +
        +LLVM_RELEASE = "${PV}"
        +LLVM_DIR = "llvm${LLVM_RELEASE}"
        +
        +SRCREV = "9a5c333388cbb54a0ce3a67c4f539f5e590a089b"
        +PV = "5.0"
        +PATCH_VERSION = "0"
        +SRC_URI =
        "git://github.com/llvm-mirror/llvm.git;branch=release_50;protocol=http
        <http://github.com/llvm-mirror/llvm.git;branch=release_50;protocol=http>
        \
        +         
         file://0001-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch
        \
        +           file://0002-llvm-allow-env-override-of-exe-path.patch \
        +          "
        +S = "${WORKDIR}/git"
        +
        +LLVM_INSTALL_DIR = "${WORKDIR}/llvm-install"
        +def get_llvm_arch(bb, d, arch_var):
        +    import re
        +    a = d.getVar(arch_var, True)
        +    if   re.match('(i.86|athlon|x86.64)$', a):         return 'X86'
        +    elif re.match('arm$', a):                          return 'ARM'
        +    elif re.match('armeb$', a):                        return 'ARM'
        +    elif re.match('aarch64$', a):                      return
        'AArch64'
        +    elif re.match('aarch64_be$', a):                   return
        'AArch64'
        +    elif re.match('mips(isa|)(32|64|)(r6|)(el|)$', a): return
        'Mips'
        +    elif re.match('p(pc|owerpc)(|64)', a):             return
        'PowerPC'
        +    else:
        +        bb.error("cannot map '%s' to a supported llvm
        architecture" % a)
        +    return ""
        +
        +def get_llvm_target_arch(bb, d):
        +    return get_llvm_arch(bb, d, 'TARGET_ARCH')
        +#
        +# Default to build all OE-Core supported target arches (user
        overridable).
        +#
        +LLVM_TARGETS ?= "${@get_llvm_target_arch(bb, d)}"
        +LLVM_TARGETS_prepend_x86 = "AMDGPU;"
        +LLVM_TARGETS_prepend_x86-64 = "AMDGPU;"
        +
        +EXTRA_OECMAKE += "-DLLVM_ENABLE_ASSERTIONS=OFF \
        +                  -DLLVM_ENABLE_EXPENSIVE_CHECKS=OFF \
        +                  -DLLVM_ENABLE_PIC=ON \
        +                  -DLLVM_BINDINGS_LIST='' \
        +                  -DLLVM_LINK_LLVM_DYLIB=ON \
        +                  -DLLVM_ENABLE_FFI=ON \
        +                  -DFFI_INCLUDE_DIR=$(pkg-config
        --variable=includedir libffi) \
        +                  -DLLVM_OPTIMIZED_TABLEGEN=ON \
        +                  -DLLVM_TARGETS_TO_BUILD="${LLVM_TARGETS}" \
        +                  -DCMAKE_CROSSCOMPILING:BOOL=ON \
        +                  -G Ninja \
        +                 "
        +EXTRA_OECMAKE_remove_class-native =
        "-DCMAKE_CROSSCOMPILING:BOOL=ON"
        +
        +do_configure_prepend() {
        +# Fix paths in llvm-config
        +       sed -i
        "s|sys::path::parent_path(CurrentPath))\.str()|sys::path::parent_path(sys::path::parent_path(CurrentPath))).str()|g"
        ${S}/tools/llvm-config/llvm-config.cpp
        +       sed -ri "s#/(bin|include|lib)(/?\")#/\1/${LLVM_DIR}\2#g"
        ${S}/tools/llvm-config/llvm-config.cpp
        +       sed -ri "s#lib/${LLVM_DIR}#${baselib}/${LLVM_DIR}#g"
        ${S}/tools/llvm-config/llvm-config.cpp
        +}
        +
        +do_compile() {
        +       NINJA_STATUS="[%p] " ninja -v ${PARALLEL_MAKE}
        +}
        +
        +do_install() {
        +       NINJA_STATUS="[%p] " DESTDIR=${LLVM_INSTALL_DIR} ninja
        -v install
        +       install -D -m 0755 ${B}/NATIVE/bin/llvm-config
        ${D}${libdir}/${LLVM_DIR}/llvm-config-host
        +
        +       install -d ${D}${bindir}/${LLVM_DIR}
        +       cp -r ${LLVM_INSTALL_DIR}${bindir}/*
        ${D}${bindir}/${LLVM_DIR}/
        +
        +       install -d ${D}${includedir}/${LLVM_DIR}
        +       cp -r ${LLVM_INSTALL_DIR}${includedir}/*
        ${D}${includedir}/${LLVM_DIR}/
        +
        +       install -d ${D}${libdir}/${LLVM_DIR}
        +
        +       # The LLVM sources have "/lib" embedded and so we cannot
        completely rely on the ${libdir} variable
        +       if [ -d ${LLVM_INSTALL_DIR}${libdir}/ ]; then
        +               cp -r ${LLVM_INSTALL_DIR}${libdir}/*
        ${D}${libdir}/${LLVM_DIR}/
        +       elif [ -d ${LLVM_INSTALL_DIR}${prefix}/lib ]; then
        +               cp -r ${LLVM_INSTALL_DIR}${prefix}/lib/*
        ${D}${libdir}/${LLVM_DIR}/
        +       elif [ -d ${LLVM_INSTALL_DIR}${prefix}/lib64 ]; then
        +               cp -r ${LLVM_INSTALL_DIR}${prefix}/lib64/*
        ${D}${libdir}/${LLVM_DIR}/
        +       fi
        +
        +       # Remove unnecessary cmake files
        +       rm -rf ${D}${libdir}/${LLVM_DIR}/cmake
        +
        +       ln -s ${LLVM_DIR}/libLLVM-${PV}${SOLIBSDEV}
        ${D}${libdir}/libLLVM-${PV}${SOLIBSDEV}
        +
        +       # We'll have to delete the libLLVM.so due to multiple
        reasons...
        +       rm -rf ${D}${libdir}/${LLVM_DIR}/libLLVM.so
        +       rm -rf ${D}${libdir}/${LLVM_DIR}/libLTO.so
        +}
        +
        +PACKAGES += "${PN}-bugpointpasses ${PN}-llvmhello"
        +ALLOW_EMPTY_${PN} = "1"
        +ALLOW_EMPTY_${PN}-staticdev = "1"
        +FILES_${PN} = ""
        +FILES_${PN}-staticdev = ""
        +FILES_${PN}-dbg = " \
        +    ${bindir}/${LLVM_DIR}/.debug \
        +    ${libdir}/${LLVM_DIR}/.debug/BugpointPasses.so \
        +    ${libdir}/${LLVM_DIR}/.debug/LLVMHello.so \
        +    ${libdir}/${LLVM_DIR}/.debug/libLTO.so* \
        +    ${libdir}/${LLVM_DIR}/.debug/llvm-config-host \
        +    /usr/src/debug \
        +"
        +
        +FILES_${PN}-dev = " \
        +    ${bindir}/${LLVM_DIR} \
        +    ${includedir}/${LLVM_DIR} \
        +    ${libdir}/${LLVM_DIR}/llvm-config-host \
        +"
        +
        +RRECOMMENDS_${PN}-dev += "${PN}-bugpointpasses ${PN}-llvmhello"
        +
        +FILES_${PN}-bugpointpasses = "\
        +    ${libdir}/${LLVM_DIR}/BugpointPasses.so \
        +"
        +FILES_${PN} += "\
        +    ${libdir}/${LLVM_DIR}/libLTO.so.* \
        +"
        +
        +FILES_${PN}-llvmhello = "\
        +    ${libdir}/${LLVM_DIR}/LLVMHello.so \
        +"
        +
        +PACKAGES_DYNAMIC = "^libllvm${LLVM_RELEASE}-.*$"
        +NOAUTOPACKAGEDEBUG = "1"
        +
        +INSANE_SKIP_${MLPREFIX}libllvm${LLVM_RELEASE}-llvm-${LLVM_RELEASE}.${PATCH_VERSION}
        += "dev-so"
        +INSANE_SKIP_${MLPREFIX}libllvm${LLVM_RELEASE}-llvm-${LLVM_RELEASE}
        += "dev-so"
        +INSANE_SKIP_${MLPREFIX}libllvm${LLVM_RELEASE}-llvm += "dev-so"
        +
        +python llvm_populate_packages() {
        +    libdir = bb.data.expand('${libdir}', d)
        +    libllvm_libdir = bb.data.expand('${libdir}/${LLVM_DIR}', d)
        +    split_dbg_packages = do_split_packages(d,
        libllvm_libdir+'/.debug', '^lib(.*)\.so$',
        'libllvm${LLVM_RELEASE}-%s-dbg', 'Split debug package for %s',
        allow_dirs=True)
        +    split_packages = do_split_packages(d, libdir,
        '^lib(.*)\.so$', 'libllvm${LLVM_RELEASE}-%s', 'Split package for
        %s', allow_dirs=True, allow_links=True, recursive=True)
        +    split_staticdev_packages = do_split_packages(d,
        libllvm_libdir, '^lib(.*)\.a$',
        'libllvm${LLVM_RELEASE}-%s-staticdev', 'Split staticdev package
        for %s', allow_dirs=True)
        +    if split_packages:
        +        pn = d.getVar('PN', True)
        +        d.appendVar('RDEPENDS_' + pn, ' '+' '.join(split_packages))
        +        d.appendVar('RDEPENDS_' + pn + '-dbg', ' '+'
        '.join(split_dbg_packages))
        +        d.appendVar('RDEPENDS_' + pn + '-staticdev', ' '+'
        '.join(split_staticdev_packages))
        +}
        +
        +PACKAGESPLITFUNCS_prepend = "llvm_populate_packages "
        +
        +BBCLASSEXTEND = "native nativesdk"
        --
        2.13.3

        --
        _______________________________________________
        Openembedded-core mailing list
        [email protected]
        <mailto:[email protected]>
        http://lists.openembedded.org/mailman/listinfo/openembedded-core
        <http://lists.openembedded.org/mailman/listinfo/openembedded-core>
author
#9 lore raw

PATCH v3 4/4 mesa: Fix build when building with llvmpipe

In reply to Khem Raj

Add following in mesa.inc to enable llvmpipe

PACKAGECONFIG_append_x86 = " gallium-llvm gallium r600" PACKAGECONFIG_append_x86-64 = " gallium-llvm gallium r600"

This would enable llvmpipe for swrast, to check run this

root@qemux86:~# glxinfo | grep llvm
    Device: llvmpipe (LLVM 5.0, 128 bits) (0xffffffff)
OpenGL renderer string: Gallium 0.4 on llvmpipe (LLVM 5.0, 128 bits)

Backport patches to support llvm 5.0.0+
Add a patch to understand llvm version when llvm is build from git/svn

---
 ...1-ac-fix-build-after-LLVM-5.0-SVN-r300718.patch | 40 ++++++++++++++++++
 ...allivm-Fix-build-against-LLVM-SVN-r302589.patch | 49 ++++++++++++++++++++++
 .../mesa/files/llvm-config-version.patch           | 23 ++++++++++
 meta/recipes-graphics/mesa/mesa.inc                |  7 +++-
 meta/recipes-graphics/mesa/mesa_17.1.5.bb          |  3 ++
 5 files changed, 120 insertions(+), 2 deletions(-)
 create mode 100644 meta/recipes-graphics/mesa/files/0001-ac-fix-build-after-LLVM-5.0-SVN-r300718.patch
 create mode 100644 meta/recipes-graphics/mesa/files/0002-gallivm-Fix-build-against-LLVM-SVN-r302589.patch
 create mode 100644 meta/recipes-graphics/mesa/files/llvm-config-version.patch
meta/recipes-graphics/mesa/files/0001-ac-fix-build-after-LLVM-5.0-SVN-r300718.patch new file +40 -0
new file mode 100644
index 0000000000..b27a3bc8e4
@@ -0,0 +1,40 @@
+From 9861437e58fdd0de01193a102608d34e5952953f Mon Sep 17 00:00:00 2001
+From: Christoph Haag <[email protected]>
+Date: Thu, 20 Apr 2017 10:34:18 +0200
+Subject: [PATCH 1/2] ac: fix build after LLVM 5.0 SVN r300718
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+v2: previously getWithDereferenceableBytes() exists, but addAttr() doesn't take that type
+
+Signed-off-by: Christoph Haag <[email protected]>
+Reviewed-by: Nicolai Hähnle <[email protected]>
+Tested-and-reviewed-by: Mike Lothian <[email protected]>
+---
+Upstream-Status: Backport
+
+ src/amd/common/ac_llvm_helper.cpp | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/src/amd/common/ac_llvm_helper.cpp b/src/amd/common/ac_llvm_helper.cpp
+index d9ea4b1..11fa809 100644
+--- a/src/amd/common/ac_llvm_helper.cpp
++++ b/src/amd/common/ac_llvm_helper.cpp
+@@ -44,9 +44,13 @@ typedef AttributeSet AttributeList;
+ void ac_add_attr_dereferenceable(LLVMValueRef val, uint64_t bytes)
+ {
+    llvm::Argument *A = llvm::unwrap<llvm::Argument>(val);
++#if HAVE_LLVM < 0x0500
+    llvm::AttrBuilder B;
+    B.addDereferenceableAttr(bytes);
+    A->addAttr(llvm::AttributeList::get(A->getContext(), A->getArgNo() + 1,  B));
++#else
++   A->addAttr(llvm::Attribute::getWithDereferenceableBytes(A->getContext(), bytes));
++#endif
+ }
+ 
+ bool ac_is_sgpr_param(LLVMValueRef arg)
+-- 
+2.13.3
+
meta/recipes-graphics/mesa/files/0002-gallivm-Fix-build-against-LLVM-SVN-r302589.patch new file +49 -0

49 lines not on this page · raw message

meta/recipes-graphics/mesa/files/llvm-config-version.patch new file +23 -0
new file mode 100644
index 0000000000..0c458c0fa4
@@ -0,0 +1,23 @@
+When building llvm from git or svn it embeds the svn/git revision into internal version string
+
+$ /mnt/a/oe/build/tmp/work/corei7-64-bec-linux/mesa/2_17.1.5-r0/recipe-sysroot/usr/lib/llvm5.0/llvm-config-host --version
+5.0.0git-9a5c333388c
+
+We need to ignore everything after 5.0.0 which is what the cut cmd is doing
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <[email protected]>
+
+Index: mesa-17.1.5/configure.ac
+===================================================================
+--- mesa-17.1.5.orig/configure.ac
++++ mesa-17.1.5/configure.ac
+@@ -2560,7 +2560,7 @@ if test "x$enable_llvm" = xyes; then
+     dnl (See https://llvm.org/bugs/show_bug.cgi?id=6823)
+     if test "x$enable_llvm_shared_libs" = xyes; then
+         dnl We can't use $LLVM_VERSION because it has 'svn' stripped out,
+-        LLVM_SO_NAME=LLVM-`$LLVM_CONFIG --version`
++        LLVM_SO_NAME=LLVM-`$LLVM_CONFIG --version|cut -c1-5`
+         AS_IF([test -f "$LLVM_LIBDIR/lib$LLVM_SO_NAME.$IMP_LIB_EXT"], [llvm_have_one_so=yes])
+ 
+         if test "x$llvm_have_one_so" = xyes; then
meta/recipes-graphics/mesa/mesa.inc +5 -2
index 1b712a24ea..3b42fa9fe8 100644
@@ -25,8 +25,11 @@ REQUIRED_DISTRO_FEATURES = "opengl"
 PLATFORMS ??= "${@bb.utils.filter('PACKAGECONFIG', 'x11 wayland', d)} \
                ${@bb.utils.contains('PACKAGECONFIG', 'gbm', 'drm', '', d)}"
 
+export LLVM_CONFIG = "${STAGING_LIBDIR}/llvm${MESA_LLVM_RELEASE}/llvm-config-host"
+
 EXTRA_OECONF = "--enable-shared-glapi \
-                --with-llvm-prefix=${STAGING_BINDIR_NATIVE} \
+                --disable-opencl \
+                --with-llvm-prefix=${STAGING_LIBDIR}/llvm${MESA_LLVM_RELEASE} \
                 --with-platforms='${PLATFORMS}'"
 
 PACKAGECONFIG ??= "gbm egl gles dri \
@@ -68,7 +71,7 @@ GALLIUMDRIVERS_append_x86 = "${@bb.utils.contains('PACKAGECONFIG', 'gallium-llvm
 GALLIUMDRIVERS_append_x86-64 = "${@bb.utils.contains('PACKAGECONFIG', 'gallium-llvm', ',${GALLIUMDRIVERS_LLVM}', '', d)}"
 # keep --with-gallium-drivers separate, because when only one of gallium versions is enabled, other 2 were adding --without-gallium-drivers
 PACKAGECONFIG[gallium]      = "--enable-texture-float --with-gallium-drivers=${GALLIUMDRIVERS}, --without-gallium-drivers"
-MESA_LLVM_RELEASE ?= "3.3"
+MESA_LLVM_RELEASE ?= "5.0"
 PACKAGECONFIG[gallium-llvm] = "--enable-llvm --enable-llvm-shared-libs, --disable-llvm, llvm${MESA_LLVM_RELEASE} \
                                ${@'elfutils' if ${GALLIUMDRIVERS_LLVM33_ENABLED} else ''}"
 export WANT_LLVM_RELEASE = "${MESA_LLVM_RELEASE}"
meta/recipes-graphics/mesa/mesa_17.1.5.bb +3 -0
index ddfcb371ec..36b0377453 100644
@@ -7,6 +7,9 @@ SRC_URI = "https://mesa.freedesktop.org/archive/mesa-${PV}.tar.xz \
            file://0002-hardware-gloat.patch \
            file://0001-mapi-Only-install-khrplatform.h-with-EGL-or-GLES.patch \
            file://vulkan-mkdir.patch \
+           file://llvm-config-version.patch \
+           file://0001-ac-fix-build-after-LLVM-5.0-SVN-r300718.patch \
+           file://0002-gallivm-Fix-build-against-LLVM-SVN-r302589.patch \
 "
 SRC_URI[md5sum] = "6cf936fbcaadd98924298a7009e8265d"
 SRC_URI[sha256sum] = "378516b171712687aace4c7ea8b37c85895231d7a6d61e1e27362cf6034fded9"
Signature · 1 line
2.13.3
#10 lore raw

✗ patchtest: failure for llvm: Add recipe for 5.0 (rev3)

In reply to Khem Raj

== Series Details ==

Series: llvm: Add recipe for 5.0 (rev3)
Revision: 3
URL : https://patchwork.openembedded.org/series/7983/
State : failure

== Summary ==

Thank you for submitting this patch series to OpenEmbedded Core. This is an automated response. Several tests have been executed on the proposed series by patchtest resulting in the following failures:

* Issue A patch file has been added, but does not have a Signed-off-by tag [test_signed_off_by_presence]
Suggested fix Sign off the added patch file (meta/recipes-graphics/mesa/files/0002-gallivm-Fix-build-against-LLVM-SVN-r302589.patch)

If you believe any of these test results are incorrect, please reply to the mailing list ([email protected]) raising your concerns. Otherwise we would appreciate you correcting the issues and submitting a new version of the patchset if applicable. Please ensure you add/increment the version number when sending the new version (i.e. [PATCH] -> [PATCH v2] -> [PATCH v3] -> ...).

---

Test framework: http://git.yoctoproject.org/cgit/cgit.cgi/patchtest
Test suite:     http://git.yoctoproject.org/cgit/cgit.cgi/patchtest-oe