From 9143de53c558a06984f9b2b71aa5e835874b951b Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Wed, 18 Sep 2019 23:50:38 -0700 Subject: llvm-libunwind: New reecipe for llvm unwinder split from libcxx Its easier to provide it as replacement for nongnu libunwind bundled into libcxx was getting harder when it came to replacement Signed-off-by: Khem Raj --- classes/clang.bbclass | 2 +- recipes-devtools/clang/libcxx_git.bb | 51 +++++++------------ recipes-devtools/clang/llvm-libunwind.bb | 84 ++++++++++++++++++++++++++++++++ 3 files changed, 103 insertions(+), 34 deletions(-) create mode 100644 recipes-devtools/clang/llvm-libunwind.bb diff --git a/classes/clang.bbclass b/classes/clang.bbclass index 99b80a4..58fe6b6 100644 --- a/classes/clang.bbclass +++ b/classes/clang.bbclass @@ -77,7 +77,7 @@ def clang_dep_prepend(d): BASE_DEFAULT_DEPS_toolchain-clang_class-target = "${@clang_dep_prepend(d)}" -PREFERRED_PROVIDER_libunwind_toolchain-clang = "libcxx" +PREFERRED_PROVIDER_libunwind_toolchain-clang = "llvm-libunwind" PREFERRED_PROVIDER_libunwind ?= "libunwind" PREFERRED_PROVIDER_libunwind_powerpc = "libunwind" PREFERRED_PROVIDER_libunwind_riscv32 = "libunwind" diff --git a/recipes-devtools/clang/libcxx_git.bb b/recipes-devtools/clang/libcxx_git.bb index c88d868..c12831a 100644 --- a/recipes-devtools/clang/libcxx_git.bb +++ b/recipes-devtools/clang/libcxx_git.bb @@ -10,26 +10,20 @@ require common-source.inc inherit cmake pythonnative -DEPENDS += "ninja-native" +DEPENDS += "ninja-native llvm-libunwind" + +DEPENDS_remove_powerpc = "llvm-libunwind" +DEPENDS_remove_riscv32 = "llvm-libunwind" +DEPENDS_remove_riscv64 = "llvm-libunwind" + BASEDEPENDS_remove_toolchain-clang = "libcxx" DEPENDS_append_toolchain-clang = " virtual/${TARGET_PREFIX}compilerlibs" TARGET_CXXFLAGS_remove_toolchain-clang = "--stdlib=libc++" -TUNE_CCARGS_remove_toolchain-clang = "--unwindlib=libunwind --stdlib=libc++" - -PACKAGECONFIG ??= "${@bb.utils.contains('PREFERRED_PROVIDER_libunwind', 'libcxx', 'unwind', '', d)}" -PACKAGECONFIG_powerpc = "" -PACKAGECONFIG_riscv64 = "" -PACKAGECONFIG_riscv32 = "" - -PACKAGECONFIG[unwind] = "-DLIBCXXABI_USE_LLVM_UNWINDER=ON -DLIBUNWIND_ENABLE_SHARED=ON -DLIBCXXABI_ENABLE_STATIC_UNWINDER=ON -DLIBCXXABI_STATICALLY_LINK_UNWINDER_IN_SHARED_LIBRARY=OFF -DLIBCXXABI_LIBUNWIND_INCLUDES=${S}/projects/libunwind/include, -DLIBCXXABI_USE_LLVM_UNWINDER=OFF -DCMAKE_SHARED_LINKER_FLAGS='-lgcc_s'," - -PROVIDES += "${@bb.utils.contains('PACKAGECONFIG', 'unwind', 'libunwind', '', d)}" -LIBUNWIND = "${@bb.utils.contains('PACKAGECONFIG', 'unwind', ';libunwind', '', d)}" +TUNE_CCARGS_remove_toolchain-clang = "--stdlib=libc++" LIC_FILES_CHKSUM = "file://libcxx/LICENSE.TXT;md5=55d89dd7eec8d3b4204b680e27da3953 \ file://libcxxabi/LICENSE.TXT;md5=7b9334635b542c56868400a46b272b1e \ - file://libunwind/LICENSE.TXT;md5=f66970035d12f196030658b11725e1a1 \ " THUMB_TUNE_CCARGS = "" #TUNE_CCARGS += "-nostdlib" @@ -45,14 +39,21 @@ EXTRA_OECMAKE += "\ -DLIBCXXABI_LIBCXX_INCLUDES=${S}/libcxx/include \ -DLIBCXX_CXX_ABI_INCLUDE_PATHS=${S}/libcxxabi/include \ -DLIBCXX_CXX_ABI_LIBRARY_PATH=${B}/${baselib} \ + -DCMAKE_SHARED_LINKER_FLAGS='${SHAREDFLAGS}' \ -DCMAKE_AR=${STAGING_BINDIR_TOOLCHAIN}/${AR} \ -DCMAKE_NM=${STAGING_BINDIR_TOOLCHAIN}/${NM} \ -DCMAKE_RANLIB=${STAGING_BINDIR_TOOLCHAIN}/${RANLIB} \ - -DLLVM_ENABLE_PROJECTS='libcxx;libcxxabi${LIBUNWIND}' \ + -DLLVM_ENABLE_PROJECTS='libcxx;libcxxabi' \ -DLLVM_LIBDIR_SUFFIX=${@d.getVar('baselib').replace('lib', '')} \ -G Ninja \ ${S}/llvm \ " +SHAREDFLAGS ?= "-lunwind" +SHAREDFLAGS_riscv32 = "-lgcc_s -latomic" +SHAREDFLAGS_riscv64 = "-lgcc_s -latomic" +SHAREDFLAGS_powerpc = "-lgcc_s -latomic" +SHAREDFLAGS_append_arm = " -latomic" +SHAREDFLAGS_append_armeb = " -latomic" EXTRA_OECMAKE_append_class-native = " -DLIBCXX_ENABLE_ABI_LINKER_SCRIPT=OFF" EXTRA_OECMAKE_append_class-nativesdk = " -DLIBCXX_ENABLE_ABI_LINKER_SCRIPT=OFF" @@ -60,7 +61,7 @@ EXTRA_OECMAKE_append_libc-musl = " -DLIBCXX_HAS_MUSL_LIBC=ON " EXTRA_OECMAKE_append_riscv64 = " -DLIBCXXABI_ENABLE_EXCEPTIONS=ON \ -DLIBCXX_ENABLE_EXCEPTIONS=ON \ -DLIBOMP_LIBFLAGS='-latomic' \ - -DCMAKE_SHARED_LINKER_FLAGS='-lgcc_s -latomic' \ + -DLIBCXX_HAS_GCC_S_LIB=ON \ " EXTRA_OECMAKE_append_armv5 = " -D_LIBCXXABI_HAS_ATOMIC_BUILTINS=OFF" @@ -70,40 +71,24 @@ EXTRA_OECMAKE_append_arm = " -DCMAKE_REQUIRED_FLAGS='-fno-exceptions'" EXTRA_OECMAKE_append_riscv32 = " -DLIBCXXABI_ENABLE_EXCEPTIONS=ON \ -DLIBCXX_ENABLE_EXCEPTIONS=ON \ -DLIBOMP_LIBFLAGS='-latomic' \ - -DCMAKE_SHARED_LINKER_FLAGS='-lgcc_s -latomic' \ + -DLIBCXX_HAS_GCC_S_LIB=ON \ " EXTRA_OECMAKE_append_powerpc = " -DLIBCXXABI_ENABLE_EXCEPTIONS=ON \ -DLIBCXX_ENABLE_EXCEPTIONS=ON \ -DLIBOMP_LIBFLAGS='-latomic' \ - -DCMAKE_SHARED_LINKER_FLAGS='-lgcc_s -latomic' \ + -DLIBCXX_HAS_GCC_S_LIB=ON \ " do_compile() { - if ${@bb.utils.contains('PACKAGECONFIG', 'unwind', 'true', 'false', d)}; then - ninja -v ${PARALLEL_MAKE} unwind - fi ninja -v ${PARALLEL_MAKE} cxxabi ninja -v ${PARALLEL_MAKE} cxx } do_install() { - if ${@bb.utils.contains('PACKAGECONFIG', 'unwind', 'true', 'false', d)}; then - DESTDIR=${D} ninja ${PARALLEL_MAKE} install-unwind - fi DESTDIR=${D} ninja ${PARALLEL_MAKE} install-cxx install-cxxabi } ALLOW_EMPTY_${PN} = "1" -RPROVIDES_${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'unwind', 'libunwind', '', d)}" -RPROVIDES_${PN}-dbg += "${@bb.utils.contains('PACKAGECONFIG', 'unwind', 'libunwind-dbg', '', d)}" -RPROVIDES_${PN}-dev += "${@bb.utils.contains('PACKAGECONFIG', 'unwind', 'libunwind-dev', '', d)}" -RPROVIDES_${PN}-doc += "${@bb.utils.contains('PACKAGECONFIG', 'unwind', 'libunwind-doc', '', d)}" -RPROVIDES_${PN}-staticdev += "${@bb.utils.contains('PACKAGECONFIG', 'unwind', 'libunwind-staticdev', '', d)}" -RPROVIDES_${PN}-locale += "${@bb.utils.contains('PACKAGECONFIG', 'unwind', 'libunwind-locale', '', d)}" -RPROVIDES_${PN}-src += "${@bb.utils.contains('PACKAGECONFIG', 'unwind', 'libunwind-src', '', d)}" - -PACKAGES_DYNAMIC += "${@bb.utils.contains('PACKAGECONFIG', 'unwind', '^libunwind-locale-.*', '', d)}" - BBCLASSEXTEND = "native nativesdk" TOOLCHAIN = "clang" diff --git a/recipes-devtools/clang/llvm-libunwind.bb b/recipes-devtools/clang/llvm-libunwind.bb new file mode 100644 index 0000000..83bd92a --- /dev/null +++ b/recipes-devtools/clang/llvm-libunwind.bb @@ -0,0 +1,84 @@ +# Copyright (C) 2015 Khem Raj +# Released under the MIT license (see COPYING.MIT for the terms) + +DESCRIPTION = "C++ runtime stack unwinder from LLVM" +HOMEPAGE = "https://github.com/llvm-mirror/libunwind" +SECTION = "base" + +require clang.inc +require common-source.inc + +inherit cmake pythonnative + +DEPENDS += "ninja-native" +BASEDEPENDS_remove_toolchain-clang = "libcxx" +DEPENDS_append_toolchain-clang = " virtual/${TARGET_PREFIX}compilerlibs" + +TARGET_CXXFLAGS_remove_toolchain-clang = "--stdlib=libc++" +TUNE_CCARGS_remove_toolchain-clang = "--unwindlib=libunwind --stdlib=libc++" + +COMPATIBLE_HOST_powerpc = "null" +COMPATIBLE_HOST_riscv32 = "null" +COMPATIBLE_HOST_riscv64 = "null" + +LIC_FILES_CHKSUM = "file://libunwind/LICENSE.TXT;md5=f66970035d12f196030658b11725e1a1 \ +" +THUMB_TUNE_CCARGS = "" +#TUNE_CCARGS += "-nostdlib" + +EXTRA_OECMAKE += "\ + -DCMAKE_CROSSCOMPILING=ON \ + -DLIBCXXABI_USE_LLVM_UNWINDER=ON \ + -DLIBUNWIND_ENABLE_SHARED=ON \ + -DLIBCXXABI_ENABLE_STATIC_UNWINDER=ON \ + -DLIBCXXABI_STATICALLY_LINK_UNWINDER_IN_SHARED_LIBRARY=OFF \ + -DLIBCXXABI_LIBUNWIND_INCLUDES=${S}/projects/libunwind/include \ + -DLIBUNWIND_ENABLE_THREADS=OFF \ + -DLIBUNWIND_ENABLE_CROSS_UNWINDING=ON \ + -DLLVM_ENABLE_LIBCXX=ON \ + -DLIBCXX_CXX_ABI_INCLUDE_PATHS=${S}/libcxxabi/include \ + -DLIBCXX_CXX_ABI_LIBRARY_PATH=${B}/${baselib} \ + -DCMAKE_AR=${STAGING_BINDIR_TOOLCHAIN}/${AR} \ + -DCMAKE_NM=${STAGING_BINDIR_TOOLCHAIN}/${NM} \ + -DCMAKE_RANLIB=${STAGING_BINDIR_TOOLCHAIN}/${RANLIB} \ + -DLLVM_ENABLE_PROJECTS='libunwind' \ + -DLLVM_LIBDIR_SUFFIX=${@d.getVar('baselib').replace('lib', '')} \ + -G Ninja \ + ${S}/llvm \ +" + +EXTRA_OECMAKE_append_libc-musl = " -DLIBCXX_HAS_MUSL_LIBC=ON " +EXTRA_OECMAKE_append_riscv64 = " -DCMAKE_SHARED_LINKER_FLAGS='-lgcc_s -latomic' \ + " + +EXTRA_OECMAKE_append_arm = " -DCMAKE_REQUIRED_FLAGS='-fno-exceptions'" + +EXTRA_OECMAKE_append_riscv32 = " -DCMAKE_SHARED_LINKER_FLAGS='-lgcc_s -latomic' \ + " +EXTRA_OECMAKE_append_powerpc = " -DCMAKE_SHARED_LINKER_FLAGS='-lgcc_s -latomic' \ + " +do_compile() { + ninja -v ${PARALLEL_MAKE} unwind +} + +do_install() { + DESTDIR=${D} ninja ${PARALLEL_MAKE} install-unwind + install -d ${D}${includedir} + install -m 644 ${S}/libunwind/include/*.h ${D}${includedir} +} + +ALLOW_EMPTY_${PN} = "1" + +RPROVIDES_${PN} += "libunwind" +RPROVIDES_${PN}-dbg += "libunwind-dbg" +RPROVIDES_${PN}-dev += "libunwind-dev" +RPROVIDES_${PN}-doc += "libunwind-doc" +RPROVIDES_${PN}-staticdev += "libunwind-staticdev" +RPROVIDES_${PN}-locale += "libunwind-locale" +RPROVIDES_${PN}-src += "libunwind-src" + +PACKAGES_DYNAMIC += "^libunwind-locale-.*" + +BBCLASSEXTEND = "native nativesdk" +TOOLCHAIN = "clang" + -- cgit v1.2.3-54-g00ecf