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-08-01 23:39:50 -0700
commit2afc0229b5a4414c455511d02f9fc9ce0bb08a93 (patch)
tree3221cd1cc87df37e0791ccbb2a8b449b5cf2aa24
parentb58ce19a372a1979a13634be840a156b90202c4e (diff)
downloadmeta-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>
-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 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
11inherit cmake python3native 11inherit cmake python3native
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
@@ -40,16 +42,15 @@ OECMAKE_SOURCEPATH = "${S}/llvm"
40EXTRA_OECMAKE += "\ 42EXTRA_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} \