Browse Source

clang: Upgrade to 16.0.5 version

Previously we are using bbappend for the clang recipes, however it is now
not applicable as there are changes for some directory structure in
llvm-project (Support/Triple.cpp to TargetParser/Triple.cpp). Hence,
clang 16.0.5 recipes are brought into meta-starfive instead.

Besides, for clang-native in clang_16.0.5, it is now not bootstrapped to be
aligned with our toolchain compilation steps. Our custom parameters are
currently separated with the bb file for easier maintanence going forward.

Co-authored by: Kai Zhe Mooi <kaizhe.mooi@starfivetech.com>
Signed-off-by: Jun Yuan Tan <junyuan.tan@starfivetech.com>
Jun Yuan Tan 8 months ago
parent
commit
004cc74d33
77 changed files with 3510 additions and 771 deletions
  1. 1 1
      conf/machine/starfive-jh8100.conf
  2. 36 0
      recipes-devtools/clang/clang-cross-canadian_16.0.5.bb
  3. 0 3
      recipes-devtools/clang/clang-cross-canadian_git.bbappend
  4. 35 0
      recipes-devtools/clang/clang-cross_16.0.5.bb
  5. 0 3
      recipes-devtools/clang/clang-cross_git.bbappend
  6. 34 0
      recipes-devtools/clang/clang-crosssdk_16.0.5.bb
  7. 0 3
      recipes-devtools/clang/clang-crosssdk_git.bbappend
  8. 27 0
      recipes-devtools/clang/clang.inc
  9. 11 20
      recipes-devtools/clang/clang/0001-libcxxabi-Find-libunwind-headers-when-LIBCXXABI_LIBU.patch
  10. 151 0
      recipes-devtools/clang/clang/0001-neon2rvv-support-type-convert-between-fixed-vector-a.patch
  11. 2 1
      recipes-devtools/clang/clang/0002-compiler-rt-support-a-new-embedded-linux-target.patch
  12. 1278 0
      recipes-devtools/clang/clang/0002-neon2rvv-Model-vxrm-in-LLVM-intrinsics-and-add-optim.patch
  13. 44 51
      recipes-devtools/clang/clang/0003-RISCV-Add-prefetch-instructions.patch
  14. 15 14
      recipes-devtools/clang/clang/0003-compiler-rt-Simplify-cross-compilation.-Don-t-use-na.patch
  15. 10 10
      recipes-devtools/clang/clang/0004-RISCV-Add-customer-cache-instructions.patch
  16. 32 30
      recipes-devtools/clang/clang/0004-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch
  17. 0 49
      recipes-devtools/clang/clang/0004-set-default-march-to-rv64imafcd_zba_zbb_zbc_zbs-and-.patch
  18. 5 5
      recipes-devtools/clang/clang/0005-RISCV-Add-multilib-v-b-support-for-baremetal-toolcha.patch
  19. 14 9
      recipes-devtools/clang/clang/0005-llvm-allow-env-override-of-exe-and-libdir-path.patch
  20. 0 75
      recipes-devtools/clang/clang/0005-support-b-letter-in-march-string.patch
  21. 7 7
      recipes-devtools/clang/clang/0006-RISCV-Change-baremetal-multilib-directory-name-to-al.patch
  22. 6 5
      recipes-devtools/clang/clang/0006-clang-driver-Check-sysroot-for-ldso-path.patch
  23. 5 5
      recipes-devtools/clang/clang/0007-Driver-Set-clang-default-dwarf-version-to-4.patch
  24. 4 3
      recipes-devtools/clang/clang/0007-clang-Driver-tools.cpp-Add-lssp_nonshared-on-musl.patch
  25. 0 33
      recipes-devtools/clang/clang/0007-set-clang-default-march-to-rv64gc.patch
  26. 60 0
      recipes-devtools/clang/clang/0008-RISCV-Support-b-letter-in-march-string.patch
  27. 4 3
      recipes-devtools/clang/clang/0008-clang-Prepend-trailing-to-sysroot.patch
  28. 38 0
      recipes-devtools/clang/clang/0009-RISCV-Align-default-march-with-dubhe-gcc-toolchain.patch
  29. 9 8
      recipes-devtools/clang/clang/0009-clang-Look-inside-the-target-sysroot-for-compiler-ru.patch
  30. 5 3
      recipes-devtools/clang/clang/0010-clang-Define-releative-gcc-installation-dir.patch
  31. 6 5
      recipes-devtools/clang/clang/0011-clang-Add-lpthread-and-ldl-along-with-lunwind-for-st.patch
  32. 7 6
      recipes-devtools/clang/clang/0012-Pass-PYTHON_EXECUTABLE-when-cross-compiling-for-nati.patch
  33. 3 2
      recipes-devtools/clang/clang/0013-Check-for-atomic-double-intrinsics.patch
  34. 7 7
      recipes-devtools/clang/clang/0014-libcxx-Add-compiler-runtime-library-to-link-step-for.patch
  35. 48 49
      recipes-devtools/clang/clang/0015-clang-llvm-cmake-Fix-configure-for-packages-using-fi.patch
  36. 6 5
      recipes-devtools/clang/clang/0016-clang-Fix-resource-dir-location-for-cross-toolchains.patch
  37. 7 6
      recipes-devtools/clang/clang/0017-clang-driver-Add-dyld-prefix-when-checking-sysroot-f.patch
  38. 7 44
      recipes-devtools/clang/clang/0018-clang-Use-python3-in-python-scripts.patch
  39. 4 4
      recipes-devtools/clang/clang/0019-For-x86_64-set-Yocto-based-GCC-install-search-path.patch
  40. 5 4
      recipes-devtools/clang/clang/0020-llvm-Do-not-use-find_library-for-ncurses.patch
  41. 8 8
      recipes-devtools/clang/clang/0021-llvm-Insert-anchor-for-adding-OE-distro-vendor-names.patch
  42. 1 1
      recipes-devtools/clang/clang/0022-compiler-rt-Do-not-use-backtrace-APIs-on-non-glibc-l.patch
  43. 0 36
      recipes-devtools/clang/clang/0022-compiler-rt-Use-mcr-based-barrier-on-armv6.patch
  44. 4 3
      recipes-devtools/clang/clang/0023-clang-Fix-x86-triple-for-non-debian-multiarch-linux-.patch
  45. 5 5
      recipes-devtools/clang/clang/0024-libunwind-Added-unw_backtrace-method.patch
  46. 3 3
      recipes-devtools/clang/clang/0025-clang-Do-not-use-install-relative-libc-headers.patch
  47. 0 28
      recipes-devtools/clang/clang/0025-compiler-rt-Link-scudo-with-SANITIZER_CXX_ABI_LIBRAR.patch
  48. 4 4
      recipes-devtools/clang/clang/0026-clang-Fix-how-driver-finds-GCC-installation-path-on-.patch
  49. 0 29
      recipes-devtools/clang/clang/0026-compiler-rt-Link-scudo-standalone-with-libatomic-on-.patch
  50. 11 11
      recipes-devtools/clang/clang/0027-Fix-lib-paths-for-OpenEmbedded-Host.patch
  51. 7 7
      recipes-devtools/clang/clang/0028-Correct-library-search-path-for-OpenEmbedded-Host.patch
  52. 0 46
      recipes-devtools/clang/clang/0028-Do-not-force-thumb-mode-directive.patch
  53. 2 2
      recipes-devtools/clang/clang/0029-lldb-Link-with-libatomic-on-x86.patch
  54. 3 3
      recipes-devtools/clang/clang/0030-clang-exclude-openembedded-distributions-from-settin.patch
  55. 30 15
      recipes-devtools/clang/clang/0031-compiler-rt-Enable-__int128-for-ppc32.patch
  56. 62 0
      recipes-devtools/clang/clang/0032-llvm-Do-not-use-cmake-infra-to-detect-libzstd.patch
  57. 53 0
      recipes-devtools/clang/clang/0033-build-Enable-64bit-off_t-on-32bit-glibc-systems.patch
  58. 36 0
      recipes-devtools/clang/clang/0034-compiler-rt-Undef-_TIME_BITS-along-with-_FILE_OFFSET.patch
  59. 44 0
      recipes-devtools/clang/clang/0035-compiler-rt-Fix-stat-struct-s-size-for-O32-ABI.patch
  60. 43 0
      recipes-devtools/clang/clang/0036-compiler-rt-Undef-_TIME_BITS-along-with-_FILE_OFFSET.patch
  61. 70 0
      recipes-devtools/clang/clang/0037-clang-Call-printName-to-get-name-of-Decl.patch
  62. 443 0
      recipes-devtools/clang/clang_16.0.5.bb
  63. 28 0
      recipes-devtools/clang/clang_16.0.5.bbappend
  64. 0 63
      recipes-devtools/clang/clang_git.bbappend
  65. 17 0
      recipes-devtools/clang/common-source.inc
  66. 60 0
      recipes-devtools/clang/common.inc
  67. 116 0
      recipes-devtools/clang/compiler-rt-sanitizers_16.0.5.bb
  68. 129 0
      recipes-devtools/clang/compiler-rt_16.0.5.bb
  69. 0 3
      recipes-devtools/clang/compiler-rt_git.bbappend
  70. 48 0
      recipes-devtools/clang/libclc_16.0.5.bb
  71. 115 0
      recipes-devtools/clang/libcxx_16.0.5.bb
  72. 0 4
      recipes-devtools/clang/libcxx_16.0.5.bbappend
  73. 10 0
      recipes-devtools/clang/llvm-project-source.bb
  74. 29 27
      recipes-devtools/clang/llvm-project-source.bbappend
  75. 96 0
      recipes-devtools/clang/llvm-project-source.inc
  76. 35 0
      recipes-devtools/clang/nativesdk-clang-glue.bb
  77. 65 0
      recipes-devtools/clang/openmp_16.0.5.bb

+ 1 - 1
conf/machine/starfive-jh8100.conf

@@ -23,7 +23,7 @@ SERIAL_CONSOLE = "115200 ttyS0"
 PREFERRED_PROVIDER_virtual/kernel = "linux-starfive-dev"
 PREFERRED_PROVIDER_virtual/kernel = "linux-starfive-dev"
 PREFERRED_PROVIDER_virtual/bootloader = "u-boot-starfive"
 PREFERRED_PROVIDER_virtual/bootloader = "u-boot-starfive"
 
 
-LLVMVERSION = "14.0.0"
+LLVMVERSION = "16.0.5"
 GLIBCVERSION = "2.36"
 GLIBCVERSION = "2.36"
 BINUVERSION = "2.39"
 BINUVERSION = "2.39"
 GCCVERSION = "12.2.0"
 GCCVERSION = "12.2.0"

+ 36 - 0
recipes-devtools/clang/clang-cross-canadian_16.0.5.bb

@@ -0,0 +1,36 @@
+# Copyright (C) 2014 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+DESCRIPTION = "Clang/LLVM based C/C++ compiler (cross-canadian for ${TARGET_ARCH} target)"
+HOMEPAGE = "http://clang.llvm.org/"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0-with-LLVM-exception;md5=0bcd48c3bdfef0c9d9fd17726e4b7dab"
+SECTION = "devel"
+
+PN = "clang-cross-canadian-${TRANSLATED_TARGET_ARCH}"
+
+require clang.inc
+require common-source.inc
+inherit cross-canadian
+
+DEPENDS += "nativesdk-clang binutils-cross-canadian-${TRANSLATED_TARGET_ARCH} virtual/${HOST_PREFIX}binutils-crosssdk virtual/nativesdk-libc"
+# We have to point gcc at a sysroot but we don't need to rebuild if this changes
+# e.g. we switch between different machines with different tunes.
+EXTRA_OECONF_PATHS[vardepsexclude] = "TUNE_PKGARCH"
+TARGET_ARCH[vardepsexclude] = "TUNE_ARCH"
+
+do_install() {
+        install -d ${D}${bindir}
+	for tool in clang clang++ clang-tidy lld ld.lld llvm-profdata \
+            llvm-nm llvm-ar llvm-as llvm-ranlib llvm-strip llvm-objcopy llvm-objdump llvm-readelf \
+            llvm-addr2line llvm-dwp llvm-size llvm-strings llvm-cov
+	do
+		ln -sf ../$tool ${D}${bindir}/${TARGET_PREFIX}$tool
+	done
+}
+SSTATE_SCAN_FILES += "*-clang *-clang++ *-llvm-profdata *-llvm-ar \
+                      *-llvm-ranlib *-llvm-nm *-lld *-ld.lld *-llvm-as *-llvm-strip \
+                      *-llvm-objcopy *-llvm-objdump *-llvm-readelf *-llvm-addr2line \
+                      *-llvm-dwp *-llvm-size *-llvm-strings *-llvm-cov"
+do_install:append() {
+        cross_canadian_bindirlinks
+}

+ 0 - 3
recipes-devtools/clang/clang-cross-canadian_git.bbappend

@@ -1,3 +0,0 @@
-MAJOR_VER = "15"
-MINOR_VER = "0"
-PATCH_VER = "0"

+ 35 - 0
recipes-devtools/clang/clang-cross_16.0.5.bb

@@ -0,0 +1,35 @@
+# Copyright (C) 2014 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+DESCRIPTION = "Cross compiler wrappers for LLVM based C/C++ compiler"
+HOMEPAGE = "http://clang.llvm.org/"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0-with-LLVM-exception;md5=0bcd48c3bdfef0c9d9fd17726e4b7dab"
+SECTION = "devel"
+
+PN = "clang-cross-${TARGET_ARCH}"
+
+require clang.inc
+require common-source.inc
+inherit cross
+DEPENDS += "clang-native virtual/${TARGET_PREFIX}binutils"
+
+do_install() {
+        install -d ${D}${bindir}
+	for tool in clang clang++ clang-tidy lld ld.lld llvm-profdata \
+            llvm-nm llvm-ar llvm-as llvm-ranlib llvm-strip llvm-objcopy llvm-objdump llvm-readelf \
+            llvm-addr2line llvm-dwp llvm-size llvm-strings llvm-cov
+	do
+		ln -sf ../$tool ${D}${bindir}/${TARGET_PREFIX}$tool
+	done
+}
+SSTATE_SCAN_FILES += "*-clang *-clang++ *-llvm-profdata *-lld *-ld.lld \
+                      *-llvm-nm *-llvm-ar *-llvm-as *-llvm-ranlib *-llvm-strip \
+                      *-llvm-objcopy *-llvm-objdump *-llvm-readelf *-llvm-addr2line \
+                      *-llvm-dwp *-llvm-size *-llvm-strings *-llvm-cov"
+
+SYSROOT_PREPROCESS_FUNCS += "clangcross_sysroot_preprocess"
+
+clangcross_sysroot_preprocess () {
+        sysroot_stage_dir ${D}${bindir} ${SYSROOT_DESTDIR}${bindir}
+}
+PACKAGES = ""

+ 0 - 3
recipes-devtools/clang/clang-cross_git.bbappend

@@ -1,3 +0,0 @@
-MAJOR_VER = "15"
-MINOR_VER = "0"
-PATCH_VER = "0"

+ 34 - 0
recipes-devtools/clang/clang-crosssdk_16.0.5.bb

@@ -0,0 +1,34 @@
+# Copyright (C) 2014 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+DESCRIPTION = "SDK Cross compiler wrappers for LLVM based C/C++ compiler"
+HOMEPAGE = "http://clang.llvm.org/"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0-with-LLVM-exception;md5=0bcd48c3bdfef0c9d9fd17726e4b7dab"
+SECTION = "devel"
+
+PN = "clang-crosssdk-${TARGET_ARCH}"
+
+require clang.inc
+require common-source.inc
+inherit crosssdk
+DEPENDS += "clang-native nativesdk-clang-glue virtual/${TARGET_PREFIX}binutils-crosssdk virtual/nativesdk-libc"
+
+do_install() {
+        install -d ${D}${bindir}
+	for tool in clang clang++ clang-tidy lld ld.lld llvm-profdata \
+            llvm-nm llvm-ar llvm-as llvm-ranlib llvm-strip llvm-objcopy llvm-objdump llvm-readelf \
+            llvm-addr2line llvm-dwp llvm-size llvm-strings llvm-cov
+	do
+		ln -sf ../$tool ${D}${bindir}/${TARGET_PREFIX}$tool
+	done
+}
+SSTATE_SCAN_FILES += "*-clang *-clang++ *-llvm-profdata *-lld *-ld.lld \
+                      *-llvm-nm *-llvm-ar *-llvm-as *-llvm-ranlib *-llvm-strip \
+                      *-llvm-objcopy *-llvm-objdump *-llvm-readelf *-llvm-addr2line \
+                      *-llvm-dwp *-llvm-size *-llvm-strings *-llvm-cov"
+sysroot_stage_all () {
+        sysroot_stage_dir ${D}${bindir} ${SYSROOT_DESTDIR}${bindir}
+}
+
+PACKAGES = ""
+

+ 0 - 3
recipes-devtools/clang/clang-crosssdk_git.bbappend

@@ -1,3 +0,0 @@
-MAJOR_VER = "15"
-MINOR_VER = "0"
-PATCH_VER = "0"

+ 27 - 0
recipes-devtools/clang/clang.inc

@@ -0,0 +1,27 @@
+LLVM_RELEASE = ""
+LLVM_DIR = "llvm${LLVM_RELEASE}"
+
+LLVM_GIT ?= "git://github.com/llvm"
+LLVM_GIT_PROTOCOL ?= "https"
+
+MAJOR_VER = "16"
+MINOR_VER = "0"
+PATCH_VER = "5"
+
+SRCREV ?= "185b81e034ba60081023b6e59504dfffb560f3e3"
+
+PV = "${MAJOR_VER}.${MINOR_VER}.${PATCH_VER}"
+#BRANCH = "release/15.x"
+BRANCH = "release/16.x"
+
+LLVMMD5SUM = "8a15a0759ef07f2682d2ba4b893c9afe"
+CLANGMD5SUM = "ff42885ed2ab98f1ecb8c1fc41205343"
+LLDMD5SUM = "ae7dc7c027b1fa89b5b013d391d3ee2b"
+LLDBMD5SUM = "2e0d44968471fcde980034dbb826bea9"
+
+LLVM_LIBDIR_SUFFIX="${@d.getVar('baselib').replace('lib', '')}"
+
+# set the default pigz thread
+export PIGZ = "-p ${@oe.utils.cpu_count(at_least=2)}"
+
+require common.inc

+ 11 - 20
recipes-devtools/clang/clang/0001-libcxxabi-Find-libunwind-headers-when.patch → recipes-devtools/clang/clang/0001-libcxxabi-Find-libunwind-headers-when-LIBCXXABI_LIBU.patch

@@ -1,7 +1,7 @@
-From 2ca03d2f8cc86821efb781c7ae97b84592c3888a Mon Sep 17 00:00:00 2001
-From: "yang.lee" <yang.lee@starfivetech.com>
-Date: Thu, 26 May 2022 11:01:19 +0800
-Subject: [PATCH 1/3] libcxxabi: Find libunwind headers when 
+From 60d418bdd291f061e32a73ffee7ad7acc27a4768 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 27 Aug 2017 10:37:49 -0700
+Subject: [PATCH] libcxxabi: Find libunwind headers when
  LIBCXXABI_LIBUNWIND_INCLUDES is set
  LIBCXXABI_LIBUNWIND_INCLUDES is set
 
 
 Currently, when LIBCXXABI_LIBUNWIND_INCLUDES is set via CMake arguments
 Currently, when LIBCXXABI_LIBUNWIND_INCLUDES is set via CMake arguments
@@ -11,32 +11,26 @@ especially for ARM targets
 This patch makes the searching synthesized directories and then set
 This patch makes the searching synthesized directories and then set
 LIBCXXABI_LIBUNWIND_INCLUDES if its there in environment
 LIBCXXABI_LIBUNWIND_INCLUDES if its there in environment
 
 
-Rebased by Lee Yang
+Upstream-Status: Pending
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 ---
 ---
- libcxxabi/CMakeLists.txt | 21 +++++++++++----------
- 1 file changed, 11 insertions(+), 10 deletions(-)
+ libcxxabi/CMakeLists.txt | 16 +++++++++++-----
+ 1 file changed, 11 insertions(+), 5 deletions(-)
 
 
 diff --git a/libcxxabi/CMakeLists.txt b/libcxxabi/CMakeLists.txt
 diff --git a/libcxxabi/CMakeLists.txt b/libcxxabi/CMakeLists.txt
-index a7d6d1902158..16a040fcef27 100644
+index 8f48d402bc22..c2470267d8e3 100644
 --- a/libcxxabi/CMakeLists.txt
 --- a/libcxxabi/CMakeLists.txt
 +++ b/libcxxabi/CMakeLists.txt
 +++ b/libcxxabi/CMakeLists.txt
-@@ -517,13 +517,8 @@ endif()
- # Setup Source Code
- #===============================================================================
+@@ -483,7 +483,7 @@ set(LIBCXXABI_LIBUNWIND_PATH "${LIBCXXABI_LIBUNWIND_PATH}" CACHE PATH
+     "Specify path to libunwind source." FORCE)
  
  
--set(LIBCXXABI_LIBUNWIND_INCLUDES "${LIBCXXABI_LIBUNWIND_INCLUDES}" CACHE PATH
--    "Specify path to libunwind includes." FORCE)
--set(LIBCXXABI_LIBUNWIND_PATH "${LIBCXXABI_LIBUNWIND_PATH}" CACHE PATH
--    "Specify path to libunwind source." FORCE)
--
  if (LIBCXXABI_USE_LLVM_UNWINDER OR LLVM_NATIVE_ARCH MATCHES ARM)
  if (LIBCXXABI_USE_LLVM_UNWINDER OR LLVM_NATIVE_ARCH MATCHES ARM)
 -  find_path(LIBCXXABI_LIBUNWIND_INCLUDES_INTERNAL libunwind.h
 -  find_path(LIBCXXABI_LIBUNWIND_INCLUDES_INTERNAL libunwind.h
 +  find_path(LIBCXXABI_LIBUNWIND_INCLUDES libunwind.h
 +  find_path(LIBCXXABI_LIBUNWIND_INCLUDES libunwind.h
      PATHS ${LIBCXXABI_LIBUNWIND_INCLUDES}
      PATHS ${LIBCXXABI_LIBUNWIND_INCLUDES}
            ${LIBCXXABI_LIBUNWIND_PATH}/include
            ${LIBCXXABI_LIBUNWIND_PATH}/include
            ${CMAKE_BINARY_DIR}/${LIBCXXABI_LIBUNWIND_INCLUDES}
            ${CMAKE_BINARY_DIR}/${LIBCXXABI_LIBUNWIND_INCLUDES}
-@@ -534,15 +529,21 @@ if (LIBCXXABI_USE_LLVM_UNWINDER OR LLVM_NATIVE_ARCH MATCHES ARM)
+@@ -494,15 +494,21 @@ if (LIBCXXABI_USE_LLVM_UNWINDER OR LLVM_NATIVE_ARCH MATCHES ARM)
      NO_CMAKE_FIND_ROOT_PATH
      NO_CMAKE_FIND_ROOT_PATH
    )
    )
  
  
@@ -62,6 +56,3 @@ index a7d6d1902158..16a040fcef27 100644
  # Add source code. This also contains all of the logic for deciding linker flags
  # Add source code. This also contains all of the logic for deciding linker flags
  # soname, etc...
  # soname, etc...
  add_subdirectory(include)
  add_subdirectory(include)
--- 
-2.25.1
-

+ 151 - 0
recipes-devtools/clang/clang/0001-neon2rvv-support-type-convert-between-fixed-vector-a.patch

@@ -0,0 +1,151 @@
+From 51248b6c65c8809f27e84a56e43b00c88d473280 Mon Sep 17 00:00:00 2001
+From: Eric Tang <eric.tang@starfivetech.com>
+Date: Fri, 2 Jun 2023 09:07:44 +0800
+Subject: [PATCH 1/9] [neon2rvv] support type convert between fixed vector and
+ scalable vector
+
+  disable the default vectorize options on O1,O2,O3,Oz...
+
+Signed-off-by: Eric Tang <eric.tang@starfivetech.com>
+---
+ clang/include/clang/Basic/BuiltinsRISCV.def | 49 ++++++++++++++++++++
+ clang/lib/CodeGen/CGBuiltin.cpp             | 51 +++++++++++++++++++++
+ clang/lib/Driver/ToolChains/Clang.cpp       |  1 +
+ 3 files changed, 101 insertions(+)
+
+diff --git a/clang/include/clang/Basic/BuiltinsRISCV.def b/clang/include/clang/Basic/BuiltinsRISCV.def
+index c26e3b807370..cbeb29245aec 100644
+--- a/clang/include/clang/Basic/BuiltinsRISCV.def
++++ b/clang/include/clang/Basic/BuiltinsRISCV.def
+@@ -79,5 +79,54 @@ TARGET_BUILTIN(__builtin_riscv_sm4ks, "LiLiLiIUc", "nc", "zksed")
+ TARGET_BUILTIN(__builtin_riscv_sm3p0, "LiLi", "nc", "zksh")
+ TARGET_BUILTIN(__builtin_riscv_sm3p1, "LiLi", "nc", "zksh")
+ 
++// Scalable Vector type <-> Fixed Vector type
++
++TARGET_BUILTIN(__builtin_rvv_type_cast_from_i8m1, "q8ScV8Sc", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_from_i8m2, "q16ScV16Sc", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_from_i16m1, "q4SsV4Ss", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_from_i16m2, "q8SsV8Ss", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_from_i32m1, "q2SiV2Si", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_from_i32m2, "q4SiV4Si", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_from_i64m1, "q1LSiV1LSi", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_from_i64m2, "q2LSiV2LSi", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_from_u8m1, "q8UcV8Uc", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_from_u8m2, "q16UcV16Uc", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_from_u16m1, "q4UsV4Us", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_from_u16m2, "q8UsV8Us", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_from_u32m1, "q2UiV2Ui", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_from_u32m2, "q4UiV4Ui", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_from_u64m1, "q1LUiV1LUi", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_from_u64m2, "q2LUiV2LUi", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_from_f16m1, "q4hV4h", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_from_f16m2, "q8hV8h", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_from_f32m1, "q2fV2f", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_from_f32m2, "q4fV4f", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_from_f64m1, "q1dV1d", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_from_f64m2, "q2dV2d", "nc", "v,64bit")
++
++TARGET_BUILTIN(__builtin_rvv_type_cast_to_i8m1, "V8Scq8Sc", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_to_i8m2, "V16Scq16Sc", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_to_i16m1, "V4Ssq4Ss", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_to_i16m2, "V8Ssq8Ss", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_to_i32m1, "V2Siq2Si", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_to_i32m2, "V4Siq4Si", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_to_i64m1, "V1LSiq1LSi", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_to_i64m2, "V2LSiq2LSi", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_to_u8m1, "V8Ucq8Uc", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_to_u8m2, "V16Ucq16Uc", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_to_u16m1, "V4Usq4Us", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_to_u16m2, "V8Usq8Us", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_to_u32m1, "V2Uiq2Ui", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_to_u32m2, "V4Uiq4Ui", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_to_u64m1, "V1LUiq1LUi", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_to_u64m2, "V2LUiq2LUi", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_to_f16m1, "V4hq4h", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_to_f16m2, "V8hq8h", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_to_f32m1, "V2fq2f", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_to_f32m2, "V4fq4f", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_to_f64m1, "V1dq1d", "nc", "v,64bit")
++TARGET_BUILTIN(__builtin_rvv_type_cast_to_f64m2, "V2dq2d", "nc", "v,64bit")
++
++
+ #undef BUILTIN
+ #undef TARGET_BUILTIN
+diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp
+index f72e04a425d9..1e276bac4e54 100644
+--- a/clang/lib/CodeGen/CGBuiltin.cpp
++++ b/clang/lib/CodeGen/CGBuiltin.cpp
+@@ -19666,6 +19666,57 @@ Value *CodeGenFunction::EmitRISCVBuiltinExpr(unsigned BuiltinID,
+     ID = Intrinsic::riscv_sm3p1;
+     IntrinsicTypes = {ResultType};
+     break;
++  //scalable vector type <-> fixed vector types
++  case RISCV::BI__builtin_rvv_type_cast_from_i8m1:
++  case RISCV::BI__builtin_rvv_type_cast_from_i8m2:
++  case RISCV::BI__builtin_rvv_type_cast_from_i16m1:
++  case RISCV::BI__builtin_rvv_type_cast_from_i16m2:
++  case RISCV::BI__builtin_rvv_type_cast_from_i32m1:
++  case RISCV::BI__builtin_rvv_type_cast_from_i32m2:
++  case RISCV::BI__builtin_rvv_type_cast_from_i64m1:
++  case RISCV::BI__builtin_rvv_type_cast_from_i64m2:
++  case RISCV::BI__builtin_rvv_type_cast_from_u8m1:
++  case RISCV::BI__builtin_rvv_type_cast_from_u8m2:
++  case RISCV::BI__builtin_rvv_type_cast_from_u16m1:
++  case RISCV::BI__builtin_rvv_type_cast_from_u16m2:
++  case RISCV::BI__builtin_rvv_type_cast_from_u32m1:
++  case RISCV::BI__builtin_rvv_type_cast_from_u32m2:
++  case RISCV::BI__builtin_rvv_type_cast_from_u64m1:
++  case RISCV::BI__builtin_rvv_type_cast_from_u64m2:
++  case RISCV::BI__builtin_rvv_type_cast_from_f16m1:
++  case RISCV::BI__builtin_rvv_type_cast_from_f16m2:
++  case RISCV::BI__builtin_rvv_type_cast_from_f32m1:
++  case RISCV::BI__builtin_rvv_type_cast_from_f32m2:
++  case RISCV::BI__builtin_rvv_type_cast_from_f64m1:
++  case RISCV::BI__builtin_rvv_type_cast_from_f64m2:
++  {
++    return Builder.CreateInsertVector(ResultType, UndefValue::get(ResultType), Ops[0], Builder.getInt64(0));
++  }
++  case RISCV::BI__builtin_rvv_type_cast_to_i8m1:
++  case RISCV::BI__builtin_rvv_type_cast_to_i8m2:
++  case RISCV::BI__builtin_rvv_type_cast_to_i16m1:
++  case RISCV::BI__builtin_rvv_type_cast_to_i16m2:
++  case RISCV::BI__builtin_rvv_type_cast_to_i32m1:
++  case RISCV::BI__builtin_rvv_type_cast_to_i32m2:
++  case RISCV::BI__builtin_rvv_type_cast_to_i64m1:
++  case RISCV::BI__builtin_rvv_type_cast_to_i64m2:
++  case RISCV::BI__builtin_rvv_type_cast_to_u8m1:
++  case RISCV::BI__builtin_rvv_type_cast_to_u8m2:
++  case RISCV::BI__builtin_rvv_type_cast_to_u16m1:
++  case RISCV::BI__builtin_rvv_type_cast_to_u16m2:
++  case RISCV::BI__builtin_rvv_type_cast_to_u32m1:
++  case RISCV::BI__builtin_rvv_type_cast_to_u32m2:
++  case RISCV::BI__builtin_rvv_type_cast_to_u64m1:
++  case RISCV::BI__builtin_rvv_type_cast_to_u64m2:
++  case RISCV::BI__builtin_rvv_type_cast_to_f16m1:
++  case RISCV::BI__builtin_rvv_type_cast_to_f16m2:
++  case RISCV::BI__builtin_rvv_type_cast_to_f32m1:
++  case RISCV::BI__builtin_rvv_type_cast_to_f32m2:
++  case RISCV::BI__builtin_rvv_type_cast_to_f64m1:
++  case RISCV::BI__builtin_rvv_type_cast_to_f64m2:
++  {
++    return Builder.CreateExtractVector(ResultType, Ops[0], Builder.getInt64(0));
++  }
+ 
+   // Vector builtins are handled from here.
+ #include "clang/Basic/riscv_vector_builtin_cg.inc"
+diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp
+index 77554aa2c462..d207a636e07f 100644
+--- a/clang/lib/Driver/ToolChains/Clang.cpp
++++ b/clang/lib/Driver/ToolChains/Clang.cpp
+@@ -635,6 +635,7 @@ static void addCoveragePrefixMapArg(const Driver &D, const ArgList &Args,
+ /// For -Oz the loop vectorizer is disabled, while the slp vectorizer is
+ /// enabled.
+ static bool shouldEnableVectorizerAtOLevel(const ArgList &Args, bool isSlpVec) {
++  return false;
+   if (Arg *A = Args.getLastArg(options::OPT_O_Group)) {
+     if (A->getOption().matches(options::OPT_O4) ||
+         A->getOption().matches(options::OPT_Ofast))
+-- 
+2.25.1
+

+ 2 - 1
recipes-devtools/clang/clang/0002-compiler-rt-support-a-new-embedded-linux-target.patch

@@ -1,8 +1,9 @@
-From 5a1cf5bd6eb5b7ee299c11b7a39ada74fd60be1d Mon Sep 17 00:00:00 2001
+From f205cf35a9ad116b291b2b36a50800e4573e6ac6 Mon Sep 17 00:00:00 2001
 From: Khem Raj <raj.khem@gmail.com>
 From: Khem Raj <raj.khem@gmail.com>
 Date: Sun, 19 Apr 2015 15:16:23 -0700
 Date: Sun, 19 Apr 2015 15:16:23 -0700
 Subject: [PATCH] compiler-rt: support a new embedded linux target
 Subject: [PATCH] compiler-rt: support a new embedded linux target
 
 
+Upstream-Status: Pending
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 ---
 ---
  .../make/platform/clang_linux_embedded.mk     | 286 ++++++++++++++++++
  .../make/platform/clang_linux_embedded.mk     | 286 ++++++++++++++++++

+ 1278 - 0
recipes-devtools/clang/clang/0002-neon2rvv-Model-vxrm-in-LLVM-intrinsics-and-add-optim.patch

@@ -0,0 +1,1278 @@
+From 29318f779da9c962af60d574b19159ecc10cfdd7 Mon Sep 17 00:00:00 2001
+From: Eric Tang <eric.tang@starfivetech.com>
+Date: Thu, 15 Jun 2023 09:30:16 +0800
+Subject: [PATCH 2/9] [neon2rvv] Model vxrm in LLVM intrinsics and add
+ optimization for removing redundant csrwi
+
+Signed-off-by: Eric Tang <eric.tang@starfivetech.com>
+---
+ clang/include/clang/Basic/riscv_vector.td     | 134 +++++-
+ llvm/include/llvm/IR/IntrinsicsRISCV.td       |  94 +++-
+ llvm/lib/Target/RISCV/CMakeLists.txt          |   1 +
+ .../Target/RISCV/MCTargetDesc/RISCVBaseInfo.h |   8 +
+ llvm/lib/Target/RISCV/RISCV.h                 |   3 +
+ .../Target/RISCV/RISCVInsertReadWriteCSR.cpp  | 115 +++++
+ llvm/lib/Target/RISCV/RISCVInstrFormats.td    |   3 +
+ llvm/lib/Target/RISCV/RISCVInstrInfo.td       |   2 +
+ .../Target/RISCV/RISCVInstrInfoVPseudos.td    | 428 +++++++++++++++++-
+ llvm/lib/Target/RISCV/RISCVMCInstLower.cpp    |   2 +
+ llvm/lib/Target/RISCV/RISCVSystemOperands.td  |   2 +-
+ llvm/lib/Target/RISCV/RISCVTargetMachine.cpp  |   2 +
+ 12 files changed, 747 insertions(+), 47 deletions(-)
+ create mode 100644 llvm/lib/Target/RISCV/RISCVInsertReadWriteCSR.cpp
+
+diff --git a/clang/include/clang/Basic/riscv_vector.td b/clang/include/clang/Basic/riscv_vector.td
+index b23e26ecaa57..9d443be0403c 100644
+--- a/clang/include/clang/Basic/riscv_vector.td
++++ b/clang/include/clang/Basic/riscv_vector.td
+@@ -316,11 +316,21 @@ multiclass RVVSignedBinBuiltinSet
+                           [["vv", "v", "vvv"],
+                            ["vx", "v", "vve"]]>;
+ 
++multiclass RVVSignedBinBuiltinSetRoundingMode
++    : RVVOutOp1BuiltinSet<NAME, "csil",
++                          [["vv", "v", "vvvu"],
++                           ["vx", "v", "vveu"]]>;
++
+ multiclass RVVUnsignedBinBuiltinSet
+     : RVVOutOp1BuiltinSet<NAME, "csil",
+                           [["vv", "Uv", "UvUvUv"],
+                            ["vx", "Uv", "UvUvUe"]]>;
+ 
++multiclass RVVUnsignedBinBuiltinSetRoundingMode
++    : RVVOutOp1BuiltinSet<NAME, "csil",
++                          [["vv", "Uv", "UvUvUvu"],
++                           ["vx", "Uv", "UvUvUeu"]]>;
++
+ multiclass RVVIntBinBuiltinSet
+     : RVVSignedBinBuiltinSet,
+       RVVUnsignedBinBuiltinSet;
+@@ -335,11 +345,21 @@ multiclass RVVSignedShiftBuiltinSet
+                           [["vv", "v", "vvUv"],
+                            ["vx", "v", "vvz"]]>;
+ 
++multiclass RVVSignedShiftBuiltinSetRoundingMode
++    : RVVOutOp1BuiltinSet<NAME, "csil",
++                          [["vv", "v", "vvUvu"],
++                           ["vx", "v", "vvzu"]]>;
++
+ multiclass RVVUnsignedShiftBuiltinSet
+     : RVVOutOp1BuiltinSet<NAME, "csil",
+                           [["vv", "Uv", "UvUvUv"],
+                            ["vx", "Uv", "UvUvz"]]>;
+ 
++multiclass RVVUnsignedShiftBuiltinSetRoundingMode
++    : RVVOutOp1BuiltinSet<NAME, "csil",
++                          [["vv", "Uv", "UvUvUvu"],
++                           ["vx", "Uv", "UvUvzu"]]>;
++
+ multiclass RVVShiftBuiltinSet
+     : RVVSignedShiftBuiltinSet,
+       RVVUnsignedShiftBuiltinSet;
+@@ -349,10 +369,18 @@ let Log2LMUL = [-3, -2, -1, 0, 1, 2] in {
+       : RVVOutOp0Op1BuiltinSet<NAME, "csil",
+                                      [["wv", "v", "vwUv"],
+                                       ["wx", "v", "vwz"]]>;
++  multiclass RVVSignedNShiftBuiltinSetRoundingMode
++      : RVVOutOp0Op1BuiltinSet<NAME, "csil",
++                                     [["wv", "v", "vwUvu"],
++                                      ["wx", "v", "vwzu"]]>;
+   multiclass RVVUnsignedNShiftBuiltinSet
+       : RVVOutOp0Op1BuiltinSet<NAME, "csil",
+                                      [["wv", "Uv", "UvUwUv"],
+                                       ["wx", "Uv", "UvUwz"]]>;
++  multiclass RVVUnsignedNShiftBuiltinSetRoundingMode
++      : RVVOutOp0Op1BuiltinSet<NAME, "csil",
++                                     [["wv", "Uv", "UvUwUvu"],
++                                      ["wx", "Uv", "UvUwzu"]]>;
+ }
+ 
+ multiclass RVVCarryinBuiltinSet
+@@ -1928,6 +1956,17 @@ let HasMasked = false,
+ }
+ 
+ // 13. Vector Fixed-Point Arithmetic Instructions
++let HeaderCode =
++[{
++enum __RISCV_VXRM {
++  __RISCV_VXRM_RNU = 0,
++  __RISCV_VXRM_RNE = 1,
++  __RISCV_VXRM_RDN = 2,
++  __RISCV_VXRM_ROD = 3,
++};
++}] in
++def vxrm_enum : RVVHeader;
++
+ // 13.1. Vector Single-Width Saturating Add and Subtract
+ let UnMaskedPolicyScheme = HasPassthruOperand in {
+ defm vsaddu : RVVUnsignedBinBuiltinSet;
+@@ -1936,23 +1975,94 @@ defm vssubu : RVVUnsignedBinBuiltinSet;
+ defm vssub : RVVSignedBinBuiltinSet;
+ 
+ // 13.2. Vector Single-Width Averaging Add and Subtract
+-defm vaaddu : RVVUnsignedBinBuiltinSet;
+-defm vaadd : RVVSignedBinBuiltinSet;
+-defm vasubu : RVVUnsignedBinBuiltinSet;
+-defm vasub : RVVSignedBinBuiltinSet;
++let ManualCodegen = [{
++  {
++    // LLVM intrinsic
++    // Unmasked: (passthru, op0, op1, round_mode, vl)
++    // Masked:   (passthru, vector_in, vector_in/scalar_in, mask, vxrm, vl, policy)
++
++    SmallVector<llvm::Value*, 7> Operands;
++    bool HasMaskedOff = !(
++        (IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
++        (!IsMasked && PolicyAttrs & RVV_VTA));
++    unsigned Offset = IsMasked ?
++        (HasMaskedOff ? 2 : 1) : (HasMaskedOff ? 1 : 0);
++
++    if (!HasMaskedOff)
++      Operands.push_back(llvm::PoisonValue::get(ResultType));
++    else
++      Operands.push_back(Ops[Offset]);
++
++    Operands.push_back(Ops[Offset]); // op0
++    Operands.push_back(Ops[Offset + 1]); // op1
++
++    if (IsMasked)
++      Operands.push_back(Ops[0]); // mask
++
++    Operands.push_back(Ops[Offset + 2]); // vxrm
++    Operands.push_back(Ops[Offset + 3]); // vl
++
++    if (IsMasked)
++      Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
++
++    IntrinsicTypes = {ResultType, Ops[Offset + 1]->getType(), Ops.back()->getType()};
++    llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
++    return Builder.CreateCall(F, Operands, "");
++  }
++}] in {
++  defm vaaddu : RVVUnsignedBinBuiltinSetRoundingMode;
++  defm vaadd : RVVSignedBinBuiltinSetRoundingMode;
++  defm vasubu : RVVUnsignedBinBuiltinSetRoundingMode;
++  defm vasub : RVVSignedBinBuiltinSetRoundingMode;
+ 
+ // 13.3. Vector Single-Width Fractional Multiply with Rounding and Saturation
+-let RequiredFeatures = ["FullMultiply"] in {
+-defm vsmul : RVVSignedBinBuiltinSet;
+-}
++  let RequiredFeatures = ["FullMultiply"] in {
++    defm vsmul : RVVSignedBinBuiltinSetRoundingMode;
++  }
+ 
+ // 13.4. Vector Single-Width Scaling Shift Instructions
+-defm vssrl : RVVUnsignedShiftBuiltinSet;
+-defm vssra : RVVSignedShiftBuiltinSet;
+-
++  defm vssrl : RVVUnsignedShiftBuiltinSetRoundingMode;
++  defm vssra : RVVSignedShiftBuiltinSetRoundingMode;
++}
++let ManualCodegen = [{
++  {
++    // LLVM intrinsic
++    // Unmasked: (passthru, op0, op1, round_mode, vl)
++    // Masked:   (passthru, vector_in, vector_in/scalar_in, mask, vxrm, vl, policy)
++
++    SmallVector<llvm::Value*, 7> Operands;
++    bool HasMaskedOff = !(
++        (IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) ||
++        (!IsMasked && PolicyAttrs & RVV_VTA));
++    unsigned Offset = IsMasked ?
++        (HasMaskedOff ? 2 : 1) : (HasMaskedOff ? 1 : 0);
++
++    if (!HasMaskedOff)
++      Operands.push_back(llvm::PoisonValue::get(ResultType));
++    else
++      Operands.push_back(Ops[Offset - 1]);
++
++    Operands.push_back(Ops[Offset]); // op0
++    Operands.push_back(Ops[Offset + 1]); // op1
++
++    if (IsMasked)
++      Operands.push_back(Ops[0]); // mask
++
++    Operands.push_back(Ops[Offset + 2]); // vxrm
++    Operands.push_back(Ops[Offset + 3]); // vl
++
++    if (IsMasked)
++      Operands.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));
++
++    IntrinsicTypes = {ResultType, Ops[Offset]->getType(), Ops[Offset + 1]->getType(), Ops.back()->getType()};
++    llvm::Function *F = CGM.getIntrinsic(ID, IntrinsicTypes);
++    return Builder.CreateCall(F, Operands, "");
++  }
++}] in {
+ // 13.5. Vector Narrowing Fixed-Point Clip Instructions
+-defm vnclipu : RVVUnsignedNShiftBuiltinSet;
+-defm vnclip : RVVSignedNShiftBuiltinSet;
++  defm vnclipu : RVVUnsignedNShiftBuiltinSetRoundingMode;
++  defm vnclip : RVVSignedNShiftBuiltinSetRoundingMode;
++}
+ 
+ // 14. Vector Floating-Point Instructions
+ // 14.2. Vector Single-Width Floating-Point Add/Subtract Instructions
+diff --git a/llvm/include/llvm/IR/IntrinsicsRISCV.td b/llvm/include/llvm/IR/IntrinsicsRISCV.td
+index e9c88f468076..7103bb5f5e39 100644
+--- a/llvm/include/llvm/IR/IntrinsicsRISCV.td
++++ b/llvm/include/llvm/IR/IntrinsicsRISCV.td
+@@ -586,6 +586,17 @@ let TargetPrefix = "riscv" in {
+     let ScalarOperand = 2;
+     let VLOperand = 3;
+   }
++  // For Saturating binary operations with rounding-mode operand
++  // The destination vector type is the same as first source vector.
++  // Input: (passthru, vector_in, vector_in/scalar_in, vxrm, vl)
++  class RISCVSaturatingBinaryAAXUnMaskedRoundingMode
++        : Intrinsic<[llvm_anyvector_ty],
++                    [LLVMMatchType<0>, LLVMMatchType<0>, llvm_any_ty,
++                     llvm_anyint_ty, LLVMMatchType<2>],
++                    [ImmArg<ArgIndex<3>>, IntrNoMem]>, RISCVVIntrinsic {
++    let ScalarOperand = 2;
++    let VLOperand = 4;
++  }
+   // For Saturating binary operations with mask.
+   // The destination vector type is the same as first source vector.
+   // Input: (maskedoff, vector_in, vector_in/scalar_in, mask, vl, policy)
+@@ -598,6 +609,18 @@ let TargetPrefix = "riscv" in {
+     let ScalarOperand = 2;
+     let VLOperand = 4;
+   }
++  // For Saturating binary operations with mask and rounding-mode operand
++  // The destination vector type is the same as first source vector.
++  // Input: (maskedoff, vector_in, vector_in/scalar_in, mask, vxrm, vl, policy)
++  class RISCVSaturatingBinaryAAXMaskedRoundingMode
++        : Intrinsic<[llvm_anyvector_ty],
++                    [LLVMMatchType<0>, LLVMMatchType<0>, llvm_any_ty,
++                     LLVMScalarOrSameVectorWidth<0, llvm_i1_ty>, llvm_anyint_ty,
++                     LLVMMatchType<2>, LLVMMatchType<2>],
++                    [ImmArg<ArgIndex<4>>, ImmArg<ArgIndex<6>>, IntrNoMem]>, RISCVVIntrinsic {
++    let ScalarOperand = 2;
++    let VLOperand = 5;
++  }
+   // For Saturating binary operations.
+   // The destination vector type is the same as first source vector.
+   // The second source operand matches the destination type or is an XLen scalar.
+@@ -609,6 +632,15 @@ let TargetPrefix = "riscv" in {
+                     [IntrNoMem, IntrHasSideEffects]>, RISCVVIntrinsic {
+     let VLOperand = 3;
+   }
++
++  // Input: (passthru, vector_in, vector_in/scalar_in, vxrm, vl)
++  class RISCVSaturatingBinaryAAShiftUnMaskedRoundingMode
++        : Intrinsic<[llvm_anyvector_ty],
++                    [LLVMMatchType<0>, LLVMMatchType<0>, llvm_any_ty,
++                     llvm_anyint_ty, LLVMMatchType<2>],
++                    [ImmArg<ArgIndex<3>>, IntrNoMem]>, RISCVVIntrinsic {
++    let VLOperand = 4;
++  }
+   // For Saturating binary operations with mask.
+   // The destination vector type is the same as first source vector.
+   // The second source operand matches the destination type or is an XLen scalar.
+@@ -621,6 +653,17 @@ let TargetPrefix = "riscv" in {
+                     [ImmArg<ArgIndex<5>>, IntrNoMem, IntrHasSideEffects]>, RISCVVIntrinsic {
+     let VLOperand = 4;
+   }
++
++  // Input: (maskedoff, vector_in, vector_in/scalar_in, mask, vxrm, vl, policy)
++  class RISCVSaturatingBinaryAAShiftMaskedRoundingMode
++        : Intrinsic<[llvm_anyvector_ty],
++                    [LLVMMatchType<0>, LLVMMatchType<0>, llvm_any_ty,
++                     LLVMScalarOrSameVectorWidth<0, llvm_i1_ty>, llvm_anyint_ty,
++                     LLVMMatchType<2>, LLVMMatchType<2>],
++                    [ImmArg<ArgIndex<4>>, ImmArg<ArgIndex<6>>, IntrNoMem]>, RISCVVIntrinsic {
++    let VLOperand = 5;
++  }
++
+   // For Saturating binary operations.
+   // The destination vector type is NOT the same as first source vector.
+   // The second source operand matches the destination type or is an XLen scalar.
+@@ -632,6 +675,16 @@ let TargetPrefix = "riscv" in {
+                     [IntrNoMem, IntrHasSideEffects]>, RISCVVIntrinsic {
+     let VLOperand = 3;
+   }
++
++  // Input: (passthru, vector_in, vector_in/scalar_in, vxrm, vl)
++  class RISCVSaturatingBinaryABShiftUnMaskedRoundingMode
++        : Intrinsic<[llvm_anyvector_ty],
++                    [LLVMMatchType<0>, llvm_anyvector_ty, llvm_any_ty,
++                     llvm_anyint_ty, LLVMMatchType<3>],
++                    [ImmArg<ArgIndex<3>>, IntrNoMem]>, RISCVVIntrinsic {
++    let VLOperand = 4;
++  }
++
+   // For Saturating binary operations with mask.
+   // The destination vector type is NOT the same as first source vector (with mask).
+   // The second source operand matches the destination type or is an XLen scalar.
+@@ -644,6 +697,17 @@ let TargetPrefix = "riscv" in {
+                     [ImmArg<ArgIndex<5>>, IntrNoMem, IntrHasSideEffects]>, RISCVVIntrinsic {
+     let VLOperand = 4;
+   }
++
++  // Input: (maskedoff, vector_in, vector_in/scalar_in, mask, vxrm, vl, policy)
++  class RISCVSaturatingBinaryABShiftMaskedRoundingMode
++        : Intrinsic<[llvm_anyvector_ty],
++                    [LLVMMatchType<0>, llvm_anyvector_ty, llvm_any_ty,
++                     LLVMScalarOrSameVectorWidth<0, llvm_i1_ty>, llvm_anyint_ty,
++                     LLVMMatchType<3>, LLVMMatchType<3>],
++                    [ImmArg<ArgIndex<4>>, ImmArg<ArgIndex<6>>, IntrNoMem]>, RISCVVIntrinsic {
++    let VLOperand = 5;
++  }
++
+   // Input: (vector_in, vector_in, scalar_in, vl, policy)
+   class RVVSlideUnMasked
+         : DefaultAttrsIntrinsic<[llvm_anyvector_ty],
+@@ -1074,14 +1138,26 @@ let TargetPrefix = "riscv" in {
+     def "int_riscv_" # NAME : RISCVSaturatingBinaryAAXUnMasked;
+     def "int_riscv_" # NAME # "_mask" : RISCVSaturatingBinaryAAXMasked;
+   }
++  multiclass RISCVSaturatingBinaryAAXRoundingMode {
++    def "int_riscv_" # NAME : RISCVSaturatingBinaryAAXUnMaskedRoundingMode;
++    def "int_riscv_" # NAME # "_mask" : RISCVSaturatingBinaryAAXMaskedRoundingMode;
++  }
+   multiclass RISCVSaturatingBinaryAAShift {
+     def "int_riscv_" # NAME : RISCVSaturatingBinaryAAShiftUnMasked;
+     def "int_riscv_" # NAME # "_mask" : RISCVSaturatingBinaryAAShiftMasked;
+   }
++  multiclass RISCVSaturatingBinaryAAShiftRoundingMode {
++    def "int_riscv_" # NAME : RISCVSaturatingBinaryAAShiftUnMaskedRoundingMode;
++    def "int_riscv_" # NAME # "_mask" : RISCVSaturatingBinaryAAShiftMaskedRoundingMode;
++  }
+   multiclass RISCVSaturatingBinaryABShift {
+     def "int_riscv_" # NAME : RISCVSaturatingBinaryABShiftUnMasked;
+     def "int_riscv_" # NAME # "_mask" : RISCVSaturatingBinaryABShiftMasked;
+   }
++  multiclass RISCVSaturatingBinaryABShiftRoundingMode {
++    def "int_riscv_" # NAME : RISCVSaturatingBinaryABShiftUnMaskedRoundingMode;
++    def "int_riscv_" # NAME # "_mask" : RISCVSaturatingBinaryABShiftMaskedRoundingMode;
++  }
+   multiclass RVVSlide {
+     def "int_riscv_" # NAME : RVVSlideUnMasked;
+     def "int_riscv_" # NAME # "_mask" : RVVSlideMasked;
+@@ -1350,18 +1426,18 @@ let TargetPrefix = "riscv" in {
+ 
+   def "int_riscv_vcompress" : RISCVCompress;
+ 
+-  defm vaaddu : RISCVSaturatingBinaryAAX;
+-  defm vaadd : RISCVSaturatingBinaryAAX;
+-  defm vasubu : RISCVSaturatingBinaryAAX;
+-  defm vasub : RISCVSaturatingBinaryAAX;
++  defm vaaddu : RISCVSaturatingBinaryAAXRoundingMode;
++  defm vaadd : RISCVSaturatingBinaryAAXRoundingMode;
++  defm vasubu : RISCVSaturatingBinaryAAXRoundingMode;
++  defm vasub : RISCVSaturatingBinaryAAXRoundingMode;
+ 
+-  defm vsmul : RISCVSaturatingBinaryAAX;
++  defm vsmul : RISCVSaturatingBinaryAAXRoundingMode;
+ 
+-  defm vssrl : RISCVSaturatingBinaryAAShift;
+-  defm vssra : RISCVSaturatingBinaryAAShift;
++  defm vssrl : RISCVSaturatingBinaryAAShiftRoundingMode;
++  defm vssra : RISCVSaturatingBinaryAAShiftRoundingMode;
+ 
+-  defm vnclipu : RISCVSaturatingBinaryABShift;
+-  defm vnclip : RISCVSaturatingBinaryABShift;
++  defm vnclipu : RISCVSaturatingBinaryABShiftRoundingMode;
++  defm vnclip : RISCVSaturatingBinaryABShiftRoundingMode;
+ 
+   defm vmfeq : RISCVCompare;
+   defm vmfne : RISCVCompare;
+diff --git a/llvm/lib/Target/RISCV/CMakeLists.txt b/llvm/lib/Target/RISCV/CMakeLists.txt
+index f909e0017e2b..db84f0504f21 100644
+--- a/llvm/lib/Target/RISCV/CMakeLists.txt
++++ b/llvm/lib/Target/RISCV/CMakeLists.txt
+@@ -27,6 +27,7 @@ add_llvm_target(RISCVCodeGen
+   RISCVFrameLowering.cpp
+   RISCVGatherScatterLowering.cpp
+   RISCVInsertVSETVLI.cpp
++  RISCVInsertReadWriteCSR.cpp
+   RISCVInstrInfo.cpp
+   RISCVISelDAGToDAG.cpp
+   RISCVISelLowering.cpp
+diff --git a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.h b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.h
+index 2cf2045c1719..eb43f4bf0a02 100644
+--- a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.h
++++ b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.h
+@@ -102,6 +102,9 @@ enum {
+   // in bits 63:31. Used by the SExtWRemoval pass.
+   IsSignExtendingOpWShift = UsesMaskPolicyShift + 1,
+   IsSignExtendingOpWMask = 1ULL << IsSignExtendingOpWShift,
++
++  HasRoundModeOpShift = IsSignExtendingOpWShift + 1,
++  HasRoundModeOpMask = 1 << HasRoundModeOpShift,
+ };
+ 
+ // Match with the definitions in RISCVInstrFormats.td
+@@ -176,6 +179,11 @@ static inline bool usesMaskPolicy(uint64_t TSFlags) {
+   return TSFlags & UsesMaskPolicyMask;
+ }
+ 
++/// \returns true if there is a rounding mode operand for this instruction
++static inline bool hasRoundModeOp(uint64_t TSFlags) {
++  return TSFlags & HasRoundModeOpMask;
++}
++
+ static inline unsigned getMergeOpNum(const MCInstrDesc &Desc) {
+   assert(hasMergeOp(Desc.TSFlags));
+   assert(!Desc.isVariadic());
+diff --git a/llvm/lib/Target/RISCV/RISCV.h b/llvm/lib/Target/RISCV/RISCV.h
+index c42fb070aade..f629bd2faea9 100644
+--- a/llvm/lib/Target/RISCV/RISCV.h
++++ b/llvm/lib/Target/RISCV/RISCV.h
+@@ -68,6 +68,9 @@ void initializeRISCVExpandAtomicPseudoPass(PassRegistry &);
+ FunctionPass *createRISCVInsertVSETVLIPass();
+ void initializeRISCVInsertVSETVLIPass(PassRegistry &);
+ 
++FunctionPass *createRISCVInsertReadWriteCSRPass();
++void initializeRISCVInsertReadWriteCSRPass(PassRegistry &);
++
+ FunctionPass *createRISCVRedundantCopyEliminationPass();
+ void initializeRISCVRedundantCopyEliminationPass(PassRegistry &);
+ 
+diff --git a/llvm/lib/Target/RISCV/RISCVInsertReadWriteCSR.cpp b/llvm/lib/Target/RISCV/RISCVInsertReadWriteCSR.cpp
+new file mode 100644
+index 000000000000..9cc06adf658c
+--- /dev/null
++++ b/llvm/lib/Target/RISCV/RISCVInsertReadWriteCSR.cpp
+@@ -0,0 +1,115 @@
++//===-- RISCVInsertReadWriteCSR.cpp - Insert Read/Write of RISC-V CSR -----===//
++//
++// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
++// See https://llvm.org/LICENSE.txt for license information.
++// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
++//
++//===----------------------------------------------------------------------===//
++// This file implements the machine function pass to insert read/write of CSR-s
++// of the RISC-V instructions.
++//
++// Currently the pass implements naive insertion of a write to vxrm before an
++// RVV fixed-point instruction.
++//
++//===----------------------------------------------------------------------===//
++
++#include "RISCV.h"
++#include "RISCVSubtarget.h"
++#include "llvm/CodeGen/MachineFunctionPass.h"
++using namespace llvm;
++
++#define DEBUG_TYPE "riscv-insert-read-write-csr"
++#define RISCV_INSERT_READ_WRITE_CSR_NAME "RISC-V Insert Read/Write CSR Pass"
++
++namespace {
++
++class RISCVInsertReadWriteCSR : public MachineFunctionPass {
++  const TargetInstrInfo *TII;
++
++public:
++  static char ID;
++
++  RISCVInsertReadWriteCSR() : MachineFunctionPass(ID) {
++    initializeRISCVInsertReadWriteCSRPass(*PassRegistry::getPassRegistry());
++  }
++
++  bool runOnMachineFunction(MachineFunction &MF) override;
++
++  void getAnalysisUsage(AnalysisUsage &AU) const override {
++    AU.setPreservesCFG();
++    MachineFunctionPass::getAnalysisUsage(AU);
++  }
++
++  StringRef getPassName() const override {
++    return RISCV_INSERT_READ_WRITE_CSR_NAME;
++  }
++
++private:
++  bool emitWriteVXRM(MachineBasicBlock &MBB);
++  std::optional<unsigned> getRoundModeIdx(const MachineInstr &MI);
++};
++
++} // end anonymous namespace
++
++char RISCVInsertReadWriteCSR::ID = 0;
++
++static unsigned PreVXRMValue = 4;
++
++INITIALIZE_PASS(RISCVInsertReadWriteCSR, DEBUG_TYPE,
++                RISCV_INSERT_READ_WRITE_CSR_NAME, false, false)
++
++// This function returns the index to the rounding mode immediate value if any,
++// otherwise the function will return None.
++std::optional<unsigned>
++RISCVInsertReadWriteCSR::getRoundModeIdx(const MachineInstr &MI) {
++  uint64_t TSFlags = MI.getDesc().TSFlags;
++  if (!RISCVII::hasRoundModeOp(TSFlags))
++    return std::nullopt;
++
++  // The operand order
++  // -------------------------------------
++  // | n-1 (if any)   | n-2  | n-3 | n-4 |
++  // | policy         | sew  | vl  | rm  |
++  // -------------------------------------
++  return MI.getNumExplicitOperands() - RISCVII::hasVecPolicyOp(TSFlags) - 3;
++}
++
++// This function inserts a write to vxrm when encountering an RVV fixed-point
++// instruction.
++bool RISCVInsertReadWriteCSR::emitWriteVXRM(MachineBasicBlock &MBB) {
++  bool Changed = false;
++  for (MachineInstr &MI : MBB) {
++    if (auto RoundModeIdx = getRoundModeIdx(MI)) {
++      unsigned VXRMImm = MI.getOperand(*RoundModeIdx).getImm();
++      if (VXRMImm == PreVXRMValue)
++          continue;
++      PreVXRMValue = VXRMImm;
++      Changed = true;
++      BuildMI(MBB, MI, MI.getDebugLoc(), TII->get(RISCV::WriteVXRMImm))
++          .addImm(VXRMImm);
++      MI.addOperand(MachineOperand::CreateReg(RISCV::VXRM, /*IsDef*/ false,
++                                              /*IsImp*/ true));
++    }
++  }
++  return Changed;
++}
++
++bool RISCVInsertReadWriteCSR::runOnMachineFunction(MachineFunction &MF) {
++  // Skip if the vector extension is not enabled.
++  const RISCVSubtarget &ST = MF.getSubtarget<RISCVSubtarget>();
++  if (!ST.hasVInstructions())
++    return false;
++
++  TII = ST.getInstrInfo();
++
++  bool Changed = false;
++
++  for (MachineBasicBlock &MBB : MF)
++    Changed |= emitWriteVXRM(MBB);
++
++  return Changed;
++}
++
++FunctionPass *llvm::createRISCVInsertReadWriteCSRPass() {
++  return new RISCVInsertReadWriteCSR();
++}
+diff --git a/llvm/lib/Target/RISCV/RISCVInstrFormats.td b/llvm/lib/Target/RISCV/RISCVInstrFormats.td
+index 3a494a5e3b58..f2cd4ed8857f 100644
+--- a/llvm/lib/Target/RISCV/RISCVInstrFormats.td
++++ b/llvm/lib/Target/RISCV/RISCVInstrFormats.td
+@@ -211,6 +211,9 @@ class RVInst<dag outs, dag ins, string opcodestr, string argstr,
+   // in bits 63:31. Used by the SExtWRemoval pass.
+   bit IsSignExtendingOpW = 0;
+   let TSFlags{19} = IsSignExtendingOpW;
++
++  bit HasRoundModeOp = 0;
++  let TSFlags{20} =  HasRoundModeOp;
+ }
+ 
+ // Pseudo instructions
+diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfo.td b/llvm/lib/Target/RISCV/RISCVInstrInfo.td
+index c699a94943d8..75fee3f962d0 100644
+--- a/llvm/lib/Target/RISCV/RISCVInstrInfo.td
++++ b/llvm/lib/Target/RISCV/RISCVInstrInfo.td
+@@ -1693,6 +1693,8 @@ def WriteFRM : WriteSysReg<SysRegFRM, [FRM]>;
+ def WriteFRMImm : WriteSysRegImm<SysRegFRM, [FRM]>;
+ def SwapFRMImm : SwapSysRegImm<SysRegFRM, [FRM]>;
+ 
++def WriteVXRMImm : WriteSysRegImm<SysRegVXRM, [VXRM]>;
++
+ let hasSideEffects = true in {
+ def ReadFFLAGS : ReadSysReg<SysRegFFLAGS, [FFLAGS]>;
+ def WriteFFLAGS : WriteSysReg<SysRegFFLAGS, [FFLAGS]>;
+diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td
+index 3f69b5e41cf1..ec7af31a23e2 100644
+--- a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td
++++ b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td
+@@ -1139,6 +1139,65 @@ class VPseudoBinaryNoMaskTU<VReg RetClass,
+   let HasMergeOp = 1;
+ }
+ 
++class VPseudoBinaryNoMaskRoundingMode<VReg RetClass,
++                                      VReg Op1Class,
++                                      DAGOperand Op2Class,
++                                      string Constraint,
++                                      int DummyMask = 1> :
++        Pseudo<(outs RetClass:$rd),
++               (ins Op1Class:$rs2, Op2Class:$rs1, ixlenimm:$rm, AVL:$vl, ixlenimm:$sew), []>,
++        RISCVVPseudo {
++  let mayLoad = 0;
++  let mayStore = 0;
++  let hasSideEffects = 0;
++  let Constraints = Constraint;
++  let HasVLOp = 1;
++  let HasSEWOp = 1;
++  let HasDummyMask = DummyMask;
++  let HasRoundModeOp = 1;
++}
++
++class VPseudoBinaryNoMaskTURoundingMode<VReg RetClass,
++                                        VReg Op1Class,
++                                        DAGOperand Op2Class,
++                                        string Constraint> :
++        Pseudo<(outs RetClass:$rd),
++               (ins RetClass:$merge, Op1Class:$rs2, Op2Class:$rs1, ixlenimm:$rm,
++                    AVL:$vl, ixlenimm:$sew), []>,
++        RISCVVPseudo {
++  let mayLoad = 0;
++  let mayStore = 0;
++  let hasSideEffects = 0;
++  let Constraints = Join<[Constraint, "$rd = $merge"], ",">.ret;
++  let HasVLOp = 1;
++  let HasSEWOp = 1;
++  let HasDummyMask = 1;
++  let HasMergeOp = 1;
++  let HasRoundModeOp = 1;
++}
++
++class VPseudoBinaryMaskPolicyRoundingMode<VReg RetClass,
++                                          RegisterClass Op1Class,
++                                          DAGOperand Op2Class,
++                                          string Constraint> :
++        Pseudo<(outs GetVRegNoV0<RetClass>.R:$rd),
++                (ins GetVRegNoV0<RetClass>.R:$merge,
++                     Op1Class:$rs2, Op2Class:$rs1,
++                     VMaskOp:$vm, ixlenimm:$rm, AVL:$vl,
++                     ixlenimm:$sew, ixlenimm:$policy), []>,
++        RISCVVPseudo {
++  let mayLoad = 0;
++  let mayStore = 0;
++  let hasSideEffects = 0;
++  let Constraints = Join<[Constraint, "$rd = $merge"], ",">.ret;
++  let HasVLOp = 1;
++  let HasSEWOp = 1;
++  let HasMergeOp = 1;
++  let HasVecPolicyOp = 1;
++  let UsesMaskPolicy = 1;
++  let HasRoundModeOp = 1;
++}
++
+ // Special version of VPseudoBinaryNoMask where we pretend the first source is
+ // tied to the destination.
+ // This allows maskedoff and rs2 to be the same register.
+@@ -1923,6 +1982,24 @@ multiclass VPseudoBinary<VReg RetClass,
+   }
+ }
+ 
++multiclass VPseudoBinaryRoundingMode<VReg RetClass,
++                                     VReg Op1Class,
++                                     DAGOperand Op2Class,
++                                     LMULInfo MInfo,
++                                     string Constraint = ""> {
++  let VLMul = MInfo.value in {
++    def "_" # MInfo.MX :
++      VPseudoBinaryNoMaskRoundingMode<RetClass, Op1Class, Op2Class, Constraint>;
++    def "_" # MInfo.MX # "_TU" :
++      VPseudoBinaryNoMaskTURoundingMode<RetClass, Op1Class, Op2Class,
++                                        Constraint>;
++    def "_" # MInfo.MX # "_MASK" :
++      VPseudoBinaryMaskPolicyRoundingMode<RetClass, Op1Class, Op2Class,
++                                          Constraint>,
++                                          RISCVMaskedPseudo</*MaskOpIdx*/ 3>;
++  }
++}
++
+ multiclass VPseudoBinaryM<VReg RetClass,
+                           VReg Op1Class,
+                           DAGOperand Op2Class,
+@@ -1971,6 +2048,10 @@ multiclass VPseudoBinaryV_VV<LMULInfo m, string Constraint = ""> {
+   defm _VV : VPseudoBinary<m.vrclass, m.vrclass, m.vrclass, m, Constraint>;
+ }
+ 
++multiclass VPseudoBinaryV_VV_RM<LMULInfo m, string Constraint = ""> {
++  defm _VV : VPseudoBinaryRoundingMode<m.vrclass, m.vrclass, m.vrclass, m, Constraint>;
++}
++
+ // Similar to VPseudoBinaryV_VV, but uses MxListF.
+ multiclass VPseudoBinaryFV_VV<LMULInfo m, string Constraint = ""> {
+   defm _VV : VPseudoBinary<m.vrclass, m.vrclass, m.vrclass, m, Constraint>;
+@@ -2000,6 +2081,10 @@ multiclass VPseudoBinaryV_VX<LMULInfo m, string Constraint = ""> {
+   defm "_VX" : VPseudoBinary<m.vrclass, m.vrclass, GPR, m, Constraint>;
+ }
+ 
++multiclass VPseudoBinaryV_VX_RM<LMULInfo m, string Constraint = ""> {
++  defm "_VX" : VPseudoBinaryRoundingMode<m.vrclass, m.vrclass, GPR, m, Constraint>;
++}
++
+ multiclass VPseudoVSLD1_VX<string Constraint = ""> {
+   foreach m = MxList in {
+     defvar mx = m.MX;
+@@ -2036,6 +2121,10 @@ multiclass VPseudoBinaryV_VI<Operand ImmType = simm5, LMULInfo m, string Constra
+   defm _VI : VPseudoBinary<m.vrclass, m.vrclass, ImmType, m, Constraint>;
+ }
+ 
++multiclass VPseudoBinaryV_VI_RM<Operand ImmType = simm5, LMULInfo m, string Constraint = ""> {
++  defm _VI : VPseudoBinaryRoundingMode<m.vrclass, m.vrclass, ImmType, m, Constraint>;
++}
++
+ multiclass VPseudoVALU_MM {
+   foreach m = MxList in {
+     defvar mx = m.MX;
+@@ -2098,16 +2187,31 @@ multiclass VPseudoBinaryV_WV<LMULInfo m> {
+                            !if(!ge(m.octuple, 8), "@earlyclobber $rd", "")>;
+ }
+ 
++multiclass VPseudoBinaryV_WV_RM<LMULInfo m> {
++  defm _WV : VPseudoBinaryRoundingMode<m.vrclass, m.wvrclass, m.vrclass, m,
++                                       !if(!ge(m.octuple, 8), "@earlyclobber $rd", "")>;
++}
++
+ multiclass VPseudoBinaryV_WX<LMULInfo m> {
+   defm _WX : VPseudoBinary<m.vrclass, m.wvrclass, GPR, m,
+                            !if(!ge(m.octuple, 8), "@earlyclobber $rd", "")>;
+ }
+ 
++multiclass VPseudoBinaryV_WX_RM<LMULInfo m> {
++  defm _WX : VPseudoBinaryRoundingMode<m.vrclass, m.wvrclass, GPR, m,
++                                       !if(!ge(m.octuple, 8), "@earlyclobber $rd", "")>;
++}
++
+ multiclass VPseudoBinaryV_WI<LMULInfo m> {
+   defm _WI : VPseudoBinary<m.vrclass, m.wvrclass, uimm5, m,
+                            !if(!ge(m.octuple, 8), "@earlyclobber $rd", "")>;
+ }
+ 
++multiclass VPseudoBinaryV_WI_RM<LMULInfo m> {
++  defm _WI : VPseudoBinaryRoundingMode<m.vrclass, m.wvrclass, uimm5, m,
++                                       !if(!ge(m.octuple, 8), "@earlyclobber $rd", "")>;
++}
++
+ // For vadc and vsbc, the instruction encoding is reserved if the destination
+ // vector register is v0.
+ // For vadc and vsbc, CarryIn == 1 and CarryOut == 0
+@@ -2419,6 +2523,23 @@ multiclass VPseudoVSALU_VV_VX_VI<Operand ImmType = simm5, string Constraint = ""
+   }
+ }
+ 
++multiclass VPseudoVSALU_VV_VX_VI_RM<Operand ImmType = simm5, string Constraint = ""> {
++  foreach m = MxList in {
++    defvar mx = m.MX;
++    defvar WriteVSALUV_MX = !cast<SchedWrite>("WriteVSALUV_" # mx);
++    defvar WriteVSALUX_MX = !cast<SchedWrite>("WriteVSALUX_" # mx);
++    defvar WriteVSALUI_MX = !cast<SchedWrite>("WriteVSALUI_" # mx);
++    defvar ReadVSALUV_MX = !cast<SchedRead>("ReadVSALUV_" # mx);
++    defvar ReadVSALUX_MX = !cast<SchedRead>("ReadVSALUX_" # mx);
++
++    defm "" : VPseudoBinaryV_VV_RM<m, Constraint>,
++              Sched<[WriteVSALUV_MX, ReadVSALUV_MX, ReadVSALUV_MX, ReadVMask]>;
++    defm "" : VPseudoBinaryV_VX_RM<m, Constraint>,
++              Sched<[WriteVSALUX_MX, ReadVSALUV_MX, ReadVSALUX_MX, ReadVMask]>;
++    defm "" : VPseudoBinaryV_VI_RM<ImmType, m, Constraint>,
++              Sched<[WriteVSALUI_MX, ReadVSALUV_MX, ReadVMask]>;
++  }
++}
+ 
+ multiclass VPseudoVSHT_VV_VX_VI<Operand ImmType = simm5, string Constraint = ""> {
+   foreach m = MxList in {
+@@ -2456,6 +2577,24 @@ multiclass VPseudoVSSHT_VV_VX_VI<Operand ImmType = simm5, string Constraint = ""
+   }
+ }
+ 
++multiclass VPseudoVSSHT_VV_VX_VI_RM<Operand ImmType = simm5, string Constraint = ""> {
++  foreach m = MxList in {
++    defvar mx = m.MX;
++    defvar WriteVSShiftV_MX = !cast<SchedWrite>("WriteVSShiftV_" # mx);
++    defvar WriteVSShiftX_MX = !cast<SchedWrite>("WriteVSShiftX_" # mx);
++    defvar WriteVSShiftI_MX = !cast<SchedWrite>("WriteVSShiftI_" # mx);
++    defvar ReadVSShiftV_MX = !cast<SchedRead>("ReadVSShiftV_" # mx);
++    defvar ReadVSShiftX_MX = !cast<SchedRead>("ReadVSShiftX_" # mx);
++
++    defm "" : VPseudoBinaryV_VV_RM<m, Constraint>,
++              Sched<[WriteVSShiftV_MX, ReadVSShiftV_MX, ReadVSShiftV_MX, ReadVMask]>;
++    defm "" : VPseudoBinaryV_VX_RM<m, Constraint>,
++              Sched<[WriteVSShiftX_MX, ReadVSShiftV_MX, ReadVSShiftX_MX, ReadVMask]>;
++    defm "" : VPseudoBinaryV_VI_RM<ImmType, m, Constraint>,
++              Sched<[WriteVSShiftI_MX, ReadVSShiftV_MX, ReadVMask]>;
++  }
++}
++
+ multiclass VPseudoVALU_VV_VX_VI<Operand ImmType = simm5, string Constraint = ""> {
+   foreach m = MxList in {
+     defvar mx = m.MX;
+@@ -2489,6 +2628,21 @@ multiclass VPseudoVSALU_VV_VX {
+   }
+ }
+ 
++multiclass VPseudoVSALU_VV_VX_RM {
++  foreach m = MxList in {
++    defvar mx = m.MX;
++    defvar WriteVSALUV_MX = !cast<SchedWrite>("WriteVSALUV_" # mx);
++    defvar WriteVSALUX_MX = !cast<SchedWrite>("WriteVSALUX_" # mx);
++    defvar ReadVSALUV_MX = !cast<SchedRead>("ReadVSALUV_" # mx);
++    defvar ReadVSALUX_MX = !cast<SchedRead>("ReadVSALUX_" # mx);
++
++    defm "" : VPseudoBinaryV_VV_RM<m>,
++              Sched<[WriteVSALUV_MX, ReadVSALUV_MX, ReadVSALUV_MX, ReadVMask]>;
++    defm "" : VPseudoBinaryV_VX_RM<m>,
++              Sched<[WriteVSALUX_MX, ReadVSALUV_MX, ReadVSALUX_MX, ReadVMask]>;
++  }
++}
++
+ multiclass VPseudoVSMUL_VV_VX {
+   foreach m = MxList in {
+     defvar mx = m.MX;
+@@ -2504,6 +2658,21 @@ multiclass VPseudoVSMUL_VV_VX {
+   }
+ }
+ 
++multiclass VPseudoVSMUL_VV_VX_RM {
++  foreach m = MxList in {
++    defvar mx = m.MX;
++    defvar WriteVSMulV_MX = !cast<SchedWrite>("WriteVSMulV_" # mx);
++    defvar WriteVSMulX_MX = !cast<SchedWrite>("WriteVSMulX_" # mx);
++    defvar ReadVSMulV_MX = !cast<SchedRead>("ReadVSMulV_" # mx);
++    defvar ReadVSMulX_MX = !cast<SchedRead>("ReadVSMulX_" # mx);
++
++    defm "" : VPseudoBinaryV_VV_RM<m>,
++              Sched<[WriteVSMulV_MX, ReadVSMulV_MX, ReadVSMulV_MX, ReadVMask]>;
++    defm "" : VPseudoBinaryV_VX_RM<m>,
++              Sched<[WriteVSMulX_MX, ReadVSMulV_MX, ReadVSMulX_MX, ReadVMask]>;
++  }
++}
++
+ multiclass VPseudoVAALU_VV_VX {
+   foreach m = MxList in {
+     defvar mx = m.MX;
+@@ -2519,6 +2688,21 @@ multiclass VPseudoVAALU_VV_VX {
+   }
+ }
+ 
++multiclass VPseudoVAALU_VV_VX_RM {
++  foreach m = MxList in {
++    defvar mx = m.MX;
++    defvar WriteVAALUV_MX = !cast<SchedWrite>("WriteVAALUV_" # mx);
++    defvar WriteVAALUX_MX = !cast<SchedWrite>("WriteVAALUX_" # mx);
++    defvar ReadVAALUV_MX = !cast<SchedRead>("ReadVAALUV_" # mx);
++    defvar ReadVAALUX_MX = !cast<SchedRead>("ReadVAALUX_" # mx);
++
++    defm "" : VPseudoBinaryV_VV_RM<m>,
++              Sched<[WriteVAALUV_MX, ReadVAALUV_MX, ReadVAALUV_MX, ReadVMask]>;
++    defm "" : VPseudoBinaryV_VX_RM<m>,
++              Sched<[WriteVAALUX_MX, ReadVAALUV_MX, ReadVAALUX_MX, ReadVMask]>;
++  }
++}
++
+ multiclass VPseudoVMINMAX_VV_VX {
+   foreach m = MxList in {
+     defvar mx = m.MX;
+@@ -3002,6 +3186,24 @@ multiclass VPseudoVNCLP_WV_WX_WI {
+   }
+ }
+ 
++multiclass VPseudoVNCLP_WV_WX_WI_RM {
++  foreach m = MxListW in {
++    defvar mx = m.MX;
++    defvar WriteVNClipV_MX = !cast<SchedWrite>("WriteVNClipV_" # mx);
++    defvar WriteVNClipX_MX = !cast<SchedWrite>("WriteVNClipX_" # mx);
++    defvar WriteVNClipI_MX = !cast<SchedWrite>("WriteVNClipI_" # mx);
++    defvar ReadVNClipV_MX = !cast<SchedRead>("ReadVNClipV_" # mx);
++    defvar ReadVNClipX_MX = !cast<SchedRead>("ReadVNClipX_" # mx);
++
++    defm "" : VPseudoBinaryV_WV_RM<m>,
++              Sched<[WriteVNClipV_MX, ReadVNClipV_MX, ReadVNClipV_MX, ReadVMask]>;
++    defm "" : VPseudoBinaryV_WX_RM<m>,
++              Sched<[WriteVNClipX_MX, ReadVNClipV_MX, ReadVNClipX_MX, ReadVMask]>;
++    defm "" : VPseudoBinaryV_WI_RM<m>,
++              Sched<[WriteVNClipI_MX, ReadVNClipV_MX, ReadVMask]>;
++  }
++}
++
+ multiclass VPseudoVNSHT_WV_WX_WI {
+   foreach m = MxListW in {
+     defvar mx = m.MX;
+@@ -3881,6 +4083,48 @@ class VPatBinaryNoMaskTU<string intrinsic_name,
+                    (op2_type op2_kind:$rs2),
+                    GPR:$vl, sew)>;
+ 
++class VPatBinaryNoMaskTARoundingMode<string intrinsic_name,
++                                     string inst,
++                                     ValueType result_type,
++                                     ValueType op1_type,
++                                     ValueType op2_type,
++                                     int sew,
++                                     VReg op1_reg_class,
++                                     DAGOperand op2_kind> :
++  Pat<(result_type (!cast<Intrinsic>(intrinsic_name)
++                   (result_type (undef)),
++                   (op1_type op1_reg_class:$rs1),
++                   (op2_type op2_kind:$rs2),
++                   (XLenVT timm:$round),
++                   VLOpFrag)),
++                   (!cast<Instruction>(inst)
++                   (op1_type op1_reg_class:$rs1),
++                   (op2_type op2_kind:$rs2),
++                   (XLenVT timm:$round),
++                   GPR:$vl, sew)>;
++
++class VPatBinaryNoMaskTURoundingMode<string intrinsic_name,
++                                     string inst,
++                                     ValueType result_type,
++                                     ValueType op1_type,
++                                     ValueType op2_type,
++                                     int sew,
++                                     VReg result_reg_class,
++                                     VReg op1_reg_class,
++                                     DAGOperand op2_kind> :
++  Pat<(result_type (!cast<Intrinsic>(intrinsic_name)
++                   (result_type result_reg_class:$merge),
++                   (op1_type op1_reg_class:$rs1),
++                   (op2_type op2_kind:$rs2),
++                   (XLenVT timm:$round),
++                   VLOpFrag)),
++                   (!cast<Instruction>(inst#"_TU")
++                   (result_type result_reg_class:$merge),
++                   (op1_type op1_reg_class:$rs1),
++                   (op2_type op2_kind:$rs2),
++                   (XLenVT timm:$round),
++                   GPR:$vl, sew)>;
++
+ // Same as above but source operands are swapped.
+ class VPatBinaryNoMaskSwapped<string intrinsic_name,
+                               string inst,
+@@ -3943,6 +4187,31 @@ class VPatBinaryMaskTA<string intrinsic_name,
+                    (op2_type op2_kind:$rs2),
+                    (mask_type V0), GPR:$vl, sew, (XLenVT timm:$policy))>;
+ 
++class VPatBinaryMaskTARoundingMode<string intrinsic_name,
++                                   string inst,
++                                   ValueType result_type,
++                                   ValueType op1_type,
++                                   ValueType op2_type,
++                                   ValueType mask_type,
++                                   int sew,
++                                   VReg result_reg_class,
++                                   VReg op1_reg_class,
++                                   DAGOperand op2_kind> :
++  Pat<(result_type (!cast<Intrinsic>(intrinsic_name#"_mask")
++                   (result_type result_reg_class:$merge),
++                   (op1_type op1_reg_class:$rs1),
++                   (op2_type op2_kind:$rs2),
++                   (mask_type V0),
++                   (XLenVT timm:$round),
++                   VLOpFrag, (XLenVT timm:$policy))),
++                   (!cast<Instruction>(inst#"_MASK")
++                   (result_type result_reg_class:$merge),
++                   (op1_type op1_reg_class:$rs1),
++                   (op2_type op2_kind:$rs2),
++                   (mask_type V0),
++                   (XLenVT timm:$round),
++                   GPR:$vl, sew, (XLenVT timm:$policy))>;
++
+ // Same as above but source operands are swapped.
+ class VPatBinaryMaskSwapped<string intrinsic_name,
+                             string inst,
+@@ -4261,6 +4530,26 @@ multiclass VPatBinaryTA<string intrinsic,
+                          op2_kind>;
+ }
+ 
++multiclass VPatBinaryTARoundingMode<string intrinsic,
++                                    string inst,
++                                    ValueType result_type,
++                                    ValueType op1_type,
++                                    ValueType op2_type,
++                                    ValueType mask_type,
++                                    int sew,
++                                    VReg result_reg_class,
++                                    VReg op1_reg_class,
++                                    DAGOperand op2_kind>
++{
++  def : VPatBinaryNoMaskTARoundingMode<intrinsic, inst, result_type, op1_type, op2_type,
++                                       sew, op1_reg_class, op2_kind>;
++  def : VPatBinaryNoMaskTURoundingMode<intrinsic, inst, result_type, op1_type, op2_type,
++                                       sew, result_reg_class, op1_reg_class, op2_kind>;
++  def : VPatBinaryMaskTARoundingMode<intrinsic, inst, result_type, op1_type, op2_type,
++                                     mask_type, sew, result_reg_class, op1_reg_class,
++                                     op2_kind>;
++}
++
+ multiclass VPatBinarySwapped<string intrinsic,
+                       string inst,
+                       ValueType result_type,
+@@ -4387,6 +4676,15 @@ multiclass VPatBinaryV_VV<string intrinsic, string instruction,
+                         vti.RegClass, vti.RegClass>;
+ }
+ 
++multiclass VPatBinaryV_VVRoundingMode<string intrinsic, string instruction,
++                                      list<VTypeInfo> vtilist> {
++  foreach vti = vtilist in
++    defm : VPatBinaryTARoundingMode<intrinsic, instruction # "_VV_" # vti.LMul.MX,
++                                    vti.Vector, vti.Vector, vti.Vector,vti.Mask,
++                                    vti.Log2SEW, vti.RegClass,
++                                    vti.RegClass, vti.RegClass>;
++}
++
+ multiclass VPatBinaryV_VV_INT<string intrinsic, string instruction,
+                           list<VTypeInfo> vtilist> {
+   foreach vti = vtilist in {
+@@ -4428,6 +4726,17 @@ multiclass VPatBinaryV_VX<string intrinsic, string instruction,
+   }
+ }
+ 
++multiclass VPatBinaryV_VXRoundingMode<string intrinsic, string instruction,
++                                      list<VTypeInfo> vtilist> {
++  foreach vti = vtilist in {
++    defvar kind = "V"#vti.ScalarSuffix;
++    defm : VPatBinaryTARoundingMode<intrinsic, instruction#"_"#kind#"_"#vti.LMul.MX,
++                                    vti.Vector, vti.Vector, vti.Scalar, vti.Mask,
++                                    vti.Log2SEW, vti.RegClass,
++                                    vti.RegClass, vti.ScalarRegClass>;
++  }
++}
++
+ multiclass VPatBinaryV_VX_INT<string intrinsic, string instruction,
+                           list<VTypeInfo> vtilist> {
+   foreach vti = vtilist in
+@@ -4446,6 +4755,15 @@ multiclass VPatBinaryV_VI<string intrinsic, string instruction,
+                         vti.RegClass, imm_type>;
+ }
+ 
++multiclass VPatBinaryV_VIRoundingMode<string intrinsic, string instruction,
++                                      list<VTypeInfo> vtilist, Operand imm_type> {
++  foreach vti = vtilist in
++    defm : VPatBinaryTARoundingMode<intrinsic, instruction # "_VI_" # vti.LMul.MX,
++                                    vti.Vector, vti.Vector, XLenVT, vti.Mask,
++                                    vti.Log2SEW, vti.RegClass,
++                                    vti.RegClass, imm_type>;
++}
++
+ multiclass VPatBinaryM_MM<string intrinsic, string instruction> {
+   foreach mti = AllMasks in
+     def : VPatBinaryM<intrinsic, instruction # "_MM_" # mti.LMul.MX,
+@@ -4529,6 +4847,18 @@ multiclass VPatBinaryV_WV<string intrinsic, string instruction,
+   }
+ }
+ 
++multiclass VPatBinaryV_WVRoundingMode<string intrinsic, string instruction,
++                                      list<VTypeInfoToWide> vtilist> {
++  foreach VtiToWti = vtilist in {
++    defvar Vti = VtiToWti.Vti;
++    defvar Wti = VtiToWti.Wti;
++    defm : VPatBinaryTARoundingMode<intrinsic, instruction # "_WV_" # Vti.LMul.MX,
++                                    Vti.Vector, Wti.Vector, Vti.Vector, Vti.Mask,
++                                    Vti.Log2SEW, Vti.RegClass,
++                                    Wti.RegClass, Vti.RegClass>;
++  }
++}
++
+ multiclass VPatBinaryV_WX<string intrinsic, string instruction,
+                           list<VTypeInfoToWide> vtilist> {
+   foreach VtiToWti = vtilist in {
+@@ -4542,6 +4872,19 @@ multiclass VPatBinaryV_WX<string intrinsic, string instruction,
+   }
+ }
+ 
++multiclass VPatBinaryV_WXRoundingMode<string intrinsic, string instruction,
++                          list<VTypeInfoToWide> vtilist> {
++  foreach VtiToWti = vtilist in {
++    defvar Vti = VtiToWti.Vti;
++    defvar Wti = VtiToWti.Wti;
++    defvar kind = "W"#Vti.ScalarSuffix;
++    defm : VPatBinaryTARoundingMode<intrinsic, instruction#"_"#kind#"_"#Vti.LMul.MX,
++                                    Vti.Vector, Wti.Vector, Vti.Scalar, Vti.Mask,
++                                    Vti.Log2SEW, Vti.RegClass,
++                                    Wti.RegClass, Vti.ScalarRegClass>;
++  }
++}
++
+ multiclass VPatBinaryV_WI<string intrinsic, string instruction,
+                           list<VTypeInfoToWide> vtilist> {
+   foreach VtiToWti = vtilist in {
+@@ -4554,6 +4897,18 @@ multiclass VPatBinaryV_WI<string intrinsic, string instruction,
+   }
+ }
+ 
++multiclass VPatBinaryV_WIRoundingMode<string intrinsic, string instruction,
++                          list<VTypeInfoToWide> vtilist> {
++  foreach VtiToWti = vtilist in {
++    defvar Vti = VtiToWti.Vti;
++    defvar Wti = VtiToWti.Wti;
++    defm : VPatBinaryTARoundingMode<intrinsic, instruction # "_WI_" # Vti.LMul.MX,
++                                    Vti.Vector, Wti.Vector, XLenVT, Vti.Mask,
++                                    Vti.Log2SEW, Vti.RegClass,
++                                    Wti.RegClass, uimm5>;
++  }
++}
++
+ multiclass VPatBinaryV_VM<string intrinsic, string instruction,
+                           bit CarryOut = 0,
+                           list<VTypeInfo> vtilist = AllIntegerVectors> {
+@@ -4688,11 +5043,22 @@ multiclass VPatBinaryV_VV_VX_VI<string intrinsic, string instruction,
+       VPatBinaryV_VX<intrinsic, instruction, vtilist>,
+       VPatBinaryV_VI<intrinsic, instruction, vtilist, ImmType>;
+ 
++multiclass VPatBinaryV_VV_VX_VIRoundingMode<string intrinsic, string instruction,
++                                            list<VTypeInfo> vtilist, Operand ImmType = simm5>
++    : VPatBinaryV_VVRoundingMode<intrinsic, instruction, vtilist>,
++      VPatBinaryV_VXRoundingMode<intrinsic, instruction, vtilist>,
++      VPatBinaryV_VIRoundingMode<intrinsic, instruction, vtilist, ImmType>;
++
+ multiclass VPatBinaryV_VV_VX<string intrinsic, string instruction,
+                              list<VTypeInfo> vtilist>
+     : VPatBinaryV_VV<intrinsic, instruction, vtilist>,
+       VPatBinaryV_VX<intrinsic, instruction, vtilist>;
+ 
++multiclass VPatBinaryV_VV_VXRoundingMode<string intrinsic, string instruction,
++                             list<VTypeInfo> vtilist>
++    : VPatBinaryV_VVRoundingMode<intrinsic, instruction, vtilist>,
++      VPatBinaryV_VXRoundingMode<intrinsic, instruction, vtilist>;
++
+ multiclass VPatBinaryV_VX_VI<string intrinsic, string instruction,
+                              list<VTypeInfo> vtilist>
+     : VPatBinaryV_VX<intrinsic, instruction, vtilist>,
+@@ -4714,6 +5080,12 @@ multiclass VPatBinaryV_WV_WX_WI<string intrinsic, string instruction,
+       VPatBinaryV_WX<intrinsic, instruction, vtilist>,
+       VPatBinaryV_WI<intrinsic, instruction, vtilist>;
+ 
++multiclass VPatBinaryV_WV_WX_WIRoundingMode<string intrinsic, string instruction,
++                                            list<VTypeInfoToWide> vtilist>
++    : VPatBinaryV_WVRoundingMode<intrinsic, instruction, vtilist>,
++      VPatBinaryV_WXRoundingMode<intrinsic, instruction, vtilist>,
++      VPatBinaryV_WIRoundingMode<intrinsic, instruction, vtilist>;
++
+ multiclass VPatBinaryV_VM_XM_IM<string intrinsic, string instruction>
+     : VPatBinaryV_VM_TAIL<intrinsic, instruction>,
+       VPatBinaryV_XM_TAIL<intrinsic, instruction>,
+@@ -5382,34 +5754,34 @@ let Defs = [VXSAT], hasSideEffects = 1 in {
+ //===----------------------------------------------------------------------===//
+ // 12.2. Vector Single-Width Averaging Add and Subtract
+ //===----------------------------------------------------------------------===//
+-let Uses = [VXRM], hasSideEffects = 1 in {
+-  defm PseudoVAADDU : VPseudoVAALU_VV_VX;
+-  defm PseudoVAADD  : VPseudoVAALU_VV_VX;
+-  defm PseudoVASUBU : VPseudoVAALU_VV_VX;
+-  defm PseudoVASUB  : VPseudoVAALU_VV_VX;
++let hasSideEffects = 1 in {
++  defm PseudoVAADDU : VPseudoVAALU_VV_VX_RM;
++  defm PseudoVAADD  : VPseudoVAALU_VV_VX_RM;
++  defm PseudoVASUBU : VPseudoVAALU_VV_VX_RM;
++  defm PseudoVASUB  : VPseudoVAALU_VV_VX_RM;
+ }
+ 
+ //===----------------------------------------------------------------------===//
+ // 12.3. Vector Single-Width Fractional Multiply with Rounding and Saturation
+ //===----------------------------------------------------------------------===//
+-let Uses = [VXRM], Defs = [VXSAT], hasSideEffects = 1 in {
+-  defm PseudoVSMUL : VPseudoVSMUL_VV_VX;
++let Defs = [VXSAT], hasSideEffects = 1 in {
++  defm PseudoVSMUL : VPseudoVSMUL_VV_VX_RM;
+ }
+ 
+ //===----------------------------------------------------------------------===//
+ // 12.4. Vector Single-Width Scaling Shift Instructions
+ //===----------------------------------------------------------------------===//
+-let Uses = [VXRM], hasSideEffects = 1 in {
+-  defm PseudoVSSRL : VPseudoVSSHT_VV_VX_VI<uimm5>;
+-  defm PseudoVSSRA : VPseudoVSSHT_VV_VX_VI<uimm5>;
++let hasSideEffects = 1 in {
++  defm PseudoVSSRL : VPseudoVSSHT_VV_VX_VI_RM<uimm5>;
++  defm PseudoVSSRA : VPseudoVSSHT_VV_VX_VI_RM<uimm5>;
+ }
+ 
+ //===----------------------------------------------------------------------===//
+ // 12.5. Vector Narrowing Fixed-Point Clip Instructions
+ //===----------------------------------------------------------------------===//
+-let Uses = [VXRM], Defs = [VXSAT], hasSideEffects = 1 in {
+-  defm PseudoVNCLIP  : VPseudoVNCLP_WV_WX_WI;
+-  defm PseudoVNCLIPU : VPseudoVNCLP_WV_WX_WI;
++let Defs = [VXSAT], hasSideEffects = 1 in {
++  defm PseudoVNCLIP  : VPseudoVNCLP_WV_WX_WI_RM;
++  defm PseudoVNCLIPU : VPseudoVNCLP_WV_WX_WI_RM;
+ }
+ 
+ } // Predicates = [HasVInstructions]
+@@ -6040,30 +6412,36 @@ defm : VPatBinaryV_VV_VX<"int_riscv_vssub", "PseudoVSSUB", AllIntegerVectors>;
+ //===----------------------------------------------------------------------===//
+ // 12.2. Vector Single-Width Averaging Add and Subtract
+ //===----------------------------------------------------------------------===//
+-defm : VPatBinaryV_VV_VX<"int_riscv_vaaddu", "PseudoVAADDU", AllIntegerVectors>;
+-defm : VPatBinaryV_VV_VX<"int_riscv_vaadd", "PseudoVAADD", AllIntegerVectors>;
+-defm : VPatBinaryV_VV_VX<"int_riscv_vasubu", "PseudoVASUBU", AllIntegerVectors>;
+-defm : VPatBinaryV_VV_VX<"int_riscv_vasub", "PseudoVASUB", AllIntegerVectors>;
++defm : VPatBinaryV_VV_VXRoundingMode<"int_riscv_vaaddu", "PseudoVAADDU",
++                                     AllIntegerVectors>;
++defm : VPatBinaryV_VV_VXRoundingMode<"int_riscv_vasubu", "PseudoVASUBU",
++                                     AllIntegerVectors>;
++defm : VPatBinaryV_VV_VXRoundingMode<"int_riscv_vasub", "PseudoVASUB",
++                                     AllIntegerVectors>;
++defm : VPatBinaryV_VV_VXRoundingMode<"int_riscv_vaadd", "PseudoVAADD",
++                                     AllIntegerVectors>;
+ 
+ //===----------------------------------------------------------------------===//
+ // 12.3. Vector Single-Width Fractional Multiply with Rounding and Saturation
+ //===----------------------------------------------------------------------===//
+-defm : VPatBinaryV_VV_VX<"int_riscv_vsmul", "PseudoVSMUL", AllIntegerVectors>;
++defm : VPatBinaryV_VV_VXRoundingMode<"int_riscv_vsmul", "PseudoVSMUL",
++                                     AllIntegerVectors>;
+ 
+ //===----------------------------------------------------------------------===//
+ // 12.4. Vector Single-Width Scaling Shift Instructions
+ //===----------------------------------------------------------------------===//
+-defm : VPatBinaryV_VV_VX_VI<"int_riscv_vssrl", "PseudoVSSRL", AllIntegerVectors,
+-                            uimm5>;
+-defm : VPatBinaryV_VV_VX_VI<"int_riscv_vssra", "PseudoVSSRA", AllIntegerVectors,
+-                            uimm5>;
++defm : VPatBinaryV_VV_VX_VIRoundingMode<"int_riscv_vssrl", "PseudoVSSRL",
++                                        AllIntegerVectors, uimm5>;
++defm : VPatBinaryV_VV_VX_VIRoundingMode<"int_riscv_vssra", "PseudoVSSRA",
++                                        AllIntegerVectors, uimm5>;
+ 
+ //===----------------------------------------------------------------------===//
+ // 12.5. Vector Narrowing Fixed-Point Clip Instructions
+ //===----------------------------------------------------------------------===//
+-defm : VPatBinaryV_WV_WX_WI<"int_riscv_vnclipu", "PseudoVNCLIPU", AllWidenableIntVectors>;
+-defm : VPatBinaryV_WV_WX_WI<"int_riscv_vnclip", "PseudoVNCLIP", AllWidenableIntVectors>;
+-
++defm : VPatBinaryV_WV_WX_WIRoundingMode<"int_riscv_vnclipu", "PseudoVNCLIPU",
++                                        AllWidenableIntVectors>;
++defm : VPatBinaryV_WV_WX_WIRoundingMode<"int_riscv_vnclip", "PseudoVNCLIP",
++                                        AllWidenableIntVectors>;
+ } // Predicates = [HasVInstructions]
+ 
+ //===----------------------------------------------------------------------===//
+diff --git a/llvm/lib/Target/RISCV/RISCVMCInstLower.cpp b/llvm/lib/Target/RISCV/RISCVMCInstLower.cpp
+index 281918259cdb..7455df64c38a 100644
+--- a/llvm/lib/Target/RISCV/RISCVMCInstLower.cpp
++++ b/llvm/lib/Target/RISCV/RISCVMCInstLower.cpp
+@@ -159,6 +159,8 @@ static bool lowerRISCVVMachineInstrToMCInst(const MachineInstr *MI,
+     --NumOps;
+   if (RISCVII::hasVLOp(TSFlags))
+     --NumOps;
++  if (RISCVII::hasRoundModeOp(TSFlags))
++    --NumOps;
+   if (RISCVII::hasSEWOp(TSFlags))
+     --NumOps;
+ 
+diff --git a/llvm/lib/Target/RISCV/RISCVSystemOperands.td b/llvm/lib/Target/RISCV/RISCVSystemOperands.td
+index b9aa25b321b0..ced58fbb2a6d 100644
+--- a/llvm/lib/Target/RISCV/RISCVSystemOperands.td
++++ b/llvm/lib/Target/RISCV/RISCVSystemOperands.td
+@@ -350,7 +350,7 @@ def : SysReg<"dscratch1", 0x7B3>;
+ //===----------------------------------------------------------------------===//
+ def : SysReg<"vstart", 0x008>;
+ def : SysReg<"vxsat", 0x009>;
+-def : SysReg<"vxrm", 0x00A>;
++def SysRegVXRM : SysReg<"vxrm", 0x00A>;
+ def : SysReg<"vcsr", 0x00F>;
+ def : SysReg<"vl", 0xC20>;
+ def : SysReg<"vtype", 0xC21>;
+diff --git a/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp b/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp
+index cc881406666c..28908e88f39f 100644
+--- a/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp
++++ b/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp
+@@ -81,6 +81,7 @@ extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeRISCVTarget() {
+   initializeRISCVPreRAExpandPseudoPass(*PR);
+   initializeRISCVExpandPseudoPass(*PR);
+   initializeRISCVInsertVSETVLIPass(*PR);
++  initializeRISCVInsertReadWriteCSRPass(*PR);
+   initializeRISCVDAGToDAGISelPass(*PR);
+ }
+ 
+@@ -354,6 +355,7 @@ void RISCVPassConfig::addPreRegAlloc() {
+   if (TM->getOptLevel() != CodeGenOpt::None)
+     addPass(createRISCVMergeBaseOffsetOptPass());
+   addPass(createRISCVInsertVSETVLIPass());
++  addPass(createRISCVInsertReadWriteCSRPass());
+ }
+ 
+ void RISCVPassConfig::addPostRegAlloc() {
+-- 
+2.25.1
+

+ 44 - 51
recipes-devtools/clang/clang/0002-add-pref-instruction.patch → recipes-devtools/clang/clang/0003-RISCV-Add-prefetch-instructions.patch

@@ -1,37 +1,29 @@
-From 39cead71ef235f6fb6fc0a67a385234f1d182a06 Mon Sep 17 00:00:00 2001
+From 4cd4084046f2dd3d57eb6bee0e88baecd66e49df Mon Sep 17 00:00:00 2001
 From: "max.ma" <max.ma@starfivetech.com>
 From: "max.ma" <max.ma@starfivetech.com>
-Date: Sun, 7 Nov 2021 23:01:41 -0800
-Subject: [PATCH 2/6] add pref instruction
+Date: Sun, 25 Jun 2023 19:36:20 -0700
+Subject: [PATCH 3/9] [RISCV] Add prefetch instructions
 
 
 ---
 ---
- .../Target/RISCV/AsmParser/RISCVAsmParser.cpp | 18 ++++++++++++
+ .../Target/RISCV/AsmParser/RISCVAsmParser.cpp | 10 +++++++
  .../Target/RISCV/MCTargetDesc/RISCVBaseInfo.h |  2 ++
  .../Target/RISCV/MCTargetDesc/RISCVBaseInfo.h |  2 ++
  llvm/lib/Target/RISCV/RISCVInstrFormats.td    | 16 +++++++++++
  llvm/lib/Target/RISCV/RISCVInstrFormats.td    | 16 +++++++++++
- llvm/lib/Target/RISCV/RISCVInstrInfo.td       | 28 +++++++++++++++++++
- 4 files changed, 64 insertions(+)
+ llvm/lib/Target/RISCV/RISCVInstrInfo.td       | 27 +++++++++++++++++++
+ 4 files changed, 55 insertions(+)
 
 
 diff --git a/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp b/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
 diff --git a/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp b/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
-index 2954f9d1a1f6..93f43e1ed7cc 100644
+index 9752e398bd99..d577d83bf14e 100644
 --- a/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
 --- a/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
 +++ b/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
 +++ b/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
-@@ -573,6 +573,15 @@ public:
-     return IsConstantImm && isUInt<3>(Imm) && VK == RISCVMCExpr::VK_RISCV_None;
-   }
+@@ -566,6 +566,7 @@ public:
  
  
-+  bool isUImm4() const {
-+    int64_t Imm;
-+    RISCVMCExpr::VariantKind VK = RISCVMCExpr::VK_RISCV_None;
-+    if (!isImm())
-+      return false;
-+    bool IsConstantImm = evaluateConstantImm(getImm(), Imm, VK);
-+    return IsConstantImm && isUInt<4>(Imm) && VK == RISCVMCExpr::VK_RISCV_None;
-+  }
-+
-   bool isUImm5() const {
-     int64_t Imm;
-     RISCVMCExpr::VariantKind VK = RISCVMCExpr::VK_RISCV_None;
-@@ -629,6 +638,15 @@ public:
-            VK == RISCVMCExpr::VK_RISCV_None;
+   bool isUImm2() { return IsUImm<2>(); }
+   bool isUImm3() { return IsUImm<3>(); }
++  bool isUImm4() { return IsUImm<4>(); }
+   bool isUImm5() { return IsUImm<5>(); }
+   bool isUImm7() { return IsUImm<7>(); }
+ 
+@@ -597,6 +598,15 @@ public:
+     return IsConstantImm && isInt<6>(Imm) && VK == RISCVMCExpr::VK_RISCV_None;
    }
    }
  
  
 +  bool isSImm8() const {
 +  bool isSImm8() const {
@@ -43,30 +35,32 @@ index 2954f9d1a1f6..93f43e1ed7cc 100644
 +    return IsConstantImm && isInt<8>(Imm) && VK == RISCVMCExpr::VK_RISCV_None;
 +    return IsConstantImm && isInt<8>(Imm) && VK == RISCVMCExpr::VK_RISCV_None;
 +  }
 +  }
 +
 +
-   bool isCLUIImm() const {
+   bool isSImm6NonZero() const {
      if (!isImm())
      if (!isImm())
        return false;
        return false;
 diff --git a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.h b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.h
 diff --git a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.h b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.h
-index 5826a2c2a4ef..32f54111e413 100644
+index eb43f4bf0a02..a832f51bd517 100644
 --- a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.h
 --- a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.h
 +++ b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.h
 +++ b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.h
-@@ -197,9 +197,11 @@ enum OperandType : unsigned {
+@@ -244,11 +244,13 @@ enum OperandType : unsigned {
    OPERAND_UIMM2 = OPERAND_FIRST_RISCV_IMM,
    OPERAND_UIMM2 = OPERAND_FIRST_RISCV_IMM,
    OPERAND_UIMM3,
    OPERAND_UIMM3,
    OPERAND_UIMM4,
    OPERAND_UIMM4,
 +  OPERAND_UIMM4_PREF,
 +  OPERAND_UIMM4_PREF,
    OPERAND_UIMM5,
    OPERAND_UIMM5,
    OPERAND_UIMM7,
    OPERAND_UIMM7,
-   OPERAND_UIMM12,
+   OPERAND_UIMM7_LSB00,
+   OPERAND_UIMM8_LSB00,
+   OPERAND_UIMM8_LSB000,
 +  OPERAND_SIMM8,
 +  OPERAND_SIMM8,
-   OPERAND_SIMM12,
-   OPERAND_UIMM20,
-   OPERAND_UIMMLOG2XLEN,
+   OPERAND_UIMM12,
+   OPERAND_ZERO,
+   OPERAND_SIMM5,
 diff --git a/llvm/lib/Target/RISCV/RISCVInstrFormats.td b/llvm/lib/Target/RISCV/RISCVInstrFormats.td
 diff --git a/llvm/lib/Target/RISCV/RISCVInstrFormats.td b/llvm/lib/Target/RISCV/RISCVInstrFormats.td
-index 18b3844b1e10..1c4b3f553d82 100644
+index f2cd4ed8857f..e913edc47ec2 100644
 --- a/llvm/lib/Target/RISCV/RISCVInstrFormats.td
 --- a/llvm/lib/Target/RISCV/RISCVInstrFormats.td
 +++ b/llvm/lib/Target/RISCV/RISCVInstrFormats.td
 +++ b/llvm/lib/Target/RISCV/RISCVInstrFormats.td
-@@ -359,6 +359,22 @@ class RVInstCache<bits<12> cache, RISCVOpcode opcode, dag outs, dag ins,
+@@ -361,6 +361,22 @@ class RVInstI<bits<3> funct3, RISCVOpcode opcode, dag outs, dag ins,
    let Opcode = opcode.Value;
    let Opcode = opcode.Value;
  }
  }
  
  
@@ -90,10 +84,10 @@ index 18b3844b1e10..1c4b3f553d82 100644
                     dag outs, dag ins, string opcodestr, string argstr>
                     dag outs, dag ins, string opcodestr, string argstr>
      : RVInst<outs, ins, opcodestr, argstr, [], InstFormatI> {
      : RVInst<outs, ins, opcodestr, argstr, [], InstFormatI> {
 diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfo.td b/llvm/lib/Target/RISCV/RISCVInstrInfo.td
 diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfo.td b/llvm/lib/Target/RISCV/RISCVInstrInfo.td
-index a185926db5fe..1b7ba7f05e2e 100644
+index 75fee3f962d0..5849327ca255 100644
 --- a/llvm/lib/Target/RISCV/RISCVInstrInfo.td
 --- a/llvm/lib/Target/RISCV/RISCVInstrInfo.td
 +++ b/llvm/lib/Target/RISCV/RISCVInstrInfo.td
 +++ b/llvm/lib/Target/RISCV/RISCVInstrInfo.td
-@@ -180,6 +180,18 @@ def uimm3 : Operand<XLenVT> {
+@@ -205,6 +205,18 @@ def uimm3 : Operand<XLenVT> {
    let OperandNamespace = "RISCVOp";
    let OperandNamespace = "RISCVOp";
  }
  }
  
  
@@ -112,7 +106,7 @@ index a185926db5fe..1b7ba7f05e2e 100644
  def uimm5 : Operand<XLenVT>, ImmLeaf<XLenVT, [{return isUInt<5>(Imm);}]> {
  def uimm5 : Operand<XLenVT>, ImmLeaf<XLenVT, [{return isUInt<5>(Imm);}]> {
    let ParserMatchClass = UImmAsmOperand<5>;
    let ParserMatchClass = UImmAsmOperand<5>;
    let DecoderMethod = "decodeUImmOperand<5>";
    let DecoderMethod = "decodeUImmOperand<5>";
-@@ -208,6 +220,14 @@ def uimm7 : Operand<XLenVT> {
+@@ -212,6 +224,14 @@ def uimm5 : Operand<XLenVT>, ImmLeaf<XLenVT, [{return isUInt<5>(Imm);}]> {
    let OperandNamespace = "RISCVOp";
    let OperandNamespace = "RISCVOp";
  }
  }
  
  
@@ -124,12 +118,12 @@ index a185926db5fe..1b7ba7f05e2e 100644
 +  let OperandNamespace = "RISCVOp";
 +  let OperandNamespace = "RISCVOp";
 +}
 +}
 +
 +
- def simm12 : Operand<XLenVT>, ImmLeaf<XLenVT, [{return isInt<12>(Imm);}]> {
-   let ParserMatchClass = SImmAsmOperand<12>;
-   let EncoderMethod = "getImmOpValue";
-@@ -529,6 +549,12 @@ class CSR_cache<bits<12> cache, string opcodestr>
-     : RVInstCache<cache, OPC_SYSTEM, (outs), (ins GPR:$rs1),
-               opcodestr, "$rs1">, Sched<[WriteCSR, ReadCSR]>;
+ def InsnDirectiveOpcode : AsmOperandClass {
+   let Name = "InsnDirectiveOpcode";
+   let ParserMethod = "parseInsnDirectiveOpcode";
+@@ -560,6 +580,12 @@ class CSR_ir<bits<3> funct3, string opcodestr>
+     : RVInstI<funct3, OPC_SYSTEM, (outs GPR:$rd), (ins csr_sysreg:$imm12, GPR:$rs1),
+               opcodestr, "$rd, $imm12, $rs1">, Sched<[WriteCSR, ReadCSR]>;
  
  
 +let hasNoSchedulingInfo = 1,
 +let hasNoSchedulingInfo = 1,
 +    hasSideEffects = 1, mayLoad = 0, mayStore = 0 in
 +    hasSideEffects = 1, mayLoad = 0, mayStore = 0 in
@@ -140,15 +134,14 @@ index a185926db5fe..1b7ba7f05e2e 100644
  let hasNoSchedulingInfo = 1,
  let hasNoSchedulingInfo = 1,
      hasSideEffects = 1, mayLoad = 0, mayStore = 0 in
      hasSideEffects = 1, mayLoad = 0, mayStore = 0 in
  class CSR_ii<bits<3> funct3, string opcodestr>
  class CSR_ii<bits<3> funct3, string opcodestr>
-@@ -683,6 +709,8 @@ def CFLUSH_D_L1   : CSR_cache<0b111111000000, "cflush.d.l1">;
- def CDISCARD_D_L1 : CSR_cache<0b111111000010, "cdiscard.d.l1">;
- def CFLUSH_D_L2   : CSR_cache<0b111111000100, "cflush.d.l2">;
- def CDISCARD_D_L2 : CSR_cache<0b111111000110, "cdiscard.d.l2">;
-+def PREF          : PREF_iir<"pref">;
-+
- /* End */
- 
- def CSRRW : CSR_ir<0b001, "csrrw">;
+@@ -670,6 +696,7 @@ def SLT  : ALU_rr<0b0000000, 0b010, "slt">,
+ def SLTU : ALU_rr<0b0000000, 0b011, "sltu">,
+            Sched<[WriteIALU, ReadIALU, ReadIALU]>;
+ }
++def PREF : PREF_iir<"pref">;
+ def XOR  : ALU_rr<0b0000000, 0b100, "xor", /*Commutable*/1>,
+            Sched<[WriteIALU, ReadIALU, ReadIALU]>;
+ def SRL  : ALU_rr<0b0000000, 0b101, "srl">,
 -- 
 -- 
 2.25.1
 2.25.1
 
 

+ 15 - 14
recipes-devtools/clang/clang/0003-compiler-rt-Simplify-cross-compilation.-Don-t-use-na.patch

@@ -1,4 +1,4 @@
-From 3bc3328f89915cde33c26cec91a57b79109420f0 Mon Sep 17 00:00:00 2001
+From e1031fdbe63c6065b89e1e15f9bbc62cd36cd898 Mon Sep 17 00:00:00 2001
 From: Khem Raj <raj.khem@gmail.com>
 From: Khem Raj <raj.khem@gmail.com>
 Date: Thu, 19 May 2016 23:11:45 -0700
 Date: Thu, 19 May 2016 23:11:45 -0700
 Subject: [PATCH] compiler-rt: Simplify cross-compilation. Don't use
 Subject: [PATCH] compiler-rt: Simplify cross-compilation. Don't use
@@ -13,6 +13,7 @@ Subject: [PATCH] compiler-rt: Simplify cross-compilation. Don't use
 
 
 https://us.codeaurora.org/patches/quic/llvm/50683/compiler-rt-cross-compilation.patch
 https://us.codeaurora.org/patches/quic/llvm/50683/compiler-rt-cross-compilation.patch
 
 
+Upstream-Status: Pending
 Signed-off-by: Greg Fitzgerald <gregf@codeaurora.org>
 Signed-off-by: Greg Fitzgerald <gregf@codeaurora.org>
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 ---
 ---
@@ -20,24 +21,24 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
  1 file changed, 10 insertions(+), 1 deletion(-)
  1 file changed, 10 insertions(+), 1 deletion(-)
 
 
 diff --git a/compiler-rt/CMakeLists.txt b/compiler-rt/CMakeLists.txt
 diff --git a/compiler-rt/CMakeLists.txt b/compiler-rt/CMakeLists.txt
-index 3a41aa43e406..3bbfbca1f645 100644
+index 8a13508fcb98..2c2bda5befa5 100644
 --- a/compiler-rt/CMakeLists.txt
 --- a/compiler-rt/CMakeLists.txt
 +++ b/compiler-rt/CMakeLists.txt
 +++ b/compiler-rt/CMakeLists.txt
-@@ -67,7 +67,16 @@ set(COMPILER_RT_BAREMETAL_BUILD OFF CACHE BOOL
-   "Build for a bare-metal target.")
+@@ -89,7 +89,16 @@ if (COMPILER_RT_STANDALONE_BUILD)
+   set(CMAKE_CXX_EXTENSIONS NO)
  
  
- if (COMPILER_RT_STANDALONE_BUILD)
--  load_llvm_config()
-+  find_package(LLVM REQUIRED)
-+  list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_DIR}")
+   if (NOT LLVM_RUNTIMES_BUILD)
+-    load_llvm_config()
++    find_package(LLVM REQUIRED)
++    list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_DIR}")
 +
 +
-+  # Variables that AddLLVM.cmake depends on (included by AddCompilerRT)
-+  set(LLVM_TOOLS_BINARY_DIR "${LLVM_INSTALL_PREFIX}/bin")
-+  set(LLVM_LIBRARY_DIR "${LLVM_INSTALL_PREFIX}/lib")
++    # Variables that AddLLVM.cmake depends on (included by AddCompilerRT)
++    set(LLVM_TOOLS_BINARY_DIR "${LLVM_INSTALL_PREFIX}/bin")
++    set(LLVM_LIBRARY_DIR "${LLVM_INSTALL_PREFIX}/lib")
 +
 +
-+  set(LLVM_LIBRARY_OUTPUT_INTDIR
-+    ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX})
++    set(LLVM_LIBRARY_OUTPUT_INTDIR
++      ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX})
 +
 +
+   endif()
    if (TARGET intrinsics_gen)
    if (TARGET intrinsics_gen)
      # Loading the llvm config causes this target to be imported so place it
      # Loading the llvm config causes this target to be imported so place it
-     # under the appropriate folder in an IDE.

+ 10 - 10
recipes-devtools/clang/clang/0001-Merge-four-Custom-CSR-cache-instruction.patch → recipes-devtools/clang/clang/0004-RISCV-Add-customer-cache-instructions.patch

@@ -1,7 +1,7 @@
-From 00aa2f52bad795911c756b759e1a79baef01e414 Mon Sep 17 00:00:00 2001
+From bcd728e619143e082767170bfd7b255e521923db Mon Sep 17 00:00:00 2001
 From: "yilun.xie" <yilun.xie@starfivetech.com>
 From: "yilun.xie" <yilun.xie@starfivetech.com>
 Date: Fri, 29 Oct 2021 10:16:06 +0800
 Date: Fri, 29 Oct 2021 10:16:06 +0800
-Subject: [PATCH 1/6] Merge four Custom CSR cache instruction
+Subject: [PATCH 4/9] [RISCV] Add customer cache instructions
 
 
 ---
 ---
  llvm/lib/Target/RISCV/RISCVInstrFormats.td | 12 ++++++++++++
  llvm/lib/Target/RISCV/RISCVInstrFormats.td | 12 ++++++++++++
@@ -9,10 +9,10 @@ Subject: [PATCH 1/6] Merge four Custom CSR cache instruction
  2 files changed, 25 insertions(+)
  2 files changed, 25 insertions(+)
 
 
 diff --git a/llvm/lib/Target/RISCV/RISCVInstrFormats.td b/llvm/lib/Target/RISCV/RISCVInstrFormats.td
 diff --git a/llvm/lib/Target/RISCV/RISCVInstrFormats.td b/llvm/lib/Target/RISCV/RISCVInstrFormats.td
-index 18b31f85bfdb..18b3844b1e10 100644
+index e913edc47ec2..d3953227b0cd 100644
 --- a/llvm/lib/Target/RISCV/RISCVInstrFormats.td
 --- a/llvm/lib/Target/RISCV/RISCVInstrFormats.td
 +++ b/llvm/lib/Target/RISCV/RISCVInstrFormats.td
 +++ b/llvm/lib/Target/RISCV/RISCVInstrFormats.td
-@@ -347,6 +347,18 @@ class RVInstI<bits<3> funct3, RISCVOpcode opcode, dag outs, dag ins,
+@@ -377,6 +377,18 @@ class RVInstPref<RISCVOpcode opcode, dag outs, dag ins,
    let Opcode = opcode.Value;
    let Opcode = opcode.Value;
  }
  }
  
  
@@ -32,12 +32,12 @@ index 18b31f85bfdb..18b3844b1e10 100644
                     dag outs, dag ins, string opcodestr, string argstr>
                     dag outs, dag ins, string opcodestr, string argstr>
      : RVInst<outs, ins, opcodestr, argstr, [], InstFormatI> {
      : RVInst<outs, ins, opcodestr, argstr, [], InstFormatI> {
 diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfo.td b/llvm/lib/Target/RISCV/RISCVInstrInfo.td
 diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfo.td b/llvm/lib/Target/RISCV/RISCVInstrInfo.td
-index fdb1af9d558f..a185926db5fe 100644
+index 5849327ca255..6bd3de20b807 100644
 --- a/llvm/lib/Target/RISCV/RISCVInstrInfo.td
 --- a/llvm/lib/Target/RISCV/RISCVInstrInfo.td
 +++ b/llvm/lib/Target/RISCV/RISCVInstrInfo.td
 +++ b/llvm/lib/Target/RISCV/RISCVInstrInfo.td
-@@ -523,6 +523,12 @@ class CSR_ir<bits<3> funct3, string opcodestr>
-     : RVInstI<funct3, OPC_SYSTEM, (outs GPR:$rd), (ins csr_sysreg:$imm12, GPR:$rs1),
-               opcodestr, "$rd, $imm12, $rs1">, Sched<[WriteCSR, ReadCSR]>;
+@@ -586,6 +586,12 @@ class PREF_iir<string opcodestr>
+     : RVInstPref<OPC_OP_IMM, (outs), (ins uimm4_pref:$imm4, simm8:$imm8, GPR:$rs1),
+               opcodestr, "$imm4, ${imm8}(${rs1})">;
  
  
 +let hasNoSchedulingInfo = 1,
 +let hasNoSchedulingInfo = 1,
 +    hasSideEffects = 1, mayLoad = 0, mayStore = 0 in
 +    hasSideEffects = 1, mayLoad = 0, mayStore = 0 in
@@ -48,8 +48,8 @@ index fdb1af9d558f..a185926db5fe 100644
  let hasNoSchedulingInfo = 1,
  let hasNoSchedulingInfo = 1,
      hasSideEffects = 1, mayLoad = 0, mayStore = 0 in
      hasSideEffects = 1, mayLoad = 0, mayStore = 0 in
  class CSR_ii<bits<3> funct3, string opcodestr>
  class CSR_ii<bits<3> funct3, string opcodestr>
-@@ -672,6 +678,13 @@ def UNIMP : RVInstI<0b001, OPC_SYSTEM, (outs), (ins), "unimp", "">,
- }
+@@ -773,6 +779,13 @@ def WRS_STO : RVInstI<0b000, OPC_SYSTEM, (outs), (ins), "wrs.sto", "">,
+ 
  } // hasSideEffects = 1, mayLoad = 0, mayStore = 0
  } // hasSideEffects = 1, mayLoad = 0, mayStore = 0
  
  
 +/* Custom instruction and CSRs */
 +/* Custom instruction and CSRs */

+ 32 - 30
recipes-devtools/clang/clang/0004-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch

@@ -1,4 +1,4 @@
-From 2da0422b45b2b9842a2ceb6840beba05356057d2 Mon Sep 17 00:00:00 2001
+From 1279fd32e3809fe9b8f0bddab69042a92637282b Mon Sep 17 00:00:00 2001
 From: Khem Raj <raj.khem@gmail.com>
 From: Khem Raj <raj.khem@gmail.com>
 Date: Sat, 21 May 2016 00:33:20 +0000
 Date: Sat, 21 May 2016 00:33:20 +0000
 Subject: [PATCH] llvm: TargetLibraryInfo: Undefine libc functions if they are
 Subject: [PATCH] llvm: TargetLibraryInfo: Undefine libc functions if they are
@@ -7,82 +7,84 @@ Subject: [PATCH] llvm: TargetLibraryInfo: Undefine libc functions if they are
 musl defines some functions as macros and not inline functions
 musl defines some functions as macros and not inline functions
 if this is the case then make sure to undefine them
 if this is the case then make sure to undefine them
 
 
+Upstream-Status: Pending
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 ---
 ---
- .../llvm/Analysis/TargetLibraryInfo.def       | 21 +++++++++++++++++++
- 1 file changed, 21 insertions(+)
+ .../llvm/Analysis/TargetLibraryInfo.def       | 22 ++++++++++++++++++-
+ 1 file changed, 21 insertions(+), 1 deletion(-)
 
 
 diff --git a/llvm/include/llvm/Analysis/TargetLibraryInfo.def b/llvm/include/llvm/Analysis/TargetLibraryInfo.def
 diff --git a/llvm/include/llvm/Analysis/TargetLibraryInfo.def b/llvm/include/llvm/Analysis/TargetLibraryInfo.def
-index 9c1abef33b28..29d2a79ddecc 100644
+index 5f6af3514fc2..9ac2e912590f 100644
 --- a/llvm/include/llvm/Analysis/TargetLibraryInfo.def
 --- a/llvm/include/llvm/Analysis/TargetLibraryInfo.def
 +++ b/llvm/include/llvm/Analysis/TargetLibraryInfo.def
 +++ b/llvm/include/llvm/Analysis/TargetLibraryInfo.def
-@@ -815,6 +815,9 @@ TLI_DEFINE_STRING_INTERNAL("fmodl")
- TLI_DEFINE_ENUM_INTERNAL(fopen)
- TLI_DEFINE_STRING_INTERNAL("fopen")
+@@ -1303,6 +1303,9 @@ TLI_DEFINE_STRING_INTERNAL("fopen")
+ TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr)
+ 
  /// FILE *fopen64(const char *filename, const char *opentype)
  /// FILE *fopen64(const char *filename, const char *opentype)
 +#ifdef fopen64
 +#ifdef fopen64
 +#undef fopen64
 +#undef fopen64
 +#endif
 +#endif
  TLI_DEFINE_ENUM_INTERNAL(fopen64)
  TLI_DEFINE_ENUM_INTERNAL(fopen64)
  TLI_DEFINE_STRING_INTERNAL("fopen64")
  TLI_DEFINE_STRING_INTERNAL("fopen64")
- /// int fork();
-@@ -862,6 +865,9 @@ TLI_DEFINE_STRING_INTERNAL("fseek")
- /// int fseeko(FILE *stream, off_t offset, int whence);
+ TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr)
+@@ -1381,7 +1384,9 @@ TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Long, Int)
  TLI_DEFINE_ENUM_INTERNAL(fseeko)
  TLI_DEFINE_ENUM_INTERNAL(fseeko)
  TLI_DEFINE_STRING_INTERNAL("fseeko")
  TLI_DEFINE_STRING_INTERNAL("fseeko")
+ TLI_DEFINE_SIG_INTERNAL(Int, Ptr, IntX, Int)
+-
 +#ifdef fseeko64
 +#ifdef fseeko64
 +#undef fseeko64
 +#undef fseeko64
 +#endif
 +#endif
  /// int fseeko64(FILE *stream, off64_t offset, int whence)
  /// int fseeko64(FILE *stream, off64_t offset, int whence)
  TLI_DEFINE_ENUM_INTERNAL(fseeko64)
  TLI_DEFINE_ENUM_INTERNAL(fseeko64)
  TLI_DEFINE_STRING_INTERNAL("fseeko64")
  TLI_DEFINE_STRING_INTERNAL("fseeko64")
-@@ -872,6 +878,9 @@ TLI_DEFINE_STRING_INTERNAL("fsetpos")
- TLI_DEFINE_ENUM_INTERNAL(fstat)
- TLI_DEFINE_STRING_INTERNAL("fstat")
+@@ -1398,6 +1403,9 @@ TLI_DEFINE_STRING_INTERNAL("fstat")
+ TLI_DEFINE_SIG_INTERNAL(Int, Int, Ptr)
+ 
  /// int fstat64(int filedes, struct stat64 *buf)
  /// int fstat64(int filedes, struct stat64 *buf)
 +#ifdef fstat64
 +#ifdef fstat64
 +#undef fstat64
 +#undef fstat64
 +#endif
 +#endif
  TLI_DEFINE_ENUM_INTERNAL(fstat64)
  TLI_DEFINE_ENUM_INTERNAL(fstat64)
  TLI_DEFINE_STRING_INTERNAL("fstat64")
  TLI_DEFINE_STRING_INTERNAL("fstat64")
- /// int fstatvfs(int fildes, struct statvfs *buf);
-@@ -887,6 +896,9 @@ TLI_DEFINE_STRING_INTERNAL("ftell")
- TLI_DEFINE_ENUM_INTERNAL(ftello)
- TLI_DEFINE_STRING_INTERNAL("ftello")
+ TLI_DEFINE_SIG_INTERNAL(Int, Int, Ptr)
+@@ -1423,6 +1431,9 @@ TLI_DEFINE_STRING_INTERNAL("ftello")
+ TLI_DEFINE_SIG_INTERNAL(IntPlus, Ptr)
+ 
  /// off64_t ftello64(FILE *stream)
  /// off64_t ftello64(FILE *stream)
 +#ifdef ftello64
 +#ifdef ftello64
 +#undef ftello64
 +#undef ftello64
 +#endif
 +#endif
  TLI_DEFINE_ENUM_INTERNAL(ftello64)
  TLI_DEFINE_ENUM_INTERNAL(ftello64)
  TLI_DEFINE_STRING_INTERNAL("ftello64")
  TLI_DEFINE_STRING_INTERNAL("ftello64")
- /// int ftrylockfile(FILE *file);
-@@ -1013,6 +1025,9 @@ TLI_DEFINE_STRING_INTERNAL("logl")
- TLI_DEFINE_ENUM_INTERNAL(lstat)
- TLI_DEFINE_STRING_INTERNAL("lstat")
+ TLI_DEFINE_SIG_INTERNAL(Int64, Ptr)
+@@ -1633,6 +1644,9 @@ TLI_DEFINE_STRING_INTERNAL("lstat")
+ TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr)
+ 
  /// int lstat64(const char *path, struct stat64 *buf);
  /// int lstat64(const char *path, struct stat64 *buf);
 +#ifdef lstat64
 +#ifdef lstat64
 +#undef lstat64
 +#undef lstat64
 +#endif
 +#endif
  TLI_DEFINE_ENUM_INTERNAL(lstat64)
  TLI_DEFINE_ENUM_INTERNAL(lstat64)
  TLI_DEFINE_STRING_INTERNAL("lstat64")
  TLI_DEFINE_STRING_INTERNAL("lstat64")
- /// void *malloc(size_t size);
-@@ -1262,6 +1277,9 @@ TLI_DEFINE_STRING_INTERNAL("sscanf")
- TLI_DEFINE_ENUM_INTERNAL(stat)
- TLI_DEFINE_STRING_INTERNAL("stat")
+ TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr)
+@@ -2045,6 +2059,9 @@ TLI_DEFINE_STRING_INTERNAL("stat")
+ TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr)
+ 
  /// int stat64(const char *path, struct stat64 *buf);
  /// int stat64(const char *path, struct stat64 *buf);
 +#ifdef stat64
 +#ifdef stat64
 +#undef stat64
 +#undef stat64
 +#endif
 +#endif
  TLI_DEFINE_ENUM_INTERNAL(stat64)
  TLI_DEFINE_ENUM_INTERNAL(stat64)
  TLI_DEFINE_STRING_INTERNAL("stat64")
  TLI_DEFINE_STRING_INTERNAL("stat64")
- /// int statvfs(const char *path, struct statvfs *buf);
-@@ -1397,6 +1415,9 @@ TLI_DEFINE_STRING_INTERNAL("times")
- TLI_DEFINE_ENUM_INTERNAL(tmpfile)
- TLI_DEFINE_STRING_INTERNAL("tmpfile")
+ TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr)
+@@ -2270,6 +2287,9 @@ TLI_DEFINE_STRING_INTERNAL("tmpfile")
+ TLI_DEFINE_SIG_INTERNAL(Ptr)
+ 
  /// FILE *tmpfile64(void)
  /// FILE *tmpfile64(void)
 +#ifdef tmpfile64
 +#ifdef tmpfile64
 +#undef tmpfile64
 +#undef tmpfile64
 +#endif
 +#endif
  TLI_DEFINE_ENUM_INTERNAL(tmpfile64)
  TLI_DEFINE_ENUM_INTERNAL(tmpfile64)
  TLI_DEFINE_STRING_INTERNAL("tmpfile64")
  TLI_DEFINE_STRING_INTERNAL("tmpfile64")
- /// int toascii(int c);
+ TLI_DEFINE_SIG_INTERNAL(Ptr)

+ 0 - 49
recipes-devtools/clang/clang/0004-set-default-march-to-rv64imafcd_zba_zbb_zbc_zbs-and-.patch

@@ -1,49 +0,0 @@
-From 4a54300a0ebde3b9152878c55d3c394c74b4876c Mon Sep 17 00:00:00 2001
-From: "max.ma" <max.ma@starfivetech.com>
-Date: Mon, 10 Jan 2022 19:19:33 -0800
-Subject: [PATCH 4/6] set default march to rv64imafcd_zba_zbb_zbc_zbs and mabi
- to lp64d
-
----
- clang/lib/Driver/ToolChains/Arch/RISCV.cpp | 19 +++++++++++--------
- 1 file changed, 11 insertions(+), 8 deletions(-)
-
-diff --git a/clang/lib/Driver/ToolChains/Arch/RISCV.cpp b/clang/lib/Driver/ToolChains/Arch/RISCV.cpp
-index 8a8ed20986c5..21a7cdf02291 100644
---- a/clang/lib/Driver/ToolChains/Arch/RISCV.cpp
-+++ b/clang/lib/Driver/ToolChains/Arch/RISCV.cpp
-@@ -211,10 +211,11 @@ StringRef riscv::getRISCVABI(const ArgList &Args, const llvm::Triple &Triple) {
-     else
-       return "ilp32d";
-   } else {
--    if (Triple.getOS() == llvm::Triple::UnknownOS)
--      return "lp64";
--    else
--      return "lp64d";
-+    //if (Triple.getOS() == llvm::Triple::UnknownOS)
-+    //  return "lp64";
-+    //else
-+    //  return "lp64d";
-+    return "lp64d";
-   }
- }
- 
-@@ -289,9 +290,11 @@ StringRef riscv::getRISCVArch(const llvm::opt::ArgList &Args,
-     else
-       return "rv32imafdc";
-   } else {
--    if (Triple.getOS() == llvm::Triple::UnknownOS)
--      return "rv64imac";
--    else
--      return "rv64imafdc";
-+    //if (Triple.getOS() == llvm::Triple::UnknownOS)
-+    //  return "rv64imac";
-+    //else
-+    //  return "rv64imafdc";
-+    // align the default march with gcc toolchain of dubhe
-+    return "rv64imafdc_zba_zbb_zbc_zbs";  
-   }
- }
--- 
-2.25.1
-

+ 5 - 5
recipes-devtools/clang/clang/0003-add-multilib-v-b-support-for-baremetal-toolchain.patch → recipes-devtools/clang/clang/0005-RISCV-Add-multilib-v-b-support-for-baremetal-toolcha.patch

@@ -1,17 +1,17 @@
-From dccca6f853d2c9ed88bce3f3082dd2b46f179f3d Mon Sep 17 00:00:00 2001
+From f24280ce4b015090f4da8de03d5b57bfc6756de8 Mon Sep 17 00:00:00 2001
 From: "max.ma" <max.ma@starfivetech.com>
 From: "max.ma" <max.ma@starfivetech.com>
 Date: Wed, 5 Jan 2022 19:27:39 -0800
 Date: Wed, 5 Jan 2022 19:27:39 -0800
-Subject: [PATCH 3/6] add multilib v&b support for baremetal toolchain
+Subject: [PATCH 5/9] [RISCV] Add multilib v&b support for baremetal toolchain
 
 
 ---
 ---
  clang/lib/Driver/ToolChains/Gnu.cpp | 30 +++++++++++++++++++++++++++--
  clang/lib/Driver/ToolChains/Gnu.cpp | 30 +++++++++++++++++++++++++++--
  1 file changed, 28 insertions(+), 2 deletions(-)
  1 file changed, 28 insertions(+), 2 deletions(-)
 
 
 diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp
 diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp
-index a10edc3db409..045f063b28f2 100644
+index 4f2340316654..c1737fe56635 100644
 --- a/clang/lib/Driver/ToolChains/Gnu.cpp
 --- a/clang/lib/Driver/ToolChains/Gnu.cpp
 +++ b/clang/lib/Driver/ToolChains/Gnu.cpp
 +++ b/clang/lib/Driver/ToolChains/Gnu.cpp
-@@ -1656,7 +1656,8 @@ static void findRISCVBareMetalMultilibs(const Driver &D,
+@@ -1695,7 +1695,8 @@ static void findRISCVBareMetalMultilibs(const Driver &D,
    constexpr RiscvMultilib RISCVMultilibSet[] = {
    constexpr RiscvMultilib RISCVMultilibSet[] = {
        {"rv32i", "ilp32"},     {"rv32im", "ilp32"},     {"rv32iac", "ilp32"},
        {"rv32i", "ilp32"},     {"rv32im", "ilp32"},     {"rv32iac", "ilp32"},
        {"rv32imac", "ilp32"},  {"rv32imafc", "ilp32f"}, {"rv64imac", "lp64"},
        {"rv32imac", "ilp32"},  {"rv32imafc", "ilp32f"}, {"rv64imac", "lp64"},
@@ -21,7 +21,7 @@ index a10edc3db409..045f063b28f2 100644
  
  
    std::vector<Multilib> Ms;
    std::vector<Multilib> Ms;
    for (auto Element : RISCVMultilibSet) {
    for (auto Element : RISCVMultilibSet) {
-@@ -1682,8 +1683,33 @@ static void findRISCVBareMetalMultilibs(const Driver &D,
+@@ -1721,8 +1722,33 @@ static void findRISCVBareMetalMultilibs(const Driver &D,
    llvm::StringSet<> Added_ABIs;
    llvm::StringSet<> Added_ABIs;
    StringRef ABIName = tools::riscv::getRISCVABI(Args, TargetTriple);
    StringRef ABIName = tools::riscv::getRISCVABI(Args, TargetTriple);
    StringRef MArch = tools::riscv::getRISCVArch(Args, TargetTriple);
    StringRef MArch = tools::riscv::getRISCVArch(Args, TargetTriple);

+ 14 - 9
recipes-devtools/clang/clang/0005-llvm-allow-env-override-of-exe-and-libdir-path.patch

@@ -1,4 +1,4 @@
-From affcd7f14bca2d9ee95352cd979f66f55901272a Mon Sep 17 00:00:00 2001
+From 8f8e25be1822d93341b0e32ba42d22c8c54016d4 Mon Sep 17 00:00:00 2001
 From: Martin Kelly <mkelly@xevo.com>
 From: Martin Kelly <mkelly@xevo.com>
 Date: Fri, 19 May 2017 00:22:57 -0700
 Date: Fri, 19 May 2017 00:22:57 -0700
 Subject: [PATCH] llvm: allow env override of exe and libdir path
 Subject: [PATCH] llvm: allow env override of exe and libdir path
@@ -15,14 +15,14 @@ Upstream-Status: Inappropriate [OE-specific]
 Signed-off-by: Martin Kelly <mkelly@xevo.com>
 Signed-off-by: Martin Kelly <mkelly@xevo.com>
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 ---
 ---
- llvm/tools/llvm-config/llvm-config.cpp | 21 +++++++++++++++++++--
- 1 file changed, 19 insertions(+), 2 deletions(-)
+ llvm/tools/llvm-config/llvm-config.cpp | 25 +++++++++++++++++++------
+ 1 file changed, 19 insertions(+), 6 deletions(-)
 
 
 diff --git a/llvm/tools/llvm-config/llvm-config.cpp b/llvm/tools/llvm-config/llvm-config.cpp
 diff --git a/llvm/tools/llvm-config/llvm-config.cpp b/llvm/tools/llvm-config/llvm-config.cpp
-index 8ed88f33ead4..9e26a2b41409 100644
+index b1d795a0a349..dbeddeb2152e 100644
 --- a/llvm/tools/llvm-config/llvm-config.cpp
 --- a/llvm/tools/llvm-config/llvm-config.cpp
 +++ b/llvm/tools/llvm-config/llvm-config.cpp
 +++ b/llvm/tools/llvm-config/llvm-config.cpp
-@@ -247,6 +247,13 @@ Typical components:\n\
+@@ -246,6 +246,13 @@ Typical components:\n\
  
  
  /// Compute the path to the main executable.
  /// Compute the path to the main executable.
  std::string GetExecutablePath(const char *Argv0) {
  std::string GetExecutablePath(const char *Argv0) {
@@ -36,7 +36,7 @@ index 8ed88f33ead4..9e26a2b41409 100644
    // This just needs to be some symbol in the binary; C++ doesn't
    // This just needs to be some symbol in the binary; C++ doesn't
    // allow taking the address of ::main however.
    // allow taking the address of ::main however.
    void *P = (void *)(intptr_t)GetExecutablePath;
    void *P = (void *)(intptr_t)GetExecutablePath;
-@@ -326,7 +333,7 @@ int main(int argc, char **argv) {
+@@ -325,7 +332,7 @@ int main(int argc, char **argv) {
    // Compute various directory locations based on the derived location
    // Compute various directory locations based on the derived location
    // information.
    // information.
    std::string ActivePrefix, ActiveBinDir, ActiveIncludeDir, ActiveLibDir,
    std::string ActivePrefix, ActiveBinDir, ActiveIncludeDir, ActiveLibDir,
@@ -45,11 +45,15 @@ index 8ed88f33ead4..9e26a2b41409 100644
    std::string ActiveIncludeOption;
    std::string ActiveIncludeOption;
    if (IsInDevelopmentTree) {
    if (IsInDevelopmentTree) {
      ActiveIncludeDir = std::string(LLVM_SRC_ROOT) + "/include";
      ActiveIncludeDir = std::string(LLVM_SRC_ROOT) + "/include";
-@@ -367,7 +374,17 @@ int main(int argc, char **argv) {
+@@ -366,12 +373,18 @@ int main(int argc, char **argv) {
        sys::fs::make_absolute(ActivePrefix, Path);
        sys::fs::make_absolute(ActivePrefix, Path);
        ActiveBinDir = std::string(Path.str());
        ActiveBinDir = std::string(Path.str());
      }
      }
 -    ActiveLibDir = ActivePrefix + "/lib" + LLVM_LIBDIR_SUFFIX;
 -    ActiveLibDir = ActivePrefix + "/lib" + LLVM_LIBDIR_SUFFIX;
+-    {
+-      SmallString<256> Path(LLVM_INSTALL_PACKAGE_DIR);
+-      sys::fs::make_absolute(ActivePrefix, Path);
+-      ActiveCMakeDir = std::string(Path.str());
 +    // Hack for Yocto: we need to override the lib path when we are using
 +    // Hack for Yocto: we need to override the lib path when we are using
 +    // llvm-config from within a target sysroot since LLVM_LIBDIR_SUFFIX
 +    // llvm-config from within a target sysroot since LLVM_LIBDIR_SUFFIX
 +    // maybe different for host llvm vs target e.g. ppc64 Libdir=lib64 but
 +    // maybe different for host llvm vs target e.g. ppc64 Libdir=lib64 but
@@ -59,8 +63,9 @@ index 8ed88f33ead4..9e26a2b41409 100644
 +      BaseLibDir = std::string(YoctoLibDir);
 +      BaseLibDir = std::string(YoctoLibDir);
 +    } else {
 +    } else {
 +      BaseLibDir = std::string("/lib") + LLVM_LIBDIR_SUFFIX;
 +      BaseLibDir = std::string("/lib") + LLVM_LIBDIR_SUFFIX;
-+    }
+     }
 +    ActiveLibDir = ActivePrefix + BaseLibDir;
 +    ActiveLibDir = ActivePrefix + BaseLibDir;
-     ActiveCMakeDir = ActiveLibDir + "/cmake/llvm";
++    ActiveCMakeDir = ActiveLibDir + "/cmake/llvm";
      ActiveIncludeOption = "-I" + ActiveIncludeDir;
      ActiveIncludeOption = "-I" + ActiveIncludeDir;
    }
    }
+ 

+ 0 - 75
recipes-devtools/clang/clang/0005-support-b-letter-in-march-string.patch

@@ -1,75 +0,0 @@
-From 49624b4167173ffbbf3bdf1b9cfa33d5efcd1f0b Mon Sep 17 00:00:00 2001
-From: "max.ma" <max.ma@starfivetech.com>
-Date: Fri, 15 Apr 2022 02:16:43 -0700
-Subject: [PATCH 5/6] support "b" letter in march string
-
----
- llvm/lib/Support/RISCVISAInfo.cpp      |  8 +++++++-
- llvm/lib/Target/RISCV/RISCV.td         | 11 +++++++++++
- llvm/lib/Target/RISCV/RISCVSubtarget.h |  2 ++
- 3 files changed, 20 insertions(+), 1 deletion(-)
-
-diff --git a/llvm/lib/Support/RISCVISAInfo.cpp b/llvm/lib/Support/RISCVISAInfo.cpp
-index 20dd08f17311..edeceeaf4e82 100644
---- a/llvm/lib/Support/RISCVISAInfo.cpp
-+++ b/llvm/lib/Support/RISCVISAInfo.cpp
-@@ -600,7 +600,13 @@ RISCVISAInfo::parseArchString(StringRef Arch, bool EnableExperimentalExtension,
-       return createStringError(errc::invalid_argument,
-                                "unsupported standard user-level extension '%c'",
-                                C);
--    ISAInfo->addExtension(std::string(1, C), Major, Minor);
-+    if (C == 'b') {
-+      ISAInfo->addExtension("zba", Major, Minor);
-+      ISAInfo->addExtension("zbb", Major, Minor);
-+      ISAInfo->addExtension("zbc", Major, Minor);
-+      ISAInfo->addExtension("zbs", Major, Minor);
-+    } else 
-+      ISAInfo->addExtension(std::string(1, C), Major, Minor);
- 
-     // Consume full extension name and version, including any optional '_'
-     // between this extension and the next
-diff --git a/llvm/lib/Target/RISCV/RISCV.td b/llvm/lib/Target/RISCV/RISCV.td
-index 2940fdf04192..e9b64bdafab8 100644
---- a/llvm/lib/Target/RISCV/RISCV.td
-+++ b/llvm/lib/Target/RISCV/RISCV.td
-@@ -193,6 +193,17 @@ def HasStdExtZbbOrZbp
-                                    "'Zbb' (Basic Bit-Manipulation) or "
-                                    "'Zbp' (Permutation 'Zb' Instructions)">;
- 
-+def FeatureStdExtB
-+    : SubtargetFeature<"b", "HasStdExtB", "true",
-+                       "'B' (Bit Manipulation Instructions)",
-+                       [FeatureStdExtZba,
-+                        FeatureStdExtZbb,
-+                        FeatureStdExtZbc,
-+                        FeatureStdExtZbs]>;
-+def HasStdExtB : Predicate<"Subtarget->hasStdExtB()">,
-+                           AssemblerPredicate<(all_of FeatureStdExtB),
-+                           "'B' (Bit Manipulation Instructions)">;
-+
- def FeatureStdExtZbkb
-     : SubtargetFeature<"zbkb", "HasStdExtZbkb", "true",
-                        "'Zbkb' (Bitmanip instructions for Cryptography)">;
-diff --git a/llvm/lib/Target/RISCV/RISCVSubtarget.h b/llvm/lib/Target/RISCV/RISCVSubtarget.h
-index a63c07597a2c..75d20193c9a0 100644
---- a/llvm/lib/Target/RISCV/RISCVSubtarget.h
-+++ b/llvm/lib/Target/RISCV/RISCVSubtarget.h
-@@ -65,6 +65,7 @@ private:
-   bool HasStdExtF = false;
-   bool HasStdExtD = false;
-   bool HasStdExtC = false;
-+  bool HasStdExtB = false;  
-   bool HasStdExtZihintpause = false;
-   bool HasStdExtZba = false;
-   bool HasStdExtZbb = false;
-@@ -164,6 +165,7 @@ public:
-   bool hasStdExtC() const { return HasStdExtC; }
-   bool hasStdExtV() const { return HasStdExtV; }
-   bool hasStdExtZihintpause() const { return HasStdExtZihintpause; }
-+  bool hasStdExtB() const { return HasStdExtB; }
-   bool hasStdExtZba() const { return HasStdExtZba; }
-   bool hasStdExtZbb() const { return HasStdExtZbb; }
-   bool hasStdExtZbc() const { return HasStdExtZbc; }
--- 
-2.25.1
-

+ 7 - 7
recipes-devtools/clang/clang/0008-change-baremetal-multilib-directory-name-to-align-wi.patch → recipes-devtools/clang/clang/0006-RISCV-Change-baremetal-multilib-directory-name-to-al.patch

@@ -1,18 +1,18 @@
-From aaa51f4f755256f9a53b5bfba8054b135050dbeb Mon Sep 17 00:00:00 2001
+From 6c56523d3583772c5e4e9102e42ed41abe902dff Mon Sep 17 00:00:00 2001
 From: "max.ma" <max.ma@starfivetech.com>
 From: "max.ma" <max.ma@starfivetech.com>
 Date: Sun, 9 Oct 2022 00:19:02 -0700
 Date: Sun, 9 Oct 2022 00:19:02 -0700
-Subject: [PATCH 8/8] change baremetal multilib directory name to align with
- gcc 12.1
+Subject: [PATCH 6/9] [RISCV] Change baremetal multilib directory name to align
+ with gcc 12.1
 
 
 ---
 ---
  clang/lib/Driver/ToolChains/Gnu.cpp | 16 ++++++++++++++--
  clang/lib/Driver/ToolChains/Gnu.cpp | 16 ++++++++++++++--
  1 file changed, 14 insertions(+), 2 deletions(-)
  1 file changed, 14 insertions(+), 2 deletions(-)
 
 
 diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp
 diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp
-index 045f063b28f2..208671a4f962 100644
+index c1737fe56635..06aec80f366a 100644
 --- a/clang/lib/Driver/ToolChains/Gnu.cpp
 --- a/clang/lib/Driver/ToolChains/Gnu.cpp
 +++ b/clang/lib/Driver/ToolChains/Gnu.cpp
 +++ b/clang/lib/Driver/ToolChains/Gnu.cpp
-@@ -1657,7 +1657,11 @@ static void findRISCVBareMetalMultilibs(const Driver &D,
+@@ -1696,7 +1696,11 @@ static void findRISCVBareMetalMultilibs(const Driver &D,
        {"rv32i", "ilp32"},     {"rv32im", "ilp32"},     {"rv32iac", "ilp32"},
        {"rv32i", "ilp32"},     {"rv32im", "ilp32"},     {"rv32iac", "ilp32"},
        {"rv32imac", "ilp32"},  {"rv32imafc", "ilp32f"}, {"rv64imac", "lp64"},
        {"rv32imac", "ilp32"},  {"rv32imafc", "ilp32f"}, {"rv64imac", "lp64"},
        {"rv64imafdc", "lp64d"}, {"rv64imafdc_zba_zbb_zbc_zbs", "lp64d"},
        {"rv64imafdc", "lp64d"}, {"rv64imafdc_zba_zbb_zbc_zbs", "lp64d"},
@@ -25,7 +25,7 @@ index 045f063b28f2..208671a4f962 100644
  
  
    std::vector<Multilib> Ms;
    std::vector<Multilib> Ms;
    for (auto Element : RISCVMultilibSet) {
    for (auto Element : RISCVMultilibSet) {
-@@ -1683,8 +1687,10 @@ static void findRISCVBareMetalMultilibs(const Driver &D,
+@@ -1722,8 +1726,10 @@ static void findRISCVBareMetalMultilibs(const Driver &D,
    llvm::StringSet<> Added_ABIs;
    llvm::StringSet<> Added_ABIs;
    StringRef ABIName = tools::riscv::getRISCVABI(Args, TargetTriple);
    StringRef ABIName = tools::riscv::getRISCVABI(Args, TargetTriple);
    StringRef MArch = tools::riscv::getRISCVArch(Args, TargetTriple);
    StringRef MArch = tools::riscv::getRISCVArch(Args, TargetTriple);
@@ -37,7 +37,7 @@ index 045f063b28f2..208671a4f962 100644
      char c = *I;
      char c = *I;
      switch (c) {
      switch (c) {
        default: 
        default: 
-@@ -1693,12 +1699,18 @@ static void findRISCVBareMetalMultilibs(const Driver &D,
+@@ -1732,12 +1738,18 @@ static void findRISCVBareMetalMultilibs(const Driver &D,
  
  
        case 'g':
        case 'g':
        Ext += "imafd";
        Ext += "imafd";

+ 6 - 5
recipes-devtools/clang/clang/0006-clang-driver-Check-sysroot-for-ldso-path.patch

@@ -1,4 +1,4 @@
-From 7ff4f134a5e5e1f6ffe31637a474cf118ae0079b Mon Sep 17 00:00:00 2001
+From 953b9d2c5a7ef4224dec304154feceb30e2b836f Mon Sep 17 00:00:00 2001
 From: Dan McGregor <dan.mcgregor@usask.ca>
 From: Dan McGregor <dan.mcgregor@usask.ca>
 Date: Wed, 26 Apr 2017 20:29:41 -0600
 Date: Wed, 26 Apr 2017 20:29:41 -0600
 Subject: [PATCH] clang: driver: Check sysroot for ldso path
 Subject: [PATCH] clang: driver: Check sysroot for ldso path
@@ -7,6 +7,7 @@ OE does not necessarily follow the default path for the dynamic linker,
 therefore adjust it for OE. Check for the default path, and if it isn't
 therefore adjust it for OE. Check for the default path, and if it isn't
 there, check /lib.
 there, check /lib.
 
 
+Upstream-Status: Pending
 Signed-off-by: Dan McGregor <dan.mcgregor@usask.ca>
 Signed-off-by: Dan McGregor <dan.mcgregor@usask.ca>
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 ---
 ---
@@ -14,10 +15,10 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
  1 file changed, 16 insertions(+)
  1 file changed, 16 insertions(+)
 
 
 diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp
 diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp
-index f85c04df4f6c..97e987c37e4a 100644
+index c6fb290ffdb4..2a58f876a68d 100644
 --- a/clang/lib/Driver/ToolChains/Linux.cpp
 --- a/clang/lib/Driver/ToolChains/Linux.cpp
 +++ b/clang/lib/Driver/ToolChains/Linux.cpp
 +++ b/clang/lib/Driver/ToolChains/Linux.cpp
-@@ -493,11 +493,19 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
+@@ -518,11 +518,19 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
      LibDir = "lib64";
      LibDir = "lib64";
      Loader =
      Loader =
          (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
          (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
@@ -37,7 +38,7 @@ index f85c04df4f6c..97e987c37e4a 100644
      break;
      break;
    case llvm::Triple::riscv32: {
    case llvm::Triple::riscv32: {
      StringRef ABIName = tools::riscv::getRISCVABI(Args, Triple);
      StringRef ABIName = tools::riscv::getRISCVABI(Args, Triple);
-@@ -519,6 +527,10 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
+@@ -544,6 +552,10 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
    case llvm::Triple::sparcv9:
    case llvm::Triple::sparcv9:
      LibDir = "lib64";
      LibDir = "lib64";
      Loader = "ld-linux.so.2";
      Loader = "ld-linux.so.2";
@@ -48,7 +49,7 @@ index f85c04df4f6c..97e987c37e4a 100644
      break;
      break;
    case llvm::Triple::systemz:
    case llvm::Triple::systemz:
      LibDir = "lib";
      LibDir = "lib";
-@@ -533,6 +545,10 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
+@@ -558,6 +570,10 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
  
  
      LibDir = X32 ? "libx32" : "lib64";
      LibDir = X32 ? "libx32" : "lib64";
      Loader = X32 ? "ld-linux-x32.so.2" : "ld-linux-x86-64.so.2";
      Loader = X32 ? "ld-linux-x32.so.2" : "ld-linux-x86-64.so.2";

+ 5 - 5
recipes-devtools/clang/clang/0006-set-clang-default-dwarf-version-to-4.patch → recipes-devtools/clang/clang/0007-Driver-Set-clang-default-dwarf-version-to-4.patch

@@ -1,18 +1,18 @@
-From 2adad705725dd8e8e8b38b189207284fc2a5b436 Mon Sep 17 00:00:00 2001
+From a10e0f315a96f4b7f2458f377fd9a8de9288f829 Mon Sep 17 00:00:00 2001
 From: "max.ma" <max.ma@starfivetech.com>
 From: "max.ma" <max.ma@starfivetech.com>
 Date: Sun, 1 May 2022 05:51:37 -0700
 Date: Sun, 1 May 2022 05:51:37 -0700
-Subject: [PATCH 6/6] set clang default dwarf version to 4
+Subject: [PATCH 7/9] [Driver] Set clang default dwarf version to 4
 
 
 ---
 ---
  clang/include/clang/Driver/ToolChain.h | 2 +-
  clang/include/clang/Driver/ToolChain.h | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 
 diff --git a/clang/include/clang/Driver/ToolChain.h b/clang/include/clang/Driver/ToolChain.h
 diff --git a/clang/include/clang/Driver/ToolChain.h b/clang/include/clang/Driver/ToolChain.h
-index adf1753e8d3a..c8adc4d917ce 100644
+index f75f35dc9e65..a70ae2b17833 100644
 --- a/clang/include/clang/Driver/ToolChain.h
 --- a/clang/include/clang/Driver/ToolChain.h
 +++ b/clang/include/clang/Driver/ToolChain.h
 +++ b/clang/include/clang/Driver/ToolChain.h
-@@ -518,7 +518,7 @@ public:
-   
+@@ -547,7 +547,7 @@ public:
+ 
    // Return the DWARF version to emit, in the absence of arguments
    // Return the DWARF version to emit, in the absence of arguments
    // to the contrary.
    // to the contrary.
 -  virtual unsigned GetDefaultDwarfVersion() const { return 5; }
 -  virtual unsigned GetDefaultDwarfVersion() const { return 5; }

+ 4 - 3
recipes-devtools/clang/clang/0007-clang-Driver-tools.cpp-Add-lssp_nonshared-on-musl.patch

@@ -1,4 +1,4 @@
-From 12b2de3db9a53a25610f3c61fef10fe877e765c4 Mon Sep 17 00:00:00 2001
+From c35e16f856192a090696b033bc5a32af18f592ac Mon Sep 17 00:00:00 2001
 From: Khem Raj <raj.khem@gmail.com>
 From: Khem Raj <raj.khem@gmail.com>
 Date: Thu, 19 May 2016 21:11:06 -0700
 Date: Thu, 19 May 2016 21:11:06 -0700
 Subject: [PATCH] clang: Driver/tools.cpp: Add -lssp_nonshared on musl
 Subject: [PATCH] clang: Driver/tools.cpp: Add -lssp_nonshared on musl
@@ -7,16 +7,17 @@ musl driver will need to add ssp_nonshared for stack_check_local
 on the linker cmdline when using stack protector commands on
 on the linker cmdline when using stack protector commands on
 compiler cmdline
 compiler cmdline
 
 
+Upstream-Status: Pending
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 ---
 ---
  clang/lib/Driver/ToolChains/Gnu.cpp | 6 ++++++
  clang/lib/Driver/ToolChains/Gnu.cpp | 6 ++++++
  1 file changed, 6 insertions(+)
  1 file changed, 6 insertions(+)
 
 
 diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp
 diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp
-index 7a9570a686f4..633daa58590d 100644
+index 4f2340316654..cc9ed4f6b8ac 100644
 --- a/clang/lib/Driver/ToolChains/Gnu.cpp
 --- a/clang/lib/Driver/ToolChains/Gnu.cpp
 +++ b/clang/lib/Driver/ToolChains/Gnu.cpp
 +++ b/clang/lib/Driver/ToolChains/Gnu.cpp
-@@ -622,6 +622,12 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA,
+@@ -653,6 +653,12 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA,
        if (IsIAMCU)
        if (IsIAMCU)
          CmdArgs.push_back("-lgloss");
          CmdArgs.push_back("-lgloss");
  
  

+ 0 - 33
recipes-devtools/clang/clang/0007-set-clang-default-march-to-rv64gc.patch

@@ -1,33 +0,0 @@
-From bf362d8a818dee92a93c7062e9bfb0399746ef59 Mon Sep 17 00:00:00 2001
-From: "max.ma" <max.ma@starfivetech.com>
-Date: Sun, 9 Oct 2022 00:12:28 -0700
-Subject: [PATCH 7/8] set clang default march to rv64gc
-
----
- clang/lib/Driver/ToolChains/Arch/RISCV.cpp | 11 +++++------
- 1 file changed, 5 insertions(+), 6 deletions(-)
-
-diff --git a/clang/lib/Driver/ToolChains/Arch/RISCV.cpp b/clang/lib/Driver/ToolChains/Arch/RISCV.cpp
-index 21a7cdf02291..9fe13fe2aec3 100644
---- a/clang/lib/Driver/ToolChains/Arch/RISCV.cpp
-+++ b/clang/lib/Driver/ToolChains/Arch/RISCV.cpp
-@@ -290,11 +290,10 @@ StringRef riscv::getRISCVArch(const llvm::opt::ArgList &Args,
-     else
-       return "rv32imafdc";
-   } else {
--    //if (Triple.getOS() == llvm::Triple::UnknownOS)
--    //  return "rv64imac";
--    //else
--    //  return "rv64imafdc";
--    // align the default march with gcc toolchain of dubhe
--    return "rv64imafdc_zba_zbb_zbc_zbs";  
-+    if (Triple.getOS() == llvm::Triple::UnknownOS)
-+      return "rv64imafdc";
-+    else
-+      //for dubhe linux toolchain, default is rv64gcb 
-+      return "rv64imafdc_zba_zbb_zbc_zbs";
-   }
- }
--- 
-2.25.1
-

+ 60 - 0
recipes-devtools/clang/clang/0008-RISCV-Support-b-letter-in-march-string.patch

@@ -0,0 +1,60 @@
+From 7f3eaa0f7b494f9091b1916f208d78ba681b19a3 Mon Sep 17 00:00:00 2001
+From: "max.ma" <max.ma@starfivetech.com>
+Date: Fri, 15 Apr 2022 02:16:43 -0700
+Subject: [PATCH 8/9] [RISCV] Support "b" letter in march string
+
+---
+ llvm/lib/Support/RISCVISAInfo.cpp      |  9 ++++++++-
+ llvm/lib/Target/RISCV/RISCVFeatures.td | 12 ++++++++++++
+ 2 files changed, 20 insertions(+), 1 deletion(-)
+
+diff --git a/llvm/lib/Support/RISCVISAInfo.cpp b/llvm/lib/Support/RISCVISAInfo.cpp
+index 7cb1147d4265..8b3dcc91746b 100644
+--- a/llvm/lib/Support/RISCVISAInfo.cpp
++++ b/llvm/lib/Support/RISCVISAInfo.cpp
+@@ -64,6 +64,7 @@ static const RISCVSupportedExtension SupportedExtensions[] = {
+     {"zbb", RISCVExtensionVersion{1, 0}},
+     {"zbc", RISCVExtensionVersion{1, 0}},
+     {"zbs", RISCVExtensionVersion{1, 0}},
++    {"b", RISCVExtensionVersion{1, 0}},
+ 
+     {"zbkb", RISCVExtensionVersion{1, 0}},
+     {"zbkc", RISCVExtensionVersion{1, 0}},
+@@ -707,7 +708,13 @@ RISCVISAInfo::parseArchString(StringRef Arch, bool EnableExperimentalExtension,
+                                "unsupported standard user-level extension '%c'",
+                                C);
+     }
+-    ISAInfo->addExtension(std::string(1, C), Major, Minor);
++    if (C == 'b') {
++      ISAInfo->addExtension("zba", Major, Minor);
++      ISAInfo->addExtension("zbb", Major, Minor);
++      ISAInfo->addExtension("zbc", Major, Minor);
++      ISAInfo->addExtension("zbs", Major, Minor);
++    } else
++      ISAInfo->addExtension(std::string(1, C), Major, Minor);
+ 
+     // Consume full extension name and version, including any optional '_'
+     // between this extension and the next
+diff --git a/llvm/lib/Target/RISCV/RISCVFeatures.td b/llvm/lib/Target/RISCV/RISCVFeatures.td
+index be8834fd4c2f..c0443eddeb90 100644
+--- a/llvm/lib/Target/RISCV/RISCVFeatures.td
++++ b/llvm/lib/Target/RISCV/RISCVFeatures.td
+@@ -547,3 +547,15 @@ def FeatureTaggedGlobals : SubtargetFeature<"tagged-globals",
+     "AllowTaggedGlobals",
+     "true", "Use an instruction sequence for taking the address of a global "
+     "that allows a memory tag in the upper address bits">;
++
++def FeatureStdExtB
++    : SubtargetFeature<"b", "HasStdExtB", "true",
++                       "'B' (Bit Manipulation Instructions)",
++                       [FeatureStdExtZba,
++                        FeatureStdExtZbb,
++                        FeatureStdExtZbc,
++                        FeatureStdExtZbs]>;
++def HasStdExtB : Predicate<"Subtarget->hasStdExtB()">,
++                           AssemblerPredicate<(all_of FeatureStdExtB),
++                           "'B' (Bit Manipulation Instructions)">;
++
+-- 
+2.25.1
+

+ 4 - 3
recipes-devtools/clang/clang/0008-clang-Prepend-trailing-to-sysroot.patch

@@ -1,4 +1,4 @@
-From 610d6a7c8c9d21f10b225f971a377be49bbaea4f Mon Sep 17 00:00:00 2001
+From 51b99c1b9836f2e6967f1192f16fb639e127df2e Mon Sep 17 00:00:00 2001
 From: Khem Raj <raj.khem@gmail.com>
 From: Khem Raj <raj.khem@gmail.com>
 Date: Thu, 16 Mar 2017 09:02:13 -0700
 Date: Thu, 16 Mar 2017 09:02:13 -0700
 Subject: [PATCH] clang: Prepend trailing '/' to sysroot
 Subject: [PATCH] clang: Prepend trailing '/' to sysroot
@@ -18,16 +18,17 @@ to linker steps which would then be wrong
 since they will become relative to clang
 since they will become relative to clang
 installation and not sysroot
 installation and not sysroot
 
 
+Upstream-Status: Pending
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 ---
 ---
  clang/lib/Driver/ToolChains/Linux.cpp | 2 +-
  clang/lib/Driver/ToolChains/Linux.cpp | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 
 diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp
 diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp
-index 97e987c37e4a..f9e233f15dfc 100644
+index 2a58f876a68d..c68a842b45e0 100644
 --- a/clang/lib/Driver/ToolChains/Linux.cpp
 --- a/clang/lib/Driver/ToolChains/Linux.cpp
 +++ b/clang/lib/Driver/ToolChains/Linux.cpp
 +++ b/clang/lib/Driver/ToolChains/Linux.cpp
-@@ -181,7 +181,7 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
+@@ -184,7 +184,7 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
    Multilibs = GCCInstallation.getMultilibs();
    Multilibs = GCCInstallation.getMultilibs();
    SelectedMultilib = GCCInstallation.getMultilib();
    SelectedMultilib = GCCInstallation.getMultilib();
    llvm::Triple::ArchType Arch = Triple.getArch();
    llvm::Triple::ArchType Arch = Triple.getArch();

+ 38 - 0
recipes-devtools/clang/clang/0009-RISCV-Align-default-march-with-dubhe-gcc-toolchain.patch

@@ -0,0 +1,38 @@
+From a108ed8c2f32b4c5929b3bd72f1b4d1830ddcd4a Mon Sep 17 00:00:00 2001
+From: "max.ma" <max.ma@starfivetech.com>
+Date: Mon, 26 Jun 2023 03:04:07 -0700
+Subject: [PATCH 9/9] [RISCV] Align default march with dubhe gcc toolchain
+
+---
+ clang/lib/Driver/ToolChains/Arch/RISCV.cpp | 8 ++------
+ 1 file changed, 2 insertions(+), 6 deletions(-)
+
+diff --git a/clang/lib/Driver/ToolChains/Arch/RISCV.cpp b/clang/lib/Driver/ToolChains/Arch/RISCV.cpp
+index 4c34c09d5589..dddf8d7cd168 100644
+--- a/clang/lib/Driver/ToolChains/Arch/RISCV.cpp
++++ b/clang/lib/Driver/ToolChains/Arch/RISCV.cpp
+@@ -220,9 +220,7 @@ StringRef riscv::getRISCVABI(const ArgList &Args, const llvm::Triple &Triple) {
+     else
+       return "ilp32d";
+   } else {
+-    if (Triple.getOS() == llvm::Triple::UnknownOS)
+-      return "lp64";
+-    else
++      //align default march with dubhe gcc toolchain
+       return "lp64d";
+   }
+ }
+@@ -299,9 +297,7 @@ StringRef riscv::getRISCVArch(const llvm::opt::ArgList &Args,
+     else
+       return "rv32imafdc";
+   } else {
+-    if (Triple.getOS() == llvm::Triple::UnknownOS)
+-      return "rv64imac";
+-    else
++      //align default march with dubhe gcc toolchain
+       return "rv64imafdc";
+   }
+ }
+-- 
+2.25.1
+

+ 9 - 8
recipes-devtools/clang/clang/0009-clang-Look-inside-the-target-sysroot-for-compiler-ru.patch

@@ -1,4 +1,4 @@
-From da2647d56a98cc708a6b13e3586e7fb364ef77a0 Mon Sep 17 00:00:00 2001
+From 243f40f492fbbbc3104de0fc77eef3122a4a42c4 Mon Sep 17 00:00:00 2001
 From: Khem Raj <raj.khem@gmail.com>
 From: Khem Raj <raj.khem@gmail.com>
 Date: Thu, 16 Mar 2017 19:06:26 -0700
 Date: Thu, 16 Mar 2017 19:06:26 -0700
 Subject: [PATCH] clang: Look inside the target sysroot for compiler runtime
 Subject: [PATCH] clang: Look inside the target sysroot for compiler runtime
@@ -9,13 +9,14 @@ driver installation where the libraries are not instlled
 
 
 Specific to cross compiling the way yocto/OE works
 Specific to cross compiling the way yocto/OE works
 
 
+Upstream-Status: Pending
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 ---
 ---
  clang/lib/Driver/ToolChain.cpp | 6 +++++-
  clang/lib/Driver/ToolChain.cpp | 6 +++++-
  1 file changed, 5 insertions(+), 1 deletion(-)
  1 file changed, 5 insertions(+), 1 deletion(-)
 
 
 diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp
 diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp
-index d657d21bfcdb..e83a556b708c 100644
+index bc70205a6c01..527efd421e01 100644
 --- a/clang/lib/Driver/ToolChain.cpp
 --- a/clang/lib/Driver/ToolChain.cpp
 +++ b/clang/lib/Driver/ToolChain.cpp
 +++ b/clang/lib/Driver/ToolChain.cpp
 @@ -13,6 +13,7 @@
 @@ -13,6 +13,7 @@
@@ -26,15 +27,15 @@ index d657d21bfcdb..e83a556b708c 100644
  #include "clang/Config/config.h"
  #include "clang/Config/config.h"
  #include "clang/Driver/Action.h"
  #include "clang/Driver/Action.h"
  #include "clang/Driver/Driver.h"
  #include "clang/Driver/Driver.h"
-@@ -419,7 +420,10 @@ StringRef ToolChain::getOSLibName() const {
+@@ -488,7 +489,10 @@ StringRef ToolChain::getOSLibName() const {
  }
  }
  
  
  std::string ToolChain::getCompilerRTPath() const {
  std::string ToolChain::getCompilerRTPath() const {
 -  SmallString<128> Path(getDriver().ResourceDir);
 -  SmallString<128> Path(getDriver().ResourceDir);
 +  SmallString<128> Path(getDriver().SysRoot);
 +  SmallString<128> Path(getDriver().SysRoot);
-+  StringRef ClangLibdirSuffix(CLANG_LIBDIR_SUFFIX);
-+  llvm::sys::path::append(Path, "/usr/", Twine("lib") + ClangLibdirSuffix, "clang",
++  StringRef ClangLibdirBasename(CLANG_INSTALL_LIBDIR_BASENAME);
++  llvm::sys::path::append(Path, "/usr/", ClangLibdirBasename, "clang",
 +                            CLANG_VERSION_STRING);
 +                            CLANG_VERSION_STRING);
-   if (Triple.isOSUnknown()) {
-     llvm::sys::path::append(Path, "lib");
-   } else {
+   if (isBareMetal()) {
+     llvm::sys::path::append(Path, "lib", getOSLibName());
+     Path += SelectedMultilib.gccSuffix();

+ 5 - 3
recipes-devtools/clang/clang/0010-clang-Define-releative-gcc-installation-dir.patch

@@ -1,4 +1,4 @@
-From 6e17f402773f9408a62c8d03a39db5af6f637653 Mon Sep 17 00:00:00 2001
+From d1fdcd76fc759e644d697c967ddfbeae279aa7ac Mon Sep 17 00:00:00 2001
 From: Khem Raj <raj.khem@gmail.com>
 From: Khem Raj <raj.khem@gmail.com>
 Date: Sat, 20 Mar 2021 16:09:16 -0700
 Date: Sat, 20 Mar 2021 16:09:16 -0700
 Subject: [PATCH] clang: Define / releative gcc installation dir
 Subject: [PATCH] clang: Define / releative gcc installation dir
@@ -8,16 +8,18 @@ Without this its not able to find the paths for libgcc
 and other standard headers and libraries from gcc
 and other standard headers and libraries from gcc
 installation in OE
 installation in OE
 
 
+Upstream-Status: Pending
+
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 ---
 ---
  clang/lib/Driver/ToolChains/Gnu.cpp | 14 +++++++-------
  clang/lib/Driver/ToolChains/Gnu.cpp | 14 +++++++-------
  1 file changed, 7 insertions(+), 7 deletions(-)
  1 file changed, 7 insertions(+), 7 deletions(-)
 
 
 diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp
 diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp
-index 633daa58590d..d22eaf698eb8 100644
+index cc9ed4f6b8ac..846163329d92 100644
 --- a/clang/lib/Driver/ToolChains/Gnu.cpp
 --- a/clang/lib/Driver/ToolChains/Gnu.cpp
 +++ b/clang/lib/Driver/ToolChains/Gnu.cpp
 +++ b/clang/lib/Driver/ToolChains/Gnu.cpp
-@@ -2517,19 +2517,19 @@ void Generic_GCC::GCCInstallationDetector::ScanLibDirForGCCTriple(
+@@ -2681,19 +2681,19 @@ void Generic_GCC::GCCInstallationDetector::ScanLibDirForGCCTriple(
      // Whether this library suffix is relevant for the triple.
      // Whether this library suffix is relevant for the triple.
      bool Active;
      bool Active;
    } Suffixes[] = {
    } Suffixes[] = {

+ 6 - 5
recipes-devtools/clang/clang/0011-clang-Add-lpthread-and-ldl-along-with-lunwind-for-st.patch

@@ -1,4 +1,4 @@
-From 718bc533b5d621ee5eb24a87ed882bf82360807c Mon Sep 17 00:00:00 2001
+From 16ec16d11424040b83b360199ab785650bd1fb65 Mon Sep 17 00:00:00 2001
 From: Khem Raj <raj.khem@gmail.com>
 From: Khem Raj <raj.khem@gmail.com>
 Date: Wed, 31 Jul 2019 22:51:39 -0700
 Date: Wed, 31 Jul 2019 22:51:39 -0700
 Subject: [PATCH] clang: Add -lpthread and -ldl along with -lunwind for static
 Subject: [PATCH] clang: Add -lpthread and -ldl along with -lunwind for static
@@ -14,21 +14,22 @@ libunwind/src/AddressSpace.hpp:597: undefined reference to `dladdr'
 
 
 therefore we need to link in libpthread and libdl to fill these symbols
 therefore we need to link in libpthread and libdl to fill these symbols
 
 
+Upstream-Status: Pending
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 ---
 ---
  clang/lib/Driver/ToolChains/CommonArgs.cpp | 2 ++
  clang/lib/Driver/ToolChains/CommonArgs.cpp | 2 ++
  1 file changed, 2 insertions(+)
  1 file changed, 2 insertions(+)
 
 
 diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp
 diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp
-index dfcef2304040..dbc91e427dfb 100644
+index 0883631dfe98..dfab4075e03e 100644
 --- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
 --- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
 +++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
 +++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
-@@ -1472,6 +1472,8 @@ static void AddUnwindLibrary(const ToolChain &TC, const Driver &D,
+@@ -1718,6 +1718,8 @@ static void AddUnwindLibrary(const ToolChain &TC, const Driver &D,
          CmdArgs.push_back("-lunwind");
          CmdArgs.push_back("-lunwind");
      } else if (LGT == LibGccType::StaticLibGcc) {
      } else if (LGT == LibGccType::StaticLibGcc) {
        CmdArgs.push_back("-l:libunwind.a");
        CmdArgs.push_back("-l:libunwind.a");
 +      CmdArgs.push_back("-lpthread");
 +      CmdArgs.push_back("-lpthread");
 +      CmdArgs.push_back("-ldl");
 +      CmdArgs.push_back("-ldl");
-     } else if (TC.getTriple().isOSCygMing()) {
-       if (LGT == LibGccType::SharedLibGcc)
+     } else if (LGT == LibGccType::SharedLibGcc) {
+       if (TC.getTriple().isOSCygMing())
          CmdArgs.push_back("-l:libunwind.dll.a");
          CmdArgs.push_back("-l:libunwind.dll.a");

+ 7 - 6
recipes-devtools/clang/clang/0012-Pass-PYTHON_EXECUTABLE-when-cross-compiling-for-nati.patch

@@ -1,8 +1,9 @@
-From d26acd3f09d6796c35b29a70480142e70ec74d51 Mon Sep 17 00:00:00 2001
+From e9e65cc455973c05ae3502b84bc90b3f8b70b438 Mon Sep 17 00:00:00 2001
 From: Anuj Mittal <anuj.mittal@intel.com>
 From: Anuj Mittal <anuj.mittal@intel.com>
 Date: Thu, 26 Dec 2019 12:56:16 -0800
 Date: Thu, 26 Dec 2019 12:56:16 -0800
 Subject: [PATCH] Pass PYTHON_EXECUTABLE when cross compiling for native build
 Subject: [PATCH] Pass PYTHON_EXECUTABLE when cross compiling for native build
 
 
+Upstream-Status: Pending
 Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
 Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 ---
 ---
@@ -10,14 +11,14 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
  1 file changed, 1 insertion(+)
  1 file changed, 1 insertion(+)
 
 
 diff --git a/llvm/cmake/modules/CrossCompile.cmake b/llvm/cmake/modules/CrossCompile.cmake
 diff --git a/llvm/cmake/modules/CrossCompile.cmake b/llvm/cmake/modules/CrossCompile.cmake
-index 2a39b6a40a28..8a441729c943 100644
+index a46a0fd630b0..55f6dba2901a 100644
 --- a/llvm/cmake/modules/CrossCompile.cmake
 --- a/llvm/cmake/modules/CrossCompile.cmake
 +++ b/llvm/cmake/modules/CrossCompile.cmake
 +++ b/llvm/cmake/modules/CrossCompile.cmake
-@@ -84,6 +84,7 @@ function(llvm_create_cross_target project_name target_name toolchain buildtype)
-         -DLLVM_ENABLE_RUNTIMES="${llvm_enable_runtimes_arg}"
-         ${external_project_source_dirs}
+@@ -86,6 +86,7 @@ function(llvm_create_cross_target project_name target_name toolchain buildtype)
          -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN="${LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN}"
          -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN="${LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN}"
-+	-DPYTHON_EXECUTABLE="${PYTHON_EXECUTABLE}"
+         -DLLVM_INCLUDE_BENCHMARKS=OFF
+         -DLLVM_INCLUDE_TESTS=OFF
++        -DPYTHON_EXECUTABLE="${PYTHON_EXECUTABLE}"
          ${build_type_flags} ${linker_flag} ${external_clang_dir}
          ${build_type_flags} ${linker_flag} ${external_clang_dir}
          ${ARGN}
          ${ARGN}
      WORKING_DIRECTORY ${${project_name}_${target_name}_BUILD}
      WORKING_DIRECTORY ${${project_name}_${target_name}_BUILD}

+ 3 - 2
recipes-devtools/clang/clang/0013-Check-for-atomic-double-intrinsics.patch

@@ -1,4 +1,4 @@
-From 8bee07de2d0078373f0f1a72e924d7808ddf03e0 Mon Sep 17 00:00:00 2001
+From b0310dcff11cade76add2b84f9d694fc626284ee Mon Sep 17 00:00:00 2001
 From: Khem Raj <raj.khem@gmail.com>
 From: Khem Raj <raj.khem@gmail.com>
 Date: Mon, 18 Nov 2019 17:00:29 -0800
 Date: Mon, 18 Nov 2019 17:00:29 -0800
 Subject: [PATCH] Check for atomic<double> intrinsics
 Subject: [PATCH] Check for atomic<double> intrinsics
@@ -9,13 +9,14 @@ therefore detect if clang can use built-ins for atomic<double> if not
 then link libatomic, this helps building clangd for x86 on linux systems
 then link libatomic, this helps building clangd for x86 on linux systems
 with gcc runtime
 with gcc runtime
 
 
+Upstream-Status: Pending
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 ---
 ---
  llvm/cmake/modules/CheckAtomic.cmake | 3 ++-
  llvm/cmake/modules/CheckAtomic.cmake | 3 ++-
  1 file changed, 2 insertions(+), 1 deletion(-)
  1 file changed, 2 insertions(+), 1 deletion(-)
 
 
 diff --git a/llvm/cmake/modules/CheckAtomic.cmake b/llvm/cmake/modules/CheckAtomic.cmake
 diff --git a/llvm/cmake/modules/CheckAtomic.cmake b/llvm/cmake/modules/CheckAtomic.cmake
-index 3c5ba72993a3..34a1b950bbed 100644
+index f11cadf39ff6..80a18a92956a 100644
 --- a/llvm/cmake/modules/CheckAtomic.cmake
 --- a/llvm/cmake/modules/CheckAtomic.cmake
 +++ b/llvm/cmake/modules/CheckAtomic.cmake
 +++ b/llvm/cmake/modules/CheckAtomic.cmake
 @@ -30,10 +30,11 @@ function(check_working_cxx_atomics64 varname)
 @@ -30,10 +30,11 @@ function(check_working_cxx_atomics64 varname)

+ 7 - 7
recipes-devtools/clang/clang/0014-libcxx-Add-compiler-runtime-library-to-link-step-for.patch

@@ -1,4 +1,4 @@
-From 3d7469e6d46dd19a20500fdb56f21a0cc7198e9d Mon Sep 17 00:00:00 2001
+From fbe1464c92e5b4e078390c040f0a7f446cda81f0 Mon Sep 17 00:00:00 2001
 From: Jeremy Puhlman <jpuhlman@mvista.com>
 From: Jeremy Puhlman <jpuhlman@mvista.com>
 Date: Thu, 16 Jan 2020 21:16:10 +0000
 Date: Thu, 16 Jan 2020 21:16:10 +0000
 Subject: [PATCH] libcxx: Add compiler runtime library to link step for libcxx
 Subject: [PATCH] libcxx: Add compiler runtime library to link step for libcxx
@@ -14,10 +14,10 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
  1 file changed, 2 insertions(+), 2 deletions(-)
  1 file changed, 2 insertions(+), 2 deletions(-)
 
 
 diff --git a/libcxx/src/CMakeLists.txt b/libcxx/src/CMakeLists.txt
 diff --git a/libcxx/src/CMakeLists.txt b/libcxx/src/CMakeLists.txt
-index 12dcdf954405..54e446e2aecd 100644
+index 9ff2a62e9394..e76625d5a5ac 100644
 --- a/libcxx/src/CMakeLists.txt
 --- a/libcxx/src/CMakeLists.txt
 +++ b/libcxx/src/CMakeLists.txt
 +++ b/libcxx/src/CMakeLists.txt
-@@ -212,7 +212,7 @@ if (LIBCXX_ENABLE_SHARED)
+@@ -200,7 +200,7 @@ if (LIBCXX_ENABLE_SHARED)
    add_library(cxx_shared SHARED ${exclude_from_all} ${LIBCXX_SOURCES} ${LIBCXX_HEADERS})
    add_library(cxx_shared SHARED ${exclude_from_all} ${LIBCXX_SOURCES} ${LIBCXX_HEADERS})
    target_include_directories(cxx_shared PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
    target_include_directories(cxx_shared PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
    target_link_libraries(cxx_shared PUBLIC cxx-headers
    target_link_libraries(cxx_shared PUBLIC cxx-headers
@@ -26,12 +26,12 @@ index 12dcdf954405..54e446e2aecd 100644
    set_target_properties(cxx_shared
    set_target_properties(cxx_shared
      PROPERTIES
      PROPERTIES
        COMPILE_FLAGS "${LIBCXX_COMPILE_FLAGS}"
        COMPILE_FLAGS "${LIBCXX_COMPILE_FLAGS}"
-@@ -290,7 +290,7 @@ if (LIBCXX_ENABLE_STATIC)
+@@ -294,7 +294,7 @@ if (LIBCXX_ENABLE_STATIC)
    add_library(cxx_static STATIC ${exclude_from_all} ${LIBCXX_SOURCES} ${LIBCXX_HEADERS})
    add_library(cxx_static STATIC ${exclude_from_all} ${LIBCXX_SOURCES} ${LIBCXX_HEADERS})
    target_include_directories(cxx_static PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
    target_include_directories(cxx_static PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
    target_link_libraries(cxx_static PUBLIC cxx-headers
    target_link_libraries(cxx_static PUBLIC cxx-headers
--                                   PRIVATE ${LIBCXX_LIBRARIES})
-+                                   PRIVATE ${LIBCXX_LIBRARIES} "$$($$CC --print-libgcc-file-name)")
+-                                   PRIVATE ${LIBCXX_LIBRARIES}
++                                   PRIVATE ${LIBCXX_LIBRARIES} "$$($$CC --print-libgcc-file-name)"
+                                    PRIVATE libcxx-abi-static)
    set_target_properties(cxx_static
    set_target_properties(cxx_static
      PROPERTIES
      PROPERTIES
-       COMPILE_FLAGS "${LIBCXX_COMPILE_FLAGS}"

+ 48 - 49
recipes-devtools/clang/clang/0015-clang-llvm-cmake-Fix-configure-for-packages-using-fi.patch

@@ -1,4 +1,4 @@
-From 728e023a8d2dc85402fbe1295e87023fdb7c4c1b Mon Sep 17 00:00:00 2001
+From f16083f3436f1286941547b3036787f128c9d8a4 Mon Sep 17 00:00:00 2001
 From: Ovidiu Panait <ovidiu.panait@windriver.com>
 From: Ovidiu Panait <ovidiu.panait@windriver.com>
 Date: Fri, 31 Jan 2020 10:56:11 +0200
 Date: Fri, 31 Jan 2020 10:56:11 +0200
 Subject: [PATCH] clang,llvm: cmake: Fix configure for packages using
 Subject: [PATCH] clang,llvm: cmake: Fix configure for packages using
@@ -22,58 +22,58 @@ This is due to the fact that currently the cmake scripts look for target
 binaries in sysroot. Work around this by not exporting the target binaries in
 binaries in sysroot. Work around this by not exporting the target binaries in
 Exports-* cmake files.
 Exports-* cmake files.
 
 
-Upstream-Status: Innapropriate [oe-specific]
+Upstream-Status: Inappropriate [oe-specific]
 
 
 Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
 Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
 ---
 ---
  clang/cmake/modules/AddClang.cmake | 2 --
  clang/cmake/modules/AddClang.cmake | 2 --
  llvm/cmake/modules/AddLLVM.cmake   | 6 ------
  llvm/cmake/modules/AddLLVM.cmake   | 6 ------
- llvm/cmake/modules/TableGen.cmake  | 7 -------
- 3 files changed, 15 deletions(-)
+ llvm/cmake/modules/TableGen.cmake  | 6 ------
+ 3 files changed, 14 deletions(-)
 
 
 diff --git a/clang/cmake/modules/AddClang.cmake b/clang/cmake/modules/AddClang.cmake
 diff --git a/clang/cmake/modules/AddClang.cmake b/clang/cmake/modules/AddClang.cmake
-index 9bbbfc032b7d..7ee5170bbc71 100644
+index 75b0080f6715..ddf446a13eca 100644
 --- a/clang/cmake/modules/AddClang.cmake
 --- a/clang/cmake/modules/AddClang.cmake
 +++ b/clang/cmake/modules/AddClang.cmake
 +++ b/clang/cmake/modules/AddClang.cmake
-@@ -159,7 +159,6 @@ macro(add_clang_tool name)
-   if (CLANG_BUILD_TOOLS)
-     get_target_export_arg(${name} Clang export_to_clangtargets)
-     install(TARGETS ${name}
--      ${export_to_clangtargets}
-       RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
-       COMPONENT ${name})
+@@ -168,7 +168,6 @@ macro(add_clang_tool name)
+     if (CLANG_BUILD_TOOLS)
+       get_target_export_arg(${name} Clang export_to_clangtargets)
+       install(TARGETS ${name}
+-        ${export_to_clangtargets}
+         RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
+         COMPONENT ${name})
  
  
-@@ -168,7 +167,6 @@ macro(add_clang_tool name)
-                                DEPENDS ${name}
-                                COMPONENT ${name})
+@@ -177,7 +176,6 @@ macro(add_clang_tool name)
+                                  DEPENDS ${name}
+                                  COMPONENT ${name})
+       endif()
+-      set_property(GLOBAL APPEND PROPERTY CLANG_EXPORTS ${name})
      endif()
      endif()
--    set_property(GLOBAL APPEND PROPERTY CLANG_EXPORTS ${name})
    endif()
    endif()
  endmacro()
  endmacro()
- 
 diff --git a/llvm/cmake/modules/AddLLVM.cmake b/llvm/cmake/modules/AddLLVM.cmake
 diff --git a/llvm/cmake/modules/AddLLVM.cmake b/llvm/cmake/modules/AddLLVM.cmake
-index 37bc98f9e021..d34083fa52ec 100644
+index 94fc83db9344..5155b0222d87 100644
 --- a/llvm/cmake/modules/AddLLVM.cmake
 --- a/llvm/cmake/modules/AddLLVM.cmake
 +++ b/llvm/cmake/modules/AddLLVM.cmake
 +++ b/llvm/cmake/modules/AddLLVM.cmake
-@@ -1251,7 +1251,6 @@ macro(add_llvm_tool name)
-     if( LLVM_BUILD_TOOLS )
-       get_target_export_arg(${name} LLVM export_to_llvmexports)
-       install(TARGETS ${name}
--              ${export_to_llvmexports}
-               RUNTIME DESTINATION ${LLVM_TOOLS_INSTALL_DIR}
-               COMPONENT ${name})
+@@ -1335,7 +1335,6 @@ macro(llvm_add_tool project name)
+       if( LLVM_BUILD_TOOLS )
+         get_target_export_arg(${name} LLVM export_to_llvmexports)
+         install(TARGETS ${name}
+-                ${export_to_llvmexports}
+                 RUNTIME DESTINATION ${${project}_TOOLS_INSTALL_DIR}
+                 COMPONENT ${name})
  
  
-@@ -1262,9 +1261,6 @@ macro(add_llvm_tool name)
+@@ -1346,9 +1345,6 @@ macro(llvm_add_tool project name)
+         endif()
        endif()
        endif()
      endif()
      endif()
+-    if( LLVM_BUILD_TOOLS )
+-      set_property(GLOBAL APPEND PROPERTY LLVM_EXPORTS ${name})
+-    endif()
+     set_target_properties(${name} PROPERTIES FOLDER "Tools")
    endif()
    endif()
--  if( LLVM_BUILD_TOOLS )
--    set_property(GLOBAL APPEND PROPERTY LLVM_EXPORTS ${name})
--  endif()
-   set_target_properties(${name} PROPERTIES FOLDER "Tools")
- endmacro(add_llvm_tool name)
- 
-@@ -1304,7 +1300,6 @@ macro(add_llvm_utility name)
+ endmacro(llvm_add_tool project name)
+@@ -1393,7 +1389,6 @@ macro(add_llvm_utility name)
      if (LLVM_INSTALL_UTILS AND LLVM_BUILD_UTILS)
      if (LLVM_INSTALL_UTILS AND LLVM_BUILD_UTILS)
        get_target_export_arg(${name} LLVM export_to_llvmexports)
        get_target_export_arg(${name} LLVM export_to_llvmexports)
        install(TARGETS ${name}
        install(TARGETS ${name}
@@ -81,7 +81,7 @@ index 37bc98f9e021..d34083fa52ec 100644
                RUNTIME DESTINATION ${LLVM_UTILS_INSTALL_DIR}
                RUNTIME DESTINATION ${LLVM_UTILS_INSTALL_DIR}
                COMPONENT ${name})
                COMPONENT ${name})
  
  
-@@ -1313,7 +1308,6 @@ macro(add_llvm_utility name)
+@@ -1402,7 +1397,6 @@ macro(add_llvm_utility name)
                                   DEPENDS ${name}
                                   DEPENDS ${name}
                                   COMPONENT ${name})
                                   COMPONENT ${name})
        endif()
        endif()
@@ -90,27 +90,26 @@ index 37bc98f9e021..d34083fa52ec 100644
        set_property(GLOBAL APPEND PROPERTY LLVM_EXPORTS_BUILDTREE_ONLY ${name})
        set_property(GLOBAL APPEND PROPERTY LLVM_EXPORTS_BUILDTREE_ONLY ${name})
      endif()
      endif()
 diff --git a/llvm/cmake/modules/TableGen.cmake b/llvm/cmake/modules/TableGen.cmake
 diff --git a/llvm/cmake/modules/TableGen.cmake b/llvm/cmake/modules/TableGen.cmake
-index 59fd0d3b0733..3b9ac56ed37f 100644
+index 70c2edb8c833..e012fea08982 100644
 --- a/llvm/cmake/modules/TableGen.cmake
 --- a/llvm/cmake/modules/TableGen.cmake
 +++ b/llvm/cmake/modules/TableGen.cmake
 +++ b/llvm/cmake/modules/TableGen.cmake
-@@ -183,14 +183,8 @@ macro(add_tablegen target project)
-   endif()
+@@ -189,12 +189,7 @@ macro(add_tablegen target project)
  
  
-   if ((${project} STREQUAL LLVM OR ${project} STREQUAL MLIR) AND NOT LLVM_INSTALL_TOOLCHAIN_ONLY AND LLVM_BUILD_UTILS)
--    set(export_to_llvmexports)
--    if(${target} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
--        NOT LLVM_DISTRIBUTION_COMPONENTS)
--      set(export_to_llvmexports EXPORT LLVMExports)
+   if (ADD_TABLEGEN_DESTINATION AND NOT LLVM_INSTALL_TOOLCHAIN_ONLY AND
+       (LLVM_BUILD_UTILS OR ${target} IN_LIST LLVM_DISTRIBUTION_COMPONENTS))
+-    set(export_arg)
+-    if(ADD_TABLEGEN_EXPORT)
+-      get_target_export_arg(${target} ${ADD_TABLEGEN_EXPORT} export_arg)
 -    endif()
 -    endif()
- 
      install(TARGETS ${target}
      install(TARGETS ${target}
--            ${export_to_llvmexports}
+-            ${export_arg}
              COMPONENT ${target}
              COMPONENT ${target}
-             RUNTIME DESTINATION ${LLVM_TOOLS_INSTALL_DIR})
+             RUNTIME DESTINATION "${ADD_TABLEGEN_DESTINATION}")
      if(NOT LLVM_ENABLE_IDE)
      if(NOT LLVM_ENABLE_IDE)
-@@ -199,5 +193,4 @@ macro(add_tablegen target project)
-                                COMPONENT ${target})
-     endif()
+@@ -205,6 +200,5 @@ macro(add_tablegen target project)
+   endif()
+   if(ADD_TABLEGEN_EXPORT)
+     string(TOUPPER ${ADD_TABLEGEN_EXPORT} export_upper)
+-    set_property(GLOBAL APPEND PROPERTY ${export_upper}_EXPORTS ${target})
    endif()
    endif()
--  set_property(GLOBAL APPEND PROPERTY LLVM_EXPORTS ${target})
  endmacro()
  endmacro()

+ 6 - 5
recipes-devtools/clang/clang/0016-clang-Fix-resource-dir-location-for-cross-toolchains.patch

@@ -1,4 +1,4 @@
-From e12e426d3c67b17d74879d7dec434eb64310881e Mon Sep 17 00:00:00 2001
+From 3b58bf71bf2908d1c7361e420b13330366402ea6 Mon Sep 17 00:00:00 2001
 From: Jim Broadus <jbroadus@xevo.com>
 From: Jim Broadus <jbroadus@xevo.com>
 Date: Thu, 26 Mar 2020 16:05:53 -0700
 Date: Thu, 26 Mar 2020 16:05:53 -0700
 Subject: [PATCH] clang: Fix resource dir location for cross toolchains
 Subject: [PATCH] clang: Fix resource dir location for cross toolchains
@@ -12,6 +12,7 @@ This causes clang to form a path that looks like /usr/bin/lib/clang/...
 As a fix for this, check the parent directory name. If that is "bin", then
 As a fix for this, check the parent directory name. If that is "bin", then
 use that directory's parent.
 use that directory's parent.
 
 
+Upstream-Status: Pending
 Signed-off-by: Jim Broadus <jbroadus@xevo.com>
 Signed-off-by: Jim Broadus <jbroadus@xevo.com>
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 ---
 ---
@@ -19,10 +20,10 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
  1 file changed, 7 insertions(+), 1 deletion(-)
  1 file changed, 7 insertions(+), 1 deletion(-)
 
 
 diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
 diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
-index 3bfddeefc7b2..8a806efb292b 100644
+index a268f2fa8fc5..ab813044dc8c 100644
 --- a/clang/lib/Driver/Driver.cpp
 --- a/clang/lib/Driver/Driver.cpp
 +++ b/clang/lib/Driver/Driver.cpp
 +++ b/clang/lib/Driver/Driver.cpp
-@@ -176,7 +176,13 @@ std::string Driver::GetResourcesPath(StringRef BinaryPath,
+@@ -181,7 +181,13 @@ std::string Driver::GetResourcesPath(StringRef BinaryPath,
      // With a static-library build of libclang, LibClangPath will contain the
      // With a static-library build of libclang, LibClangPath will contain the
      // path of the embedding binary, which for LLVM binaries will be in bin/.
      // path of the embedding binary, which for LLVM binaries will be in bin/.
      // ../lib gets us to lib/ in both cases.
      // ../lib gets us to lib/ in both cases.
@@ -34,6 +35,6 @@ index 3bfddeefc7b2..8a806efb292b 100644
 +      Dir = std::string(llvm::sys::path::parent_path(Dir));
 +      Dir = std::string(llvm::sys::path::parent_path(Dir));
 +    }
 +    }
 +    P = Dir;
 +    P = Dir;
-     llvm::sys::path::append(P, Twine("lib") + CLANG_LIBDIR_SUFFIX, "clang",
-                             CLANG_VERSION_STRING);
+     llvm::sys::path::append(P, CLANG_INSTALL_LIBDIR_BASENAME, "clang",
+                             CLANG_VERSION_MAJOR_STRING);
    }
    }

+ 7 - 6
recipes-devtools/clang/clang/0017-clang-driver-Add-dyld-prefix-when-checking-sysroot-f.patch

@@ -1,4 +1,4 @@
-From 554002679332300b789cf44384c2274840ed24d9 Mon Sep 17 00:00:00 2001
+From a9127817f4ceb0f19e99c89c08ffb1d9d256d1a2 Mon Sep 17 00:00:00 2001
 From: Oleksandr Ocheretnyi <oocheret@cisco.com>
 From: Oleksandr Ocheretnyi <oocheret@cisco.com>
 Date: Wed, 15 Apr 2020 00:08:39 +0300
 Date: Wed, 15 Apr 2020 00:08:39 +0300
 Subject: [PATCH] clang: driver: Add dyld-prefix when checking sysroot for ldso
 Subject: [PATCH] clang: driver: Add dyld-prefix when checking sysroot for ldso
@@ -11,6 +11,7 @@ Subject: [PATCH] clang: driver: Add dyld-prefix when checking sysroot for ldso
    'clang: driver: Check sysroot for ldso path' which includes
    'clang: driver: Check sysroot for ldso path' which includes
    the usrmerge scenario.
    the usrmerge scenario.
 
 
+Upstream-Status: Pending
 Signed-off-by: Oleksandr Ocheretnyi <oocheret@cisco.com>
 Signed-off-by: Oleksandr Ocheretnyi <oocheret@cisco.com>
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 ---
 ---
@@ -18,10 +19,10 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
  1 file changed, 8 insertions(+), 8 deletions(-)
  1 file changed, 8 insertions(+), 8 deletions(-)
 
 
 diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp
 diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp
-index f9e233f15dfc..bf73b1ef27db 100644
+index c68a842b45e0..ca9f5f2e4f74 100644
 --- a/clang/lib/Driver/ToolChains/Linux.cpp
 --- a/clang/lib/Driver/ToolChains/Linux.cpp
 +++ b/clang/lib/Driver/ToolChains/Linux.cpp
 +++ b/clang/lib/Driver/ToolChains/Linux.cpp
-@@ -493,8 +493,8 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
+@@ -518,8 +518,8 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
      LibDir = "lib64";
      LibDir = "lib64";
      Loader =
      Loader =
          (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
          (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
@@ -32,7 +33,7 @@ index f9e233f15dfc..bf73b1ef27db 100644
          LibDir = "lib";
          LibDir = "lib";
      }
      }
      break;
      break;
-@@ -502,8 +502,8 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
+@@ -527,8 +527,8 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
      LibDir = "lib64";
      LibDir = "lib64";
      Loader =
      Loader =
          (tools::ppc::hasPPCAbiArg(Args, "elfv1")) ? "ld64.so.1" : "ld64.so.2";
          (tools::ppc::hasPPCAbiArg(Args, "elfv1")) ? "ld64.so.1" : "ld64.so.2";
@@ -43,7 +44,7 @@ index f9e233f15dfc..bf73b1ef27db 100644
          LibDir = "lib";
          LibDir = "lib";
      }
      }
      break;
      break;
-@@ -527,8 +527,8 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
+@@ -552,8 +552,8 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
    case llvm::Triple::sparcv9:
    case llvm::Triple::sparcv9:
      LibDir = "lib64";
      LibDir = "lib64";
      Loader = "ld-linux.so.2";
      Loader = "ld-linux.so.2";
@@ -54,7 +55,7 @@ index f9e233f15dfc..bf73b1ef27db 100644
          LibDir = "lib";
          LibDir = "lib";
      }
      }
      break;
      break;
-@@ -545,8 +545,8 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
+@@ -570,8 +570,8 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
  
  
      LibDir = X32 ? "libx32" : "lib64";
      LibDir = X32 ? "libx32" : "lib64";
      Loader = X32 ? "ld-linux-x32.so.2" : "ld-linux-x86-64.so.2";
      Loader = X32 ? "ld-linux-x32.so.2" : "ld-linux-x86-64.so.2";

+ 7 - 44
recipes-devtools/clang/clang/0018-clang-Use-python3-in-python-scripts.patch

@@ -1,25 +1,21 @@
-From d43e1333436fb61cea9d053d6999d6be74799ba3 Mon Sep 17 00:00:00 2001
-From: "yang.lee" <yang.lee@starfivetech.com>
-Date: Thu, 26 May 2022 11:18:32 +0800
-Subject: [PATCH 2/3] clang: Use python3 in python scripts
+From 5b8fe61522fbf453b514fc1c9f317742cf34cbcd Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 14 Oct 2020 22:19:57 -0700
+Subject: [PATCH] clang: Use python3 in python scripts
 
 
 Some scripts ask for python, but they work fine with python3
 Some scripts ask for python, but they work fine with python3
 and in OE python symlink is not exposed to build, only python3 is
 and in OE python symlink is not exposed to build, only python3 is
 
 
-Rebased By Lee Yang
 Upstream-Status: Pending
 Upstream-Status: Pending
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 ---
 ---
  .../find-all-symbols/tool/run-find-all-symbols.py               | 2 +-
  .../find-all-symbols/tool/run-find-all-symbols.py               | 2 +-
- clang-tools-extra/clang-tidy/add_new_check.py                   | 2 +-
- clang-tools-extra/clang-tidy/rename_check.py                    | 2 +-
  clang-tools-extra/clang-tidy/tool/clang-tidy-diff.py            | 2 +-
  clang-tools-extra/clang-tidy/tool/clang-tidy-diff.py            | 2 +-
- clang/tools/clang-format/git-clang-format                       | 2 +-
  clang/tools/scan-view/bin/scan-view                             | 2 +-
  clang/tools/scan-view/bin/scan-view                             | 2 +-
- 6 files changed, 6 insertions(+), 6 deletions(-)
+ 3 files changed, 3 insertions(+), 3 deletions(-)
 
 
 diff --git a/clang-tools-extra/clang-include-fixer/find-all-symbols/tool/run-find-all-symbols.py b/clang-tools-extra/clang-include-fixer/find-all-symbols/tool/run-find-all-symbols.py
 diff --git a/clang-tools-extra/clang-include-fixer/find-all-symbols/tool/run-find-all-symbols.py b/clang-tools-extra/clang-include-fixer/find-all-symbols/tool/run-find-all-symbols.py
-index 8655af137bb2..e95ba59a421c 100755
+index a0fa64592e62..27aa97a35571 100755
 --- a/clang-tools-extra/clang-include-fixer/find-all-symbols/tool/run-find-all-symbols.py
 --- a/clang-tools-extra/clang-include-fixer/find-all-symbols/tool/run-find-all-symbols.py
 +++ b/clang-tools-extra/clang-include-fixer/find-all-symbols/tool/run-find-all-symbols.py
 +++ b/clang-tools-extra/clang-include-fixer/find-all-symbols/tool/run-find-all-symbols.py
 @@ -1,4 +1,4 @@
 @@ -1,4 +1,4 @@
@@ -28,28 +24,8 @@ index 8655af137bb2..e95ba59a421c 100755
  #
  #
  #=- run-find-all-symbols.py - Parallel find-all-symbols runner -*- python  -*-=#
  #=- run-find-all-symbols.py - Parallel find-all-symbols runner -*- python  -*-=#
  #
  #
-diff --git a/clang-tools-extra/clang-tidy/add_new_check.py b/clang-tools-extra/clang-tidy/add_new_check.py
-index fc8397448631..0fc97862dcae 100644
---- a/clang-tools-extra/clang-tidy/add_new_check.py
-+++ b/clang-tools-extra/clang-tidy/add_new_check.py
-@@ -1,4 +1,4 @@
--#!/usr/bin/env python
-+#!/usr/bin/env python3
- #
- #===- add_new_check.py - clang-tidy check generator ---------*- python -*--===#
- #
-diff --git a/clang-tools-extra/clang-tidy/rename_check.py b/clang-tools-extra/clang-tidy/rename_check.py
-index 9c2021751e0e..4bb9af8cbe0a 100755
---- a/clang-tools-extra/clang-tidy/rename_check.py
-+++ b/clang-tools-extra/clang-tidy/rename_check.py
-@@ -1,4 +1,4 @@
--#!/usr/bin/env python
-+#!/usr/bin/env python3
- #
- #===- rename_check.py - clang-tidy check renamer ------------*- python -*--===#
- #
 diff --git a/clang-tools-extra/clang-tidy/tool/clang-tidy-diff.py b/clang-tools-extra/clang-tidy/tool/clang-tidy-diff.py
 diff --git a/clang-tools-extra/clang-tidy/tool/clang-tidy-diff.py b/clang-tools-extra/clang-tidy/tool/clang-tidy-diff.py
-index 6bd05531333b..9e134123ef44 100755
+index a26d2144b7f9..396a201b667e 100755
 --- a/clang-tools-extra/clang-tidy/tool/clang-tidy-diff.py
 --- a/clang-tools-extra/clang-tidy/tool/clang-tidy-diff.py
 +++ b/clang-tools-extra/clang-tidy/tool/clang-tidy-diff.py
 +++ b/clang-tools-extra/clang-tidy/tool/clang-tidy-diff.py
 @@ -1,4 +1,4 @@
 @@ -1,4 +1,4 @@
@@ -58,16 +34,6 @@ index 6bd05531333b..9e134123ef44 100755
  #
  #
  #===- clang-tidy-diff.py - ClangTidy Diff Checker -----------*- python -*--===#
  #===- clang-tidy-diff.py - ClangTidy Diff Checker -----------*- python -*--===#
  #
  #
-diff --git a/clang/tools/clang-format/git-clang-format b/clang/tools/clang-format/git-clang-format
-index 1d6f216240c1..4a12070c0081 100755
---- a/clang/tools/clang-format/git-clang-format
-+++ b/clang/tools/clang-format/git-clang-format
-@@ -1,4 +1,4 @@
--#!/usr/bin/env python
-+#!/usr/bin/env python3
- #
- #===- git-clang-format - ClangFormat Git Integration ---------*- python -*--===#
- #
 diff --git a/clang/tools/scan-view/bin/scan-view b/clang/tools/scan-view/bin/scan-view
 diff --git a/clang/tools/scan-view/bin/scan-view b/clang/tools/scan-view/bin/scan-view
 index 6165432e7af8..07effbca5969 100755
 index 6165432e7af8..07effbca5969 100755
 --- a/clang/tools/scan-view/bin/scan-view
 --- a/clang/tools/scan-view/bin/scan-view
@@ -78,6 +44,3 @@ index 6165432e7af8..07effbca5969 100755
  
  
  from __future__ import print_function
  from __future__ import print_function
  
  
--- 
-2.25.1
-

+ 4 - 4
recipes-devtools/clang/clang/0019-For-x86_64-set-Yocto-based-GCC-install-search-path.patch

@@ -1,4 +1,4 @@
-From d720595723c92fe8e2d17887bab85c6fd154825e Mon Sep 17 00:00:00 2001
+From ca344d46711d5ce6b5e0f7862b98bbfc7abb7d4c Mon Sep 17 00:00:00 2001
 From: Hongxu Jia <hongxu.jia@windriver.com>
 From: Hongxu Jia <hongxu.jia@windriver.com>
 Date: Mon, 25 Jan 2021 16:14:35 +0800
 Date: Mon, 25 Jan 2021 16:14:35 +0800
 Subject: [PATCH] For x86_64, set Yocto based GCC install search path
 Subject: [PATCH] For x86_64, set Yocto based GCC install search path
@@ -45,7 +45,7 @@ is different between clang and clang-native
 
 
 The //CLANG_EXTRA_OE_VENDORS_TRIPLES string is replaced with list of
 The //CLANG_EXTRA_OE_VENDORS_TRIPLES string is replaced with list of
 additional triples based on CLANG_EXTRA_OE_VENDORS variable in
 additional triples based on CLANG_EXTRA_OE_VENDORS variable in
-recipes-devtools/clang/llvm-project-source.inc:add_more_target_vendors()
+recipes-devtools/clang/llvm-project-source.inc:add_distro_vendor()
 
 
 Upstream-Status: Inappropriate [oe specific]
 Upstream-Status: Inappropriate [oe specific]
 
 
@@ -57,10 +57,10 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
  1 file changed, 1 insertion(+)
  1 file changed, 1 insertion(+)
 
 
 diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp
 diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp
-index d22eaf698eb8..6fcd5abe7211 100644
+index 846163329d92..0db37c6ef1a8 100644
 --- a/clang/lib/Driver/ToolChains/Gnu.cpp
 --- a/clang/lib/Driver/ToolChains/Gnu.cpp
 +++ b/clang/lib/Driver/ToolChains/Gnu.cpp
 +++ b/clang/lib/Driver/ToolChains/Gnu.cpp
-@@ -2105,6 +2105,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
+@@ -2254,6 +2254,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
        "x86_64-redhat-linux",    "x86_64-suse-linux",
        "x86_64-redhat-linux",    "x86_64-suse-linux",
        "x86_64-manbo-linux-gnu", "x86_64-linux-gnu",
        "x86_64-manbo-linux-gnu", "x86_64-linux-gnu",
        "x86_64-slackware-linux", "x86_64-unknown-linux",
        "x86_64-slackware-linux", "x86_64-unknown-linux",

+ 5 - 4
recipes-devtools/clang/clang/0020-llvm-Do-not-use-find_library-for-ncurses.patch

@@ -1,4 +1,4 @@
-From fd5760df7696cd9c6ec9ef38ed6cbab19d70e3ac Mon Sep 17 00:00:00 2001
+From 20208fe7aaaf65837d06bd00a5550134075a2b22 Mon Sep 17 00:00:00 2001
 From: Khem Raj <raj.khem@gmail.com>
 From: Khem Raj <raj.khem@gmail.com>
 Date: Sun, 7 Feb 2021 23:58:41 -0800
 Date: Sun, 7 Feb 2021 23:58:41 -0800
 Subject: [PATCH] llvm: Do not use find_library for ncurses
 Subject: [PATCH] llvm: Do not use find_library for ncurses
@@ -10,6 +10,7 @@ horribly with native and target libs when build clang for target
 TOPDIR/build/tmp/work/cortexa57-yoe-linux-musl/clang/12.0.0-r0/recipe-sysroot-native/usr/lib/libtinfo.so: error adding symbols: file in wrong format
 TOPDIR/build/tmp/work/cortexa57-yoe-linux-musl/clang/12.0.0-r0/recipe-sysroot-native/usr/lib/libtinfo.so: error adding symbols: file in wrong format
 clang-12: error: linker command failed with exit code 1 (use -v to see invocation)
 clang-12: error: linker command failed with exit code 1 (use -v to see invocation)
 
 
+Upstream-Status: Pending
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 ---
 ---
  compiler-rt/cmake/config-ix.cmake     | 2 +-
  compiler-rt/cmake/config-ix.cmake     | 2 +-
@@ -17,10 +18,10 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
  2 files changed, 2 insertions(+), 2 deletions(-)
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 
 diff --git a/compiler-rt/cmake/config-ix.cmake b/compiler-rt/cmake/config-ix.cmake
 diff --git a/compiler-rt/cmake/config-ix.cmake b/compiler-rt/cmake/config-ix.cmake
-index 4299a0589a7b..cb53b6fd14bd 100644
+index 5f51befc1973..55c04b76908e 100644
 --- a/compiler-rt/cmake/config-ix.cmake
 --- a/compiler-rt/cmake/config-ix.cmake
 +++ b/compiler-rt/cmake/config-ix.cmake
 +++ b/compiler-rt/cmake/config-ix.cmake
-@@ -149,7 +149,7 @@ else()
+@@ -179,7 +179,7 @@ else()
    set(MAYBE_REQUIRED)
    set(MAYBE_REQUIRED)
  endif()
  endif()
  if(LLVM_ENABLE_TERMINFO)
  if(LLVM_ENABLE_TERMINFO)
@@ -30,7 +31,7 @@ index 4299a0589a7b..cb53b6fd14bd 100644
  if(COMPILER_RT_TERMINFO_LIB)
  if(COMPILER_RT_TERMINFO_LIB)
    set(LLVM_ENABLE_TERMINFO 1)
    set(LLVM_ENABLE_TERMINFO 1)
 diff --git a/llvm/cmake/modules/FindTerminfo.cmake b/llvm/cmake/modules/FindTerminfo.cmake
 diff --git a/llvm/cmake/modules/FindTerminfo.cmake b/llvm/cmake/modules/FindTerminfo.cmake
-index 65edb80fa69a..a58180be8926 100644
+index eef1f95853eb..b3b330dd3d59 100644
 --- a/llvm/cmake/modules/FindTerminfo.cmake
 --- a/llvm/cmake/modules/FindTerminfo.cmake
 +++ b/llvm/cmake/modules/FindTerminfo.cmake
 +++ b/llvm/cmake/modules/FindTerminfo.cmake
 @@ -11,7 +11,7 @@
 @@ -11,7 +11,7 @@

+ 8 - 8
recipes-devtools/clang/clang/0021-llvm-Insert-anchor-for-adding-OE-distro-vendor-names.patch

@@ -1,4 +1,4 @@
-From ef4ee8181adc48116a563adafae014409e9432d0 Mon Sep 17 00:00:00 2001
+From c63accf38a7c7db518e01311b23e661392af916d Mon Sep 17 00:00:00 2001
 From: Khem Raj <raj.khem@gmail.com>
 From: Khem Raj <raj.khem@gmail.com>
 Date: Thu, 11 Feb 2021 16:42:49 -0800
 Date: Thu, 11 Feb 2021 16:42:49 -0800
 Subject: [PATCH] llvm: Insert anchor for adding OE distro vendor names
 Subject: [PATCH] llvm: Insert anchor for adding OE distro vendor names
@@ -7,21 +7,21 @@ This helps in making right detection for OE built gcc toolchains
 
 
 The //CLANG_EXTRA_OE_VENDORS_CASES string is replaced with list of
 The //CLANG_EXTRA_OE_VENDORS_CASES string is replaced with list of
 additional Ceses based on CLANG_EXTRA_OE_VENDORS variable in
 additional Ceses based on CLANG_EXTRA_OE_VENDORS variable in
-recipes-devtools/clang/llvm-project-source.inc:add_more_target_vendors()
+recipes-devtools/clang/llvm-project-source.inc:add_distro_vendor()
 
 
 Upstream-Status: Inappropriate [OE-specific]
 Upstream-Status: Inappropriate [OE-specific]
 
 
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 Signed-off-by: Martin Jansa <martin.jansa@gmail.com>
 Signed-off-by: Martin Jansa <martin.jansa@gmail.com>
 ---
 ---
- llvm/lib/Support/Triple.cpp | 2 +-
+ llvm/lib/TargetParser/Triple.cpp | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 
-diff --git a/llvm/lib/Support/Triple.cpp b/llvm/lib/Support/Triple.cpp
-index a9afcc9db96a..dc48caf02616 100644
---- a/llvm/lib/Support/Triple.cpp
-+++ b/llvm/lib/Support/Triple.cpp
-@@ -506,7 +506,7 @@ static Triple::VendorType parseVendor(StringRef VendorName) {
+diff --git a/llvm/lib/TargetParser/Triple.cpp b/llvm/lib/TargetParser/Triple.cpp
+index a68035989a93..ab1fef23d6fc 100644
+--- a/llvm/lib/TargetParser/Triple.cpp
++++ b/llvm/lib/TargetParser/Triple.cpp
+@@ -551,7 +551,7 @@ static Triple::VendorType parseVendor(StringRef VendorName) {
      .Case("amd", Triple::AMD)
      .Case("amd", Triple::AMD)
      .Case("mesa", Triple::Mesa)
      .Case("mesa", Triple::Mesa)
      .Case("suse", Triple::SUSE)
      .Case("suse", Triple::SUSE)

+ 1 - 1
recipes-devtools/clang/clang/0023-compiler-rt-Do-not-use-backtrace-APIs-on-non-glibc-l.patch → recipes-devtools/clang/clang/0022-compiler-rt-Do-not-use-backtrace-APIs-on-non-glibc-l.patch

@@ -1,4 +1,4 @@
-From e350e74522f03ed6d202b8130cf615e58a2ea714 Mon Sep 17 00:00:00 2001
+From f8ee0a66ba5b81f5489d8954dfc521f6b2612c6d Mon Sep 17 00:00:00 2001
 From: Khem Raj <raj.khem@gmail.com>
 From: Khem Raj <raj.khem@gmail.com>
 Date: Wed, 19 May 2021 17:32:13 -0700
 Date: Wed, 19 May 2021 17:32:13 -0700
 Subject: [PATCH] compiler-rt: Do not use backtrace APIs on non-glibc linux
 Subject: [PATCH] compiler-rt: Do not use backtrace APIs on non-glibc linux

+ 0 - 36
recipes-devtools/clang/clang/0022-compiler-rt-Use-mcr-based-barrier-on-armv6.patch

@@ -1,36 +0,0 @@
-From 0fab2593b436ef1aa87cb272297903a4e0189fd5 Mon Sep 17 00:00:00 2001
-From: "yang.lee" <yang.lee@starfivetech.com>
-Date: Thu, 26 May 2022 11:26:50 +0800
-Subject: [PATCH 3/3] compiler-rt: Use mcr based barrier on armv6
-
-dsb is an armv7 instruction and wont work when we are building for armv6.
-
-Rebased By Lee Yang
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- compiler-rt/lib/builtins/assembly.h | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
-diff --git a/compiler-rt/lib/builtins/assembly.h b/compiler-rt/lib/builtins/assembly.h
-index 69a3d8620f92..60bac86df218 100644
---- a/compiler-rt/lib/builtins/assembly.h
-+++ b/compiler-rt/lib/builtins/assembly.h
-@@ -189,6 +189,14 @@
-   JMP(ip)
- #endif
- 
-+#if __ARM_ARCH >= 7
-+#define DMB dmb
-+#elif __ARM_ARCH >= 6
-+#define DMB mcr p15, #0, r0, c7, c10, #5
-+#else
-+#error Only use this with ARMv6+
-+#endif
-+
- #if defined(USE_THUMB_2)
- #define WIDE(op) op.w
- #else
--- 
-2.25.1
-

+ 4 - 3
recipes-devtools/clang/clang/0024-clang-Fix-x86-triple-for-non-debian-multiarch-linux-.patch → recipes-devtools/clang/clang/0023-clang-Fix-x86-triple-for-non-debian-multiarch-linux-.patch

@@ -1,4 +1,4 @@
-From a310ecc416f38d81c13af43cdecaaf001cf06274 Mon Sep 17 00:00:00 2001
+From 013ee27a17e32ddf078bf33a82293a9f9980512e Mon Sep 17 00:00:00 2001
 From: Khem Raj <raj.khem@gmail.com>
 From: Khem Raj <raj.khem@gmail.com>
 Date: Wed, 19 May 2021 17:56:03 -0700
 Date: Wed, 19 May 2021 17:56:03 -0700
 Subject: [PATCH] clang: Fix x86 triple for non-debian multiarch linux distros
 Subject: [PATCH] clang: Fix x86 triple for non-debian multiarch linux distros
@@ -6,16 +6,17 @@ Subject: [PATCH] clang: Fix x86 triple for non-debian multiarch linux distros
 OpenEmbedded does not hardcode mutli-arch like debian therefore ensure
 OpenEmbedded does not hardcode mutli-arch like debian therefore ensure
 that it still uses the proper tuple
 that it still uses the proper tuple
 
 
+Upstream-Status: Pending
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 ---
 ---
  clang/lib/Driver/ToolChains/Linux.cpp | 3 +++
  clang/lib/Driver/ToolChains/Linux.cpp | 3 +++
  1 file changed, 3 insertions(+)
  1 file changed, 3 insertions(+)
 
 
 diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp
 diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp
-index bf73b1ef27db..eb92a037c930 100644
+index ca9f5f2e4f74..20c7c7a745be 100644
 --- a/clang/lib/Driver/ToolChains/Linux.cpp
 --- a/clang/lib/Driver/ToolChains/Linux.cpp
 +++ b/clang/lib/Driver/ToolChains/Linux.cpp
 +++ b/clang/lib/Driver/ToolChains/Linux.cpp
-@@ -636,6 +636,9 @@ void Linux::addLibStdCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,
+@@ -667,6 +667,9 @@ void Linux::addLibStdCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,
        GCCInstallation.getTriple().getArch() == llvm::Triple::x86
        GCCInstallation.getTriple().getArch() == llvm::Triple::x86
            ? "i386-linux-gnu"
            ? "i386-linux-gnu"
            : TripleStr;
            : TripleStr;

+ 5 - 5
recipes-devtools/clang/clang/0027-libunwind-Added-unw_backtrace-method.patch → recipes-devtools/clang/clang/0024-libunwind-Added-unw_backtrace-method.patch

@@ -1,4 +1,4 @@
-From a71fda827da45c357d92d07ea491c208c1e044fe Mon Sep 17 00:00:00 2001
+From 959667047a6d92e3912762c8db5695a945c564b4 Mon Sep 17 00:00:00 2001
 From: Maksim Kita <maksim-kita@yandex-team.ru>
 From: Maksim Kita <maksim-kita@yandex-team.ru>
 Date: Sun, 23 May 2021 10:27:29 +0000
 Date: Sun, 23 May 2021 10:27:29 +0000
 Subject: [PATCH] libunwind: Added unw_backtrace method
 Subject: [PATCH] libunwind: Added unw_backtrace method
@@ -12,10 +12,10 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
  2 files changed, 19 insertions(+)
  2 files changed, 19 insertions(+)
 
 
 diff --git a/libunwind/include/libunwind.h b/libunwind/include/libunwind.h
 diff --git a/libunwind/include/libunwind.h b/libunwind/include/libunwind.h
-index 9a74faa48d6f..f7480c9cf27a 100644
+index d2ad5ab87122..d735d955aee2 100644
 --- a/libunwind/include/libunwind.h
 --- a/libunwind/include/libunwind.h
 +++ b/libunwind/include/libunwind.h
 +++ b/libunwind/include/libunwind.h
-@@ -127,6 +127,7 @@ extern int unw_is_fpreg(unw_cursor_t *, unw_regnum_t) LIBUNWIND_AVAIL;
+@@ -130,6 +130,7 @@ extern int unw_is_fpreg(unw_cursor_t *, unw_regnum_t) LIBUNWIND_AVAIL;
  extern int unw_is_signal_frame(unw_cursor_t *) LIBUNWIND_AVAIL;
  extern int unw_is_signal_frame(unw_cursor_t *) LIBUNWIND_AVAIL;
  extern int unw_get_proc_name(unw_cursor_t *, char *, size_t, unw_word_t *) LIBUNWIND_AVAIL;
  extern int unw_get_proc_name(unw_cursor_t *, char *, size_t, unw_word_t *) LIBUNWIND_AVAIL;
  //extern int       unw_get_save_loc(unw_cursor_t*, int, unw_save_loc_t*);
  //extern int       unw_get_save_loc(unw_cursor_t*, int, unw_save_loc_t*);
@@ -24,10 +24,10 @@ index 9a74faa48d6f..f7480c9cf27a 100644
  extern unw_addr_space_t unw_local_addr_space;
  extern unw_addr_space_t unw_local_addr_space;
  
  
 diff --git a/libunwind/src/libunwind.cpp b/libunwind/src/libunwind.cpp
 diff --git a/libunwind/src/libunwind.cpp b/libunwind/src/libunwind.cpp
-index 03f8b75b5bba..730e2393a8f8 100644
+index 0faea2b78570..14bf07d8f470 100644
 --- a/libunwind/src/libunwind.cpp
 --- a/libunwind/src/libunwind.cpp
 +++ b/libunwind/src/libunwind.cpp
 +++ b/libunwind/src/libunwind.cpp
-@@ -326,7 +326,25 @@ void __unw_remove_dynamic_eh_frame_section(unw_word_t eh_frame_start) {
+@@ -349,7 +349,25 @@ void __unw_remove_dynamic_eh_frame_section(unw_word_t eh_frame_start) {
  #endif // defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND)
  #endif // defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND)
  #endif // !defined(__USING_SJLJ_EXCEPTIONS__)
  #endif // !defined(__USING_SJLJ_EXCEPTIONS__)
  
  

+ 3 - 3
recipes-devtools/clang/clang/0029-clang-Do-not-use-install-relative-libc-headers.patch → recipes-devtools/clang/clang/0025-clang-Do-not-use-install-relative-libc-headers.patch

@@ -1,4 +1,4 @@
-From 71a195e5ed96e47a21fe3f55708046350ebabdfe Mon Sep 17 00:00:00 2001
+From d249ebabcd4e0350acf3595f80160110cb0ab56d Mon Sep 17 00:00:00 2001
 From: Khem Raj <raj.khem@gmail.com>
 From: Khem Raj <raj.khem@gmail.com>
 Date: Wed, 11 Aug 2021 18:37:11 -0700
 Date: Wed, 11 Aug 2021 18:37:11 -0700
 Subject: [PATCH] clang: Do not use install relative libc++ headers
 Subject: [PATCH] clang: Do not use install relative libc++ headers
@@ -16,10 +16,10 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
  1 file changed, 3 insertions(+), 1 deletion(-)
  1 file changed, 3 insertions(+), 1 deletion(-)
 
 
 diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp
 diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp
-index 6fcd5abe7211..0d04a199a7af 100644
+index 0db37c6ef1a8..80a21d58c86c 100644
 --- a/clang/lib/Driver/ToolChains/Gnu.cpp
 --- a/clang/lib/Driver/ToolChains/Gnu.cpp
 +++ b/clang/lib/Driver/ToolChains/Gnu.cpp
 +++ b/clang/lib/Driver/ToolChains/Gnu.cpp
-@@ -2919,7 +2919,9 @@ Generic_GCC::addLibCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,
+@@ -3093,7 +3093,9 @@ Generic_GCC::addLibCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,
  
  
    // Android never uses the libc++ headers installed alongside the toolchain,
    // Android never uses the libc++ headers installed alongside the toolchain,
    // which are generally incompatible with the NDK libraries anyway.
    // which are generally incompatible with the NDK libraries anyway.

+ 0 - 28
recipes-devtools/clang/clang/0025-compiler-rt-Link-scudo-with-SANITIZER_CXX_ABI_LIBRAR.patch

@@ -1,28 +0,0 @@
-From 4bbb4ab9d4cd3ff1424bed6346dd8e47cd4bcb24 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 19 May 2021 21:49:18 -0700
-Subject: [PATCH] compiler-rt: Link scudo with SANITIZER_CXX_ABI_LIBRARIES
-
-If SANITIZER_CXX_ABI_LIBRARIES is set then link scudo with it, this
-fixes build time errors like
-
-projects/compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonLibc.armhf.dir/sanitizer_posix_libcdep.cpp.o: in function `__sanitizer::UnsetAlternateSignalStack()':
-| sanitizer_posix_libcdep.cpp:(.text+0x3d2): undefined reference to `__cxa_guard_acquire'
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- compiler-rt/lib/scudo/CMakeLists.txt | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/compiler-rt/lib/scudo/CMakeLists.txt b/compiler-rt/lib/scudo/CMakeLists.txt
-index 995e853e2a4d..25b79a8d17e8 100644
---- a/compiler-rt/lib/scudo/CMakeLists.txt
-+++ b/compiler-rt/lib/scudo/CMakeLists.txt
-@@ -15,6 +15,7 @@ append_list_if(COMPILER_RT_HAS_LIBDL dl SCUDO_MINIMAL_DYNAMIC_LIBS)
- append_list_if(COMPILER_RT_HAS_LIBRT rt SCUDO_MINIMAL_DYNAMIC_LIBS)
- append_list_if(COMPILER_RT_HAS_LIBPTHREAD pthread SCUDO_MINIMAL_DYNAMIC_LIBS)
- append_list_if(COMPILER_RT_HAS_LIBLOG log SCUDO_MINIMAL_DYNAMIC_LIBS)
-+append_list_if(SANITIZER_CXX_ABI_LIBRARIES ${SANITIZER_CXX_ABI_LIBRARIES} SCUDO_MINIMAL_DYNAMIC_LIBS)
- append_list_if(COMPILER_RT_HAS_OMIT_FRAME_POINTER_FLAG -fno-omit-frame-pointer
-                SCUDO_CFLAGS)
- 

+ 4 - 4
recipes-devtools/clang/clang/0030-clang-Fix-how-driver-finds-GCC-installation-path-on-.patch → recipes-devtools/clang/clang/0026-clang-Fix-how-driver-finds-GCC-installation-path-on-.patch

@@ -1,4 +1,4 @@
-From d7b262b22c16436c836de7f39591eaafd28a4e21 Mon Sep 17 00:00:00 2001
+From 1801fad99e1dedbe8d40931b18c37d326a1d532c Mon Sep 17 00:00:00 2001
 From: David Abdurachmanov <david.abdurachmanov@sifive.com>
 From: David Abdurachmanov <david.abdurachmanov@sifive.com>
 Date: Wed, 20 Oct 2021 17:30:36 -0700
 Date: Wed, 20 Oct 2021 17:30:36 -0700
 Subject: [PATCH] clang: Fix how driver finds GCC installation path on
 Subject: [PATCH] clang: Fix how driver finds GCC installation path on
@@ -31,10 +31,10 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
  1 file changed, 28 insertions(+), 11 deletions(-)
  1 file changed, 28 insertions(+), 11 deletions(-)
 
 
 diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp
 diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp
-index 0d04a199a7af..1e5a3cc2c1f1 100644
+index 80a21d58c86c..77f5c3f58a8b 100644
 --- a/clang/lib/Driver/ToolChains/Gnu.cpp
 --- a/clang/lib/Driver/ToolChains/Gnu.cpp
 +++ b/clang/lib/Driver/ToolChains/Gnu.cpp
 +++ b/clang/lib/Driver/ToolChains/Gnu.cpp
-@@ -1641,18 +1641,29 @@ static void findRISCVMultilibs(const Driver &D,
+@@ -1748,18 +1748,29 @@ static void findRISCVMultilibs(const Driver &D,
      return findRISCVBareMetalMultilibs(D, TargetTriple, Path, Args, Result);
      return findRISCVBareMetalMultilibs(D, TargetTriple, Path, Args, Result);
  
  
    FilterNonExistent NonExistent(Path, "/crtbegin.o", D.getVFS());
    FilterNonExistent NonExistent(Path, "/crtbegin.o", D.getVFS());
@@ -74,7 +74,7 @@ index 0d04a199a7af..1e5a3cc2c1f1 100644
  
  
    Multilib::flags_list Flags;
    Multilib::flags_list Flags;
    bool IsRV64 = TargetTriple.getArch() == llvm::Triple::riscv64;
    bool IsRV64 = TargetTriple.getArch() == llvm::Triple::riscv64;
-@@ -2549,13 +2560,19 @@ void Generic_GCC::GCCInstallationDetector::ScanLibDirForGCCTriple(
+@@ -2713,13 +2724,19 @@ void Generic_GCC::GCCInstallationDetector::ScanLibDirForGCCTriple(
            continue; // Saw this path before; no need to look at it again.
            continue; // Saw this path before; no need to look at it again.
        if (CandidateVersion.isOlderThan(4, 1, 1))
        if (CandidateVersion.isOlderThan(4, 1, 1))
          continue;
          continue;

+ 0 - 29
recipes-devtools/clang/clang/0026-compiler-rt-Link-scudo-standalone-with-libatomic-on-.patch

@@ -1,29 +0,0 @@
-From 0806d2c4a56116b99413c506e8ff5ebe11bf270f Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 21 May 2021 08:14:29 -0700
-Subject: [PATCH] compiler-rt: Link scudo standalone with libatomic on mips
-
-clang on mips generate atomic built-ins which should be provided by
-libatomic
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- compiler-rt/lib/scudo/standalone/CMakeLists.txt | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/compiler-rt/lib/scudo/standalone/CMakeLists.txt b/compiler-rt/lib/scudo/standalone/CMakeLists.txt
-index 739f131bdefd..5862545b842b 100644
---- a/compiler-rt/lib/scudo/standalone/CMakeLists.txt
-+++ b/compiler-rt/lib/scudo/standalone/CMakeLists.txt
-@@ -137,6 +137,10 @@ append_list_if(COMPILER_RT_HAS_LIBPTHREAD -pthread SCUDO_LINK_FLAGS)
- 
- append_list_if(FUCHSIA zircon SCUDO_LINK_LIBS)
- 
-+if (CMAKE_SYSTEM_PROCESSOR MATCHES "mips" AND CMAKE_SYSTEM_NAME MATCHES "Linux")
-+    list(APPEND SCUDO_LINK_LIBS atomic)
-+endif()
-+
- if(COMPILER_RT_HAS_SCUDO_STANDALONE)
-   add_compiler_rt_object_libraries(RTScudoStandalone
-     ARCHS ${SCUDO_STANDALONE_SUPPORTED_ARCH}

+ 11 - 11
recipes-devtools/clang/clang/0031-Fix-lib-paths-for-OpenEmbedded-Host.patch → recipes-devtools/clang/clang/0027-Fix-lib-paths-for-OpenEmbedded-Host.patch

@@ -1,4 +1,4 @@
-From 4dab11c8abdd1a48cd0df4475ef2f82732c7f7e3 Mon Sep 17 00:00:00 2001
+From b8dd608a9ca83b9c321dce3ca0d18e8aeea987af Mon Sep 17 00:00:00 2001
 From: Changqing Li <changqing.li@windriver.com>
 From: Changqing Li <changqing.li@windriver.com>
 Date: Tue, 7 Dec 2021 04:08:22 +0000
 Date: Tue, 7 Dec 2021 04:08:22 +0000
 Subject: [PATCH] Fix lib paths for OpenEmbedded Host
 Subject: [PATCH] Fix lib paths for OpenEmbedded Host
@@ -48,18 +48,18 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
  1 file changed, 4 insertions(+), 1 deletion(-)
  1 file changed, 4 insertions(+), 1 deletion(-)
 
 
 diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp
 diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp
-index 1e5a3cc2c1f1..d3574b86cb26 100644
+index 77f5c3f58a8b..0ec2dadafc05 100644
 --- a/clang/lib/Driver/ToolChains/Gnu.cpp
 --- a/clang/lib/Driver/ToolChains/Gnu.cpp
 +++ b/clang/lib/Driver/ToolChains/Gnu.cpp
 +++ b/clang/lib/Driver/ToolChains/Gnu.cpp
-@@ -22,6 +22,7 @@
- #include "clang/Driver/Options.h"
- #include "clang/Driver/Tool.h"
- #include "clang/Driver/ToolChain.h"
+@@ -18,6 +18,7 @@
+ #include "Linux.h"
+ #include "clang/Config/config.h" // for GCC_INSTALL_PREFIX
+ #include "clang/Driver/Compilation.h"
 +#include "clang/Driver/Distro.h"
 +#include "clang/Driver/Distro.h"
- #include "llvm/Option/ArgList.h"
- #include "llvm/Support/CodeGen.h"
- #include "llvm/Support/Path.h"
-@@ -2518,6 +2519,7 @@ void Generic_GCC::GCCInstallationDetector::ScanLibDirForGCCTriple(
+ #include "clang/Driver/Driver.h"
+ #include "clang/Driver/DriverDiagnostic.h"
+ #include "clang/Driver/Options.h"
+@@ -2682,6 +2683,7 @@ void Generic_GCC::GCCInstallationDetector::ScanLibDirForGCCTriple(
      const llvm::Triple &TargetTriple, const ArgList &Args,
      const llvm::Triple &TargetTriple, const ArgList &Args,
      const std::string &LibDir, StringRef CandidateTriple,
      const std::string &LibDir, StringRef CandidateTriple,
      bool NeedsBiarchSuffix, bool GCCDirExists, bool GCCCrossDirExists) {
      bool NeedsBiarchSuffix, bool GCCDirExists, bool GCCCrossDirExists) {
@@ -67,7 +67,7 @@ index 1e5a3cc2c1f1..d3574b86cb26 100644
    // Locations relative to the system lib directory where GCC's triple-specific
    // Locations relative to the system lib directory where GCC's triple-specific
    // directories might reside.
    // directories might reside.
    struct GCCLibSuffix {
    struct GCCLibSuffix {
-@@ -2535,7 +2537,8 @@ void Generic_GCC::GCCInstallationDetector::ScanLibDirForGCCTriple(
+@@ -2699,7 +2701,8 @@ void Generic_GCC::GCCInstallationDetector::ScanLibDirForGCCTriple(
        // files in that location, not just GCC installation data.
        // files in that location, not just GCC installation data.
        {CandidateTriple.str(), "..",
        {CandidateTriple.str(), "..",
         TargetTriple.getVendor() == llvm::Triple::Freescale ||
         TargetTriple.getVendor() == llvm::Triple::Freescale ||

+ 7 - 7
recipes-devtools/clang/clang/0032-Correct-library-search-path-for-OpenEmbedded-Host.patch → recipes-devtools/clang/clang/0028-Correct-library-search-path-for-OpenEmbedded-Host.patch

@@ -1,4 +1,4 @@
-From 12b439deed0381e603155a11f3aec5eb20cd6803 Mon Sep 17 00:00:00 2001
+From a4574f3cfd55c014d0e09956fe413835debe1b87 Mon Sep 17 00:00:00 2001
 From: Changqing Li <changqing.li@windriver.com>
 From: Changqing Li <changqing.li@windriver.com>
 Date: Tue, 7 Dec 2021 04:55:48 +0000
 Date: Tue, 7 Dec 2021 04:55:48 +0000
 Subject: [PATCH] Correct library search path for OpenEmbedded Host
 Subject: [PATCH] Correct library search path for OpenEmbedded Host
@@ -39,10 +39,10 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
  3 files changed, 4 insertions(+)
  3 files changed, 4 insertions(+)
 
 
 diff --git a/clang/include/clang/Driver/Distro.h b/clang/include/clang/Driver/Distro.h
 diff --git a/clang/include/clang/Driver/Distro.h b/clang/include/clang/Driver/Distro.h
-index 2723f75e8945..cd43e8f11574 100644
+index 1aaf93ddb7c4..31f03e327b78 100644
 --- a/clang/include/clang/Driver/Distro.h
 --- a/clang/include/clang/Driver/Distro.h
 +++ b/clang/include/clang/Driver/Distro.h
 +++ b/clang/include/clang/Driver/Distro.h
-@@ -44,6 +44,7 @@ public:
+@@ -45,6 +45,7 @@ public:
      RHEL7,
      RHEL7,
      Fedora,
      Fedora,
      Gentoo,
      Gentoo,
@@ -50,7 +50,7 @@ index 2723f75e8945..cd43e8f11574 100644
      OpenSUSE,
      OpenSUSE,
      UbuntuHardy,
      UbuntuHardy,
      UbuntuIntrepid,
      UbuntuIntrepid,
-@@ -132,6 +133,7 @@ public:
+@@ -135,6 +136,7 @@ public:
  
  
    bool IsGentoo() const { return DistroVal == Gentoo; }
    bool IsGentoo() const { return DistroVal == Gentoo; }
  
  
@@ -59,7 +59,7 @@ index 2723f75e8945..cd43e8f11574 100644
  };
  };
  
  
 diff --git a/clang/lib/Driver/Distro.cpp b/clang/lib/Driver/Distro.cpp
 diff --git a/clang/lib/Driver/Distro.cpp b/clang/lib/Driver/Distro.cpp
-index 5ac38c34d112..f20dd4b526e5 100644
+index 87a0c5a58511..b607a3f18d1e 100644
 --- a/clang/lib/Driver/Distro.cpp
 --- a/clang/lib/Driver/Distro.cpp
 +++ b/clang/lib/Driver/Distro.cpp
 +++ b/clang/lib/Driver/Distro.cpp
 @@ -44,6 +44,7 @@ static Distro::DistroType DetectOsRelease(llvm::vfs::FileSystem &VFS) {
 @@ -44,6 +44,7 @@ static Distro::DistroType DetectOsRelease(llvm::vfs::FileSystem &VFS) {
@@ -71,10 +71,10 @@ index 5ac38c34d112..f20dd4b526e5 100644
    return Version;
    return Version;
  }
  }
 diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp
 diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp
-index eb92a037c930..c92cef442005 100644
+index 20c7c7a745be..f5d9b3187cf5 100644
 --- a/clang/lib/Driver/ToolChains/Linux.cpp
 --- a/clang/lib/Driver/ToolChains/Linux.cpp
 +++ b/clang/lib/Driver/ToolChains/Linux.cpp
 +++ b/clang/lib/Driver/ToolChains/Linux.cpp
-@@ -77,6 +77,7 @@ std::string Linux::getMultiarchTriple(const Driver &D,
+@@ -78,6 +78,7 @@ std::string Linux::getMultiarchTriple(const Driver &D,
        return "x86_64-linux-android";
        return "x86_64-linux-android";
      if (TargetEnvironment == llvm::Triple::GNUX32)
      if (TargetEnvironment == llvm::Triple::GNUX32)
        return "x86_64-linux-gnux32";
        return "x86_64-linux-gnux32";

+ 0 - 46
recipes-devtools/clang/clang/0028-Do-not-force-thumb-mode-directive.patch

@@ -1,46 +0,0 @@
-From f69f7529bc8b561ddc32a5057da6d74d90dd9c94 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sat, 12 Jun 2021 08:42:36 -0700
-Subject: [PATCH] Do not force thumb mode directive
-
-.thumb_func was not switching mode until [1]
-so it did not show up but now that .thumb_func (without argument) is
-switching mode, its causing build failures on armv6 ( rpi0 ) even when
-build is explicitly asking for this file to be built with -marm (ARM
-mode), therefore use DEFINE_COMPILERRT_FUNCTION macro to add function
-header which considers arch and mode from compiler cmdline to decide if
-the function is built using thumb mode or arm mode.
-
-[1] https://reviews.llvm.org/D101975
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- compiler-rt/lib/builtins/arm/sync-ops.h | 6 ++----
- 1 file changed, 2 insertions(+), 4 deletions(-)
-
-diff --git a/compiler-rt/lib/builtins/arm/sync-ops.h b/compiler-rt/lib/builtins/arm/sync-ops.h
-index 7a26170741ad..d914f9d3a109 100644
---- a/compiler-rt/lib/builtins/arm/sync-ops.h
-+++ b/compiler-rt/lib/builtins/arm/sync-ops.h
-@@ -16,9 +16,8 @@
- 
- #define SYNC_OP_4(op)                                                          \
-   .p2align 2;                                                                  \
--  .thumb;                                                                      \
-   .syntax unified;                                                             \
--  DEFINE_COMPILERRT_THUMB_FUNCTION(__sync_fetch_and_##op)                      \
-+  DEFINE_COMPILERRT_FUNCTION(__sync_fetch_and_##op)                            \
-   DMB;                                                                         \
-   mov r12, r0;                                                                 \
-   LOCAL_LABEL(tryatomic_##op) : ldrex r0, [r12];                               \
-@@ -31,9 +30,8 @@
- 
- #define SYNC_OP_8(op)                                                          \
-   .p2align 2;                                                                  \
--  .thumb;                                                                      \
-   .syntax unified;                                                             \
--  DEFINE_COMPILERRT_THUMB_FUNCTION(__sync_fetch_and_##op)                      \
-+  DEFINE_COMPILERRT_FUNCTION(__sync_fetch_and_##op)                            \
-   push {r4, r5, r6, lr};                                                       \
-   DMB;                                                                         \
-   mov r12, r0;                                                                 \

+ 2 - 2
recipes-devtools/clang/clang/0033-lldb-Link-with-libatomic-on-x86.patch → recipes-devtools/clang/clang/0029-lldb-Link-with-libatomic-on-x86.patch

@@ -1,4 +1,4 @@
-From 17c7ad88f765bfbcfe25dd8f76ab9264250b9ea3 Mon Sep 17 00:00:00 2001
+From e9c06e4994d4cd52d8783838186df8c93ffd0052 Mon Sep 17 00:00:00 2001
 From: Khem Raj <raj.khem@gmail.com>
 From: Khem Raj <raj.khem@gmail.com>
 Date: Tue, 8 Feb 2022 01:31:26 -0800
 Date: Tue, 8 Feb 2022 01:31:26 -0800
 Subject: [PATCH] lldb: Link with libatomic on x86
 Subject: [PATCH] lldb: Link with libatomic on x86
@@ -17,7 +17,7 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
  1 file changed, 4 insertions(+)
  1 file changed, 4 insertions(+)
 
 
 diff --git a/lldb/source/Utility/CMakeLists.txt b/lldb/source/Utility/CMakeLists.txt
 diff --git a/lldb/source/Utility/CMakeLists.txt b/lldb/source/Utility/CMakeLists.txt
-index cc0bf5fdb61a..5228bf01c276 100644
+index 89acd7cd2eaf..6aa84f9d284d 100644
 --- a/lldb/source/Utility/CMakeLists.txt
 --- a/lldb/source/Utility/CMakeLists.txt
 +++ b/lldb/source/Utility/CMakeLists.txt
 +++ b/lldb/source/Utility/CMakeLists.txt
 @@ -19,6 +19,10 @@ if (CMAKE_SYSTEM_NAME MATCHES "Windows")
 @@ -19,6 +19,10 @@ if (CMAKE_SYSTEM_NAME MATCHES "Windows")

+ 3 - 3
recipes-devtools/clang/clang/0034-clang-exclude-openembedded-distributions-from-settin.patch → recipes-devtools/clang/clang/0030-clang-exclude-openembedded-distributions-from-settin.patch

@@ -1,4 +1,4 @@
-From 5c0d026419a69d5b8722f1abb0000caa4c151885 Mon Sep 17 00:00:00 2001
+From b34b67256aa36ceb6bce1b6f657ad129ecf90313 Mon Sep 17 00:00:00 2001
 From: Khem Raj <raj.khem@gmail.com>
 From: Khem Raj <raj.khem@gmail.com>
 Date: Fri, 11 Feb 2022 12:29:14 -0800
 Date: Fri, 11 Feb 2022 12:29:14 -0800
 Subject: [PATCH] clang: exclude openembedded distributions from setting rpath
 Subject: [PATCH] clang: exclude openembedded distributions from setting rpath
@@ -18,10 +18,10 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
  1 file changed, 5 insertions(+)
  1 file changed, 5 insertions(+)
 
 
 diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp
 diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp
-index dbc91e427dfb..b2cbfca9898c 100644
+index dfab4075e03e..14c6f0a3b21d 100644
 --- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
 --- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
 +++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
 +++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
-@@ -648,6 +648,11 @@ void tools::addLTOOptions(const ToolChain &ToolChain, const ArgList &Args,
+@@ -794,6 +794,11 @@ void tools::addLTOOptions(const ToolChain &ToolChain, const ArgList &Args,
  void tools::addOpenMPRuntimeSpecificRPath(const ToolChain &TC,
  void tools::addOpenMPRuntimeSpecificRPath(const ToolChain &TC,
                                            const ArgList &Args,
                                            const ArgList &Args,
                                            ArgStringList &CmdArgs) {
                                            ArgStringList &CmdArgs) {

+ 30 - 15
recipes-devtools/clang/clang/0035-compiler-rt-Enable-__int128-for-ppc32.patch → recipes-devtools/clang/clang/0031-compiler-rt-Enable-__int128-for-ppc32.patch

@@ -1,4 +1,4 @@
-From 734aaa66800b91abe42bdef1dd721c368fa17b07 Mon Sep 17 00:00:00 2001
+From 2a622188e62705f20d7806926a99f47f727d8858 Mon Sep 17 00:00:00 2001
 From: Khem Raj <raj.khem@gmail.com>
 From: Khem Raj <raj.khem@gmail.com>
 Date: Wed, 9 Mar 2022 16:28:16 -0800
 Date: Wed, 9 Mar 2022 16:28:16 -0800
 Subject: [PATCH] compiler-rt: Enable __int128 for ppc32
 Subject: [PATCH] compiler-rt: Enable __int128 for ppc32
@@ -6,15 +6,15 @@ Subject: [PATCH] compiler-rt: Enable __int128 for ppc32
 Upstream-Status: Pending
 Upstream-Status: Pending
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 ---
 ---
- compiler-rt/lib/builtins/CMakeLists.txt | 7 +++----
- compiler-rt/lib/builtins/int_types.h    | 2 +-
- 2 files changed, 4 insertions(+), 5 deletions(-)
+ compiler-rt/lib/builtins/CMakeLists.txt | 15 +++++++--------
+ compiler-rt/lib/builtins/int_types.h    |  2 +-
+ 2 files changed, 8 insertions(+), 9 deletions(-)
 
 
 diff --git a/compiler-rt/lib/builtins/CMakeLists.txt b/compiler-rt/lib/builtins/CMakeLists.txt
 diff --git a/compiler-rt/lib/builtins/CMakeLists.txt b/compiler-rt/lib/builtins/CMakeLists.txt
-index ea5ad9cdb864..4d1efc690d71 100644
+index 2fc70522895f..55f0ecb20a1f 100644
 --- a/compiler-rt/lib/builtins/CMakeLists.txt
 --- a/compiler-rt/lib/builtins/CMakeLists.txt
 +++ b/compiler-rt/lib/builtins/CMakeLists.txt
 +++ b/compiler-rt/lib/builtins/CMakeLists.txt
-@@ -607,8 +607,6 @@ set(mips64_SOURCES ${GENERIC_TF_SOURCES}
+@@ -668,11 +668,9 @@ set(mips64_SOURCES ${GENERIC_TF_SOURCES}
  set(mips64el_SOURCES ${GENERIC_TF_SOURCES}
  set(mips64el_SOURCES ${GENERIC_TF_SOURCES}
                       ${mips_SOURCES})
                       ${mips_SOURCES})
  
  
@@ -22,16 +22,31 @@ index ea5ad9cdb864..4d1efc690d71 100644
 -
 -
  set(powerpcspe_SOURCES ${GENERIC_SOURCES})
  set(powerpcspe_SOURCES ${GENERIC_SOURCES})
  
  
- set(powerpc64_SOURCES
-@@ -634,6 +632,7 @@ if (NOT ${CMAKE_SYSTEM_NAME} MATCHES "AIX")
+-set(powerpc64_SOURCES
++set(powerpc_SOURCES
+   ppc/divtc3.c
+   ppc/fixtfdi.c
+   ppc/fixunstfdi.c
+@@ -687,14 +685,15 @@ set(powerpc64_SOURCES
+ )
+ # These routines require __int128, which isn't supported on AIX.
+ if (NOT ${CMAKE_SYSTEM_NAME} MATCHES "AIX")
+-  set(powerpc64_SOURCES
++  set(powerpc_SOURCES
+     ppc/floattitf.c
+     ppc/fixtfti.c
+     ppc/fixunstfti.c
+-    ${powerpc64_SOURCES}
++    ${powerpc_SOURCES}
    )
    )
  endif()
  endif()
- set(powerpc64le_SOURCES ${powerpc64_SOURCES})
-+set(powerpc_SOURCES ${powerpc64_SOURCES})
+-set(powerpc64le_SOURCES ${powerpc64_SOURCES})
++set(powerpc64le_SOURCES ${powerpc_SOURCES})
++set(powerpc64_SOURCES ${powerpc_SOURCES})
  
  
  set(riscv_SOURCES
  set(riscv_SOURCES
-   riscv/save.S
-@@ -740,9 +739,9 @@ else ()
+   riscv/fp_mode.c
+@@ -818,9 +817,9 @@ else ()
          list(APPEND BUILTIN_CFLAGS_${arch} -fomit-frame-pointer -DCOMPILER_RT_ARMHF_TARGET)
          list(APPEND BUILTIN_CFLAGS_${arch} -fomit-frame-pointer -DCOMPILER_RT_ARMHF_TARGET)
        endif()
        endif()
  
  
@@ -44,15 +59,15 @@ index ea5ad9cdb864..4d1efc690d71 100644
        endif()
        endif()
  
  
 diff --git a/compiler-rt/lib/builtins/int_types.h b/compiler-rt/lib/builtins/int_types.h
 diff --git a/compiler-rt/lib/builtins/int_types.h b/compiler-rt/lib/builtins/int_types.h
-index 7a72de480676..9ee5a327b28a 100644
+index e94d3154c6d4..37b2cb43f932 100644
 --- a/compiler-rt/lib/builtins/int_types.h
 --- a/compiler-rt/lib/builtins/int_types.h
 +++ b/compiler-rt/lib/builtins/int_types.h
 +++ b/compiler-rt/lib/builtins/int_types.h
 @@ -64,7 +64,7 @@ typedef union {
 @@ -64,7 +64,7 @@ typedef union {
  } udwords;
  } udwords;
  
  
  #if defined(__LP64__) || defined(__wasm__) || defined(__mips64) ||             \
  #if defined(__LP64__) || defined(__wasm__) || defined(__mips64) ||             \
--    defined(__riscv) || defined(_WIN64)
-+    defined(__riscv) || defined(_WIN64) || defined(__powerpc__)
+-    defined(__SIZEOF_INT128__) || defined(_WIN64)
++    defined(__SIZEOF_INT128__) || defined(_WIN64) || defined(__powerpc__)
  #define CRT_HAS_128BIT
  #define CRT_HAS_128BIT
  #endif
  #endif
  
  

+ 62 - 0
recipes-devtools/clang/clang/0032-llvm-Do-not-use-cmake-infra-to-detect-libzstd.patch

@@ -0,0 +1,62 @@
+From ab07bcf103432f49aeff486e2898110c879e8bc0 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 12 Aug 2022 11:50:57 -0700
+Subject: [PATCH] llvm: Do not use cmake infra to detect libzstd
+
+OE's version is build using plain make not cmake as a result we do not
+have the cmake support files and this probing method can get this info
+from build host and force linking with libzstd from /usr/lib which is
+not what we want when cross building.
+
+Fixes errors building llvm-config like
+/usr/lib/libzstd.so.1.5.2: error adding symbols: file in wrong
+format
+| clang-15: error: linker command failed with exit code 1 (use -v to see invocation)
+| ninja: build stopped: subcommand failed.
+
+Upstream-Status: Inappropriate [OE-Specific]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ llvm/lib/Support/CMakeLists.txt | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/llvm/lib/Support/CMakeLists.txt b/llvm/lib/Support/CMakeLists.txt
+index 8fbb2ca4c164..a6daa7c9f20f 100644
+--- a/llvm/lib/Support/CMakeLists.txt
++++ b/llvm/lib/Support/CMakeLists.txt
+@@ -22,7 +22,7 @@ if (HAS_WERROR_GLOBAL_CTORS)
+ endif()
+ 
+ if(LLVM_ENABLE_ZLIB)
+-  list(APPEND imported_libs ZLIB::ZLIB)
++  list(APPEND imported_libs z)
+ endif()
+ 
+ if(LLVM_ENABLE_ZSTD)
+@@ -34,7 +34,7 @@ if(LLVM_ENABLE_ZSTD)
+ endif()
+ 
+ if(LLVM_ENABLE_ZSTD)
+-  list(APPEND imported_libs ${zstd_target})
++  list(APPEND imported_libs zstd)
+ endif()
+ 
+ if( MSVC OR MINGW )
+@@ -291,7 +291,7 @@ if(LLVM_ENABLE_ZLIB)
+     get_property(zlib_library TARGET ZLIB::ZLIB PROPERTY LOCATION)
+   endif()
+   get_library_name(${zlib_library} zlib_library)
+-  set(llvm_system_libs ${llvm_system_libs} "${zlib_library}")
++  set(llvm_system_libs ${llvm_system_libs} z)
+ endif()
+ 
+ if(LLVM_ENABLE_ZSTD)
+@@ -304,7 +304,7 @@ if(LLVM_ENABLE_ZSTD)
+     get_property(zstd_library TARGET ${zstd_target} PROPERTY LOCATION)
+   endif()
+   get_library_name(${zstd_library} zstd_library)
+-  set(llvm_system_libs ${llvm_system_libs} "${zstd_library}")
++  set(llvm_system_libs ${llvm_system_libs} zstd)
+ endif()
+ 
+ if(LLVM_ENABLE_TERMINFO)

+ 53 - 0
recipes-devtools/clang/clang/0033-build-Enable-64bit-off_t-on-32bit-glibc-systems.patch

@@ -0,0 +1,53 @@
+From 48cf70c06ae6085ff3d1f8b28e323f153cff23c6 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 25 Dec 2022 15:13:41 -0800
+Subject: [PATCH] build: Enable 64bit off_t on 32bit glibc systems
+
+Pass -D_FILE_OFFSET_BITS=64 to compiler flags on 32bit glibc based
+systems. This will make sure that 64bit versions of LFS functions are
+used e.g. lseek will behave same as lseek64. Also revert [1] partially
+because this added a cmake test to detect lseek64 but then forgot to
+pass the needed macro during actual compile, this test was incomplete too
+since libc implementations like musl has 64-bit off_t by default on 32-bit
+systems and does not bundle -D_LARGEFILE64_SOURCE [2] under -D_GNU_SOURCE
+like glibc, which means the compile now fails on musl because the cmake
+check passes but we do not have _LARGEFILE64_SOURCE defined. Moreover,
+Using the *64 function was transitional anyways so use
+-D_FILE_OFFSET_BITS=64 instead
+
+[1] https://github.com/llvm/llvm-project/commit/8db7e5e4eed4c4e697dc3164f2c9351d8c3e942b
+[2] https://git.musl-libc.org/cgit/musl/commit/?id=25e6fee27f4a293728dd15b659170e7b9c7db9bc
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ utils/bazel/llvm-project-overlay/llvm/config.bzl               | 1 -
+ .../llvm-project-overlay/llvm/include/llvm/Config/config.h     | 3 ---
+ 2 files changed, 4 deletions(-)
+
+diff --git a/utils/bazel/llvm-project-overlay/llvm/config.bzl b/utils/bazel/llvm-project-overlay/llvm/config.bzl
+index 5507f80efa0b..b15ec9e1bb39 100644
+--- a/utils/bazel/llvm-project-overlay/llvm/config.bzl
++++ b/utils/bazel/llvm-project-overlay/llvm/config.bzl
+@@ -48,7 +48,6 @@ posix_defines = [
+ linux_defines = posix_defines + [
+     "_GNU_SOURCE",
+     "HAVE_LINK_H=1",
+-    "HAVE_LSEEK64=1",
+     "HAVE_MALLINFO=1",
+     "HAVE_SBRK=1",
+     "HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC=1",
+diff --git a/utils/bazel/llvm-project-overlay/llvm/include/llvm/Config/config.h b/utils/bazel/llvm-project-overlay/llvm/include/llvm/Config/config.h
+index 8a30957b6120..6a68ac040bb8 100644
+--- a/utils/bazel/llvm-project-overlay/llvm/include/llvm/Config/config.h
++++ b/utils/bazel/llvm-project-overlay/llvm/include/llvm/Config/config.h
+@@ -144,9 +144,6 @@
+ /* Define to 1 if you have the <link.h> header file. */
+ /* HAVE_LINK_H defined in Bazel */
+ 
+-/* Define to 1 if you have the `lseek64' function. */
+-/* HAVE_LSEEK64 defined in Bazel */
+-
+ /* Define to 1 if you have the <mach/mach.h> header file. */
+ /* HAVE_MACH_MACH_H defined in Bazel */
+ 

+ 36 - 0
recipes-devtools/clang/clang/0034-compiler-rt-Undef-_TIME_BITS-along-with-_FILE_OFFSET.patch

@@ -0,0 +1,36 @@
+From 3c7ebde16bea113e119b2ef7134b10cd8d7e3b1c Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 31 Dec 2022 15:03:24 -0800
+Subject: [PATCH] compiler-rt: Undef _TIME_BITS along with _FILE_OFFSET_BITS on
+ linux
+
+On 32bit systems using 64bit time_t build fails because
+_FILE_OFFSET_BITS is undefined here but _TIME_BITS is still set to 64
+
+Fixes
+/usr/include/features-time64.h:26:5: error: "_TIME_BITS=64 is allowed
+ only with _FILE_OFFSET_BITS=64"
+| #   error "_TIME_BITS=64 is allowed only with _FILE_OFFSET_BITS=64"
+|     ^
+| 1 error generated.
+
+Also avoid LFS64 functions on musl
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ .../lib/sanitizer_common/sanitizer_platform_limits_posix.cpp     | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
+index fc01498aa228..eb2ee78c2f45 100644
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
+@@ -18,6 +18,7 @@
+ // depends on _FILE_OFFSET_BITS setting.
+ // To get this "true" dirent definition, we undefine _FILE_OFFSET_BITS below.
+ #undef _FILE_OFFSET_BITS
++#undef _TIME_BITS
+ #endif
+ 
+ // Must go after undef _FILE_OFFSET_BITS.

+ 44 - 0
recipes-devtools/clang/clang/0035-compiler-rt-Fix-stat-struct-s-size-for-O32-ABI.patch

@@ -0,0 +1,44 @@
+From 577a70fd39778fb7e3bcd22b6c6713fcb516c365 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 3 Jan 2023 18:44:34 -0800
+Subject: [PATCH] compiler-rt: Fix stat struct's size for O32 ABI
+
+stat struct size differs on glibc based on ABI choices e.g. 64bit off_t
+and/or 64bit time_t will make this size different. Therefore separate
+out the O32 case out, makes it more readable.
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ .../sanitizer_platform_limits_posix.h               | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h
+index fdc69b8a5fba..d2246893f8a5 100644
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h
+@@ -97,11 +97,24 @@ const unsigned struct_kernel_stat64_sz = 104;
+ const unsigned struct_kernel_stat_sz = 144;
+ const unsigned struct_kernel_stat64_sz = 104;
+ #elif defined(__mips__)
++#if defined(__mips_o32) // O32 ABI
++#if _TIME_BITS == 64
++const unsigned struct_kernel_stat_sz = 112;
++const unsigned struct_kernel_stat64_sz = 112;
++#elif _FILE_OFFSET_BITS == 64
++const unsigned struct_kernel_stat_sz = 160;
++const unsigned struct_kernel_stat64_sz = 160;
++#else
++const unsigned struct_kernel_stat_sz = 144;
++const unsigned struct_kernel_stat64_sz = 160;
++#endif
++#else // __mips_o32
+ const unsigned struct_kernel_stat_sz =
+     SANITIZER_ANDROID
+         ? FIRST_32_SECOND_64(104, 128)
+         : FIRST_32_SECOND_64((_MIPS_SIM == _ABIN32) ? 176 : 160, 216);
+ const unsigned struct_kernel_stat64_sz = 104;
++#endif
+ #elif defined(__s390__) && !defined(__s390x__)
+ const unsigned struct_kernel_stat_sz = 64;
+ const unsigned struct_kernel_stat64_sz = 104;

+ 43 - 0
recipes-devtools/clang/clang/0036-compiler-rt-Undef-_TIME_BITS-along-with-_FILE_OFFSET.patch

@@ -0,0 +1,43 @@
+From c62140c7e116fabe7bccf9b55848c74e5beefccd Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 21 Feb 2023 12:46:10 -0800
+Subject: [PATCH] compiler-rt: Undef _TIME_BITS along with _FILE_OFFSET_BITS in
+ sanitizers
+
+On 32bit systems using 64bit time_t build fails because
+_FILE_OFFSET_BITS is undefined here but _TIME_BITS is still set to 64
+
+Fixes
+In file included from compiler-rt/lib/sanitizer_common/sanitizer_procmaps_solaris.cpp:17:
+In file included from compiler-rt/lib/sanitizer_common/sanitizer_platform.h:25:
+In file included from /usr/include/features.h:393:
+/usr/include/features-time64.h:26:5: error: "_TIME_BITS=64 is allowed only with _FILE_OFFSET_BITS=64"
+    ^
+1 error generated.
+
+Upstream-Status: Submitted [https://reviews.llvm.org/D144514]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ compiler-rt/lib/sanitizer_common/sanitizer_platform.h | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_platform.h b/compiler-rt/lib/sanitizer_common/sanitizer_platform.h
+index 764996e57355..df3d165ecdb6 100644
+--- a/compiler-rt/lib/sanitizer_common/sanitizer_platform.h
++++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform.h
+@@ -22,6 +22,15 @@
+ // function declarations into a .S file which doesn't compile.
+ // https://crbug.com/1162741
+ #if __has_include(<features.h>) && !defined(__ANDROID__)
++// Some sources undefine _FILE_OFFSET_BITS deliberately e.g.
++// sanitizer_procmaps_solaris.cpp. This is problematic on glibc systems with
++// 32-bit architectures using 64-bit time_t and users passing _TIME_BITS=64
++// from build environment, therefore both _FILE_OFFSET_BITS and _TIME_BITS
++// need to be undefined together since features.h will check for both being 64
++// if one is set to 64
++#  if !defined(_FILE_OFFSET_BITS)
++#    undef _TIME_BITS
++#  endif
+ #  include <features.h>
+ #endif
+ 

+ 70 - 0
recipes-devtools/clang/clang/0037-clang-Call-printName-to-get-name-of-Decl.patch

@@ -0,0 +1,70 @@
+From d33d6a8c4f43907cb53130730a2bc48624a34b74 Mon Sep 17 00:00:00 2001
+From: Dan McGregor <dan.mcgregor@usask.ca>
+Date: Tue, 21 Mar 2023 13:04:51 -0600
+Subject: [PATCH] [clang] Call printName to get name of Decl
+
+Rather than sending a name directly to the stream, use printName
+to preserve any PrintingPolicy. This ensures that names are properly
+affected by path remapping.
+
+Differential Revision: https://reviews.llvm.org/D149272
+
+Upstream-Status: Pending
+---
+ clang/lib/AST/Decl.cpp                  |  4 ++--
+ clang/lib/AST/DeclarationName.cpp       |  4 ++--
+ clang/test/CodeGen/debug-prefix-map.cpp | 11 +++++++++++
+ 3 files changed, 15 insertions(+), 4 deletions(-)
+ create mode 100644 clang/test/CodeGen/debug-prefix-map.cpp
+
+diff --git a/clang/lib/AST/Decl.cpp b/clang/lib/AST/Decl.cpp
+index e60cc28f6e0f..24de6156c0f5 100644
+--- a/clang/lib/AST/Decl.cpp
++++ b/clang/lib/AST/Decl.cpp
+@@ -1626,8 +1626,8 @@ Module *Decl::getOwningModuleForLinkage(bool IgnoreLinkage) const {
+   llvm_unreachable("unknown module kind");
+ }
+ 
+-void NamedDecl::printName(raw_ostream &OS, const PrintingPolicy&) const {
+-  OS << Name;
++void NamedDecl::printName(raw_ostream &OS, const PrintingPolicy &Policy) const {
++  Name.print(OS, Policy);
+ }
+ 
+ void NamedDecl::printName(raw_ostream &OS) const {
+diff --git a/clang/lib/AST/DeclarationName.cpp b/clang/lib/AST/DeclarationName.cpp
+index c1219041a466..da8b3886c340 100644
+--- a/clang/lib/AST/DeclarationName.cpp
++++ b/clang/lib/AST/DeclarationName.cpp
+@@ -117,12 +117,12 @@ static void printCXXConstructorDestructorName(QualType ClassType,
+   Policy.adjustForCPlusPlus();
+ 
+   if (const RecordType *ClassRec = ClassType->getAs<RecordType>()) {
+-    OS << *ClassRec->getDecl();
++    ClassRec->getDecl()->printName(OS, Policy);
+     return;
+   }
+   if (Policy.SuppressTemplateArgsInCXXConstructors) {
+     if (auto *InjTy = ClassType->getAs<InjectedClassNameType>()) {
+-      OS << *InjTy->getDecl();
++      InjTy->getDecl()->printName(OS, Policy);
+       return;
+     }
+   }
+diff --git a/clang/test/CodeGen/debug-prefix-map.cpp b/clang/test/CodeGen/debug-prefix-map.cpp
+new file mode 100644
+index 000000000000..7ddaee531282
+--- /dev/null
++++ b/clang/test/CodeGen/debug-prefix-map.cpp
+@@ -0,0 +1,11 @@
++// RUN: %clang_cc1 -debug-info-kind=standalone -fdebug-prefix-map=%p=./UNLIKELY_PATH/empty -S %s -emit-llvm -o - | FileCheck %s
++
++struct alignas(64) an {
++  struct {
++    unsigned char x{0};
++  } arr[64];
++};
++
++struct an *pan = new an;
++
++// CHECK: !DISubprogram(name: "(unnamed struct at ./UNLIKELY_PATH/empty{{/|\\\\}}{{.*}}",

+ 443 - 0
recipes-devtools/clang/clang_16.0.5.bb

@@ -0,0 +1,443 @@
+# Copyright (C) 2014 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+DESCRIPTION = "LLVM based C/C++ compiler"
+HOMEPAGE = "http://clang.llvm.org/"
+SECTION = "devel"
+
+require clang.inc
+require common-source.inc
+
+INHIBIT_DEFAULT_DEPS = "1"
+
+BUILD_CC:class-nativesdk = "clang"
+BUILD_CXX:class-nativesdk = "clang++"
+BUILD_AR:class-nativesdk = "llvm-ar"
+BUILD_RANLIB:class-nativesdk = "llvm-ranlib"
+BUILD_NM:class-nativesdk = "llvm-nm"
+LDFLAGS:remove:class-nativesdk = "-fuse-ld=lld"
+
+LDFLAGS:append:class-target:riscv32 = " -Wl,--no-as-needed -latomic -Wl,--as-needed"
+LDFLAGS:append:class-target:mips = " -Wl,--no-as-needed -latomic -Wl,--as-needed"
+
+inherit cmake cmake-native pkgconfig python3native python3targetconfig
+
+OECMAKE_FIND_ROOT_PATH_MODE_PROGRAM = "BOTH"
+
+def get_clang_experimental_arch(bb, d, arch_var):
+    import re
+    a = d.getVar(arch_var, True)
+    return ""
+
+def get_clang_arch(bb, d, arch_var):
+    import re
+    a = d.getVar(arch_var, True)
+    if   re.match('(i.86|athlon|x86.64)$', a):         return 'X86'
+    elif re.match('arm$', a):                          return 'ARM'
+    elif re.match('armeb$', a):                        return 'ARM'
+    elif re.match('aarch64$', a):                      return 'AArch64'
+    elif re.match('aarch64_be$', a):                   return 'AArch64'
+    elif re.match('mips(isa|)(32|64|)(r6|)(el|)$', a): return 'Mips'
+    elif re.match('riscv32$', a):                      return 'riscv32'
+    elif re.match('riscv64$', a):                      return 'riscv64'
+    elif re.match('p(pc|owerpc)(|64)', a):             return 'PowerPC'
+    elif re.match('loongarch64$', a):                  return 'loongarch64'
+    else:
+        bb.note("'%s' is not a primary llvm architecture" % a)
+    return ""
+
+def get_clang_host_arch(bb, d):
+    return get_clang_arch(bb, d, 'HOST_ARCH')
+
+def get_clang_target_arch(bb, d):
+    return get_clang_arch(bb, d, 'TARGET_ARCH')
+
+def get_clang_experimental_target_arch(bb, d):
+    return get_clang_experimental_arch(bb, d, 'TARGET_ARCH')
+
+PACKAGECONFIG ??= "compiler-rt libcplusplus shared-libs lldb-wchar \
+                   ${@bb.utils.filter('DISTRO_FEATURES', 'thin-lto lto', d)} \
+                   ${@bb.utils.contains('RUNTIME', 'llvm', 'compiler-rt libcplusplus unwindlib libomp', '', d)} \
+                   rtti eh libedit terminfo \
+                   "
+PACKAGECONFIG:class-native = "rtti eh libedit shared-libs ${@bb.utils.contains('RUNTIME', 'llvm', 'compiler-rt libcplusplus unwindlib libomp', '', d)}"
+PACKAGECONFIG:class-nativesdk = "rtti eh libedit shared-libs ${@bb.utils.filter('DISTRO_FEATURES', 'thin-lto lto', d)} ${@bb.utils.contains('RUNTIME', 'llvm', 'compiler-rt libcplusplus unwindlib libomp', '', d)}"
+
+PACKAGECONFIG[compiler-rt] = "-DCLANG_DEFAULT_RTLIB=compiler-rt,,"
+PACKAGECONFIG[libcplusplus] = "-DCLANG_DEFAULT_CXX_STDLIB=libc++,,"
+PACKAGECONFIG[unwindlib] = "-DCLANG_DEFAULT_UNWINDLIB=libunwind,-DCLANG_DEFAULT_UNWINDLIB=libgcc,,"
+PACKAGECONFIG[libomp] = "-DCLANG_DEFAULT_OPENMP_RUNTIME=libomp,,"
+PACKAGECONFIG[thin-lto] = "-DLLVM_ENABLE_LTO=Thin -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils,"
+PACKAGECONFIG[lto] = "-DLLVM_ENABLE_LTO=Full -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils,"
+PACKAGECONFIG[shared-libs] = "-DLLVM_BUILD_LLVM_DYLIB=ON -DLLVM_LINK_LLVM_DYLIB=ON,,,"
+PACKAGECONFIG[terminfo] = "-DLLVM_ENABLE_TERMINFO=ON -DCOMPILER_RT_TERMINFO_LIB=ON,-DLLVM_ENABLE_TERMINFO=OFF -DCOMPILER_RT_TERMINFO_LIB=OFF,ncurses,"
+PACKAGECONFIG[pfm] = "-DLLVM_ENABLE_LIBPFM=ON,-DLLVM_ENABLE_LIBPFM=OFF,libpfm,"
+PACKAGECONFIG[lldb-wchar] = "-DLLDB_EDITLINE_USE_WCHAR=1,-DLLDB_EDITLINE_USE_WCHAR=0,"
+PACKAGECONFIG[lldb-lua] = "-DLLDB_ENABLE_LUA=ON,-DLLDB_ENABLE_LUA=OFF,lua"
+PACKAGECONFIG[bootstrap] = "-DCLANG_ENABLE_BOOTSTRAP=On -DCLANG_BOOTSTRAP_PASSTHROUGH='${PASSTHROUGH}' -DBOOTSTRAP_LLVM_ENABLE_LTO=Thin -DBOOTSTRAP_LLVM_ENABLE_LLD=ON,,,"
+PACKAGECONFIG[eh] = "-DLLVM_ENABLE_EH=ON,-DLLVM_ENABLE_EH=OFF,,"
+PACKAGECONFIG[rtti] = "-DLLVM_ENABLE_RTTI=ON,-DLLVM_ENABLE_RTTI=OFF,,"
+PACKAGECONFIG[split-dwarf] = "-DLLVM_USE_SPLIT_DWARF=ON,-DLLVM_USE_SPLIT_DWARF=OFF,,"
+PACKAGECONFIG[libedit] = "-DLLVM_ENABLE_LIBEDIT=ON -DLLDB_ENABLE_LIBEDIT=ON,-DLLVM_ENABLE_LIBEDIT=OFF -DLLDB_ENABLE_LIBEDIT=OFF,libedit libedit-native"
+
+OECMAKE_SOURCEPATH = "${S}/llvm"
+
+OECMAKE_TARGET_COMPILE = "${@bb.utils.contains('PACKAGECONFIG', 'bootstrap', 'stage2', 'all', d)}"
+OECMAKE_TARGET_INSTALL = "${@bb.utils.contains('PACKAGECONFIG', 'bootstrap', 'stage2-install', 'install', d)}"
+BINPATHPREFIX = "${@bb.utils.contains('PACKAGECONFIG', 'bootstrap', '/tools/clang/stage2-bins/NATIVE', '', d)}"
+
+PASSTHROUGH = "\
+CLANG_DEFAULT_RTLIB;CLANG_DEFAULT_CXX_STDLIB;LLVM_BUILD_LLVM_DYLIB;LLVM_LINK_LLVM_DYLIB;\
+LLVM_ENABLE_ASSERTIONS;LLVM_ENABLE_EXPENSIVE_CHECKS;LLVM_ENABLE_PIC;\
+LLVM_BINDINGS_LIST;LLVM_ENABLE_FFI;FFI_INCLUDE_DIR;LLVM_OPTIMIZED_TABLEGEN;\
+LLVM_ENABLE_RTTI;LLVM_ENABLE_EH;LLVM_BUILD_EXTERNAL_COMPILER_RT;CMAKE_SYSTEM_NAME;\
+CMAKE_BUILD_TYPE;BUILD_SHARED_LIBS;LLVM_ENABLE_PROJECTS;LLVM_BINUTILS_INCDIR;\
+LLVM_TARGETS_TO_BUILD;LLVM_EXPERIMENTAL_TARGETS_TO_BUILD;PYTHON_EXECUTABLE;\
+PYTHON_LIBRARY;PYTHON_INCLUDE_DIR;LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN;LLDB_EDITLINE_USE_WCHAR;\
+LLVM_ENABLE_LIBEDIT;LLDB_ENABLE_LIBEDIT;LLDB_PYTHON_RELATIVE_PATH;LLDB_PYTHON_EXE_RELATIVE_PATH;\
+LLDB_PYTHON_EXT_SUFFIX;CMAKE_C_FLAGS_RELEASE;CMAKE_CXX_FLAGS_RELEASE;CMAKE_ASM_FLAGS_RELEASE;\
+CLANG_DEFAULT_CXX_STDLIB;CLANG_DEFAULT_RTLIB;CLANG_DEFAULT_UNWINDLIB;\
+CLANG_DEFAULT_OPENMP_RUNTIME;LLVM_ENABLE_PER_TARGET_RUNTIME_DIR;\
+LLVM_BUILD_TOOLS;LLVM_USE_HOST_TOOLS;LLVM_CONFIG_PATH;\
+"
+#
+# Default to build all OE-Core supported target arches (user overridable).
+# Gennerally setting LLVM_TARGETS_TO_BUILD = "" in local.conf is ok in most simple situations
+# where only one target architecture is needed along with just one build arch (usually X86)
+#
+LLVM_TARGETS_TO_BUILD ?= "AMDGPU;AArch64;ARM;BPF;Mips;PowerPC;RISCV;X86;LoongArch"
+
+LLVM_EXPERIMENTAL_TARGETS_TO_BUILD ?= ""
+LLVM_EXPERIMENTAL_TARGETS_TO_BUILD:append = ";${@get_clang_experimental_target_arch(bb, d)}"
+
+HF = ""
+HF:class-target = "${@ bb.utils.contains('TUNE_CCARGS_MFLOAT', 'hard', 'hf', '', d)}"
+HF[vardepvalue] = "${HF}"
+
+LLVM_PROJECTS ?= "clang;clang-tools-extra;lld${LLDB}"
+LLDB ?= ";lldb"
+# LLDB support for RISCV/Mips32 does not work yet
+LLDB:riscv32 = ""
+LLDB:riscv64 = ""
+LLDB:mips = ""
+LLDB:mipsel = ""
+LLDB:powerpc = ""
+
+# linux hosts (.so) on Windows .pyd
+SOLIBSDEV:mingw32 = ".pyd"
+
+#CMAKE_VERBOSE = "VERBOSE=1"
+
+EXTRA_OECMAKE += "-DLLVM_ENABLE_ASSERTIONS=OFF \
+                  -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF \
+                  -DLLVM_ENABLE_EXPENSIVE_CHECKS=OFF \
+                  -DLLVM_ENABLE_PIC=ON \
+                  -DCLANG_DEFAULT_PIE_ON_LINUX=ON \
+                  -DLLVM_BINDINGS_LIST='' \
+                  -DLLVM_ENABLE_FFI=ON \
+                  -DLLVM_ENABLE_ZSTD=ON \
+                  -DFFI_INCLUDE_DIR=$(pkg-config --variable=includedir libffi) \
+                  -DLLVM_OPTIMIZED_TABLEGEN=ON \
+                  -DLLVM_BUILD_EXTERNAL_COMPILER_RT=ON \
+                  -DCMAKE_SYSTEM_NAME=Linux \
+                  -DCMAKE_BUILD_TYPE=Release \
+                  -DCMAKE_CXX_FLAGS_RELEASE='${CXXFLAGS} -DNDEBUG -g0' \
+                  -DCMAKE_C_FLAGS_RELEASE='${CFLAGS} -DNDEBUG -g0' \
+                  -DBUILD_SHARED_LIBS=OFF \
+                  -DLLVM_ENABLE_PROJECTS='${LLVM_PROJECTS}' \
+                  -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR} \
+                  -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON \
+                  -DLLVM_TARGETS_TO_BUILD='${LLVM_TARGETS_TO_BUILD}' \
+                  -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD='${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}' \
+"
+
+EXTRA_OECMAKE:append:class-native = "\
+                  -DPYTHON_EXECUTABLE='${PYTHON}' \
+"
+EXTRA_OECMAKE:append:class-nativesdk = "\
+                  -DCMAKE_CROSSCOMPILING:BOOL=ON \
+                  -DCROSS_TOOLCHAIN_FLAGS_NATIVE='-DLLDB_PYTHON_RELATIVE_PATH=${PYTHON_SITEPACKAGES_DIR} \
+                                                  -DLLDB_PYTHON_EXE_RELATIVE_PATH=${PYTHON} \
+                                                  -DLLDB_PYTHON_EXT_SUFFIX=${SOLIBSDEV} \
+                                                  -DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/toolchain-native.cmake' \
+                  -DCMAKE_RANLIB=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ranlib \
+                  -DCMAKE_AR=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ar \
+                  -DCMAKE_NM=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-nm \
+                  -DCMAKE_STRIP=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-strip \
+                  -DLLVM_USE_HOST_TOOLS=OFF \
+                  -DLLVM_CONFIG_PATH=${STAGING_BINDIR_NATIVE}/llvm-config \
+                  -DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen \
+                  -DLLDB_TABLEGEN=${STAGING_BINDIR_NATIVE}/lldb-tblgen \
+                  -DCLANG_TABLEGEN=${STAGING_BINDIR_NATIVE}/clang-tblgen \
+                  -DCLANG_TIDY_CONFUSABLE_CHARS_GEN=${STAGING_BINDIR_NATIVE}/clang-tidy-confusable-chars-gen \
+                  -DCLANG_PSEUDO_GEN=${STAGING_BINDIR_NATIVE}/clang-pseudo-gen \
+                  -DPYTHON_LIBRARY=${STAGING_LIBDIR}/lib${PYTHON_DIR}${PYTHON_ABI}.so \
+                  -DLLDB_PYTHON_RELATIVE_PATH=${PYTHON_SITEPACKAGES_DIR} \
+                  -DLLDB_PYTHON_EXE_RELATIVE_PATH=${PYTHON} \
+                  -DLLDB_PYTHON_EXT_SUFFIX=${SOLIBSDEV} \
+                  -DPYTHON_INCLUDE_DIR=${STAGING_INCDIR}/${PYTHON_DIR}${PYTHON_ABI} \
+                  -DPYTHON_EXECUTABLE='${PYTHON}' \
+"
+EXTRA_OECMAKE:append:class-target = "\
+                  -DCMAKE_CROSSCOMPILING:BOOL=ON \
+                  -DLLVM_USE_HOST_TOOLS=OFF \
+                  -DLLVM_CONFIG_PATH=${STAGING_BINDIR_NATIVE}/llvm-config \
+                  -DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen \
+                  -DLLDB_TABLEGEN=${STAGING_BINDIR_NATIVE}/lldb-tblgen \
+                  -DCLANG_TABLEGEN=${STAGING_BINDIR_NATIVE}/clang-tblgen \
+                  -DCLANG_TIDY_CONFUSABLE_CHARS_GEN=${STAGING_BINDIR_NATIVE}/clang-tidy-confusable-chars-gen \
+                  -DCLANG_PSEUDO_GEN=${STAGING_BINDIR_NATIVE}/clang-pseudo-gen \
+                  -DCMAKE_RANLIB=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ranlib \
+                  -DCMAKE_AR=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ar \
+                  -DCMAKE_NM=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-nm \
+                  -DCMAKE_STRIP=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-strip \
+                  -DLLVM_TARGET_ARCH=${@get_clang_target_arch(bb, d)} \
+                  -DLLVM_DEFAULT_TARGET_TRIPLE=${TARGET_SYS}${HF} \
+                  -DLLVM_HOST_TRIPLE=${TARGET_SYS}${HF} \
+                  -DPYTHON_LIBRARY=${STAGING_LIBDIR}/lib${PYTHON_DIR}${PYTHON_ABI}.so \
+                  -DPYTHON_INCLUDE_DIR=${STAGING_INCDIR}/${PYTHON_DIR}${PYTHON_ABI} \
+                  -DLLVM_LIBDIR_SUFFIX=${@d.getVar('baselib').replace('lib', '')} \
+                  -DLLDB_PYTHON_RELATIVE_PATH=${PYTHON_SITEPACKAGES_DIR} \
+                  -DLLDB_PYTHON_EXE_RELATIVE_PATH=${bindir} \
+                  -DLLDB_PYTHON_EXT_SUFFIX=${SOLIBSDEV} \
+"
+
+DEPENDS = "binutils zlib zstd libffi libxml2 libxml2-native ninja-native swig-native"
+DEPENDS:append:class-nativesdk = " clang-crosssdk-${SDK_ARCH} virtual/${TARGET_PREFIX}binutils-crosssdk nativesdk-python3"
+DEPENDS:append:class-target = " clang-cross-${TARGET_ARCH} python3 compiler-rt libcxx"
+
+RRECOMMENDS:${PN} = "binutils"
+RRECOMMENDS:${PN}:append:class-target = " libcxx-dev"
+
+# patch out build host paths for reproducibility
+do_compile:prepend:class-target() {
+    sed -i -e "s,${STAGING_DIR_NATIVE},,g" \
+        -e "s,${STAGING_DIR_TARGET},,g" \
+        -e "s,${S},,g"  \
+        -e "s,${B},,g" \
+        ${B}/tools/llvm-config/BuildVariables.inc
+}
+
+do_install:append() {
+    rm -rf ${D}${libdir}/python*/site-packages/six.py
+}
+
+do_install:append:class-target () {
+    # Allow bin path to change based on YOCTO_ALTERNATE_EXE_PATH
+    sed -i 's;${_IMPORT_PREFIX}/bin;${_IMPORT_PREFIX_BIN};g' ${D}${libdir}/cmake/llvm/LLVMExports-release.cmake
+
+    # Insert function to populate Import Variables
+    sed -i "4i\
+if(DEFINED ENV{YOCTO_ALTERNATE_EXE_PATH})\n\
+  execute_process(COMMAND \"llvm-config\" \"--bindir\" OUTPUT_VARIABLE _IMPORT_PREFIX_BIN OUTPUT_STRIP_TRAILING_WHITESPACE)\n\
+else()\n\
+  set(_IMPORT_PREFIX_BIN \"\${_IMPORT_PREFIX}/bin\")\n\
+endif()\n" ${D}${libdir}/cmake/llvm/LLVMExports-release.cmake
+
+    if [ -n "${LLVM_LIBDIR_SUFFIX}" ]; then
+        mkdir -p ${D}${nonarch_libdir}
+        mv ${D}${libdir}/clang ${D}${nonarch_libdir}/clang
+        ln -rs ${D}${nonarch_libdir}/clang ${D}${libdir}/clang
+        rmdir --ignore-fail-on-non-empty ${D}${libdir}
+    fi
+    for t in clang clang++ llvm-nm llvm-ar llvm-as llvm-ranlib llvm-strip llvm-objcopy llvm-objdump llvm-readelf \
+        llvm-addr2line llvm-dwp llvm-size llvm-strings llvm-cov; do
+        ln -sf $t ${D}${bindir}/${TARGET_PREFIX}$t
+    done
+
+    # reproducibility
+    sed -i -e 's,${B},,g' ${D}${libdir}/cmake/llvm/LLVMConfig.cmake
+}
+
+do_install:append:class-native () {
+    install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clang-tblgen ${D}${bindir}/clang-tblgen
+    install -Dm 0755 ${B}/bin/clang-pseudo-gen ${D}${bindir}/clang-pseudo-gen
+    install -Dm 0755 ${B}/bin/lldb-tblgen ${D}${bindir}/lldb-tblgen
+    install -Dm 0755 ${B}/bin/clang-tidy-confusable-chars-gen ${D}${bindir}/clang-tidy-confusable-chars-gen
+    for f in `find ${D}${bindir} -executable -type f -not -type l`; do
+        test -n "`file -b $f|grep -i ELF`" && ${STRIP} $f
+        echo "stripped $f"
+    done
+    ln -sf clang-tblgen ${D}${bindir}/clang-tblgen${PV}
+    ln -sf llvm-tblgen ${D}${bindir}/llvm-tblgen${PV}
+    ln -sf llvm-config ${D}${bindir}/llvm-config${PV}
+}
+
+do_install:append:class-nativesdk () {
+    install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clang-tblgen ${D}${bindir}/clang-tblgen
+    install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clang-pseudo-gen ${D}${bindir}/clang-pseudo-gen
+    install -Dm 0755 ${B}${BINPATHPREFIX}/bin/lldb-tblgen ${D}${bindir}/lldb-tblgen
+    install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clang-tidy-confusable-chars-gen ${D}${bindir}/clang-tidy-confusable-chars-gen
+    for f in `find ${D}${bindir} -executable -type f -not -type l`; do
+        test -n "`file -b $f|grep -i ELF`" && ${STRIP} $f
+    done
+    ln -sf clang-tblgen ${D}${bindir}/clang-tblgen${PV}
+    ln -sf llvm-tblgen ${D}${bindir}/llvm-tblgen${PV}
+    ln -sf llvm-config ${D}${bindir}/llvm-config${PV}
+    rm -rf ${D}${datadir}/llvm/cmake
+    rm -rf ${D}${datadir}/llvm
+}
+
+PACKAGES =+ "${PN}-libllvm ${PN}-lldb-python ${PN}-libclang-cpp ${PN}-tidy ${PN}-format ${PN}-tools \
+             libclang lldb lldb-server liblldb llvm-linker-tools"
+
+PROVIDES += "llvm llvm${PV}"
+PROVIDES:append:class-native = " llvm-native"
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS:lldb += "${PN}-lldb-python lldb-server"
+
+RDEPENDS:${PN}-tools += "\
+  perl-module-digest-md5 \
+  perl-module-file-basename \
+  perl-module-file-copy \
+  perl-module-file-find \
+  perl-module-file-path \
+  perl-module-findbin \
+  perl-module-hash-util \
+  perl-module-sys-hostname \
+  perl-module-term-ansicolor \
+"
+
+RRECOMMENDS:${PN}-tidy += "${PN}-tools"
+
+FILES:llvm-linker-tools = "${libdir}/LLVMgold* ${libdir}/libLTO.so.* ${libdir}/LLVMPolly*"
+
+FILES:${PN}-libclang-cpp = "${libdir}/libclang-cpp.so.*"
+
+FILES:${PN}-lldb-python = "${libdir}/python*/site-packages/lldb/*"
+
+FILES:${PN}-tidy = "${bindir}/*clang-tidy*"
+FILES:${PN}-format = "${bindir}/*clang-format*"
+
+FILES:${PN}-tools = "${bindir}/analyze-build \
+  ${bindir}/c-index-test \
+  ${bindir}/clang-apply-replacements \
+  ${bindir}/clang-change-namespace \
+  ${bindir}/clang-check \
+  ${bindir}/clang-doc \
+  ${bindir}/clang-extdef-mapping \
+  ${bindir}/clang-include-fixer \
+  ${bindir}/clang-linker-wrapper \
+  ${bindir}/clang-move \
+  ${bindir}/clang-nvlink-wrapper \
+  ${bindir}/clang-offload-bundler \
+  ${bindir}/clang-offload-packager \
+  ${bindir}/clang-pseudo \
+  ${bindir}/clang-query \
+  ${bindir}/clang-refactor \
+  ${bindir}/clang-rename \
+  ${bindir}/clang-reorder-fields \
+  ${bindir}/clang-repl \
+  ${bindir}/clang-scan-deps \
+  ${bindir}/diagtool \
+  ${bindir}/find-all-symbols \
+  ${bindir}/hmaptool \
+  ${bindir}/hwasan_symbolize \
+  ${bindir}/intercept-build \
+  ${bindir}/modularize \
+  ${bindir}/pp-trace \
+  ${bindir}/sancov \
+  ${bindir}/scan-build \
+  ${bindir}/scan-build-py \
+  ${bindir}/scan-view \
+  ${bindir}/split-file \
+  ${libdir}/libscanbuild/* \
+  ${libdir}/libear/* \
+  ${libexecdir}/analyze-c++ \
+  ${libexecdir}/analyze-cc \
+  ${libexecdir}/c++-analyzer \
+  ${libexecdir}/ccc-analyzer \
+  ${libexecdir}/intercept-c++ \
+  ${libexecdir}/intercept-cc \
+  ${datadir}/scan-build/* \
+  ${datadir}/scan-view/* \
+  ${datadir}/opt-viewer/* \
+  ${datadir}/clang/* \
+"
+
+FILES:${PN} += "\
+  ${bindir}/clang-cl \
+  ${libdir}/BugpointPasses.so \
+  ${libdir}/LLVMHello.so \
+  ${libdir}/*Plugin.so \
+  ${libdir}/${BPN} \
+  ${nonarch_libdir}/${BPN}/*/include/ \
+"
+
+FILES:lldb = "\
+  ${bindir}/lldb \
+  ${bindir}/lldb-argdumper \
+  ${bindir}/lldb-instr \
+  ${bindir}/lldb-vscode \
+"
+
+FILES:lldb-server = "\
+  ${bindir}/lldb-server \
+"
+
+FILES:liblldb = "\
+  ${libdir}/liblldbIntelFeatures.so.* \
+  ${libdir}/liblldb.so.* \
+"
+
+FILES:${PN}-libllvm =+ "\
+  ${libdir}/libLLVM-${MAJOR_VER}.${MINOR_VER}.so \
+  ${libdir}/libLLVM-${MAJOR_VER}.so \
+  ${libdir}/libLLVM-${MAJOR_VER}git.so \
+  ${libdir}/libLLVM-${MAJOR_VER}.${MINOR_VER}git.so \
+  ${libdir}/libRemarks.so.* \
+"
+
+FILES:libclang = "\
+  ${libdir}/libclang.so.* \
+"
+
+FILES:${PN}-dev += "\
+  ${datadir}/llvm/cmake \
+  ${libdir}/cmake \
+  ${nonarch_libdir}/libear \
+  ${nonarch_libdir}/${BPN}/*.la \
+"
+
+FILES:${PN}-staticdev += "${nonarch_libdir}/${BPN}/*.a"
+
+FILES:${PN}-staticdev:remove = "${libdir}/${BPN}/*.a"
+FILES:${PN}-dev:remove = "${libdir}/${BPN}/*.la"
+FILES:${PN}:remove = "${libdir}/${BPN}/*"
+
+
+INSANE_SKIP:${PN} += "already-stripped"
+#INSANE_SKIP:${PN}-dev += "dev-elf"
+INSANE_SKIP:${PN}-lldb-python += "dev-so dev-deps"
+INSANE_SKIP:${MLPREFIX}liblldb = "dev-so"
+
+#Avoid SSTATE_SCAN_COMMAND running sed over llvm-config.
+SSTATE_SCAN_FILES:remove = "*-config"
+
+TOOLCHAIN = "clang"
+TOOLCHAIN:class-native = "gcc"
+TOOLCHAIN:class-nativesdk = "clang"
+COMPILER_RT:class-nativesdk:toolchain-clang:runtime-llvm = "-rtlib=libgcc --unwindlib=libgcc"
+LIBCPLUSPLUS:class-nativesdk:toolchain-clang:runtime-llvm = "-stdlib=libstdc++"
+
+SYSROOT_DIRS:append:class-target = " ${nonarch_libdir}"
+
+SYSROOT_PREPROCESS_FUNCS:append:class-target = " clang_sysroot_preprocess"
+
+clang_sysroot_preprocess() {
+	install -d ${SYSROOT_DESTDIR}${bindir_crossscripts}/
+	install -m 0755 ${S}/../llvm-config ${SYSROOT_DESTDIR}${bindir_crossscripts}/
+	ln -sf llvm-config ${SYSROOT_DESTDIR}${bindir_crossscripts}/llvm-config${PV}
+	# LLDTargets.cmake references the lld executable(!) that some modules/plugins link to
+	install -d ${SYSROOT_DESTDIR}${bindir}
+	for f in lld diagtool clang-${MAJOR_VER} clang-format clang-offload-packager \
+            clang-offload-bundler clang-scan-deps clang-repl \
+            clang-rename clang-refactor clang-check clang-extdef-mapping clang-apply-replacements \
+            clang-reorder-fields clang-tidy clang-change-namespace clang-doc clang-include-fixer \
+            find-all-symbols clang-move clang-query pp-trace clang-pseudo clangd modularize
+	do
+		install -m 755 ${D}${bindir}/$f ${SYSROOT_DESTDIR}${bindir}/
+	done
+}

+ 28 - 0
recipes-devtools/clang/clang_16.0.5.bbappend

@@ -0,0 +1,28 @@
+LDFLAGS:remove:class-nativesdk = "-fuse-ld=lld"
+
+FILES:${PN} += "${libdir}/*"
+
+PACKAGECONFIG = ""
+LLVM_TARGETS_TO_BUILD = "RISCV;X86"
+
+EXTRA_OECMAKE:append:class-native = " \
+			-DCLANG_VENDOR="StarFive" \
+			-DCLANG_ENABLE_ARCMT=OFF \
+			-DCLANG_ENABLE_STATIC_ANALYZER=OFF \
+			-DCLANG_PLUGIN_SUPPORT=OFF \
+			-DCLANG_BUILD_TOOLS=ON \
+			-DCMAKE_BUILD_TYPE=Release \
+			-DLLVM_ENABLE_BINDINGS=OFF \
+			-DLLVM_ENABLE_PLUGINS=ON \
+			-DLLVM_ENABLE_OCAMLDOC=OFF \
+			-DLLVM_ENABLE_TERMINFO=OFF \
+			-DLLVM_INCLUDE_DOCS=OFF \
+			-DLLVM_INCLUDE_EXAMPLES=OFF \
+			-DLLVM_INCLUDE_TESTS=ON \
+			-DLLVM_ENABLE_WARNINGS=OFF \
+			-DLLVM_ENABLE_ASSERTIONS=TRUE \
+			-DLLVM_INCLUDE_UTILS=ON \
+			-DLLDB_PYTHON_EXE_RELATIVE_PATH="recipe-sysroot-native/usr/bin/python3-native/python3.9" \
+			-DLLDB_PYTHON_RELATIVE_PATH="recipe-sysroot-native/usr/bin/python3-native/" \
+                        -DLLDB_PYTHON_EXT_SUFFIX=".so" \
+			"

+ 0 - 63
recipes-devtools/clang/clang_git.bbappend

@@ -1,63 +0,0 @@
-MAJOR_VER = "15"
-MINOR_VER = "0"
-PATCH_VER = "0"
-
-LDFLAGS:remove:class-nativesdk = "-fuse-ld=lld"
-
-FILES:${PN} += "${libdir}/*"
-
-PACKAGECONFIG[bootstrap] = "-DCLANG_ENABLE_BOOTSTRAP=ON -DBOOTSTRAP_LLVM_ENABLE_LLD=ON,,,"
-BINPATHPREFIX = "${@bb.utils.contains('PACKAGECONFIG', 'bootstrap', '/tools/clang/stage2-bins', '', d)}"
-
-PACKAGECONFIG = ""
-PACKAGECONFIG:append:class-native = " bootstrap"
-
-LLVM_TARGETS_TO_BUILD = "RISCV;X86"
-
-EXTRA_OECMAKE:append:class-native = " \
-			-DCLANG_VENDOR="StarFive" \
-			-DCLANG_ENABLE_ARCMT=OFF \
-			-DCLANG_ENABLE_STATIC_ANALYZER=OFF \
-			-DCLANG_PLUGIN_SUPPORT=OFF \
-			-DCMAKE_BUILD_TYPE=Release \
-			-DLLVM_ENABLE_BINDINGS=OFF \
-			-DLLVM_ENABLE_PLUGINS=ON \
-			-DLLVM_ENABLE_OCAMLDOC=OFF \
-			-DLLVM_ENABLE_TERMINFO=OFF \
-			-DLLVM_INCLUDE_DOCS=OFF \
-			-DLLVM_INCLUDE_EXAMPLES=OFF \
-			-DLLVM_INCLUDE_TESTS=ON \
-			-DLLVM_ENABLE_WARNINGS=OFF \
-			-DLLVM_ENABLE_ASSERTIONS=TRUE \
-			-DLLVM_INCLUDE_UTILS=ON \
-			-DLLDB_PYTHON_EXE_RELATIVE_PATH="recipe-sysroot-native/usr/bin/python3-native/python3.9" \
-			-DLLDB_PYTHON_RELATIVE_PATH="recipe-sysroot-native/usr/bin/python3-native/" \
-                        -DLLDB_PYTHON_EXT_SUFFIX=".so" \
-                        -DBOOTSTRAP_CMAKE_BUILD_TYPE=Release \
-			-DBOOTSTRAP_LLVM_APPEND_VC_REV=OFF \
-			-DBOOTSTRAP_LLVM_INSTALL_TOOLCHAIN_ONLY=ON \
-			-DBOOTSTRAP_COMPILER_RT_USE_BUILTINS_LIBRARY=ON \
-			-DBOOTSTRAP_LLVM_TARGETS_TO_BUILD='${LLVM_TARGETS_TO_BUILD}' \
-			-DBOOTSTRAP_LLVM_INCLUDE_UTILS=ON \
-			-DBOOTSTRAP_LLVM_BUILD_TOOLS=ON \
-			-DBOOTSTRAP_LLVM_ENABLE_PROJECTS="clang" \
-			-DBOOTSTRAP_CLANG_ENABLE_ARCMT=OFF \
-			-DBOOTSTRAP_CLANG_ENABLE_STATIC_ANALYZER=OFF \
-			-DBOOTSTRAP_CLANG_PLUGIN_SUPPORT=OFF \
-			-DBOOTSTRAP_LLVM_ENABLE_BINDINGS=OFF \
-			-DBOOTSTRAP_LLVM_ENABLE_PLUGINS=ON \
-			-DBOOTSTRAP_LLVM_ENABLE_OCAMLDOC=OFF \
-			-DBOOTSTRAP_LLVM_ENABLE_TERMINFO=OFF \
-			-DBOOTSTRAP_LLVM_ENABLE_BACKTRACES=OFF \
-			-DBOOTSTRAP_LLVM_ENABLE_WARNINGS=OFF \
-			-DBOOTSTRAP_LLVM_INCLUDE_TESTS=OFF \
-			-DBOOTSTRAP_LLVM_INCLUDE_BENCHMARK=OFF \
-			-DBOOTSTRAP_LLVM_ENABLE_LIBCXX=ON \
-			-DBOOTSTRAP_LLVM_STATIC_LINK_CXX_STDLIB=ON \
-			-DBOOTSTRAP_LLVM_INCLUDE_DOCS=OFF \
-			-DBOOTSTRAP_LLVM_INCLUDE_EXAMPLES=OFF \
-			"
-
-do_install:append:class-native () {
-    install -Dm 0755 ${B}${BINPATHPREFIX}/bin/llvm-tblgen ${D}${bindir}/llvm-tblgen
-}

+ 17 - 0
recipes-devtools/clang/common-source.inc

@@ -0,0 +1,17 @@
+do_fetch() {
+        :
+}
+do_fetch[noexec] = "1"
+deltask do_unpack
+deltask do_patch
+
+SRC_URI = ""
+
+do_configure[depends] += "llvm-project-source-${PV}:do_patch"
+do_populate_lic[depends] += "llvm-project-source-${PV}:do_unpack"
+do_create_spdx[depends] += "llvm-project-source-${PV}:do_patch"
+
+# spdx shared workdir detection fails as not WORKDIR is altered but S and B
+# return always true to fix that
+def is_work_shared_spdx(d):
+    return True

+ 60 - 0
recipes-devtools/clang/common.inc

@@ -0,0 +1,60 @@
+FILESEXTRAPATHS =. "${FILE_DIRNAME}/clang:"
+
+LIC_FILES_CHKSUM = "file://llvm/LICENSE.TXT;md5=${LLVMMD5SUM} \
+                    file://clang/LICENSE.TXT;md5=${CLANGMD5SUM} \
+"
+LICENSE = "Apache-2.0-with-LLVM-exception"
+
+BASEURI ??= "${LLVM_GIT}/llvm-project;protocol=${LLVM_GIT_PROTOCOL};branch=${BRANCH}"
+SRC_URI = "\
+    ${BASEURI} \
+    file://llvm-config \
+    file://libunwind.pc.in \
+    file://0001-libcxxabi-Find-libunwind-headers-when-LIBCXXABI_LIBU.patch \
+    file://0002-compiler-rt-support-a-new-embedded-linux-target.patch \
+    file://0003-compiler-rt-Simplify-cross-compilation.-Don-t-use-na.patch \
+    file://0004-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch \
+    file://0005-llvm-allow-env-override-of-exe-and-libdir-path.patch \
+    file://0006-clang-driver-Check-sysroot-for-ldso-path.patch \
+    file://0007-clang-Driver-tools.cpp-Add-lssp_nonshared-on-musl.patch \
+    file://0008-clang-Prepend-trailing-to-sysroot.patch \
+    file://0009-clang-Look-inside-the-target-sysroot-for-compiler-ru.patch \
+    file://0010-clang-Define-releative-gcc-installation-dir.patch \
+    file://0011-clang-Add-lpthread-and-ldl-along-with-lunwind-for-st.patch \
+    file://0012-Pass-PYTHON_EXECUTABLE-when-cross-compiling-for-nati.patch \
+    file://0013-Check-for-atomic-double-intrinsics.patch \
+    file://0014-libcxx-Add-compiler-runtime-library-to-link-step-for.patch \
+    file://0015-clang-llvm-cmake-Fix-configure-for-packages-using-fi.patch \
+    file://0016-clang-Fix-resource-dir-location-for-cross-toolchains.patch \
+    file://0017-clang-driver-Add-dyld-prefix-when-checking-sysroot-f.patch \
+    file://0018-clang-Use-python3-in-python-scripts.patch \
+    file://0019-For-x86_64-set-Yocto-based-GCC-install-search-path.patch \
+    file://0020-llvm-Do-not-use-find_library-for-ncurses.patch \
+    file://0021-llvm-Insert-anchor-for-adding-OE-distro-vendor-names.patch \
+    file://0022-compiler-rt-Do-not-use-backtrace-APIs-on-non-glibc-l.patch \
+    file://0023-clang-Fix-x86-triple-for-non-debian-multiarch-linux-.patch \
+    file://0024-libunwind-Added-unw_backtrace-method.patch \
+    file://0025-clang-Do-not-use-install-relative-libc-headers.patch \
+    file://0026-clang-Fix-how-driver-finds-GCC-installation-path-on-.patch \
+    file://0027-Fix-lib-paths-for-OpenEmbedded-Host.patch \
+    file://0028-Correct-library-search-path-for-OpenEmbedded-Host.patch \
+    file://0029-lldb-Link-with-libatomic-on-x86.patch \
+    file://0030-clang-exclude-openembedded-distributions-from-settin.patch \
+    file://0031-compiler-rt-Enable-__int128-for-ppc32.patch \
+    file://0032-llvm-Do-not-use-cmake-infra-to-detect-libzstd.patch \
+    file://0033-build-Enable-64bit-off_t-on-32bit-glibc-systems.patch \
+    file://0034-compiler-rt-Undef-_TIME_BITS-along-with-_FILE_OFFSET.patch \
+    file://0035-compiler-rt-Fix-stat-struct-s-size-for-O32-ABI.patch \
+    file://0036-compiler-rt-Undef-_TIME_BITS-along-with-_FILE_OFFSET.patch \
+    file://0037-clang-Call-printName-to-get-name-of-Decl.patch \
+    "
+# Fallback to no-PIE if not set
+GCCPIE ??= ""
+
+S = "${TMPDIR}/work-shared/llvm-project-source-${PV}-${PR}/git"
+B = "${WORKDIR}/llvm-project-source-${PV}/build.${HOST_SYS}.${TARGET_SYS}"
+
+# We need to ensure that for the shared work directory, the do_patch signatures match
+# The real WORKDIR location isn't a dependency for the shared workdir.
+src_patches[vardepsexclude] = "WORKDIR"
+should_apply[vardepsexclude] += "PN"

+ 116 - 0
recipes-devtools/clang/compiler-rt-sanitizers_16.0.5.bb

@@ -0,0 +1,116 @@
+# Copyright (C) 2021 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+DESCRIPTION = "LLVM based C/C++ compiler Runtime"
+HOMEPAGE = "http://compiler-rt.llvm.org/"
+SECTION = "base"
+
+require clang.inc
+require common-source.inc
+
+inherit cmake pkgconfig python3native
+
+
+LIC_FILES_CHKSUM = "file://compiler-rt/LICENSE.TXT;md5=d846d1d65baf322d4c485d6ee54e877a"
+
+TUNE_CCARGS:remove = "-no-integrated-as"
+
+DEPENDS += "ninja-native virtual/crypt"
+DEPENDS:append:class-native = " clang-native libxcrypt-native"
+DEPENDS:append:class-nativesdk = " clang-native clang-crosssdk-${SDK_ARCH} nativesdk-libxcrypt"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[crt] = "-DCOMPILER_RT_BUILD_CRT:BOOL=ON,-DCOMPILER_RT_BUILD_CRT:BOOL=OFF"
+PACKAGECONFIG[static-libcxx] = "-DSANITIZER_USE_STATIC_CXX_ABI=ON -DSANITIZER_USE_STATIC_LLVM_UNWINDER=ON -DCOMPILER_RT_ENABLE_STATIC_UNWINDER=ON,,"
+
+HF = ""
+HF:class-target = "${@ bb.utils.contains('TUNE_CCARGS_MFLOAT', 'hard', 'hf', '', d)}"
+HF[vardepvalue] = "${HF}"
+
+CXXFLAGS:append:libc-musl = " -D_LARGEFILE64_SOURCE"
+
+OECMAKE_TARGET_COMPILE = "compiler-rt"
+OECMAKE_TARGET_INSTALL = "install-compiler-rt install-compiler-rt-headers"
+OECMAKE_SOURCEPATH = "${S}/llvm"
+EXTRA_OECMAKE += "-DCMAKE_BUILD_TYPE=RelWithDebInfo \
+                  -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF \
+                  -DCOMPILER_RT_STANDALONE_BUILD=OFF \
+                  -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON \
+                  -DCOMPILER_RT_USE_BUILTINS_LIBRARY=ON \
+                  -DCMAKE_C_COMPILER_TARGET=${HOST_ARCH}${HF}${HOST_VENDOR}-${HOST_OS} \
+                  -DCOMPILER_RT_BUILD_BUILTINS=OFF \
+                  -DCOMPILER_RT_INCLUDE_TESTS=OFF \
+                  -DSANITIZER_CXX_ABI_LIBNAME=${@bb.utils.contains("RUNTIME", "llvm", "libc++", "libstdc++", d)} \
+                  -DCOMPILER_RT_BUILD_XRAY=ON \
+                  -DCOMPILER_RT_BUILD_SANITIZERS=ON \
+                  -DCOMPILER_RT_BUILD_LIBFUZZER=ON \
+                  -DCOMPILER_RT_BUILD_PROFILE=ON \
+                  -DCOMPILER_RT_BUILD_MEMPROF=ON \
+                  -DLLVM_ENABLE_PROJECTS='compiler-rt' \
+                  -DCMAKE_RANLIB=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ranlib \
+                  -DCMAKE_AR=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ar \
+                  -DCMAKE_NM=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-nm \
+                  -DLLVM_LIBDIR_SUFFIX=${LLVM_LIBDIR_SUFFIX} \
+"
+
+EXTRA_OECMAKE:append:class-nativesdk = "\
+               -DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen \
+               -DCLANG_TABLEGEN=${STAGING_BINDIR_NATIVE}/clang-tblgen \
+"
+
+EXTRA_OECMAKE:append:class-target = "\
+               -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
+"
+
+EXTRA_OECMAKE:append:libc-musl = " -DLIBCXX_HAS_MUSL_LIBC=ON "
+EXTRA_OECMAKE:append:powerpc = " -DCOMPILER_RT_DEFAULT_TARGET_ARCH=powerpc "
+
+do_install:append () {
+    if [ -n "${LLVM_LIBDIR_SUFFIX}" ]; then
+        mkdir -p ${D}${nonarch_libdir}/clang
+        mv ${D}${libdir}/clang/${MAJOR_VER} ${D}${nonarch_libdir}/clang/${MAJOR_VER}.${MINOR_VER}.${PATCH_VER}
+        rmdir --ignore-fail-on-non-empty ${D}${libdir}
+    else
+        mv ${D}${libdir}/clang/${MAJOR_VER} ${D}${libdir}/clang/${MAJOR_VER}.${MINOR_VER}.${PATCH_VER}
+    fi
+    # Already shipped with compile-rt Orc support
+    rm -rf ${D}${nonarch_libdir}/clang/${MAJOR_VER}.${MINOR_VER}.${PATCH_VER}/lib/linux/libclang_rt.orc-*.a
+    rm -rf ${D}${nonarch_libdir}/clang/${MAJOR_VER}.${MINOR_VER}.${PATCH_VER}/include/orc/
+}
+
+FILES_SOLIBSDEV = ""
+FILES:${PN} += "${nonarch_libdir}/clang/${MAJOR_VER}.${MINOR_VER}.${PATCH_VER}/lib/linux/lib*${SOLIBSDEV} \
+                ${nonarch_libdir}/clang/${MAJOR_VER}.${MINOR_VER}.${PATCH_VER}/*.txt \
+                ${nonarch_libdir}/clang/${MAJOR_VER}.${MINOR_VER}.${PATCH_VER}/share/*.txt"
+FILES:${PN}-staticdev += "${nonarch_libdir}/clang/${MAJOR_VER}.${MINOR_VER}.${PATCH_VER}/lib/linux/*.a"
+FILES:${PN}-dev += "${datadir} ${nonarch_libdir}/clang/${MAJOR_VER}.${MINOR_VER}.${PATCH_VER}/lib/linux/*.syms \
+                    ${nonarch_libdir}/clang/${MAJOR_VER}.${MINOR_VER}.${PATCH_VER}/include \
+                    ${nonarch_libdir}/clang/${MAJOR_VER}.${MINOR_VER}.${PATCH_VER}/lib/linux/clang_rt.crt*.o \
+                    ${nonarch_libdir}/clang/${MAJOR_VER}.${MINOR_VER}.${PATCH_VER}/lib/linux/libclang_rt.asan-preinit*.a"
+INSANE_SKIP:${PN} = "dev-so libdir"
+INSANE_SKIP:${PN}-dbg = "libdir"
+
+#PROVIDES:append:class-target = "\
+#        virtual/${TARGET_PREFIX}compilerlibs \
+#        libgcc \
+#        libgcc-initial \
+#        libgcc-dev \
+#        libgcc-initial-dev \
+#        "
+#
+
+RDEPENDS:${PN}-dev += "${PN}-staticdev"
+
+BBCLASSEXTEND = "native nativesdk"
+
+ALLOW_EMPTY:${PN} = "1"
+ALLOW_EMPTY:${PN}-dev = "1"
+
+TOOLCHAIN:forcevariable = "clang"
+SYSROOT_DIRS:append:class-target = " ${nonarch_libdir}"
+
+# riscv and x86_64 Sanitizers work on musl too
+COMPATIBLE_HOST:libc-musl:x86-64 = "(.*)"
+COMPATIBLE_HOST:libc-musl:riscv64 = "(.*)"
+COMPATIBLE_HOST:libc-musl:riscv32 = "(.*)"
+COMPATIBLE_HOST:libc-musl = "null"

+ 129 - 0
recipes-devtools/clang/compiler-rt_16.0.5.bb

@@ -0,0 +1,129 @@
+# Copyright (C) 2015 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+DESCRIPTION = "LLVM based C/C++ compiler Runtime"
+HOMEPAGE = "http://compiler-rt.llvm.org/"
+SECTION = "base"
+
+require clang.inc
+require common-source.inc
+
+inherit cmake cmake-native pkgconfig python3native
+
+
+LIC_FILES_CHKSUM = "file://compiler-rt/LICENSE.TXT;md5=d846d1d65baf322d4c485d6ee54e877a"
+
+LIBCPLUSPLUS = ""
+COMPILER_RT = ""
+
+TUNE_CCARGS:remove = "-no-integrated-as"
+
+INHIBIT_DEFAULT_DEPS = "1"
+
+DEPENDS += "ninja-native libgcc"
+DEPENDS:append:class-target = " clang-cross-${TARGET_ARCH} virtual/${MLPREFIX}libc gcc-runtime"
+DEPENDS:append:class-nativesdk = " clang-native clang-crosssdk-${SDK_ARCH} nativesdk-gcc-runtime"
+DEPENDS:append:class-native = " clang-native"
+
+# Trick clang.bbclass into not creating circular dependencies
+UNWINDLIB:class-nativesdk = "--unwindlib=libgcc"
+COMPILER_RT:class-nativesdk:toolchain-clang:runtime-llvm = "-rtlib=libgcc --unwindlib=libgcc"
+LIBCPLUSPLUS:class-nativesdk:toolchain-clang:runtime-llvm = "-stdlib=libstdc++"
+
+CXXFLAGS += "-stdlib=libstdc++"
+LDFLAGS += "-unwindlib=libgcc -rtlib=libgcc -stdlib=libstdc++"
+BUILD_CXXFLAGS += "-stdlib=libstdc++"
+BUILD_LDFLAGS += "-unwindlib=libgcc -rtlib=libgcc -stdlib=libstdc++"
+BUILD_CPPFLAGS:remove = "-stdlib=libc++"
+BUILD_LDFLAGS:remove = "-stdlib=libc++ -lc++abi"
+
+BUILD_CC:toolchain-clang  = "${CCACHE}clang"
+BUILD_CXX:toolchain-clang = "${CCACHE}clang++"
+BUILD_CPP:toolchain-clang = "${CCACHE}clang -E"
+BUILD_CCLD:toolchain-clang = "${CCACHE}clang"
+BUILD_RANLIB:toolchain-clang = "llvm-ranlib"
+BUILD_AR:toolchain-clang = "llvm-ar"
+BUILD_NM:toolchain-clang = "llvm-nm"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[crt] = "-DCOMPILER_RT_BUILD_CRT:BOOL=ON,-DCOMPILER_RT_BUILD_CRT:BOOL=OFF"
+PACKAGECONFIG[profile] ="-DCOMPILER_RT_BUILD_PROFILE=ON,-DCOMPILER_RT_BUILD_PROFILE=OFF"
+
+HF = ""
+HF:class-target = "${@ bb.utils.contains('TUNE_CCARGS_MFLOAT', 'hard', 'hf', '', d)}"
+HF[vardepvalue] = "${HF}"
+
+OECMAKE_TARGET_COMPILE = "compiler-rt"
+OECMAKE_TARGET_INSTALL = "install-compiler-rt install-compiler-rt-headers"
+OECMAKE_SOURCEPATH = "${S}/llvm"
+EXTRA_OECMAKE += "-DCMAKE_BUILD_TYPE=RelWithDebInfo \
+                  -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF \
+                  -DCOMPILER_RT_STANDALONE_BUILD=OFF \
+                  -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON \
+                  -DCOMPILER_RT_INCLUDE_TESTS=OFF \
+                  -DCMAKE_C_COMPILER_TARGET=${HOST_ARCH}${HF}${HOST_VENDOR}-${HOST_OS} \
+                  -DCOMPILER_RT_BUILD_XRAY=OFF \
+                  -DCOMPILER_RT_BUILD_SANITIZERS=OFF \
+                  -DCOMPILER_RT_BUILD_MEMPROF=OFF \
+                  -DCOMPILER_RT_BUILD_LIBFUZZER=OFF \
+                  -DLLVM_ENABLE_PROJECTS='compiler-rt' \
+                  -DLLVM_LIBDIR_SUFFIX=${LLVM_LIBDIR_SUFFIX} \
+"
+EXTRA_OECMAKE:append:class-target = "\
+               -DCMAKE_RANLIB=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ranlib \
+               -DCMAKE_AR=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ar \
+               -DCMAKE_NM=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-nm \
+               -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
+"
+
+EXTRA_OECMAKE:append:class-nativesdk = "\
+               -DCMAKE_RANLIB=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ranlib \
+               -DCMAKE_AR=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ar \
+               -DCMAKE_NM=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-nm \
+               -DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen \
+               -DCLANG_TABLEGEN=${STAGING_BINDIR_NATIVE}/clang-tblgen \
+"
+EXTRA_OECMAKE:append:powerpc = " -DCOMPILER_RT_DEFAULT_TARGET_ARCH=powerpc "
+
+do_install:append () {
+    if [ -n "${LLVM_LIBDIR_SUFFIX}" ]; then
+        mkdir -p ${D}${nonarch_libdir}/clang
+        mv ${D}${libdir}/clang/${MAJOR_VER} ${D}${nonarch_libdir}/clang/${MAJOR_VER}.${MINOR_VER}.${PATCH_VER}
+        rmdir --ignore-fail-on-non-empty ${D}${libdir}/clang ${D}${libdir}
+    else
+        mv ${D}${libdir}/clang/${MAJOR_VER} ${D}${libdir}/clang/${MAJOR_VER}.${MINOR_VER}.${PATCH_VER}
+    fi
+}
+
+FILES_SOLIBSDEV = ""
+
+FILES:${PN} += "${nonarch_libdir}/clang/${MAJOR_VER}.${MINOR_VER}.${PATCH_VER}/lib/linux/lib*${SOLIBSDEV} \
+                ${nonarch_libdir}/clang/${MAJOR_VER}.${MINOR_VER}.${PATCH_VER}/*.txt \
+                ${nonarch_libdir}/clang/${MAJOR_VER}.${MINOR_VER}.${PATCH_VER}/share/*.txt"
+FILES:${PN}-staticdev += "${nonarch_libdir}/clang/${MAJOR_VER}.${MINOR_VER}.${PATCH_VER}/lib/linux/*.a"
+FILES:${PN}-dev += "${datadir} ${nonarch_libdir}/clang/${MAJOR_VER}.${MINOR_VER}.${PATCH_VER}/lib/linux/*.syms \
+                    ${nonarch_libdir}/clang/${MAJOR_VER}.${MINOR_VER}.${PATCH_VER}/include \
+                    ${nonarch_libdir}/clang/${MAJOR_VER}.${MINOR_VER}.${PATCH_VER}/lib/linux/clang_rt.crt*.o \
+                    ${nonarch_libdir}/clang/${MAJOR_VER}.${MINOR_VER}.${PATCH_VER}/lib/linux/libclang_rt.asan-preinit*.a"
+
+INSANE_SKIP:${PN} = "dev-so libdir"
+INSANE_SKIP:${PN}-dbg = "libdir"
+
+#PROVIDES:append:class-target = "\
+#        virtual/${TARGET_PREFIX}compilerlibs \
+#        libgcc \
+#        libgcc-initial \
+#        libgcc-dev \
+#        libgcc-initial-dev \
+#        "
+#
+
+RDEPENDS:${PN}-dev += "${PN}-staticdev"
+
+BBCLASSEXTEND = "native nativesdk"
+
+ALLOW_EMPTY:${PN} = "1"
+ALLOW_EMPTY:${PN}-dev = "1"
+
+TOOLCHAIN:forcevariable = "clang"
+SYSROOT_DIRS:append:class-target = " ${nonarch_libdir}"

+ 0 - 3
recipes-devtools/clang/compiler-rt_git.bbappend

@@ -1,3 +0,0 @@
-MAJOR_VER = "15"
-MINOR_VER = "0"
-PATCH_VER = "0"

+ 48 - 0
recipes-devtools/clang/libclc_16.0.5.bb

@@ -0,0 +1,48 @@
+DESCRIPTION = "LLVM based OpenCL runtime support library"
+HOMEPAGE = "http://libclc.llvm.org/"
+SECTION = "libs"
+
+require clang.inc
+require common-source.inc
+
+TOOLCHAIN = "clang"
+
+LIC_FILES_CHKSUM = "file://libclc/LICENSE.TXT;md5=7cc795f6cbb2d801d84336b83c8017db"
+
+inherit cmake pkgconfig python3native qemu
+
+DEPENDS += "qemu-native clang spirv-tools spirv-llvm-translator spirv-llvm-translator-native ncurses"
+
+OECMAKE_SOURCEPATH = "${S}/libclc"
+
+EXTRA_OECMAKE += " \
+                                -DCMAKE_BUILD_TYPE=RelWithDebInfo \
+                                -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF \
+				-DCMAKE_CROSSCOMPILING_EMULATOR=${WORKDIR}/qemuwrapper \
+				-DLLVM_CLANG=${STAGING_BINDIR_NATIVE}/clang \
+				-DLLVM_AS=${STAGING_BINDIR_NATIVE}/llvm-as \
+				-DLLVM_LINK=${STAGING_BINDIR_NATIVE}/llvm-link \
+				-DLLVM_OPT=${STAGING_BINDIR_NATIVE}/opt \
+				-DLLVM_SPIRV=${STAGING_BINDIR_NATIVE}/llvm-spirv \
+				-Dclc_comp_in:FILEPATH=${OECMAKE_SOURCEPATH}/cmake/CMakeCLCCompiler.cmake.in \
+				-Dll_comp_in:FILEPATH=${OECMAKE_SOURCEPATH}/cmake/CMakeLLAsmCompiler.cmake.in \
+				-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
+			"
+
+do_configure:prepend () {
+	# Write out a qemu wrapper that will be used by cmake
+	# so that it can run target helper binaries through that.
+	qemu_binary="${@qemu_wrapper_cmdline(d, d.getVar('STAGING_DIR_HOST'), [d.expand('${STAGING_DIR_HOST}${libdir}'),d.expand('${STAGING_DIR_HOST}${base_libdir}')])}"
+	cat > ${WORKDIR}/qemuwrapper << EOF
+#!/bin/sh
+$qemu_binary "\$@"
+EOF
+	chmod +x ${WORKDIR}/qemuwrapper
+}
+
+FILES:${PN} += "${datadir}/clc"
+
+BBCLASSEXTEND = "native nativesdk"
+
+export YOCTO_ALTERNATE_EXE_PATH
+export YOCTO_ALTERNATE_LIBDIR

+ 115 - 0
recipes-devtools/clang/libcxx_16.0.5.bb

@@ -0,0 +1,115 @@
+# Copyright (C) 2015 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+DESCRIPTION = "libc++ is a new implementation of the C++ standard library, targeting C++11"
+HOMEPAGE = "http://libcxx.llvm.org/"
+SECTION = "base"
+
+require clang.inc
+require common-source.inc
+
+inherit cmake cmake-native python3native
+
+PACKAGECONFIG ??= "compiler-rt exceptions ${@bb.utils.contains("RUNTIME", "llvm", "unwind unwind-shared", "", d)}"
+PACKAGECONFIG:append:armv5 = " no-atomics"
+PACKAGECONFIG:remove:class-native = "compiler-rt"
+PACKAGECONFIG[unwind] = "-DLIBCXXABI_USE_LLVM_UNWINDER=ON -DLIBCXXABI_ENABLE_STATIC_UNWINDER=ON,-DLIBCXXABI_USE_LLVM_UNWINDER=OFF,,"
+PACKAGECONFIG[exceptions] = "-DLIBCXXABI_ENABLE_EXCEPTIONS=ON -DDLIBCXX_ENABLE_EXCEPTIONS=ON,-DLIBCXXABI_ENABLE_EXCEPTIONS=OFF -DLIBCXX_ENABLE_EXCEPTIONS=OFF -DCMAKE_REQUIRED_FLAGS='-fno-exceptions',"
+PACKAGECONFIG[no-atomics] = "-D_LIBCXXABI_HAS_ATOMIC_BUILTINS=OFF -DCMAKE_SHARED_LINKER_FLAGS='-latomic',,"
+PACKAGECONFIG[compiler-rt] = "-DLIBCXX_USE_COMPILER_RT=ON -DLIBCXXABI_USE_COMPILER_RT=ON -DLIBUNWIND_USE_COMPILER_RT=ON,,compiler-rt"
+PACKAGECONFIG[unwind-shared] = "-DLIBUNWIND_ENABLE_SHARED=ON,-DLIBUNWIND_ENABLE_SHARED=OFF,,"
+
+DEPENDS += "ninja-native"
+DEPENDS:append:class-target = " clang-cross-${TARGET_ARCH} virtual/${MLPREFIX}libc virtual/${TARGET_PREFIX}compilerlibs"
+DEPENDS:append:class-nativesdk = " clang-crosssdk-${SDK_ARCH} nativesdk-compiler-rt"
+DEPENDS:append:class-native = " clang-native"
+
+LIBCPLUSPLUS = ""
+COMPILER_RT ?= "-rtlib=compiler-rt"
+
+# Trick clang.bbclass into not creating circular dependencies
+UNWINDLIB:class-nativesdk = "--unwindlib=libgcc"
+COMPILER_RT:class-nativesdk = "-rtlib=libgcc --unwindlib=libgcc"
+LIBCPLUSPLUS:class-nativesdk = "-stdlib=libstdc++"
+
+CC:append:toolchain-clang:class-native = " -unwindlib=libgcc -rtlib=libgcc"
+CC:append:toolchain-clang:class-nativesdk = " -unwindlib=libgcc -rtlib=libgcc"
+
+CXXFLAGS += "-stdlib=libstdc++"
+LDFLAGS += "-unwindlib=libgcc -stdlib=libstdc++"
+BUILD_CXXFLAGS += "-stdlib=libstdc++"
+BUILD_LDFLAGS += "-unwindlib=libgcc -rtlib=libgcc -stdlib=libstdc++"
+BUILD_CPPFLAGS:remove = "-stdlib=libc++"
+BUILD_LDFLAGS:remove = "-stdlib=libc++ -lc++abi"
+
+INHIBIT_DEFAULT_DEPS = "1"
+
+LIC_FILES_CHKSUM = "file://libcxx/LICENSE.TXT;md5=55d89dd7eec8d3b4204b680e27da3953 \
+                    file://libcxxabi/LICENSE.TXT;md5=7b9334635b542c56868400a46b272b1e \
+                    file://libunwind/LICENSE.TXT;md5=f66970035d12f196030658b11725e1a1 \
+"
+
+OECMAKE_TARGET_COMPILE = "cxxabi cxx"
+OECMAKE_TARGET_INSTALL = "install-cxx install-cxxabi ${@bb.utils.contains("RUNTIME", "llvm", "install-unwind", "", d)}"
+
+OECMAKE_SOURCEPATH = "${S}/llvm"
+EXTRA_OECMAKE += "\
+                  -DCMAKE_BUILD_TYPE=RelWithDebInfo \
+                  -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF \
+                  -DCMAKE_CROSSCOMPILING=ON \
+                  -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON \
+                  -DLLVM_ENABLE_RTTI=ON \
+                  -DLIBUNWIND_ENABLE_CROSS_UNWINDING=ON \
+                  -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=ON \
+                  -DLIBCXXABI_INCLUDE_TESTS=OFF \
+                  -DLIBCXXABI_ENABLE_SHARED=ON \
+                  -DLIBCXXABI_LIBCXX_INCLUDES=${S}/libcxx/include \
+                  -DLIBCXX_CXX_ABI=libcxxabi \
+                  -DLIBCXX_CXX_ABI_INCLUDE_PATHS=${S}/libcxxabi/include \
+                  -DLIBCXX_CXX_ABI_LIBRARY_PATH=${B}/lib${LLVM_LIBDIR_SUFFIX} \
+                  -S ${S}/runtimes \
+                  -DLLVM_ENABLE_RUNTIMES='libcxx;libcxxabi;libunwind' \
+                  -DLLVM_LIBDIR_SUFFIX=${LLVM_LIBDIR_SUFFIX} \
+                  -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \
+"
+
+EXTRA_OECMAKE:append:class-target = " \
+                  -DCMAKE_AR=${STAGING_BINDIR_TOOLCHAIN}/${AR} \
+                  -DCMAKE_NM=${STAGING_BINDIR_TOOLCHAIN}/${NM} \
+                  -DCMAKE_RANLIB=${STAGING_BINDIR_TOOLCHAIN}/${RANLIB} \
+                  -DLLVM_DEFAULT_TARGET_TRIPLE=${HOST_SYS} \
+                  -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
+"
+
+EXTRA_OECMAKE:append:class-nativesdk = " \
+                  -DCMAKE_AR=${STAGING_BINDIR_TOOLCHAIN}/${AR} \
+                  -DCMAKE_NM=${STAGING_BINDIR_TOOLCHAIN}/${NM} \
+                  -DCMAKE_RANLIB=${STAGING_BINDIR_TOOLCHAIN}/${RANLIB} \
+                  -DLLVM_DEFAULT_TARGET_TRIPLE=${HOST_SYS} \
+"
+
+EXTRA_OECMAKE:append:libc-musl = " -DLIBCXX_HAS_MUSL_LIBC=ON "
+
+CXXFLAGS:append:armv5 = " -mfpu=vfp2"
+
+ALLOW_EMPTY:${PN} = "1"
+
+PROVIDES:append:runtime-llvm = " libunwind"
+
+do_install:append() {
+    if ${@bb.utils.contains("RUNTIME", "llvm", "true", "false", d)}
+    then
+        for f in libunwind.h __libunwind_config.h unwind.h unwind_itanium.h unwind_arm_ehabi.h
+        do
+            install -Dm 0644 ${S}/libunwind/include/$f ${D}${includedir}/$f
+        done
+        install -d ${D}${libdir}/pkgconfig
+        sed -e 's,@LIBDIR@,${libdir},g;s,@VERSION@,${PV},g' ${S}/../libunwind.pc.in > ${D}${libdir}/pkgconfig/libunwind.pc
+    fi
+}
+
+PACKAGES:append:runtime-llvm = " libunwind"
+FILES:libunwind:runtime-llvm = "${libdir}/libunwind.so.*"
+
+BBCLASSEXTEND = "native nativesdk"
+TOOLCHAIN:forcevariable = "clang"

+ 0 - 4
recipes-devtools/clang/libcxx_git.bbappend → recipes-devtools/clang/libcxx_16.0.5.bbappend

@@ -1,7 +1,3 @@
-MAJOR_VER = "15"
-MINOR_VER = "0"
-PATCH_VER = "0"
-
 #Disable compiler-rt from packages
 #Disable compiler-rt from packages
 PACKAGECONFIG:remove = "compiler-rt"
 PACKAGECONFIG:remove = "compiler-rt"
 
 

+ 10 - 0
recipes-devtools/clang/llvm-project-source.bb

@@ -0,0 +1,10 @@
+# Copyright (C) 2018 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+SUMMARY = "This is the canonical git mirror of the LLVM subversion repository."
+HOMEPAGE = "https://github.com/llvm/llvm-project"
+
+require llvm-project-source.inc
+require clang.inc
+
+EXCLUDE_FROM_WORLD = "1"

+ 29 - 27
recipes-devtools/clang/llvm-project-source.bbappend

@@ -1,26 +1,24 @@
 FILESEXTRAPATHS:prepend := "${THISDIR}/clang:"
 FILESEXTRAPATHS:prepend := "${THISDIR}/clang:"
 
 
-MAJOR_VER = "15"
-MINOR_VER = "0"
-PATCH_VER = "0"
-
-SRCREV = "d6cf181a8df6a7925660b2332e3ab7dbcfd08145"
-BRANCH = "main"
+SRCREV = "35bd94a4b791787e7f3938e10ce80f409831dd7e"
+BRANCH = "release/16.x"
 
 
 SRC_URI = "\
 SRC_URI = "\
     ${BASEURI} \
     ${BASEURI} \
     file://llvm-config \
     file://llvm-config \
     file://libunwind.pc.in \
     file://libunwind.pc.in \
-    file://0001-Merge-four-Custom-CSR-cache-instruction.patch \
-    file://0002-add-pref-instruction.patch \
-    file://0003-add-multilib-v-b-support-for-baremetal-toolchain.patch \
-    file://0004-set-default-march-to-rv64imafcd_zba_zbb_zbc_zbs-and-.patch \
-    file://0005-support-b-letter-in-march-string.patch \
-    file://0006-set-clang-default-dwarf-version-to-4.patch \
-    file://0007-set-clang-default-march-to-rv64gc.patch \
-    file://0008-change-baremetal-multilib-directory-name-to-align-wi.patch \
-    file://0001-libcxxabi-Find-libunwind-headers-when.patch \
+    file://0001-neon2rvv-support-type-convert-between-fixed-vector-a.patch \
+    file://0002-neon2rvv-Model-vxrm-in-LLVM-intrinsics-and-add-optim.patch \
+    file://0003-RISCV-Add-prefetch-instructions.patch \
+    file://0004-RISCV-Add-customer-cache-instructions.patch \
+    file://0005-RISCV-Add-multilib-v-b-support-for-baremetal-toolcha.patch \
+    file://0006-RISCV-Change-baremetal-multilib-directory-name-to-al.patch \
+    file://0007-Driver-Set-clang-default-dwarf-version-to-4.patch \
+    file://0008-RISCV-Support-b-letter-in-march-string.patch \
+    file://0009-RISCV-Align-default-march-with-dubhe-gcc-toolchain.patch \
+    file://0001-libcxxabi-Find-libunwind-headers-when-LIBCXXABI_LIBU.patch \
     file://0002-compiler-rt-support-a-new-embedded-linux-target.patch \
     file://0002-compiler-rt-support-a-new-embedded-linux-target.patch \
+    file://0003-compiler-rt-Simplify-cross-compilation.-Don-t-use-na.patch \
     file://0004-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch \
     file://0004-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch \
     file://0005-llvm-allow-env-override-of-exe-and-libdir-path.patch \
     file://0005-llvm-allow-env-override-of-exe-and-libdir-path.patch \
     file://0006-clang-driver-Check-sysroot-for-ldso-path.patch \
     file://0006-clang-driver-Check-sysroot-for-ldso-path.patch \
@@ -39,16 +37,20 @@ SRC_URI = "\
     file://0019-For-x86_64-set-Yocto-based-GCC-install-search-path.patch \
     file://0019-For-x86_64-set-Yocto-based-GCC-install-search-path.patch \
     file://0020-llvm-Do-not-use-find_library-for-ncurses.patch \
     file://0020-llvm-Do-not-use-find_library-for-ncurses.patch \
     file://0021-llvm-Insert-anchor-for-adding-OE-distro-vendor-names.patch \
     file://0021-llvm-Insert-anchor-for-adding-OE-distro-vendor-names.patch \
-    file://0022-compiler-rt-Use-mcr-based-barrier-on-armv6.patch \
-    file://0023-compiler-rt-Do-not-use-backtrace-APIs-on-non-glibc-l.patch \
-    file://0024-clang-Fix-x86-triple-for-non-debian-multiarch-linux-.patch \
-    file://0025-compiler-rt-Link-scudo-with-SANITIZER_CXX_ABI_LIBRAR.patch \
-    file://0026-compiler-rt-Link-scudo-standalone-with-libatomic-on-.patch \
-    file://0027-libunwind-Added-unw_backtrace-method.patch \
-    file://0029-clang-Do-not-use-install-relative-libc-headers.patch \
-    file://0030-clang-Fix-how-driver-finds-GCC-installation-path-on-.patch \
-    file://0032-Correct-library-search-path-for-OpenEmbedded-Host.patch \
-    file://0033-lldb-Link-with-libatomic-on-x86.patch \
-    file://0034-clang-exclude-openembedded-distributions-from-settin.patch \
-    file://0035-compiler-rt-Enable-__int128-for-ppc32.patch \
+    file://0022-compiler-rt-Do-not-use-backtrace-APIs-on-non-glibc-l.patch \
+    file://0023-clang-Fix-x86-triple-for-non-debian-multiarch-linux-.patch \
+    file://0024-libunwind-Added-unw_backtrace-method.patch \
+    file://0025-clang-Do-not-use-install-relative-libc-headers.patch \
+    file://0026-clang-Fix-how-driver-finds-GCC-installation-path-on-.patch \
+    file://0027-Fix-lib-paths-for-OpenEmbedded-Host.patch \
+    file://0028-Correct-library-search-path-for-OpenEmbedded-Host.patch \
+    file://0029-lldb-Link-with-libatomic-on-x86.patch \
+    file://0030-clang-exclude-openembedded-distributions-from-settin.patch \
+    file://0031-compiler-rt-Enable-__int128-for-ppc32.patch \
+    file://0032-llvm-Do-not-use-cmake-infra-to-detect-libzstd.patch \
+    file://0033-build-Enable-64bit-off_t-on-32bit-glibc-systems.patch \
+    file://0034-compiler-rt-Undef-_TIME_BITS-along-with-_FILE_OFFSET.patch \
+    file://0035-compiler-rt-Fix-stat-struct-s-size-for-O32-ABI.patch \
+    file://0036-compiler-rt-Undef-_TIME_BITS-along-with-_FILE_OFFSET.patch \
+    file://0037-clang-Call-printName-to-get-name-of-Decl.patch \
     "
     "

+ 96 - 0
recipes-devtools/clang/llvm-project-source.inc

@@ -0,0 +1,96 @@
+deltask do_configure
+deltask do_compile
+deltask do_install
+deltask do_populate_sysroot
+deltask do_populate_lic
+RM_WORK_EXCLUDE += "${PN}"
+
+inherit nopackages
+
+PN = "llvm-project-source-${PV}"
+WORKDIR = "${TMPDIR}/work-shared/llvm-project-source-${PV}-${PR}"
+SSTATE_SWSPEC = "sstate:llvm-project-source::${PV}:${PR}::${SSTATE_VERSION}:"
+
+STAMP = "${STAMPS_DIR}/work-shared/llvm-project-source-${PV}-${PR}"
+STAMPCLEAN = "${STAMPS_DIR}/work-shared/llvm-project-source-${PV}-*"
+
+INHIBIT_DEFAULT_DEPS = "1"
+DEPENDS = ""
+PACKAGES = ""
+TARGET_ARCH = "allarch"
+TARGET_AS_ARCH = "none"
+TARGET_CC_ARCH = "none"
+TARGET_LD_ARCH = "none"
+TARGET_OS = "linux"
+baselib = "lib"
+PACKAGE_ARCH = "all"
+
+# space separated list of additional distro vendor values we want to support e.g.
+# "yoe webos" or "-yoe -webos" '-' is optional
+CLANG_EXTRA_OE_VENDORS ?= "${TARGET_VENDOR} ${SDK_VENDOR}"
+# Extra OE DISTRO that want to support as build host. space separated list of additional distro.
+# ":" separated the ID in "/etc/os-release" and the triple for finding gcc on this OE DISTRO.
+# eg: "poky:poky wrlinux:wrs"
+CLANG_EXTRA_OE_DISTRO ?= "poky:poky"
+# Match with MULTILIB_GLOBAL_VARIANTS
+MULTILIB_VARIANTS = "lib32 lib64 libx32"
+python add_distro_vendor() {
+    import subprocess
+    case = ""
+    triple = ""
+    vendors = d.getVar('CLANG_EXTRA_OE_VENDORS')
+    multilib_variants = (d.getVar("MULTILIB_VARIANTS") or "").split()
+    vendors_to_add = []
+    for vendor in vendors.split():
+        # convert -yoe into yoe
+        vendor = vendor.lstrip('-')
+        # generate possible multilib vendor names for yoe
+        # such as yoemllib32
+        vendors_to_add.extend([vendor + 'ml' + variant for variant in multilib_variants])
+        # skip oe since already part of the cpp file
+        if vendor != "oe":
+            vendors_to_add.append(vendor)
+
+    for vendor_to_add in vendors_to_add:
+        case += '\\n    .Case("' + vendor_to_add + '", Triple::OpenEmbedded)'
+        triple += ' "x86_64-' + vendor_to_add + '-linux",'
+
+    bb.note("Adding support following TARGET_VENDOR values")
+    bb.note(str(vendors_to_add))
+    bb.note("in llvm/lib/TargetParser/Triple.cpp and ${S}/clang/lib/Driver/ToolChains/Gnu.cpp")
+    cmd = d.expand("sed -i 's#//CLANG_EXTRA_OE_VENDORS_TRIPLES#%s#g' ${S}/clang/lib/Driver/ToolChains/Gnu.cpp" % (triple))
+    subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
+    cmd = d.expand("sed -i 's#//CLANG_EXTRA_OE_VENDORS_CASES#%s#g' -i ${S}/llvm/lib/TargetParser/Triple.cpp" % (case))
+    subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
+
+
+    case = ""
+    triple = ""
+    name = ""
+    check = ""
+    oe_names = ""
+    distros = d.getVar('CLANG_EXTRA_OE_DISTRO')
+    for distro in distros.split():
+        distro_id = distro.split(":")[0].replace('-','_')
+        distro_triple = distro.split(":")[1]
+        case += '\\n    .Case("' + distro_id + '", Distro::' + distro_id.upper() + ')'
+        triple += '\\n   if (Distro.Is' + distro_id.upper() + '())\\n     return "x86_64-' + distro_triple + '-linux",'
+        name += '\\n    '+ distro_id.upper() + ','
+        check += '\\nbool Is' + distro_id.upper() + '() const { return DistroVal == ' + distro_id.upper() + '; }'
+        oe_names +=  distro_id.upper() + ' ||'
+
+    check += '\\nbool IsOpenEmbedded() const { return DistroVal == ' + oe_names[0:-3] + '; }'
+
+    cmd = d.expand("sed -i 's#//CLANG_EXTRA_OE_DISTRO_NAME#%s#g' ${S}/clang/include/clang/Driver/Distro.h" % (name))
+    subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
+    cmd = d.expand("sed -i 's#//CLANG_EXTRA_OE_DISTRO_CHECK#%s#g' ${S}/clang/include/clang/Driver/Distro.h" % (check))
+    subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
+    cmd = d.expand("sed -i 's#//CLANG_EXTRA_OE_DISTRO_TRIPLES#%s#g' ${S}/clang/lib/Driver/ToolChains/Linux.cpp" % (triple))
+    subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
+    cmd = d.expand("sed -i 's#//CLANG_EXTRA_OE_DISTRO_CASES#%s#g' -i ${S}/clang/lib/Driver/Distro.cpp" % (case))
+    subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
+}
+
+do_patch[postfuncs] += "add_distro_vendor"
+do_create_spdx[depends] += "${PN}:do_patch"
+

+ 35 - 0
recipes-devtools/clang/nativesdk-clang-glue.bb

@@ -0,0 +1,35 @@
+# Copyright (C) 2014 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+DESCRIPTION = "SDK Cross compiler wrappers for LLVM based C/C++ compiler"
+HOMEPAGE = "http://clang.llvm.org/"
+LICENSE = "Apache-2.0-with-LLVM-exception"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0-with-LLVM-exception;md5=0bcd48c3bdfef0c9d9fd17726e4b7dab"
+SECTION = "devel"
+
+inherit nativesdk
+DEPENDS += "nativesdk-clang"
+
+do_install() {
+    install -d ${D}${prefix_nativesdk}
+    cd ${D}${prefix_nativesdk}
+    ln -s ..${libdir} .
+    ln -s ..${includedir} .
+    cd ..
+    ln -s .${base_libdir} .
+}
+
+sysroot_stage_all () {
+	sysroot_stage_dir ${D} ${SYSROOT_DESTDIR}
+}
+
+FILES:${PN} += "${prefix_nativesdk} ${base_libdir_nativesdk}"
+FILES:${PN}-dbg = ""
+
+deltask do_configure
+deltask do_compile
+deltask do_patch
+deltask do_fetch
+deltask do_unpack
+deltask do_create_spdx
+deltask do_create_runtime_spdx

+ 65 - 0
recipes-devtools/clang/openmp_16.0.5.bb

@@ -0,0 +1,65 @@
+# Copyright (C) 2017 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+DESCRIPTION = "LLVM based C/C++ compiler Runtime"
+HOMEPAGE = "https://openmp.llvm.org/"
+SECTION = "libs"
+
+require clang.inc
+require common-source.inc
+
+TOOLCHAIN = "clang"
+
+LIC_FILES_CHKSUM = "file://openmp/LICENSE.TXT;md5=d75288d1ce0450b28b8d58a284c09c79"
+
+inherit cmake pkgconfig perlnative python3native python3targetconfig
+
+DEPENDS += "elfutils libffi clang"
+
+EXTRA_OECMAKE += "-DCMAKE_BUILD_TYPE=RelWithDebInfo \
+                  -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF \
+                  -DOPENMP_LIBDIR_SUFFIX=${@d.getVar('baselib').replace('lib', '')} \
+                  -DOPENMP_STANDALONE_BUILD=ON \
+                  -DCLANG_TOOL=${STAGING_BINDIR_NATIVE}/clang \
+                  -DLINK_TOOL=${STAGING_BINDIR_NATIVE}/llvm-link \
+                  -DOPT_TOOL=${STAGING_BINDIR_NATIVE}/opt \
+                  -DOPENMP_LLVM_LIT_EXECUTABLE=${STAGING_BINDIR_NATIVE}/llvm-lit \
+                  -DEXTRACT_TOOL=${STAGING_BINDIR_NATIVE}/llvm-extract \
+                  -DPACKAGER_TOOL=${STAGING_BINDIR_NATIVE}/clang-offload-packager \
+                  -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
+                  "
+
+OECMAKE_SOURCEPATH = "${S}/openmp"
+
+PACKAGECONFIG ?= "ompt-tools offloading-plugin"
+
+PACKAGECONFIG:remove:arm = "ompt-tools offloading-plugin"
+PACKAGECONFIG:remove:powerpc = "ompt-tools offloading-plugin"
+
+PACKAGECONFIG:append:mipsarcho32 = " no-atomics"
+
+PACKAGECONFIG[ompt-tools] = "-DOPENMP_ENABLE_OMPT_TOOLS=ON,-DOPENMP_ENABLE_OMPT_TOOLS=OFF,"
+PACKAGECONFIG[aliases] = "-DLIBOMP_INSTALL_ALIASES=ON,-DLIBOMP_INSTALL_ALIASES=OFF,"
+PACKAGECONFIG[offloading-plugin] = ",,elfutils libffi,libelf libffi"
+PACKAGECONFIG[no-atomics] = "-DLIBOMP_HAVE_BUILTIN_ATOMIC=OFF -DLIBOMP_LIBFLAGS='-latomic',,"
+
+PACKAGES += "${PN}-libomptarget ${PN}-gdb-plugin"
+FILES_SOLIBSDEV = ""
+FILES:${PN} += "${libdir}/lib*${SOLIBSDEV}"
+FILES:${PN}-libomptarget = "${libdir}/libomptarget-*.bc"
+FILES:${PN}-gdb-plugin = "${datadir}/gdb/python/ompd"
+
+RDEPENDS:${PN}-gdb-plugin += "python3-core"
+
+INSANE_SKIP:${PN} = "dev-so"
+# Currently the static libraries contain buildpaths
+INSANE_SKIP:${PN}-staticdev += "buildpaths"
+
+COMPATIBLE_HOST:mips64 = "null"
+COMPATIBLE_HOST:riscv32 = "null"
+COMPATIBLE_HOST:powerpc = "null"
+
+BBCLASSEXTEND = "native nativesdk"
+
+# This appears to be specific to the Intel distribution before 2022.1
+CVE_CHECK_IGNORE += "CVE-2022-26345"