diff options
Diffstat (limited to 'classes/clang-legacy.bbclass')
| -rw-r--r-- | classes/clang-legacy.bbclass | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/classes/clang-legacy.bbclass b/classes/clang-legacy.bbclass new file mode 100644 index 0000000..450500d --- /dev/null +++ b/classes/clang-legacy.bbclass | |||
| @@ -0,0 +1,162 @@ | |||
| 1 | # Add the necessary override | ||
| 2 | CCACHE_COMPILERCHECK:toolchain-clang ?= "%compiler% -v" | ||
| 3 | HOST_CC_ARCH:prepend:toolchain-clang:class-target = "-target ${HOST_SYS} " | ||
| 4 | HOST_CC_ARCH:prepend:toolchain-clang:class-nativesdk = "-target ${HOST_SYS} " | ||
| 5 | CC:toolchain-clang = "${CCACHE}${HOST_PREFIX}clang ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" | ||
| 6 | CXX:toolchain-clang = "${CCACHE}${HOST_PREFIX}clang++ ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" | ||
| 7 | CPP:toolchain-clang = "${CCACHE}${HOST_PREFIX}clang ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS} -E" | ||
| 8 | CCLD:toolchain-clang = "${CCACHE}${HOST_PREFIX}clang ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" | ||
| 9 | RANLIB:toolchain-clang = "${HOST_PREFIX}llvm-ranlib" | ||
| 10 | AR:toolchain-clang = "${HOST_PREFIX}llvm-ar" | ||
| 11 | NM:toolchain-clang = "${HOST_PREFIX}llvm-nm" | ||
| 12 | OBJDUMP:toolchain-clang = "${HOST_PREFIX}llvm-objdump" | ||
| 13 | OBJCOPY:toolchain-clang = "${HOST_PREFIX}llvm-objcopy" | ||
| 14 | STRIP:toolchain-clang = "${HOST_PREFIX}llvm-strip" | ||
| 15 | STRINGS:toolchain-clang = "${HOST_PREFIX}llvm-strings" | ||
| 16 | READELF:toolchain-clang = "${HOST_PREFIX}llvm-readelf" | ||
| 17 | LD:toolchain-clang = "${@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)}" | ||
| 18 | |||
| 19 | LTO:toolchain-clang = "${@bb.utils.contains('DISTRO_FEATURES', 'thin-lto', '-flto=thin', '-flto -fuse-ld=lld', d)}" | ||
| 20 | |||
| 21 | COMPILER_RT ??= "" | ||
| 22 | COMPILER_RT:class-native = "-rtlib=libgcc ${UNWINDLIB}" | ||
| 23 | COMPILER_RT:armeb = "-rtlib=libgcc ${UNWINDLIB}" | ||
| 24 | COMPILER_RT:libc-klibc = "-rtlib=libgcc ${UNWINDLIB}" | ||
| 25 | |||
| 26 | UNWINDLIB ??= "" | ||
| 27 | UNWINDLIB:class-native = "--unwindlib=libgcc" | ||
| 28 | UNWINDLIB:armeb = "--unwindlib=libgcc" | ||
| 29 | UNWINDLIB_libc-klibc = "--unwindlib=libgcc" | ||
| 30 | |||
| 31 | LIBCPLUSPLUS ??= "" | ||
| 32 | LIBCPLUSPLUS:armv5 = "-stdlib=libstdc++" | ||
| 33 | |||
| 34 | CXXFLAGS:append:toolchain-clang = " ${LIBCPLUSPLUS}" | ||
| 35 | LDFLAGS:append:toolchain-clang = " ${COMPILER_RT} ${LIBCPLUSPLUS}" | ||
| 36 | |||
| 37 | TUNE_CCARGS:remove:toolchain-clang = "-meb" | ||
| 38 | TUNE_CCARGS:remove:toolchain-clang = "-mel" | ||
| 39 | TUNE_CCARGS:append:toolchain-clang = "${@bb.utils.contains("TUNE_FEATURES", "bigendian", " -mbig-endian", " -mlittle-endian", d)}" | ||
| 40 | |||
| 41 | # Clang does not yet support big.LITTLE performance tunes, so use the LITTLE for tunes | ||
| 42 | TUNE_CCARGS:remove:toolchain-clang = "\ | ||
| 43 | -mcpu=cortex-a57.cortex-a53${TUNE_CCARGS_MARCH_OPTS} \ | ||
| 44 | -mcpu=cortex-a72.cortex-a53${TUNE_CCARGS_MARCH_OPTS} \ | ||
| 45 | -mcpu=cortex-a15.cortex-a7${TUNE_CCARGS_MARCH_OPTS} \ | ||
| 46 | -mcpu=cortex-a17.cortex-a7${TUNE_CCARGS_MARCH_OPTS} \ | ||
| 47 | -mcpu=cortex-a72.cortex-a35${TUNE_CCARGS_MARCH_OPTS} \ | ||
| 48 | -mcpu=cortex-a73.cortex-a53${TUNE_CCARGS_MARCH_OPTS} \ | ||
| 49 | -mcpu=cortex-a75.cortex-a55${TUNE_CCARGS_MARCH_OPTS} \ | ||
| 50 | -mcpu=cortex-a76.cortex-a55${TUNE_CCARGS_MARCH_OPTS}" | ||
| 51 | TUNE_CCARGS:append:toolchain-clang = "${@bb.utils.contains_any("TUNE_FEATURES", "cortexa72-cortexa53 cortexa57-cortexa53 cortexa73-cortexa53", " -mcpu=cortex-a53${TUNE_CCARGS_MARCH_OPTS}", "", d)}" | ||
| 52 | TUNE_CCARGS:append:toolchain-clang = "${@bb.utils.contains_any("TUNE_FEATURES", "cortexa15-cortexa7 cortexa17-cortexa7", " -mcpu=cortex-a7${TUNE_CCARGS_MARCH_OPTS}", "", d)}" | ||
| 53 | TUNE_CCARGS:append:toolchain-clang = "${@bb.utils.contains_any("TUNE_FEATURES", "cortexa72-cortexa35", " -mcpu=cortex-a35${TUNE_CCARGS_MARCH_OPTS}", "", d)}" | ||
| 54 | TUNE_CCARGS:append:toolchain-clang = "${@bb.utils.contains_any("TUNE_FEATURES", "cortexa75-cortexa55 cortexa76-cortexa55", " -mcpu=cortex-a55${TUNE_CCARGS_MARCH_OPTS}", "", d)}" | ||
| 55 | |||
| 56 | # Workaround for https://github.com/llvm/llvm-project/issues/85699 | ||
| 57 | # needed for 64bit rpi3/rpi4 machines | ||
| 58 | TUNE_CCARGS_MARCH_OPTS:append:toolchain-clang = "${@bb.utils.contains_any("DEFAULTTUNE", "cortexa72 cortexa53", "+nocrypto", "", d)}" | ||
| 59 | |||
| 60 | # Clang does not support octeontx2 processor | ||
| 61 | TUNE_CCARGS:remove:toolchain-clang = "-mcpu=octeontx2${TUNE_CCARGS_MARCH_OPTS}" | ||
| 62 | |||
| 63 | # Reconcile some ppc anamolies | ||
| 64 | TUNE_CCARGS:remove:toolchain-clang:powerpc = "-mhard-float -mno-spe" | ||
| 65 | TUNE_CCARGS:append:toolchain-clang:libc-musl:powerpc64 = " -mlong-double-64" | ||
| 66 | TUNE_CCARGS:append:toolchain-clang:libc-musl:powerpc64le = " -mlong-double-64" | ||
| 67 | TUNE_CCARGS:append:toolchain-clang:libc-musl:powerpc = " -mlong-double-64" | ||
| 68 | # usrmerge workaround | ||
| 69 | TUNE_CCARGS:append:toolchain-clang = "${@bb.utils.contains("DISTRO_FEATURES", "usrmerge", " --dyld-prefix=/usr", "", d)}" | ||
| 70 | |||
| 71 | TUNE_CCARGS:append:toolchain-clang = " -Qunused-arguments" | ||
| 72 | |||
| 73 | LDFLAGS:append:toolchain-clang:class-nativesdk:x86-64 = " -Wl,-dynamic-linker,${base_libdir}/ld-linux-x86-64.so.2" | ||
| 74 | LDFLAGS:append:toolchain-clang:class-nativesdk:x86 = " -Wl,-dynamic-linker,${base_libdir}/ld-linux.so.2" | ||
| 75 | LDFLAGS:append:toolchain-clang:class-nativesdk:aarch64 = " -Wl,-dynamic-linker,${base_libdir}/ld-linux-aarch64.so.1" | ||
| 76 | |||
| 77 | LDFLAGS:toolchain-clang:class-nativesdk = "${BUILDSDK_LDFLAGS} \ | ||
| 78 | -Wl,-rpath-link,${STAGING_LIBDIR}/.. \ | ||
| 79 | -Wl,-rpath,${libdir}/.. " | ||
| 80 | |||
| 81 | # Enable lld globally except for ppc32 where it causes random segfaults in Qemu usermode | ||
| 82 | LDFLAGS:append:toolchain-clang = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', ' -fuse-ld=lld', '', d)}" | ||
| 83 | LDFLAGS:remove:toolchain-clang:powerpc = "-fuse-ld=lld" | ||
| 84 | |||
| 85 | # Remove gcc specific -fcanon-prefix-map option, added in gcc-13+ | ||
| 86 | # clang does not support it yet | ||
| 87 | DEBUG_PREFIX_MAP:remove:toolchain-clang = "-fcanon-prefix-map" | ||
| 88 | |||
| 89 | # choose between 'gcc' 'clang' an empty '' can be used as well | ||
| 90 | TOOLCHAIN ??= "gcc" | ||
| 91 | # choose between 'gnu' 'llvm' | ||
| 92 | TC_CXX_RUNTIME ??= "gnu" | ||
| 93 | # Using gcc or llvm runtime is only available when using clang for compiler | ||
| 94 | #TC_CXX_RUNTIME:toolchain-gcc = "gnu" | ||
| 95 | TC_CXX_RUNTIME:armeb = "gnu" | ||
| 96 | TC_CXX_RUNTIME:armv5 = "gnu" | ||
| 97 | |||
| 98 | TOOLCHAIN:class-native = "gcc" | ||
| 99 | TOOLCHAIN:class-nativesdk = "gcc" | ||
| 100 | TOOLCHAIN:class-cross-canadian = "gcc" | ||
| 101 | TOOLCHAIN:class-crosssdk = "gcc" | ||
| 102 | TOOLCHAIN:class-cross = "gcc" | ||
| 103 | |||
| 104 | OVERRIDES =. "${@['', 'toolchain-${TOOLCHAIN}:']['${TOOLCHAIN}' != '']}" | ||
| 105 | OVERRIDES =. "${@['', 'runtime-${TC_CXX_RUNTIME}:']['${TC_CXX_RUNTIME}' != '']}" | ||
| 106 | OVERRIDES[vardepsexclude] += "TOOLCHAIN TC_CXX_RUNTIME" | ||
| 107 | |||
| 108 | YOCTO_ALTERNATE_EXE_PATH:toolchain-clang:class-target = "${STAGING_BINDIR}/llvm-config" | ||
| 109 | YOCTO_ALTERNATE_LIBDIR:toolchain-clang:class-target = "/${BASELIB}" | ||
| 110 | |||
| 111 | #YOCTO_ALTERNATE_EXE_PATH:toolchain-clang:class-target[export] = "1" | ||
| 112 | #YOCTO_ALTERNATE_LIBDIR:toolchain-clang:class-target[export] = "1" | ||
| 113 | |||
| 114 | #DEPENDS:append:toolchain-clang:class-target = " clang-cross-${TARGET_ARCH} " | ||
| 115 | #DEPENDS:remove:toolchain-clang:allarch = "clang-cross-${TARGET_ARCH}" | ||
| 116 | |||
| 117 | def clang_base_deps(d): | ||
| 118 | if not d.getVar('INHIBIT_DEFAULT_DEPS', False): | ||
| 119 | if not oe.utils.inherits(d, 'allarch') : | ||
| 120 | ret = " ${MLPREFIX}clang-cross-${TARGET_ARCH} virtual/libc " | ||
| 121 | if (d.getVar('TC_CXX_RUNTIME').find('android') != -1): | ||
| 122 | ret += " libcxx" | ||
| 123 | return ret | ||
| 124 | if (d.getVar('TC_CXX_RUNTIME').find('llvm') != -1): | ||
| 125 | ret += " compiler-rt" | ||
| 126 | elif (d.getVar('COMPILER_RT').find('-rtlib=compiler-rt') != -1): | ||
| 127 | ret += " compiler-rt " | ||
| 128 | else: | ||
| 129 | ret += " libgcc " | ||
| 130 | if (d.getVar('TC_CXX_RUNTIME').find('llvm') != -1): | ||
| 131 | ret += " libcxx" | ||
| 132 | elif (d.getVar('COMPILER_RT').find('--unwindlib=libunwind') != -1): | ||
| 133 | ret += " libcxx " | ||
| 134 | elif (d.getVar('LIBCPLUSPLUS').find('-stdlib=libc++') != -1): | ||
| 135 | ret += " libcxx " | ||
| 136 | else: | ||
| 137 | ret += " virtual/${MLPREFIX}compilerlibs " | ||
| 138 | return ret | ||
| 139 | return "" | ||
| 140 | |||
| 141 | BASE_DEFAULT_DEPS:append:class-target:toolchain-clang:class-target = " ${@clang_base_deps(d)}" | ||
| 142 | BASE_DEFAULT_DEPS:append:class-native:toolchain-clang:runtime-llvm = " libcxx-native compiler-rt-native" | ||
| 143 | BASE_DEFAULT_DEPS:append:class-nativesdk:toolchain-clang:runtime-llvm = " clang-native nativesdk-libcxx nativesdk-compiler-rt" | ||
| 144 | |||
| 145 | # do_populate_sysroot needs STRIP | ||
| 146 | POPULATESYSROOTDEPS:toolchain-clang:class-target = "${MLPREFIX}clang-cross-${TARGET_ARCH}:do_populate_sysroot" | ||
| 147 | |||
| 148 | cmake_do_generate_toolchain_file:append:toolchain-clang () { | ||
| 149 | cat >> ${WORKDIR}/toolchain.cmake <<EOF | ||
| 150 | set( CMAKE_CLANG_TIDY ${HOST_PREFIX}clang-tidy ) | ||
| 151 | EOF | ||
| 152 | sed -i 's/ -mmusl / /g' ${WORKDIR}/toolchain.cmake | ||
| 153 | } | ||
| 154 | |||
| 155 | # dump recipes which still use gcc | ||
| 156 | #python __anonymous() { | ||
| 157 | # toolchain = d.getVar("TOOLCHAIN") | ||
| 158 | # if not toolchain or toolchain == "clang" or 'class-target' not in d.getVar('OVERRIDES').split(':'): | ||
| 159 | # return | ||
| 160 | # pkgn = d.getVar("PN") | ||
| 161 | # bb.warn("%s - %s" % (pkgn, toolchain)) | ||
| 162 | #} | ||
