summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKhem Raj <raj.khem@gmail.com>2025-07-17 21:10:42 -0700
committerKhem Raj <raj.khem@gmail.com>2025-07-28 08:23:37 -0700
commite13012e59653b001d665787ab6231718d6a1062e (patch)
tree913cdee35b2b87e97de518663d236b0ecd77697b
parente51fcd7670126c8c175e0cb68348a69c94ca22f5 (diff)
downloadmeta-clang-e13012e59653b001d665787ab6231718d6a1062e.tar.gz
clang-legacy: Adjust to clang merging to core for YP compatibility
Some of these settings are moved to OE-core and some are deferred to distros where it belongs. This makes meta-clang compatible with YP again. Signed-off-by: Khem Raj <raj.khem@gmail.com>
-rw-r--r--classes/clang-legacy.bbclass81
1 files changed, 7 insertions, 74 deletions
diff --git a/classes/clang-legacy.bbclass b/classes/clang-legacy.bbclass
index 5f7760d..1346715 100644
--- a/classes/clang-legacy.bbclass
+++ b/classes/clang-legacy.bbclass
@@ -1,26 +1,16 @@
1# Add the necessary override 1# Add the necessary override
2CCACHE_COMPILERCHECK:toolchain-clang ?= "%compiler% -v" 2CCACHE_COMPILERCHECK:toolchain-clang ?= "%compiler% -v"
3HOST_CC_ARCH:prepend:toolchain-clang:class-target = "-target ${HOST_SYS} "
4HOST_CC_ARCH:prepend:toolchain-clang:class-nativesdk = "-target ${HOST_SYS} "
5LD:toolchain-clang:class-target = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', '${HOST_PREFIX}ld.lld${TOOLCHAIN_OPTIONS} ${HOST_LD_ARCH}', '${HOST_PREFIX}ld${TOOLCHAIN_OPTIONS} ${HOST_LD_ARCH}', d)}"
6LD:toolchain-clang:class-nativesdk = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', '${HOST_PREFIX}ld.lld${TOOLCHAIN_OPTIONS} ${HOST_LD_ARCH}', '${HOST_PREFIX}ld${TOOLCHAIN_OPTIONS} ${HOST_LD_ARCH}', d)}"
7 3
8LTO:toolchain-clang:class-target = "${@bb.utils.contains('DISTRO_FEATURES', 'thin-lto', '-flto=thin', '-flto -fuse-ld=lld', d)}" 4LTO:toolchain-clang:class-target = "${@bb.utils.contains('DISTRO_FEATURES', 'thin-lto', '-flto=thin', '-flto -fuse-ld=lld', d)}"
9LTO:toolchain-clang:class-nativesdk = "${@bb.utils.contains('DISTRO_FEATURES', 'thin-lto', '-flto=thin', '-flto -fuse-ld=lld', d)}" 5LTO:toolchain-clang:class-nativesdk = "${@bb.utils.contains('DISTRO_FEATURES', 'thin-lto', '-flto=thin', '-flto -fuse-ld=lld', d)}"
10 6
11COMPILER_RT ??= "" 7COMPILER_RT:toolchain-clang:armeb = "-rtlib=libgcc ${UNWINDLIB}"
12COMPILER_RT:armeb = "-rtlib=libgcc ${UNWINDLIB}" 8COMPILER_RT:toolchain-clang:libc-klibc = "-rtlib=libgcc ${UNWINDLIB}"
13COMPILER_RT:libc-klibc = "-rtlib=libgcc ${UNWINDLIB}"
14 9
15UNWINDLIB ??= "" 10UNWINDLIB:toolchain-clang:armeb = "--unwindlib=libgcc"
16UNWINDLIB:armeb = "--unwindlib=libgcc" 11UNWINDLIB:toolchain-clang:libc-klibc = "--unwindlib=libgcc"
17UNWINDLIB_libc-klibc = "--unwindlib=libgcc"
18 12
19LIBCPLUSPLUS ??= "" 13LIBCPLUSPLUS::toolchain-clang:armv5 = "-stdlib=libstdc++"
20LIBCPLUSPLUS:armv5 = "-stdlib=libstdc++"
21
22CXXFLAGS:append:toolchain-clang = " ${LIBCPLUSPLUS}"
23LDFLAGS:append:toolchain-clang = " ${COMPILER_RT} ${UNWINDLIB} ${LIBCPLUSPLUS}"
24 14
25# Clang does not yet support big.LITTLE performance tunes, so use the LITTLE for tunes 15# Clang does not yet support big.LITTLE performance tunes, so use the LITTLE for tunes
26TUNE_CCARGS:remove:toolchain-clang = "\ 16TUNE_CCARGS:remove:toolchain-clang = "\
@@ -49,30 +39,11 @@ TUNE_CCARGS:remove:toolchain-clang:powerpc = "-mhard-float -mno-spe"
49TUNE_CCARGS:append:toolchain-clang:libc-musl:powerpc64 = " -mlong-double-64" 39TUNE_CCARGS:append:toolchain-clang:libc-musl:powerpc64 = " -mlong-double-64"
50TUNE_CCARGS:append:toolchain-clang:libc-musl:powerpc64le = " -mlong-double-64" 40TUNE_CCARGS:append:toolchain-clang:libc-musl:powerpc64le = " -mlong-double-64"
51TUNE_CCARGS:append:toolchain-clang:libc-musl:powerpc = " -mlong-double-64" 41TUNE_CCARGS:append:toolchain-clang:libc-musl:powerpc = " -mlong-double-64"
52# usrmerge workaround
53TUNE_CCARGS:append:toolchain-clang = "${@bb.utils.contains("DISTRO_FEATURES", "usrmerge", " --dyld-prefix=/usr", "", d)}"
54
55TUNE_CCARGS:append:toolchain-clang = " -Qunused-arguments"
56
57LDFLAGS:append:toolchain-clang:class-nativesdk:x86-64 = " -Wl,-dynamic-linker,${base_libdir}/ld-linux-x86-64.so.2"
58LDFLAGS:append:toolchain-clang:class-nativesdk:x86 = " -Wl,-dynamic-linker,${base_libdir}/ld-linux.so.2"
59LDFLAGS:append:toolchain-clang:class-nativesdk:aarch64 = " -Wl,-dynamic-linker,${base_libdir}/ld-linux-aarch64.so.1"
60 42
61LDFLAGS:toolchain-clang:class-nativesdk = "${BUILDSDK_LDFLAGS} \ 43# If lld is enabled globally then disable it for ppc32 where it causes random segfaults in Qemu usermode
62 -Wl,-rpath-link,${STAGING_LIBDIR}/.. \
63 -Wl,-rpath,${libdir}/.. "
64
65# Enable lld globally except for ppc32 where it causes random segfaults in Qemu usermode
66LDFLAGS:append:toolchain-clang:class-target = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', ' -fuse-ld=lld', '', d)}"
67LDFLAGS:append:toolchain-clang:class-nativesdk = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', ' -fuse-ld=lld', '', d)}"
68LDFLAGS:remove:toolchain-clang:powerpc = "-fuse-ld=lld" 44LDFLAGS:remove:toolchain-clang:powerpc = "-fuse-ld=lld"
45LDFLAGS:append:toolchain-clang:powerpc = " -fuse-ld=bfd"
69 46
70# Remove gcc specific -fcanon-prefix-map option, added in gcc-13+
71# clang does not support it yet
72DEBUG_PREFIX_MAP:remove:toolchain-clang = "-fcanon-prefix-map"
73
74# choose between 'gnu' 'llvm'
75TC_CXX_RUNTIME ??= "gnu"
76# Using gcc or llvm runtime is only available when using clang for compiler 47# Using gcc or llvm runtime is only available when using clang for compiler
77#TC_CXX_RUNTIME:toolchain-gcc = "gnu" 48#TC_CXX_RUNTIME:toolchain-gcc = "gnu"
78TC_CXX_RUNTIME:armeb = "gnu" 49TC_CXX_RUNTIME:armeb = "gnu"
@@ -97,44 +68,6 @@ YOCTO_ALTERNATE_LIBDIR:toolchain-clang:class-target = "/${BASELIB}"
97#DEPENDS:append:toolchain-clang:class-target = " clang-cross-${TARGET_ARCH} " 68#DEPENDS:append:toolchain-clang:class-target = " clang-cross-${TARGET_ARCH} "
98#DEPENDS:remove:toolchain-clang:allarch = "clang-cross-${TARGET_ARCH}" 69#DEPENDS:remove:toolchain-clang:allarch = "clang-cross-${TARGET_ARCH}"
99 70
100def clang_base_deps(d):
101 if not d.getVar('INHIBIT_DEFAULT_DEPS', False):
102 if not oe.utils.inherits(d, 'allarch') :
103 ret = " ${MLPREFIX}clang-cross-${TARGET_ARCH} virtual/libc "
104 if (d.getVar('TC_CXX_RUNTIME').find('android') != -1):
105 ret += " libcxx"
106 return ret
107 if (d.getVar('TC_CXX_RUNTIME').find('llvm') != -1):
108 ret += " compiler-rt"
109 elif (d.getVar('COMPILER_RT').find('-rtlib=compiler-rt') != -1):
110 ret += " compiler-rt "
111 else:
112 ret += " libgcc "
113 if (d.getVar('TC_CXX_RUNTIME').find('llvm') != -1):
114 ret += " libcxx"
115 elif (d.getVar('COMPILER_RT').find('--unwindlib=libunwind') != -1):
116 ret += " libcxx "
117 elif (d.getVar('LIBCPLUSPLUS').find('-stdlib=libc++') != -1):
118 ret += " libcxx "
119 else:
120 ret += " virtual/${MLPREFIX}compilerlibs "
121 return ret
122 return ""
123
124BASE_DEFAULT_DEPS:append:class-target:toolchain-clang:class-target = " ${@clang_base_deps(d)}"
125BASE_DEFAULT_DEPS:append:class-native:runtime-llvm = " libcxx-native compiler-rt-native"
126BASE_DEFAULT_DEPS:append:class-nativesdk:runtime-llvm = " clang-native nativesdk-libcxx nativesdk-compiler-rt"
127
128# do_populate_sysroot needs STRIP
129POPULATESYSROOTDEPS:toolchain-clang:class-target = "${MLPREFIX}clang-cross-${TARGET_ARCH}:do_populate_sysroot"
130
131cmake_do_generate_toolchain_file:append:toolchain-clang () {
132 cat >> ${WORKDIR}/toolchain.cmake <<EOF
133set( CMAKE_CLANG_TIDY ${HOST_PREFIX}clang-tidy )
134EOF
135 sed -i 's/ -mmusl / /g' ${WORKDIR}/toolchain.cmake
136}
137
138# dump recipes which still use gcc 71# dump recipes which still use gcc
139#python __anonymous() { 72#python __anonymous() {
140# toolchain = d.getVar("TOOLCHAIN") 73# toolchain = d.getVar("TOOLCHAIN")