summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKhem Raj <raj.khem@gmail.com>2020-08-01 22:58:41 -0700
committerKhem Raj <raj.khem@gmail.com>2020-11-04 11:43:22 -0800
commitdf659e706866c0dbf55aa4b643f1b224fdee77f9 (patch)
treeb9bdb08c5c302c3962962bff2086976a22ea62fd
parent711e593d5984aad3bf35c51b7ac4482982bc16c7 (diff)
downloadmeta-clang-df659e706866c0dbf55aa4b643f1b224fdee77f9.tar.gz
libcxx: Fix linking based upon chosen compiler runtime
libcxx can use either libgcc_s or llvm libunwind for unwinder functionality, the defaults are platform dependent, therefore with this patch we make intentional choice based on RUNTIME settings chosen, e.g. when using GNU runtime we use libgcc and also ensure that it add right compiler options to build as well, since libcxx build looks C runtime by calling $($CC --print-libgcc-file-name) to build libc++abi.so unless we use right -rtlib option it will result in linking wrong library Enable RTTI as well do not enable llvm unwinder unless we chose llvm runtime, even that might not work since libpthread from glibc explicitly dlopens libgcc_s.so to enable unwinding https://github.com/bminor/glibc/blob/5f72f9800b250410cad3abfeeb09469ef12b2438/sysdeps/nptl/unwind-forcedunwind.c#L53...L58 Fixes Issue #332 Signed-off-by: Khem Raj <raj.khem@gmail.com>
-rw-r--r--recipes-devtools/clang/libcxx_git.bb11
1 files changed, 6 insertions, 5 deletions
diff --git a/recipes-devtools/clang/libcxx_git.bb b/recipes-devtools/clang/libcxx_git.bb
index 7325e4f..aa2598b 100644
--- a/recipes-devtools/clang/libcxx_git.bb
+++ b/recipes-devtools/clang/libcxx_git.bb
@@ -10,7 +10,7 @@ require common-source.inc
10 10
11inherit cmake pythonnative 11inherit cmake pythonnative
12 12
13PACKAGECONFIG ??= "compiler-rt unwind exceptions" 13PACKAGECONFIG ??= "compiler-rt exceptions ${@bb.utils.contains("RUNTIME", "llvm", "unwind", "", d)}"
14PACKAGECONFIG_riscv32 = "exceptions" 14PACKAGECONFIG_riscv32 = "exceptions"
15PACKAGECONFIG_riscv64 = "exceptions" 15PACKAGECONFIG_riscv64 = "exceptions"
16PACKAGECONFIG_append_armv5 = " no-atomics" 16PACKAGECONFIG_append_armv5 = " no-atomics"
@@ -18,12 +18,14 @@ PACKAGECONFIG_append_armv5 = " no-atomics"
18PACKAGECONFIG[unwind] = "-DLIBCXXABI_USE_LLVM_UNWINDER=ON -DLIBCXXABI_ENABLE_STATIC_UNWINDER=ON -DLIBCXXABI_STATICALLY_LINK_UNWINDER_IN_SHARED_LIBRARY=ON -DLIBCXXABI_STATICALLY_LINK_UNWINDER_IN_STATIC_LIBRARY=ON,-DLIBCXXABI_USE_LLVM_UNWINDER=OFF,," 18PACKAGECONFIG[unwind] = "-DLIBCXXABI_USE_LLVM_UNWINDER=ON -DLIBCXXABI_ENABLE_STATIC_UNWINDER=ON -DLIBCXXABI_STATICALLY_LINK_UNWINDER_IN_SHARED_LIBRARY=ON -DLIBCXXABI_STATICALLY_LINK_UNWINDER_IN_STATIC_LIBRARY=ON,-DLIBCXXABI_USE_LLVM_UNWINDER=OFF,,"
19PACKAGECONFIG[exceptions] = "-DLIBCXXABI_ENABLE_EXCEPTIONS=ON -DDLIBCXX_ENABLE_EXCEPTIONS=ON,-DLIBCXXABI_ENABLE_EXCEPTIONS=OFF -DLIBCXX_ENABLE_EXCEPTIONS=OFF -DCMAKE_REQUIRED_FLAGS='-fno-exceptions'," 19PACKAGECONFIG[exceptions] = "-DLIBCXXABI_ENABLE_EXCEPTIONS=ON -DDLIBCXX_ENABLE_EXCEPTIONS=ON,-DLIBCXXABI_ENABLE_EXCEPTIONS=OFF -DLIBCXX_ENABLE_EXCEPTIONS=OFF -DCMAKE_REQUIRED_FLAGS='-fno-exceptions',"
20PACKAGECONFIG[no-atomics] = "-D_LIBCXXABI_HAS_ATOMIC_BUILTINS=OFF -DCMAKE_SHARED_LINKER_FLAGS='-latomic',," 20PACKAGECONFIG[no-atomics] = "-D_LIBCXXABI_HAS_ATOMIC_BUILTINS=OFF -DCMAKE_SHARED_LINKER_FLAGS='-latomic',,"
21PACKAGECONFIG[compiler-rt] = "-DLIBCXXABI_USE_COMPILER_RT=ON -DLIBCXX_USE_COMPILER_RT=ON,-DLIBCXXABI_USE_COMPILER_RT=OFF -DLIBCXX_USE_COMPILER_RT=OFF,compiler-rt" 21PACKAGECONFIG[compiler-rt] = ",,compiler-rt"
22 22
23DEPENDS += "ninja-native" 23DEPENDS += "ninja-native"
24DEPENDS_append_class-target = " compiler-rt clang-cross-${TARGET_ARCH} virtual/${MLPREFIX}libc virtual/${TARGET_PREFIX}compilerlibs" 24DEPENDS_append_class-target = " clang-cross-${TARGET_ARCH} virtual/${MLPREFIX}libc virtual/${TARGET_PREFIX}compilerlibs"
25 25
26LIBCPLUSPLUS = "" 26LIBCPLUSPLUS = ""
27COMPILER_RT ?= "-rtlib=compiler-rt ${UNWINDLIB}"
28UNWINDLIB ?= "${@bb.utils.contains("RUNTIME", "gnu", "--unwindlib=libgcc", "", d)}"
27 29
28INHIBIT_DEFAULT_DEPS = "1" 30INHIBIT_DEFAULT_DEPS = "1"
29 31
@@ -37,16 +39,15 @@ LLVM_LIBDIR_SUFFIX_powerpc64 = "64"
37EXTRA_OECMAKE += "\ 39EXTRA_OECMAKE += "\
38 -DCMAKE_CROSSCOMPILING=ON \ 40 -DCMAKE_CROSSCOMPILING=ON \
39 -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON \ 41 -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON \
42 -DLLVM_ENABLE_RTTI=ON \
40 -DLIBUNWIND_ENABLE_SHARED=OFF \ 43 -DLIBUNWIND_ENABLE_SHARED=OFF \
41 -DLIBUNWIND_ENABLE_THREADS=OFF \ 44 -DLIBUNWIND_ENABLE_THREADS=OFF \
42 -DLIBUNWIND_WEAK_PTHREAD_LIB=ON \ 45 -DLIBUNWIND_WEAK_PTHREAD_LIB=ON \
43 -DLIBUNWIND_ENABLE_CROSS_UNWINDING=ON \ 46 -DLIBUNWIND_ENABLE_CROSS_UNWINDING=ON \
44 -DLIBCXXABI_INCLUDE_TESTS=OFF \ 47 -DLIBCXXABI_INCLUDE_TESTS=OFF \
45 -DLIBCXXABI_ENABLE_SHARED=ON \ 48 -DLIBCXXABI_ENABLE_SHARED=ON \
46 -DLIBCXXABI_USE_COMPILER_RT=ON \
47 -DLIBCXXABI_LIBCXX_INCLUDES=${S}/libcxx/include \ 49 -DLIBCXXABI_LIBCXX_INCLUDES=${S}/libcxx/include \
48 -DLIBCXX_CXX_ABI=libcxxabi \ 50 -DLIBCXX_CXX_ABI=libcxxabi \
49 -DLIBCXX_USE_COMPILER_RT=ON \
50 -DLIBCXX_CXX_ABI_INCLUDE_PATHS=${S}/libcxxabi/include \ 51 -DLIBCXX_CXX_ABI_INCLUDE_PATHS=${S}/libcxxabi/include \
51 -DLIBCXX_CXX_ABI_LIBRARY_PATH=${B}/lib${LLVM_LIBDIR_SUFFIX} \ 52 -DLIBCXX_CXX_ABI_LIBRARY_PATH=${B}/lib${LLVM_LIBDIR_SUFFIX} \
52 -DCMAKE_AR=${STAGING_BINDIR_TOOLCHAIN}/${AR} \ 53 -DCMAKE_AR=${STAGING_BINDIR_TOOLCHAIN}/${AR} \