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:34:09 -0700
commit78015d19394e4c570015c97fd8bb56f7b797aa1c (patch)
tree6a25f1129ee2271ae8831589c95d7d9ce7d7311d
parent6475bb23b98160bfe6c5b2acf3e5e76ad8a05345 (diff)
downloadmeta-clang-78015d19394e4c570015c97fd8bb56f7b797aa1c.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} \