diff options
Diffstat (limited to 'external/meta-clang/recipes-devtools/clang/clang_git.bb')
-rw-r--r-- | external/meta-clang/recipes-devtools/clang/clang_git.bb | 216 |
1 files changed, 178 insertions, 38 deletions
diff --git a/external/meta-clang/recipes-devtools/clang/clang_git.bb b/external/meta-clang/recipes-devtools/clang/clang_git.bb index b3b82724..779c4aeb 100644 --- a/external/meta-clang/recipes-devtools/clang/clang_git.bb +++ b/external/meta-clang/recipes-devtools/clang/clang_git.bb @@ -10,10 +10,22 @@ require common-source.inc INHIBIT_DEFAULT_DEPS = "1" -inherit cmake cmake-native +BUILD_CC_class-nativesdk = "clang" +BUILD_CXX_class-nativesdk = "clang++" +BUILD_AR_class-nativesdk = "llvm-ar" +BUILD_RANLIB_class-nativesdk = "llvm-ranlib" +BUILD_NM_class-nativesdk = "llvm-nm" +LDFLAGS_append_class-nativesdk = " -fuse-ld=gold" + +inherit cmake cmake-native pkgconfig python3native OECMAKE_FIND_ROOT_PATH_MODE_PROGRAM = "BOTH" +def get_clang_experimental_arch(bb, d, arch_var): + import re + a = d.getVar(arch_var, True) + return "" + def get_clang_arch(bb, d, arch_var): import re a = d.getVar(arch_var, True) @@ -23,10 +35,10 @@ def get_clang_arch(bb, d, arch_var): 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('riscv(32|64)(eb|)$', a): return 'RISCV' elif re.match('p(pc|owerpc)(|64)', a): return 'PowerPC' - elif re.match('riscv(32|64)$', a): return 'RISCV' else: - bb.error("cannot map '%s' to a supported llvm architecture" % a) + bb.note("'%s' is not a primary llvm architecture" % a) return "" def get_clang_host_arch(bb, d): @@ -35,22 +47,63 @@ def get_clang_host_arch(bb, d): def get_clang_target_arch(bb, d): return get_clang_arch(bb, d, 'TARGET_ARCH') -PACKAGECONFIG ??= "compiler-rt libcplusplus shared-libs" -PACKAGECONFIG_class-native = "" -PACKAGECONFIG_class-nativesdk = "compiler-rt libcplusplus" +def get_clang_experimental_target_arch(bb, d): + return get_clang_experimental_arch(bb, d, 'TARGET_ARCH') + +PACKAGECONFIG ??= "compiler-rt libcplusplus shared-libs lldb-wchar \ + ${@bb.utils.filter('DISTRO_FEATURES', 'thin-lto full-lto', d)} \ + rtti eh libedit \ + " +PACKAGECONFIG_class-native = "rtti eh libedit" +PACKAGECONFIG_class-nativesdk = "rtti eh libedit ${@bb.utils.filter('DISTRO_FEATURES', 'thin-lto full-lto', d)}" -PACKAGECONFIG[compiler-rt] = "-DCLANG_DEFAULT_RTLIB=compiler-rt,,compiler-rt" +PACKAGECONFIG[compiler-rt] = "-DCLANG_DEFAULT_RTLIB=compiler-rt,,libcxx,compiler-rt" PACKAGECONFIG[libcplusplus] = "-DCLANG_DEFAULT_CXX_STDLIB=libc++,,libcxx" +PACKAGECONFIG[unwindlib] = "-DCLANG_DEFAULT_UNWINDLIB=libunwind,-DCLANG_DEFAULT_UNWINDLIB=libgcc,libcxx" +PACKAGECONFIG[thin-lto] = "-DLLVM_ENABLE_LTO=Thin -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils," +PACKAGECONFIG[full-lto] = "-DLLVM_ENABLE_LTO=Full -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils," PACKAGECONFIG[shared-libs] = "-DLLVM_BUILD_LLVM_DYLIB=ON -DLLVM_LINK_LLVM_DYLIB=ON,,," +PACKAGECONFIG[terminfo] = "-DLLVM_ENABLE_TERMINFO=ON,-DLLVM_ENABLE_TERMINFO=OFF,ncurses," +PACKAGECONFIG[pfm] = "-DLLVM_ENABLE_LIBPFM=ON,-DLLVM_ENABLE_LIBPFM=OFF,libpfm," +PACKAGECONFIG[lldb-wchar] = "-DLLDB_EDITLINE_USE_WCHAR=1,-DLLDB_EDITLINE_USE_WCHAR=0," +PACKAGECONFIG[bootstrap] = "-DCLANG_ENABLE_BOOTSTRAP=On -DCLANG_BOOTSTRAP_PASSTHROUGH='${PASSTHROUGH}' -DBOOTSTRAP_LLVM_ENABLE_LTO=Thin -DBOOTSTRAP_LLVM_ENABLE_LLD=ON,,," +PACKAGECONFIG[eh] = "-DLLVM_ENABLE_EH=ON,-DLLVM_ENABLE_EH=OFF,," +PACKAGECONFIG[rtti] = "-DLLVM_ENABLE_RTTI=ON,-DLLVM_ENABLE_RTTI=OFF,," +PACKAGECONFIG[split-dwarf] = "-DLLVM_USE_SPLIT_DWARF=ON,-DLLVM_USE_SPLIT_DWARF=OFF,," +PACKAGECONFIG[libedit] = "-DLLVM_ENABLE_LIBEDIT=ON -DLLDB_ENABLE_LIBEDIT=ON,-DLLVM_ENABLE_LIBEDIT=OFF -DLLDB_ENABLE_LIBEDIT=OFF,libedit libedit-native" + +OECMAKE_SOURCEPATH = "${S}/llvm" + +OECMAKE_TARGET_COMPILE = "${@bb.utils.contains('PACKAGECONFIG', 'bootstrap', 'stage2', 'all', d)}" +OECMAKE_TARGET_INSTALL = "${@bb.utils.contains('PACKAGECONFIG', 'bootstrap', 'stage2-install', 'install', d)}" +BINPATHPREFIX = "${@bb.utils.contains('PACKAGECONFIG', 'bootstrap', '/tools/clang/stage2-bins/NATIVE', '', d)}" +PASSTHROUGH = "\ +CLANG_DEFAULT_RTLIB;CLANG_DEFAULT_CXX_STDLIB;LLVM_BUILD_LLVM_DYLIB;LLVM_LINK_LLVM_DYLIB;\ +LLVM_ENABLE_ASSERTIONS;LLVM_ENABLE_EXPENSIVE_CHECKS;LLVM_ENABLE_PIC;\ +LLVM_BINDINGS_LIST;LLVM_ENABLE_FFI;FFI_INCLUDE_DIR;LLVM_OPTIMIZED_TABLEGEN;\ +LLVM_ENABLE_RTTI;LLVM_ENABLE_EH;LLVM_BUILD_EXTERNAL_COMPILER_RT;CMAKE_SYSTEM_NAME;\ +CMAKE_BUILD_TYPE;BUILD_SHARED_LIBS;LLVM_ENABLE_PROJECTS;LLVM_BINUTILS_INCDIR;\ +LLVM_TARGETS_TO_BUILD;LLVM_EXPERIMENTAL_TARGETS_TO_BUILD;PYTHON_EXECUTABLE;\ +PYTHON_LIBRARY;PYTHON_INCLUDE_DIR;LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN;LLDB_EDITLINE_USE_WCHAR;\ +LLVM_ENABLE_LIBEDIT;LLDB_ENABLE_LIBEDIT; \ +CMAKE_C_FLAGS_RELEASE;CMAKE_CXX_FLAGS_RELEASE;CMAKE_ASM_FLAGS_RELEASE;\ +" # # Default to build all OE-Core supported target arches (user overridable). # -LLVM_TARGETS_TO_BUILD ?= "AArch64;ARM;BPF;Mips;PowerPC;X86" +LLVM_TARGETS_TO_BUILD ?= "AMDGPU;AArch64;ARM;BPF;Mips;PowerPC;RISCV;X86" LLVM_TARGETS_TO_BUILD_append = ";${@get_clang_host_arch(bb, d)};${@get_clang_target_arch(bb, d)}" -LLVM_TARGETS_TO_BUILD_TARGET ?= "" +LLVM_TARGETS_TO_BUILD_TARGET ?= "${LLVM_TARGETS_TO_BUILD}" LLVM_TARGETS_TO_BUILD_TARGET_append ?= ";${@get_clang_target_arch(bb, d)}" + +LLVM_EXPERIMENTAL_TARGETS_TO_BUILD ?= "" +LLVM_EXPERIMENTAL_TARGETS_TO_BUILD_append = ";${@get_clang_experimental_target_arch(bb, d)}" + +HF = "${@ bb.utils.contains('TUNE_CCARGS_MFLOAT', 'hard', 'hf', '', d)}" +HF[vardepvalue] = "${HF}" + EXTRA_OECMAKE += "-DLLVM_ENABLE_ASSERTIONS=OFF \ -DLLVM_ENABLE_EXPENSIVE_CHECKS=OFF \ -DLLVM_ENABLE_PIC=ON \ @@ -58,93 +111,180 @@ EXTRA_OECMAKE += "-DLLVM_ENABLE_ASSERTIONS=OFF \ -DLLVM_ENABLE_FFI=ON \ -DFFI_INCLUDE_DIR=$(pkg-config --variable=includedir libffi) \ -DLLVM_OPTIMIZED_TABLEGEN=ON \ - -DLLVM_ENABLE_RTTI=ON \ - -DLLVM_ENABLE_EH=ON \ -DLLVM_BUILD_EXTERNAL_COMPILER_RT=ON \ -DCMAKE_SYSTEM_NAME=Linux \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_SHARED_LIBS=OFF \ - -DLLVM_ENABLE_PROJECTS='clang;lld' \ - -G Ninja ${S}/llvm \ + -DLLVM_ENABLE_PROJECTS='clang;clang-tools-extra;lld;lldb' \ + -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR} \ + -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON \ " EXTRA_OECMAKE_append_class-native = "\ -DLLVM_TARGETS_TO_BUILD='${LLVM_TARGETS_TO_BUILD}' \ + -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD='${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}' \ + -DPYTHON_EXECUTABLE='${PYTHON}' \ " EXTRA_OECMAKE_append_class-nativesdk = "\ -DCMAKE_CROSSCOMPILING:BOOL=ON \ -DCROSS_TOOLCHAIN_FLAGS_NATIVE='-DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/toolchain-native.cmake' \ + -DCMAKE_RANLIB=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ranlib \ + -DCMAKE_AR=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ar \ + -DCMAKE_NM=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-nm \ -DLLVM_TARGETS_TO_BUILD='${LLVM_TARGETS_TO_BUILD}' \ + -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD='${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}' \ -DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen \ -DCLANG_TABLEGEN=${STAGING_BINDIR_NATIVE}/clang-tblgen \ + -DLLDB_TABLEGEN=${STAGING_BINDIR_NATIVE}/lldb-tblgen \ + -DPYTHON_LIBRARY=${STAGING_LIBDIR}/lib${PYTHON_DIR}${PYTHON_ABI}.so \ + -DPYTHON_INCLUDE_DIR=${STAGING_INCDIR}/${PYTHON_DIR}${PYTHON_ABI} \ + -DPYTHON_EXECUTABLE='${PYTHON}' \ " EXTRA_OECMAKE_append_class-target = "\ -DCMAKE_CROSSCOMPILING:BOOL=ON \ -DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen \ -DCLANG_TABLEGEN=${STAGING_BINDIR_NATIVE}/clang-tblgen \ + -DLLDB_TABLEGEN=${STAGING_BINDIR_NATIVE}/lldb-tblgen \ -DLLVM_TARGETS_TO_BUILD='${LLVM_TARGETS_TO_BUILD_TARGET}' \ + -DCMAKE_RANLIB=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ranlib \ + -DCMAKE_AR=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ar \ + -DCMAKE_NM=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-nm \ -DLLVM_TARGET_ARCH=${@get_clang_target_arch(bb, d)} \ - -DLLVM_DEFAULT_TARGET_TRIPLE=${TARGET_SYS} \ + -DLLVM_DEFAULT_TARGET_TRIPLE=${TARGET_SYS}${HF} \ + -DPYTHON_LIBRARY=${STAGING_LIBDIR}/lib${PYTHON_DIR}${PYTHON_ABI}.so \ + -DPYTHON_INCLUDE_DIR=${STAGING_INCDIR}/${PYTHON_DIR}${PYTHON_ABI} \ + -DLLVM_LIBDIR_SUFFIX=${@d.getVar('baselib').replace('lib', '')} \ + -DPYTHON_EXECUTABLE='${PYTHON}' \ " -DEPENDS = "zlib libffi libxml2 ninja-native" -DEPENDS_append_class-nativesdk = " clang-native virtual/${TARGET_PREFIX}binutils-crosssdk virtual/${TARGET_PREFIX}gcc-crosssdk virtual/${TARGET_PREFIX}g++-crosssdk" -DEPENDS_append_class-target = " clang-cross-${TARGET_ARCH} ${@bb.utils.contains('TOOLCHAIN', 'gcc', 'virtual/${TARGET_PREFIX}gcc virtual/${TARGET_PREFIX}g++', '', d)}" +DEPENDS = "binutils zlib libffi libxml2 libxml2-native ninja-native swig-native" +DEPENDS_append_class-nativesdk = " clang-crosssdk-${SDK_ARCH} virtual/${TARGET_PREFIX}binutils-crosssdk nativesdk-python3" +DEPENDS_append_class-target = " clang-cross-${TARGET_ARCH} python3" + +COMPATIBLE_HOST_riscv64 = "null" +COMPATIBLE_HOST_riscv32 = "null" RRECOMMENDS_${PN} = "binutils" +RRECOMMENDS_${PN}_append_class-target = " libcxx-dev" -do_compile() { - ninja ${PARALLEL_MAKE} +do_install_append() { + rm -rf ${D}${libdir}/python*/site-packages/six.py } -do_install() { - DESTDIR=${D} ninja ${PARALLEL_MAKE} install +do_install_append_class-target () { + # Allow bin path to change based on YOCTO_ALTERNATE_EXE_PATH + sed -i 's;${_IMPORT_PREFIX}/bin;${_IMPORT_PREFIX_BIN};g' ${D}${libdir}/cmake/llvm/LLVMExports-release.cmake + + # Insert function to populate Import Variables + sed -i "4i\ +if(DEFINED ENV{YOCTO_ALTERNATE_EXE_PATH})\n\ + execute_process(COMMAND \"llvm-config\" \"--bindir\" OUTPUT_VARIABLE _IMPORT_PREFIX_BIN OUTPUT_STRIP_TRAILING_WHITESPACE)\n\ +else()\n\ + set(_IMPORT_PREFIX_BIN \"\${_IMPORT_PREFIX}/bin\")\n\ +endif()\n" ${D}${libdir}/cmake/llvm/LLVMExports-release.cmake + + if [ -n "${LLVM_LIBDIR_SUFFIX}" ]; then + mkdir -p ${D}${nonarch_libdir} + mv ${D}${libdir}/clang ${D}${nonarch_libdir}/clang + lnr ${D}${nonarch_libdir}/clang ${D}${libdir}/clang + rmdir --ignore-fail-on-non-empty ${D}${libdir} + fi } do_install_append_class-native () { - install -Dm 0755 ${B}/bin/clang-tblgen ${D}${bindir}/clang-tblgen - for f in `find ${D}${bindir} -executable -type f -not -type l`; do - test -n "`file $f|grep -i ELF`" && ${STRIP} $f - echo "stripped $f" - done + install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clang-tblgen ${D}${bindir}/clang-tblgen + install -Dm 0755 ${B}${BINPATHPREFIX}/bin/lldb-tblgen ${D}${bindir}/lldb-tblgen + for f in `find ${D}${bindir} -executable -type f -not -type l`; do + test -n "`file $f|grep -i ELF`" && ${STRIP} $f + echo "stripped $f" + done + ln -sf clang-tblgen ${D}${bindir}/clang-tblgen${PV} + ln -sf llvm-tblgen ${D}${bindir}/llvm-tblgen${PV} + ln -sf llvm-config ${D}${bindir}/llvm-config${PV} } do_install_append_class-nativesdk () { - install -Dm 0755 ${B}/bin/clang-tblgen ${D}${bindir}/clang-tblgen - for f in `find ${D}${bindir} -executable -type f -not -type l`; do - test -n "`file $f|grep -i ELF`" && ${STRIP} $f - done - rm -rf ${D}${datadir}/llvm/cmake - rm -rf ${D}${datadir}/llvm + install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clang-tblgen ${D}${bindir}/clang-tblgen + install -Dm 0755 ${B}${BINPATHPREFIX}/bin/lldb-tblgen ${D}${bindir}/lldb-tblgen + for f in `find ${D}${bindir} -executable -type f -not -type l`; do + test -n "`file $f|grep -i ELF`" && ${STRIP} $f + done + ln -sf clang-tblgen ${D}${bindir}/clang-tblgen${PV} + ln -sf llvm-tblgen ${D}${bindir}/llvm-tblgen${PV} + ln -sf llvm-config ${D}${bindir}/llvm-config${PV} + rm -rf ${D}${datadir}/llvm/cmake + rm -rf ${D}${datadir}/llvm } -PACKAGE_DEBUG_SPLIT_STYLE_class-nativesdk = "debug-without-src" +PACKAGES =+ "${PN}-libllvm ${PN}-lldb-python libclang lldb lldb-server liblldb" -PACKAGES =+ "${PN}-libllvm" +PROVIDES += "llvm llvm${PV}" +PROVIDES_append_class-native = " llvm-native" BBCLASSEXTEND = "native nativesdk" +RDEPENDS_lldb += "${PN}-lldb-python" + +FILES_${PN}-lldb-python = "${libdir}/python*/site-packages/lldb/*" + FILES_${PN} += "\ ${libdir}/BugpointPasses.so \ ${libdir}/LLVMHello.so \ - ${libdir}/TestPlugin.so \ + ${libdir}/LLVMgold.so \ + ${libdir}/*Plugin.so \ + ${libdir}/${BPN} \ + ${nonarch_libdir}/${BPN}/*/include/ \ ${datadir}/scan-* \ ${datadir}/opt-viewer/ \ " -FILES_${PN}-libllvm += "\ +FILES_lldb = "\ + ${bindir}/lldb \ +" + +FILES_lldb-server = "\ + ${bindir}/lldb-server \ +" + +FILES_liblldb = "\ + ${libdir}/liblldbIntelFeatures.so* \ + ${libdir}/liblldb.so* \ +" + +FILES_${PN}-libllvm =+ "\ ${libdir}/libLLVM-${MAJOR_VER}.${MINOR_VER}.so \ ${libdir}/libLLVM-${MAJOR_VER}.so \ - ${libdir}/libLLVM-${MAJOR_VER}.${MINOR_VER}svn.so \ + ${libdir}/libLLVM-${MAJOR_VER}git.so \ + ${libdir}/libLLVM-${MAJOR_VER}.${MINOR_VER}git.so \ +" + +FILES_libclang = "\ + ${libdir}/libclang.so.${MAJOR_VER} \ " FILES_${PN}-dev += "\ ${datadir}/llvm/cmake \ ${libdir}/cmake \ + ${nonarch_libdir}/${BPN}/*.la \ " +FILES_${PN}-staticdev += "${nonarch_libdir}/${BPN}/*.a" + +FILES_${PN}-staticdev_remove = "${libdir}/${BPN}/*.a" +FILES_${PN}-dev_remove = "${libdir}/${BPN}/*.la" +FILES_${PN}_remove = "${libdir}/${BPN}/*" + + INSANE_SKIP_${PN} += "already-stripped" -INSANE_SKIP_${PN}-dev += "dev-elf" +#INSANE_SKIP_${PN}-dev += "dev-elf" +INSANE_SKIP_${PN}-lldb-python += "dev-so dev-deps" +INSANE_SKIP_liblldb = "dev-so" #Avoid SSTATE_SCAN_COMMAND running sed over llvm-config. SSTATE_SCAN_FILES_remove = "*-config" + +TOOLCHAIN = "clang" +TOOLCHAIN_class-native = "gcc" +TOOLCHAIN_class-nativesdk = "clang" + +SYSROOT_DIRS_append_class-target = " ${nonarch_libdir}" |