Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add back older clang versions: 15, 16 and 17 (master) #990

Closed
wants to merge 26 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
081ea1b
clang15, et al: Forward port CLANG 15.0.7 from mickledore
zboszor Aug 1, 2024
c120bba
spirv-llvm-translator-llvm15: Forward port version 15.0.7 from mickle…
zboszor Aug 1, 2024
08ed431
libclc15: Use spirv-llvm-translator-llvm15
zboszor Aug 3, 2024
0a57255
classes/clang15{,-native}.bbclass: Add modified classes to use clang15
zboszor Aug 1, 2024
cb01f34
conf/layer.conf: Announce LLVM15VERSION for recipes
zboszor Aug 1, 2024
280a439
clang15: Drop crosssdk suffix from virtual binutils provides to match…
zboszor Aug 3, 2024
d9eeb06
clang15: Apply libunwind.pc.in and llvm-config via a patch
zboszor Aug 1, 2024
8d07587
clang15.bbclass: Stage along with gcc toolchain
zboszor Aug 4, 2024
5f6d599
clang15.bbclass: Use +nocrypto with -mcpu for rpi3/rpi4
zboszor Aug 4, 2024
37b9975
clang15.bbclass: Do not lose TUNE_CCARGS_MARCH_OPTS when rewriting bi…
zboszor Aug 4, 2024
6615e68
clang15.bbclass: remove mcpu option with qualifiers for the octeontx2…
zboszor Aug 4, 2024
a59fe1e
clang16, et al: Revive CLANG 16 recipe
zboszor Aug 3, 2024
639b355
conf/layer.conf: Announce LLVM16VERSION for recipes
zboszor Aug 3, 2024
3e7bb6b
spirv-llvm-translator-llvm16: Revive spirv-llvm-translator 16.x
zboszor Aug 3, 2024
d55e47d
libclc16: Use spirv-llvm-translator-llvm16
zboszor Aug 3, 2024
afc1c9b
classes/clang16{,-native}.bbclass: Add modified classes to use clang16
zboszor Aug 4, 2024
2d0668c
clang16.bbclass: Use +nocrypto with -mcpu for rpi3/rpi4
zboszor Aug 4, 2024
6dd151a
clang16.bbclass: Do not lose TUNE_CCARGS_MARCH_OPTS when rewriting bi…
zboszor Aug 4, 2024
3f1c321
clang16.bbclass: remove mcpu option with qualifiers for the octeontx2…
zboszor Aug 4, 2024
4a17ae5
clang16: Apply libunwind.pc.in and llvm-config via a patch
zboszor Aug 5, 2024
2c2a1ef
clang15: Replace RUNTIME with TC_CXX_RUNTIME
zboszor Aug 12, 2024
a966a22
clang16: Replace RUNTIME with TC_CXX_RUNTIME
zboszor Aug 12, 2024
7263a41
clang17, et al: Revive CLANG 17.0.6
zboszor Aug 12, 2024
bfc8267
conf/layer.conf: Announce LLVM17VERSION for recipes
zboszor Aug 12, 2024
509e45e
clang17[-native].bbclass: Add new classes
zboszor Aug 12, 2024
3321ec7
spirv-llvm-translator-llvm17: New recipe variant to build with CLANG 17
zboszor Aug 12, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions classes/clang15-native.bbclass
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# inherit this class if you would like to use clang 15 to compile the native
# version of your recipes instead of system compiler ( which is normally gcc )
# on build machines
# to use it add
#
# inherit clang15-native
#
# to the concerned recipe via a bbappend or directly to recipe file
#
DEPENDS:append:runtime-llvm = " clang15-native compiler-rt15-native libcxx15-initial-native"
# Use libcxx headers for native parts
CXXFLAGS:append:runtime-llvm = " -stdlib=libc++"
BUILD_CXXFLAGS:append:runtime-llvm = " -isysroot=${STAGING_DIR_NATIVE} -stdlib=libc++"
# Use libgcc for native parts
LDFLAGS:append:runtime-llvm = " -stdlib=libc++ -rtlib=libgcc -unwindlib=libgcc"
BUILD_LDFLAGS:append:runtime-llvm = " -stdlib=libc++ -rtlib=libgcc -unwindlib=libgcc"
BUILD_CC:runtime-llvm = "${CCACHE}clang -isysroot=${STAGING_DIR_NATIVE}"
BUILD_CXX:runtime-llvm = "${CCACHE}clang++ -isysroot=${STAGING_DIR_NATIVE}"
BUILD_CPP:runtime-llvm = "${CCACHE}clang -isysroot=${STAGING_DIR_NATIVE} -E"
BUILD_CCLD:runtime-llvm = "${CCACHE}clang"
BUILD_RANLIB:runtime-llvm = "llvm-ranlib"
BUILD_AR:runtime-llvm = "llvm-ar"
BUILD_NM:runtime-llvm = "llvm-nm"
171 changes: 171 additions & 0 deletions classes/clang15.bbclass
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
# Add the necessary override
CCACHE_COMPILERCHECK:toolchain-clang15 ?= "%compiler% -v"
HOST_CC_ARCH:prepend:toolchain-clang15 = "-target ${HOST_SYS} "
CC:toolchain-clang15 = "${CCACHE}${HOST_PREFIX}clang ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}"
CXX:toolchain-clang15 = "${CCACHE}${HOST_PREFIX}clang++ ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}"
CPP:toolchain-clang15 = "${CCACHE}${HOST_PREFIX}clang ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS} -E"
CCLD:toolchain-clang15 = "${CCACHE}${HOST_PREFIX}clang ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}"
RANLIB:toolchain-clang15 = "${HOST_PREFIX}llvm-ranlib"
AR:toolchain-clang15 = "${HOST_PREFIX}llvm-ar"
NM:toolchain-clang15 = "${HOST_PREFIX}llvm-nm"
OBJDUMP:toolchain-clang15 = "${HOST_PREFIX}llvm-objdump"
OBJCOPY:toolchain-clang15 = "${HOST_PREFIX}llvm-objcopy"
STRIP:riscv64:toolchain-clang15 = "${HOST_PREFIX}llvm-strip"
STRIP:riscv32:toolchain-clang15 = "${HOST_PREFIX}llvm-strip"
STRINGS:toolchain-clang15 = "${HOST_PREFIX}llvm-strings"
READELF:toolchain-clang15 = "${HOST_PREFIX}llvm-readelf"

