mirror of
https://git.yoctoproject.org/poky
synced 2026-02-26 03:19:41 +01:00
Until now an unoffcial mirror was used, which may or may not
be maintained in the longer run, as the need for it has gone.
Also, the official mirror has version tags which allows us
to track upstream development in an automated manner.
${S} has changed as upstream decided to use a monorepo for all
of the llvm-related projects.
Further info:
https://www.phoronix.com/scan.php?page=news_item&px=LLVM-GitHub-Mono-Repo
https://llvm.org/docs/GettingStarted.html#checkout-llvm-from-git
(From OE-Core rev: 18f565f3ca18c281b4a99721fcfcbcc5405d6346)
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
180 lines
6.1 KiB
BlitzBasic
180 lines
6.1 KiB
BlitzBasic
# Copyright (C) 2017 Khem Raj <raj.khem@gmail.com>
|
|
# 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=c6b766a4e85dd28301eeed54a6684648"
|
|
|
|
DEPENDS = "libffi libxml2 zlib ninja-native llvm-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 is set to the revision of 8.0.0-rc2 tag, while latest release
|
|
# tag is 7.0.1 as of Feb 18 2019, hence the need for UPSTREAM_CHECK_UNKNOWN
|
|
# Remove the UPSTREAM_VERSION_UNKNOWN line once 8.0.0 final is tagged
|
|
UPSTREAM_VERSION_UNKNOWN = "1"
|
|
SRCREV = "98ebe7460199b9cd79eb562b5e8705ad28f5513f"
|
|
|
|
BRANCH = "release/${MAJOR_VERSION}.x"
|
|
MAJOR_VERSION = "8"
|
|
MINOR_VERSION = "0"
|
|
PATCH_VERSION = "0"
|
|
SOLIBVER = "1"
|
|
PV = "${MAJOR_VERSION}.${MINOR_VERSION}"
|
|
SRC_URI = "git://github.com/llvm/llvm-project.git;branch=${BRANCH} \
|
|
file://0001-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch \
|
|
file://0002-llvm-allow-env-override-of-exe-path.patch \
|
|
"
|
|
|
|
S = "${WORKDIR}/git/llvm"
|
|
|
|
LLVM_INSTALL_DIR = "${WORKDIR}/llvm-install"
|
|
|
|
def get_llvm_arch(bb, d, arch_var):
|
|
import re
|
|
a = d.getVar(arch_var)
|
|
if re.match(r'(i.86|athlon|x86.64)$', a): return 'X86'
|
|
elif re.match(r'arm$', a): return 'ARM'
|
|
elif re.match(r'armeb$', a): return 'ARM'
|
|
elif re.match(r'aarch64$', a): return 'AArch64'
|
|
elif re.match(r'aarch64_be$', a): return 'AArch64'
|
|
elif re.match(r'mips(isa|)(32|64|)(r6|)(el|)$', a): return 'Mips'
|
|
elif re.match(r'p(pc|owerpc)(|64)', a): return 'PowerPC'
|
|
else:
|
|
raise bb.parse.SkipRecipe("Cannot map '%s' to a supported LLVM architecture" % a)
|
|
|
|
def get_llvm_host_arch(bb, d):
|
|
return get_llvm_arch(bb, d, 'HOST_ARCH')
|
|
|
|
#
|
|
# Default to build all OE-Core supported target arches (user overridable).
|
|
#
|
|
LLVM_TARGETS ?= "AMDGPU;${@get_llvm_host_arch(bb, d)}"
|
|
|
|
ARM_INSTRUCTION_SET_armv5 = "arm"
|
|
ARM_INSTRUCTION_SET_armv4t = "arm"
|
|
|
|
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}' \
|
|
-G Ninja"
|
|
|
|
EXTRA_OECMAKE_append_class-target = "\
|
|
-DCMAKE_CROSSCOMPILING:BOOL=ON \
|
|
-DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen${PV} \
|
|
-DLLVM_CONFIG_PATH=${STAGING_BINDIR_NATIVE}/llvm-config${PV} \
|
|
"
|
|
|
|
EXTRA_OECMAKE_append_class-nativesdk = "\
|
|
-DCMAKE_CROSSCOMPILING:BOOL=ON \
|
|
-DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen${PV} \
|
|
-DLLVM_CONFIG_PATH=${STAGING_BINDIR_NATIVE}/llvm-config${PV} \
|
|
"
|
|
|
|
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 -v ${PARALLEL_MAKE}
|
|
}
|
|
|
|
do_compile_class-native() {
|
|
ninja -v ${PARALLEL_MAKE} llvm-config llvm-tblgen
|
|
}
|
|
|
|
do_install() {
|
|
DESTDIR=${LLVM_INSTALL_DIR} ninja -v install
|
|
install -D -m 0755 ${B}/bin/llvm-config ${D}${libdir}/${LLVM_DIR}/llvm-config
|
|
|
|
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-${MAJOR_VERSION}${SOLIBSDEV} ${D}${libdir}/libLLVM-${MAJOR_VERSION}${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
|
|
}
|
|
|
|
do_install_class-native() {
|
|
install -D -m 0755 ${B}/bin/llvm-tblgen ${D}${bindir}/llvm-tblgen${PV}
|
|
install -D -m 0755 ${B}/bin/llvm-config ${D}${bindir}/llvm-config${PV}
|
|
install -D -m 0755 ${B}/lib/libLLVM-${MAJOR_VERSION}.so ${D}${libdir}/libLLVM-${MAJOR_VERSION}.so
|
|
}
|
|
|
|
PACKAGES =+ "${PN}-bugpointpasses ${PN}-llvmhello ${PN}-libllvm ${PN}-liboptremarks ${PN}-liblto"
|
|
|
|
RRECOMMENDS_${PN}-dev += "${PN}-bugpointpasses ${PN}-llvmhello ${PN}-liboptremarks"
|
|
|
|
FILES_${PN}-bugpointpasses = "\
|
|
${libdir}/${LLVM_DIR}/BugpointPasses.so \
|
|
"
|
|
|
|
FILES_${PN}-libllvm = "\
|
|
${libdir}/${LLVM_DIR}/libLLVM-${MAJOR_VERSION}.so \
|
|
${libdir}/libLLVM-${MAJOR_VERSION}.so \
|
|
"
|
|
|
|
FILES_${PN}-liblto += "\
|
|
${libdir}/${LLVM_DIR}/libLTO.so.* \
|
|
"
|
|
|
|
FILES_${PN}-liboptremarks += "\
|
|
${libdir}/${LLVM_DIR}/libOptRemarks.so.* \
|
|
"
|
|
|
|
FILES_${PN}-llvmhello = "\
|
|
${libdir}/${LLVM_DIR}/LLVMHello.so \
|
|
"
|
|
|
|
FILES_${PN}-dev += " \
|
|
${libdir}/${LLVM_DIR}/llvm-config \
|
|
${libdir}/${LLVM_DIR}/libOptRemarks.so \
|
|
${libdir}/${LLVM_DIR}/libLLVM-${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}.so \
|
|
"
|
|
|
|
FILES_${PN}-staticdev += "\
|
|
${libdir}/${LLVM_DIR}/*.a \
|
|
"
|
|
|
|
INSANE_SKIP_${PN}-libllvm += "dev-so"
|
|
|
|
BBCLASSEXTEND = "native nativesdk"
|