diff options
author | Khem Raj <raj.khem@gmail.com> | 2020-08-01 22:58:41 -0700 |
---|---|---|
committer | Khem Raj <raj.khem@gmail.com> | 2020-08-01 23:39:50 -0700 |
commit | 2afc0229b5a4414c455511d02f9fc9ce0bb08a93 (patch) | |
tree | 3221cd1cc87df37e0791ccbb2a8b449b5cf2aa24 /recipes-devtools/clang/libcxx_git.bb | |
parent | b58ce19a372a1979a13634be840a156b90202c4e (diff) | |
download | meta-clang-2afc0229b5a4414c455511d02f9fc9ce0bb08a93.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>
Diffstat (limited to 'recipes-devtools/clang/libcxx_git.bb')
-rw-r--r-- | recipes-devtools/clang/libcxx_git.bb | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/recipes-devtools/clang/libcxx_git.bb b/recipes-devtools/clang/libcxx_git.bb index 5bc864c..789da5b 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 | ||
11 | inherit cmake python3native | 11 | inherit cmake python3native |
12 | 12 | ||
13 | PACKAGECONFIG ??= "compiler-rt unwind exceptions" | 13 | PACKAGECONFIG ??= "compiler-rt exceptions ${@bb.utils.contains("RUNTIME", "llvm", "unwind", "", d)}" |
14 | PACKAGECONFIG_riscv32 = "exceptions" | 14 | PACKAGECONFIG_riscv32 = "exceptions" |
15 | PACKAGECONFIG_riscv64 = "exceptions" | 15 | PACKAGECONFIG_riscv64 = "exceptions" |
16 | PACKAGECONFIG_append_armv5 = " no-atomics" | 16 | PACKAGECONFIG_append_armv5 = " no-atomics" |
@@ -18,12 +18,14 @@ PACKAGECONFIG_append_armv5 = " no-atomics" | |||
18 | PACKAGECONFIG[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,," | 18 | PACKAGECONFIG[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,," |
19 | PACKAGECONFIG[exceptions] = "-DLIBCXXABI_ENABLE_EXCEPTIONS=ON -DDLIBCXX_ENABLE_EXCEPTIONS=ON,-DLIBCXXABI_ENABLE_EXCEPTIONS=OFF -DLIBCXX_ENABLE_EXCEPTIONS=OFF -DCMAKE_REQUIRED_FLAGS='-fno-exceptions'," | 19 | PACKAGECONFIG[exceptions] = "-DLIBCXXABI_ENABLE_EXCEPTIONS=ON -DDLIBCXX_ENABLE_EXCEPTIONS=ON,-DLIBCXXABI_ENABLE_EXCEPTIONS=OFF -DLIBCXX_ENABLE_EXCEPTIONS=OFF -DCMAKE_REQUIRED_FLAGS='-fno-exceptions'," |
20 | PACKAGECONFIG[no-atomics] = "-D_LIBCXXABI_HAS_ATOMIC_BUILTINS=OFF -DCMAKE_SHARED_LINKER_FLAGS='-latomic',," | 20 | PACKAGECONFIG[no-atomics] = "-D_LIBCXXABI_HAS_ATOMIC_BUILTINS=OFF -DCMAKE_SHARED_LINKER_FLAGS='-latomic',," |
21 | PACKAGECONFIG[compiler-rt] = "-DLIBCXXABI_USE_COMPILER_RT=ON -DLIBCXX_USE_COMPILER_RT=ON,-DLIBCXXABI_USE_COMPILER_RT=OFF -DLIBCXX_USE_COMPILER_RT=OFF,compiler-rt" | 21 | PACKAGECONFIG[compiler-rt] = ",,compiler-rt" |
22 | 22 | ||
23 | DEPENDS += "ninja-native" | 23 | DEPENDS += "ninja-native" |
24 | DEPENDS_append_class-target = " compiler-rt clang-cross-${TARGET_ARCH} virtual/${MLPREFIX}libc virtual/${TARGET_PREFIX}compilerlibs" | 24 | DEPENDS_append_class-target = " clang-cross-${TARGET_ARCH} virtual/${MLPREFIX}libc virtual/${TARGET_PREFIX}compilerlibs" |
25 | 25 | ||
26 | LIBCPLUSPLUS = "" | 26 | LIBCPLUSPLUS = "" |
27 | COMPILER_RT ?= "-rtlib=compiler-rt ${UNWINDLIB}" | ||
28 | UNWINDLIB ?= "${@bb.utils.contains("RUNTIME", "gnu", "--unwindlib=libgcc", "", d)}" | ||
27 | 29 | ||
28 | INHIBIT_DEFAULT_DEPS = "1" | 30 | INHIBIT_DEFAULT_DEPS = "1" |
29 | 31 | ||
@@ -40,16 +42,15 @@ OECMAKE_SOURCEPATH = "${S}/llvm" | |||
40 | EXTRA_OECMAKE += "\ | 42 | EXTRA_OECMAKE += "\ |
41 | -DCMAKE_CROSSCOMPILING=ON \ | 43 | -DCMAKE_CROSSCOMPILING=ON \ |
42 | -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON \ | 44 | -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON \ |
45 | -DLLVM_ENABLE_RTTI=ON \ | ||
43 | -DLIBUNWIND_ENABLE_SHARED=OFF \ | 46 | -DLIBUNWIND_ENABLE_SHARED=OFF \ |
44 | -DLIBUNWIND_ENABLE_THREADS=OFF \ | 47 | -DLIBUNWIND_ENABLE_THREADS=OFF \ |
45 | -DLIBUNWIND_WEAK_PTHREAD_LIB=ON \ | 48 | -DLIBUNWIND_WEAK_PTHREAD_LIB=ON \ |
46 | -DLIBUNWIND_ENABLE_CROSS_UNWINDING=ON \ | 49 | -DLIBUNWIND_ENABLE_CROSS_UNWINDING=ON \ |
47 | -DLIBCXXABI_INCLUDE_TESTS=OFF \ | 50 | -DLIBCXXABI_INCLUDE_TESTS=OFF \ |
48 | -DLIBCXXABI_ENABLE_SHARED=ON \ | 51 | -DLIBCXXABI_ENABLE_SHARED=ON \ |
49 | -DLIBCXXABI_USE_COMPILER_RT=ON \ | ||
50 | -DLIBCXXABI_LIBCXX_INCLUDES=${S}/libcxx/include \ | 52 | -DLIBCXXABI_LIBCXX_INCLUDES=${S}/libcxx/include \ |
51 | -DLIBCXX_CXX_ABI=libcxxabi \ | 53 | -DLIBCXX_CXX_ABI=libcxxabi \ |
52 | -DLIBCXX_USE_COMPILER_RT=ON \ | ||
53 | -DLIBCXX_CXX_ABI_INCLUDE_PATHS=${S}/libcxxabi/include \ | 54 | -DLIBCXX_CXX_ABI_INCLUDE_PATHS=${S}/libcxxabi/include \ |
54 | -DLIBCXX_CXX_ABI_LIBRARY_PATH=${B}/lib${LLVM_LIBDIR_SUFFIX} \ | 55 | -DLIBCXX_CXX_ABI_LIBRARY_PATH=${B}/lib${LLVM_LIBDIR_SUFFIX} \ |
55 | -DCMAKE_AR=${STAGING_BINDIR_TOOLCHAIN}/${AR} \ | 56 | -DCMAKE_AR=${STAGING_BINDIR_TOOLCHAIN}/${AR} \ |