LTO:toolchain-clang15 = "${@bb.utils.contains('DISTRO_FEATURES', 'thin-lto', '-flto=thin', '-flto -fuse-ld=lld', d)}"

COMPILER_RT ??= ""
COMPILER_RT:class-native = "-rtlib=libgcc ${UNWINDLIB}"
COMPILER_RT:armeb = "-rtlib=libgcc ${UNWINDLIB}"
COMPILER_RT:libc-klibc = "-rtlib=libgcc ${UNWINDLIB}"

UNWINDLIB ??= ""
UNWINDLIB:class-native = "--unwindlib=libgcc"
UNWINDLIB:armeb = "--unwindlib=libgcc"
UNWINDLIB_libc-klibc = "--unwindlib=libgcc"

LIBCPLUSPLUS ??= ""
LIBCPLUSPLUS:armv5 = "-stdlib=libstdc++"

CXXFLAGS:append:toolchain-clang15 = " ${LIBCPLUSPLUS}"
LDFLAGS:append:toolchain-clang15 = " ${COMPILER_RT} ${LIBCPLUSPLUS}"

TUNE_CCARGS:remove:toolchain-clang15 = "-meb"
TUNE_CCARGS:remove:toolchain-clang15 = "-mel"
TUNE_CCARGS:append:toolchain-clang15 = "${@bb.utils.contains("TUNE_FEATURES", "bigendian", " -mbig-endian", " -mlittle-endian", d)}"

# Clang does not yet support big.LITTLE performance tunes, so use the LITTLE for tunes
TUNE_CCARGS:remove:toolchain-clang15 = "\
-mcpu=cortex-a57.cortex-a53${TUNE_CCARGS_MARCH_OPTS} \
-mcpu=cortex-a72.cortex-a53${TUNE_CCARGS_MARCH_OPTS} \
-mcpu=cortex-a15.cortex-a7${TUNE_CCARGS_MARCH_OPTS} \
-mcpu=cortex-a17.cortex-a7${TUNE_CCARGS_MARCH_OPTS} \
-mcpu=cortex-a72.cortex-a35${TUNE_CCARGS_MARCH_OPTS} \
-mcpu=cortex-a73.cortex-a53${TUNE_CCARGS_MARCH_OPTS} \
-mcpu=cortex-a75.cortex-a55${TUNE_CCARGS_MARCH_OPTS} \
-mcpu=cortex-a76.cortex-a55${TUNE_CCARGS_MARCH_OPTS}"
TUNE_CCARGS:append:toolchain-clang15 = "${@bb.utils.contains_any("TUNE_FEATURES", "cortexa72-cortexa53 cortexa57-cortexa53 cortexa73-cortexa53", " -mcpu=cortex-a53${TUNE_CCARGS_MARCH_OPTS}", "", d)}"
TUNE_CCARGS:append:toolchain-clang15 = "${@bb.utils.contains_any("TUNE_FEATURES", "cortexa15-cortexa7 cortexa17-cortexa7", " -mcpu=cortex-a7${TUNE_CCARGS_MARCH_OPTS}", "", d)}"
TUNE_CCARGS:append:toolchain-clang15 = "${@bb.utils.contains_any("TUNE_FEATURES", "cortexa72-cortexa35", " -mcpu=cortex-a35${TUNE_CCARGS_MARCH_OPTS}", "", d)}"
TUNE_CCARGS:append:toolchain-clang15 = "${@bb.utils.contains_any("TUNE_FEATURES", "cortexa75-cortexa55 cortexa76-cortexa55", " -mcpu=cortex-a55${TUNE_CCARGS_MARCH_OPTS}", "", d)}"

# Workaround for https://github.com/llvm/llvm-project/issues/85699
# needed for 64bit rpi3/rpi4 machines
TUNE_CCARGS_MARCH_OPTS:append:toolchain-clang15 = "${@bb.utils.contains_any("DEFAULTTUNE", "cortexa72 cortexa53", "+nocrypto", "", d)}"

# Clang does not support octeontx2 processor
TUNE_CCARGS:remove:toolchain-clang15 = "-mcpu=octeontx2${TUNE_CCARGS_MARCH_OPTS}"

# Reconcile some ppc anamolies
TUNE_CCARGS:remove:toolchain-clang15:powerpc = "-mhard-float -mno-spe"
TUNE_CCARGS:append:toolchain-clang15:libc-musl:powerpc64 = " -mlong-double-64"
TUNE_CCARGS:append:toolchain-clang15:libc-musl:powerpc64le = " -mlong-double-64"
TUNE_CCARGS:append:toolchain-clang15:libc-musl:powerpc = " -mlong-double-64"
# usrmerge workaround
TUNE_CCARGS:append:toolchain-clang15 = "${@bb.utils.contains("DISTRO_FEATURES", "usrmerge", " --dyld-prefix=/usr", "", d)}"

TUNE_CCARGS:append:toolchain-clang15 = " -Qunused-arguments"

LDFLAGS:append:toolchain-clang15:class-nativesdk:x86-64 = " -Wl,-dynamic-linker,${base_libdir}/ld-linux-x86-64.so.2"
LDFLAGS:append:toolchain-clang15:class-nativesdk:x86 = " -Wl,-dynamic-linker,${base_libdir}/ld-linux.so.2"
LDFLAGS:append:toolchain-clang15:class-nativesdk:aarch64 = " -Wl,-dynamic-linker,${base_libdir}/ld-linux-aarch64.so.1"

LDFLAGS:toolchain-clang15:class-nativesdk = "${BUILDSDK_LDFLAGS} \
-Wl,-rpath-link,${STAGING_LIBDIR}/.. \
-Wl,-rpath,${libdir}/.. "

# Enable lld globally"
LDFLAGS:append:toolchain-clang15 = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', ' -fuse-ld=lld', '', d)}"

# Remove gcc specific -fcanon-prefix-map option, added in gcc-13+
# clang does not support it yet
DEBUG_PREFIX_MAP:remove:toolchain-clang15 = "-fcanon-prefix-map"

# choose between 'gcc' 'clang' an empty '' can be used as well
TOOLCHAIN ??= "gcc"
# choose between 'gnu' 'llvm'
TC_CXX_RUNTIME ??= "gnu"
# Using gcc or llvm runtime is only available when using clang for compiler
#TC_CXX_RUNTIME:toolchain-gcc = "gnu"
TC_CXX_RUNTIME:armeb = "gnu"
TC_CXX_RUNTIME:armv5 = "gnu"

TOOLCHAIN:class-native = "gcc"
TOOLCHAIN:class-nativesdk = "gcc"
TOOLCHAIN:class-cross-canadian = "gcc"
TOOLCHAIN:class-crosssdk = "gcc"
TOOLCHAIN:class-cross = "gcc"

OVERRIDES =. "${@['', 'toolchain-${TOOLCHAIN}:']['${TOOLCHAIN}' != '']}"
OVERRIDES =. "${@['', 'runtime-${TC_CXX_RUNTIME}:']['${TC_CXX_RUNTIME}' != '']}"
OVERRIDES[vardepsexclude] += "TOOLCHAIN TC_CXX_RUNTIME"

YOCTO_ALTERNATE_EXE_PATH:toolchain-clang15:class-target = "${STAGING_BINDIR}/llvm-config"
YOCTO_ALTERNATE_LIBDIR:toolchain-clang15:class-target = "/${BASELIB}"

#YOCTO_ALTERNATE_EXE_PATH:toolchain-clang15:class-target[export] = "1"
#YOCTO_ALTERNATE_LIBDIR:toolchain-clang15:class-target[export] = "1"

#DEPENDS:append:toolchain-clang15:class-target = " clang15-cross-${TARGET_ARCH} "
#DEPENDS:remove:toolchain-clang15:allarch = "clang15-cross-${TARGET_ARCH}"

def clang_base_deps(d):
if not d.getVar('INHIBIT_DEFAULT_DEPS', False):
if not oe.utils.inherits(d, 'allarch') :
ret = " ${MLPREFIX}clang15-cross-${TARGET_ARCH} virtual/libc "
if (d.getVar('TC_CXX_RUNTIME').find('android') != -1):
ret += " libcxx15-initial"
return ret
if (d.getVar('TC_CXX_RUNTIME').find('llvm') != -1):
ret += " compiler-rt15"
elif (d.getVar('COMPILER_RT').find('-rtlib=compiler-rt') != -1):
ret += " compiler-rt15 "
else:
ret += " libgcc "
if (d.getVar('TC_CXX_RUNTIME').find('llvm') != -1):
ret += " libcxx15-initial"
elif (d.getVar('COMPILER_RT').find('--unwindlib=libunwind') != -1):
ret += " libcxx15-initial "
elif (d.getVar('LIBCPLUSPLUS').find('-stdlib=libc++') != -1):
ret += " libcxx15-initial "
else:
ret += " virtual/${TARGET_PREFIX}compilerlibs "
return ret
return ""

BASE_DEFAULT_DEPS:append:class-target:toolchain-clang15:class-target = " ${@clang_base_deps(d)}"
BASE_DEFAULT_DEPS:append:class-native:toolchain-clang15:runtime-llvm = " libcxx15-initial-native compiler-rt15-native"
BASE_DEFAULT_DEPS:append:class-nativesdk:toolchain-clang15:runtime-llvm = " clang15-native nativesdk-libcxx15-initial nativesdk-compiler-rt15"

# do_populate_sysroot needs STRIP
POPULATESYSROOTDEPS:toolchain-clang15:class-target = "${MLPREFIX}clang15-cross-${TARGET_ARCH}:do_populate_sysroot"

cmake_do_generate_toolchain_file:append:toolchain-clang15 () {
cat >> ${WORKDIR}/toolchain.cmake <<EOF
set( CMAKE_CLANG_TIDY ${HOST_PREFIX}clang-tidy )
EOF
sed -i 's/ -mmusl / /g' ${WORKDIR}/toolchain.cmake
}

RECIPESYSROOTFUNCS = ""
RECIPESYSROOTFUNCS:toolchain-clang15 = "recipe_sysroot_check_ld_is_lld"

recipe_sysroot_check_ld_is_lld () {
if ${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', 'true', 'false', d)} && \
[ -e ${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}ld.lld ]; then
ln -srf ${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}ld.lld ${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}ld
fi
}
do_prepare_recipe_sysroot[postfuncs] += "${RECIPESYSROOTFUNCS}"
#
# dump recipes which still use gcc
#python __anonymous() {
# toolchain = d.getVar("TOOLCHAIN")
# if not toolchain or toolchain == "clang" or 'class-target' not in d.getVar('OVERRIDES').split(':'):
# return
# pkgn = d.getVar("PN")
# bb.warn("%s - %s" % (pkgn, toolchain))
#}
23 changes: 23 additions & 0 deletions classes/clang16-native.bbclass
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# inherit this class if you would like to use clang 16 to compile the native
# version of your recipes instead of system compiler ( which is normally gcc )
# on build machines
# to use it add
#
# inherit clang16-native
#
# to the concerned recipe via a bbappend or directly to recipe file
#
DEPENDS:append:runtime-llvm = " clang16-native compiler-rt16-native libcxx16-initial-native"
# Use libcxx headers for native parts
CXXFLAGS:append:runtime-llvm = " -stdlib=libc++"
BUILD_CXXFLAGS:append:runtime-llvm = " -isysroot=${STAGING_DIR_NATIVE} -stdlib=libc++"
# Use libgcc for native parts
LDFLAGS:append:runtime-llvm = " -stdlib=libc++ -rtlib=libgcc -unwindlib=libgcc"
BUILD_LDFLAGS:append:runtime-llvm = " -stdlib=libc++ -rtlib=libgcc -unwindlib=libgcc"
BUILD_CC:runtime-llvm = "${CCACHE}clang -isysroot=${STAGING_DIR_NATIVE}"
BUILD_CXX:runtime-llvm = "${CCACHE}clang++ -isysroot=${STAGING_DIR_NATIVE}"
BUILD_CPP:runtime-llvm = "${CCACHE}clang -isysroot=${STAGING_DIR_NATIVE} -E"
BUILD_CCLD:runtime-llvm = "${CCACHE}clang"
BUILD_RANLIB:runtime-llvm = "llvm-ranlib"
BUILD_AR:runtime-llvm = "llvm-ar"
BUILD_NM:runtime-llvm = "llvm-nm"
171 changes: 171 additions & 0 deletions classes/clang16.bbclass
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
# Add the necessary override
CCACHE_COMPILERCHECK:toolchain-clang16 ?= "%compiler% -v"
HOST_CC_ARCH:prepend:toolchain-clang16 = "-target ${HOST_SYS} "
CC:toolchain-clang16 = "${CCACHE}${HOST_PREFIX}clang ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}"
CXX:toolchain-clang16 = "${CCACHE}${HOST_PREFIX}clang++ ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}"
CPP:toolchain-clang16 = "${CCACHE}${HOST_PREFIX}clang ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS} -E"
CCLD:toolchain-clang16 = "${CCACHE}${HOST_PREFIX}clang ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}"
RANLIB:toolchain-clang16 = "${HOST_PREFIX}llvm-ranlib"
AR:toolchain-clang16 = "${HOST_PREFIX}llvm-ar"
NM:toolchain-clang16 = "${HOST_PREFIX}llvm-nm"
OBJDUMP:toolchain-clang16 = "${HOST_PREFIX}llvm-objdump"
OBJCOPY:toolchain-clang16 = "${HOST_PREFIX}llvm-objcopy"
STRIP:riscv64:toolchain-clang16 = "${HOST_PREFIX}llvm-strip"
STRIP:riscv32:toolchain-clang16 = "${HOST_PREFIX}llvm-strip"
STRINGS:toolchain-clang16 = "${HOST_PREFIX}llvm-strings"
READELF:toolchain-clang16 = "${HOST_PREFIX}llvm-readelf"

LTO:toolchain-clang16 = "${@bb.utils.contains('DISTRO_FEATURES', 'thin-lto', '-flto=thin', '-flto -fuse-ld=lld', d)}"

COMPILER_RT ??= ""
COMPILER_RT:class-native = "-rtlib=libgcc ${UNWINDLIB}"
COMPILER_RT:armeb = "-rtlib=libgcc ${UNWINDLIB}"
COMPILER_RT:libc-klibc = "-rtlib=libgcc ${UNWINDLIB}"

UNWINDLIB ??= ""
UNWINDLIB:class-native = "--unwindlib=libgcc"
UNWINDLIB:armeb = "--unwindlib=libgcc"
UNWINDLIB_libc-klibc = "--unwindlib=libgcc"

LIBCPLUSPLUS ??= ""
LIBCPLUSPLUS:armv5 = "-stdlib=libstdc++"

CXXFLAGS:append:toolchain-clang16 = " ${LIBCPLUSPLUS}"
LDFLAGS:append:toolchain-clang16 = " ${COMPILER_RT} ${LIBCPLUSPLUS}"

TUNE_CCARGS:remove:toolchain-clang16 = "-meb"
TUNE_CCARGS:remove:toolchain-clang16 = "-mel"
TUNE_CCARGS:append:toolchain-clang16 = "${@bb.utils.contains("TUNE_FEATURES", "bigendian", " -mbig-endian", " -mlittle-endian", d)}"

# Clang does not yet support big.LITTLE performance tunes, so use the LITTLE for tunes
TUNE_CCARGS:remove:toolchain-clang16 = "\
-mcpu=cortex-a57.cortex-a53${TUNE_CCARGS_MARCH_OPTS} \
-mcpu=cortex-a72.cortex-a53${TUNE_CCARGS_MARCH_OPTS} \
-mcpu=cortex-a15.cortex-a7${TUNE_CCARGS_MARCH_OPTS} \
-mcpu=cortex-a17.cortex-a7${TUNE_CCARGS_MARCH_OPTS} \
-mcpu=cortex-a72.cortex-a35${TUNE_CCARGS_MARCH_OPTS} \
-mcpu=cortex-a73.cortex-a53${TUNE_CCARGS_MARCH_OPTS} \
-mcpu=cortex-a75.cortex-a55${TUNE_CCARGS_MARCH_OPTS} \
-mcpu=cortex-a76.cortex-a55${TUNE_CCARGS_MARCH_OPTS}"
TUNE_CCARGS:append:toolchain-clang16 = "${@bb.utils.contains_any("TUNE_FEATURES", "cortexa72-cortexa53 cortexa57-cortexa53 cortexa73-cortexa53", " -mcpu=cortex-a53${TUNE_CCARGS_MARCH_OPTS}", "", d)}"
TUNE_CCARGS:append:toolchain-clang16 = "${@bb.utils.contains_any("TUNE_FEATURES", "cortexa15-cortexa7 cortexa17-cortexa7", " -mcpu=cortex-a7${TUNE_CCARGS_MARCH_OPTS}", "", d)}"
TUNE_CCARGS:append:toolchain-clang16 = "${@bb.utils.contains_any("TUNE_FEATURES", "cortexa72-cortexa35", " -mcpu=cortex-a35${TUNE_CCARGS_MARCH_OPTS}", "", d)}"
TUNE_CCARGS:append:toolchain-clang16 = "${@bb.utils.contains_any("TUNE_FEATURES", "cortexa75-cortexa55 cortexa76-cortexa55", " -mcpu=cortex-a55${TUNE_CCARGS_MARCH_OPTS}", "", d)}"

# Workaround for https://github.com/llvm/llvm-project/issues/85699
# needed for 64bit rpi3/rpi4 machines
TUNE_CCARGS_MARCH_OPTS:append:toolchain-clang16 = "${@bb.utils.contains_any("DEFAULTTUNE", "cortexa72 cortexa53", "+nocrypto", "", d)}"

# Clang does not support octeontx2 processor
TUNE_CCARGS:remove:toolchain-clang16 = "-mcpu=octeontx2${TUNE_CCARGS_MARCH_OPTS}"

# Reconcile some ppc anamolies
TUNE_CCARGS:remove:toolchain-clang16:powerpc = "-mhard-float -mno-spe"
TUNE_CCARGS:append:toolchain-clang16:libc-musl:powerpc64 = " -mlong-double-64"
TUNE_CCARGS:append:toolchain-clang16:libc-musl:powerpc64le = " -mlong-double-64"
TUNE_CCARGS:append:toolchain-clang16:libc-musl:powerpc = " -mlong-double-64"
# usrmerge workaround
TUNE_CCARGS:append:toolchain-clang16 = "${@bb.utils.contains("DISTRO_FEATURES", "usrmerge", " --dyld-prefix=/usr", "", d)}"

TUNE_CCARGS:append:toolchain-clang16 = " -Qunused-arguments"

LDFLAGS:append:toolchain-clang16:class-nativesdk:x86-64 = " -Wl,-dynamic-linker,${base_libdir}/ld-linux-x86-64.so.2"
LDFLAGS:append:toolchain-clang16:class-nativesdk:x86 = " -Wl,-dynamic-linker,${base_libdir}/ld-linux.so.2"
LDFLAGS:append:toolchain-clang16:class-nativesdk:aarch64 = " -Wl,-dynamic-linker,${base_libdir}/ld-linux-aarch64.so.1"

LDFLAGS:toolchain-clang16:class-nativesdk = "${BUILDSDK_LDFLAGS} \
-Wl,-rpath-link,${STAGING_LIBDIR}/.. \
-Wl,-rpath,${libdir}/.. "

# Enable lld globally"
LDFLAGS:append:toolchain-clang16 = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', ' -fuse-ld=lld', '', d)}"

# Remove gcc specific -fcanon-prefix-map option, added in gcc-13+
# clang does not support it yet
DEBUG_PREFIX_MAP:remove:toolchain-clang16 = "-fcanon-prefix-map"

# choose between 'gcc' 'clang' an empty '' can be used as well
TOOLCHAIN ??= "gcc"
# choose between 'gnu' 'llvm'
TC_CXX_RUNTIME ??= "gnu"
# Using gcc or llvm runtime is only available when using clang for compiler
#TC_CXX_RUNTIME:toolchain-gcc = "gnu"
TC_CXX_RUNTIME:armeb = "gnu"
TC_CXX_RUNTIME:armv5 = "gnu"

TOOLCHAIN:class-native = "gcc"
TOOLCHAIN:class-nativesdk = "gcc"
TOOLCHAIN:class-cross-canadian = "gcc"
TOOLCHAIN:class-crosssdk = "gcc"
TOOLCHAIN:class-cross = "gcc"

OVERRIDES =. "${@['', 'toolchain-${TOOLCHAIN}:']['${TOOLCHAIN}' != '']}"
OVERRIDES =. "${@['', 'runtime-${TC_CXX_RUNTIME}:']['${TC_CXX_RUNTIME}' != '']}"
OVERRIDES[vardepsexclude] += "TOOLCHAIN TC_CXX_RUNTIME"

YOCTO_ALTERNATE_EXE_PATH:toolchain-clang16:class-target = "${STAGING_BINDIR}/llvm-config"
YOCTO_ALTERNATE_LIBDIR:toolchain-clang16:class-target = "/${BASELIB}"

#YOCTO_ALTERNATE_EXE_PATH:toolchain-clang16:class-target[export] = "1"
#YOCTO_ALTERNATE_LIBDIR:toolchain-clang16:class-target[export] = "1"

#DEPENDS:append:toolchain-clang16:class-target = " clang16-cross-${TARGET_ARCH} "
#DEPENDS:remove:toolchain-clang16:allarch = "clang16-cross-${TARGET_ARCH}"

def clang_base_deps(d):
if not d.getVar('INHIBIT_DEFAULT_DEPS', False):
if not oe.utils.inherits(d, 'allarch') :
ret = " ${MLPREFIX}clang16-cross-${TARGET_ARCH} virtual/libc "
if (d.getVar('TC_CXX_RUNTIME').find('android') != -1):
ret += " libcxx16-initial"
return ret
if (d.getVar('TC_CXX_RUNTIME').find('llvm') != -1):
ret += " compiler-rt16"
elif (d.getVar('COMPILER_RT').find('-rtlib=compiler-rt') != -1):
ret += " compiler-rt16 "
else:
ret += " libgcc "
if (d.getVar('TC_CXX_RUNTIME').find('llvm') != -1):
ret += " libcxx16-initial"
elif (d.getVar('COMPILER_RT').find('--unwindlib=libunwind') != -1):
ret += " libcxx16-initial "
elif (d.getVar('LIBCPLUSPLUS').find('-stdlib=libc++') != -1):
ret += " libcxx16-initial "
else:
ret += " virtual/${TARGET_PREFIX}compilerlibs "
return ret
return ""

BASE_DEFAULT_DEPS:append:class-target:toolchain-clang16:class-target = " ${@clang_base_deps(d)}"
BASE_DEFAULT_DEPS:append:class-native:toolchain-clang16:runtime-llvm = " libcxx16-initial-native compiler-rt16-native"
BASE_DEFAULT_DEPS:append:class-nativesdk:toolchain-clang16:runtime-llvm = " clang16-native nativesdk-libcxx16-initial nativesdk-compiler-rt16"

# do_populate_sysroot needs STRIP
POPULATESYSROOTDEPS:toolchain-clang16:class-target = "${MLPREFIX}clang16-cross-${TARGET_ARCH}:do_populate_sysroot"

cmake_do_generate_toolchain_file:append:toolchain-clang16 () {
cat >> ${WORKDIR}/toolchain.cmake <<EOF
set( CMAKE_CLANG_TIDY ${HOST_PREFIX}clang-tidy )
EOF
sed -i 's/ -mmusl / /g' ${WORKDIR}/toolchain.cmake
}

RECIPESYSROOTFUNCS = ""
RECIPESYSROOTFUNCS:toolchain-clang16 = "recipe_sysroot_check_ld_is_lld"

recipe_sysroot_check_ld_is_lld () {
if ${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', 'true', 'false', d)} && \
[ -e ${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}ld.lld ]; then
ln -srf ${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}ld.lld ${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}ld
fi
}
do_prepare_recipe_sysroot[postfuncs] += "${RECIPESYSROOTFUNCS}"
#
# dump recipes which still use gcc
#python __anonymous() {
# toolchain = d.getVar("TOOLCHAIN")
# if not toolchain or toolchain == "clang" or 'class-target' not in d.getVar('OVERRIDES').split(':'):
# return
# pkgn = d.getVar("PN")
# bb.warn("%s - %s" % (pkgn, toolchain))
#}
Loading
Loading