You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by pk...@apache.org on 2023/09/24 05:40:19 UTC

[nuttx] 02/05: libcxx: Remove exiting patches and update libcxx version to 15.0.7

This is an automated email from the ASF dual-hosted git repository.

pkarashchenko pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit 4f90a6140c896283151719f05efc34157118ff18
Author: Stuart Ianna <st...@motec.com.au>
AuthorDate: Mon Jan 23 09:08:00 2023 +1100

    libcxx: Remove exiting patches and update libcxx version to 15.0.7
    
     - Add __config_site for NuttX.
       In libcxx 12.0.0. CMake concatenated __config_site with _config,
       which enabled NuttX to build without its inclusion. In 15.0.7, this
       file is configured by CMake and included explicitly in __config.
     - Add additional include directories.
     - Mute always_inline warning.
     - Make the download of libcxx/libcxxabi configurable
---
 ...0001-Remove-the-locale-fallback-for-NuttX.patch |  55 -------
 ...oid-the-waring-__EXCEPTIONS-is-not-define.patch |  28 ----
 ...the-waring-__EXCEPTIONS-is-not-defined-ev.patch |  28 ----
 ...me-PS-macro-to-avoid-clashing-with-Xtensa.patch | 182 ---------------------
 ...tomic_-un-signed_lock_free-if-unsupported.patch |  38 -----
 libs/libxx/Kconfig                                 |  18 +-
 libs/libxx/__config_site                           |  52 ++++++
 libs/libxx/libcxx.cmake                            |   2 +-
 libs/libxx/libcxx.defs                             |  26 +--
 libs/libxx/libcxxabi.cmake                         |   2 +-
 libs/libxx/libcxxabi.defs                          |   5 +-
 11 files changed, 74 insertions(+), 362 deletions(-)

diff --git a/libs/libxx/0001-Remove-the-locale-fallback-for-NuttX.patch b/libs/libxx/0001-Remove-the-locale-fallback-for-NuttX.patch
deleted file mode 100644
index 5c90c1f99b..0000000000
--- a/libs/libxx/0001-Remove-the-locale-fallback-for-NuttX.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-From fdc60516f58633382ae5d73256a99c7737b174e5 Mon Sep 17 00:00:00 2001
-From: Xiang Xiao <xi...@xiaomi.com>
-Date: Fri, 30 Jul 2021 17:24:51 +0800
-Subject: [PATCH] Remove the locale fallback for NuttX
-
-since these functions can handled by NuttX's libc now
-
-Signed-off-by: Xiang Xiao <xi...@xiaomi.com>
-Change-Id: I68c9f6a690313748e030510d391170d8ca83ee7d
----
- include/__locale                  |  2 --
- include/__support/nuttx/xlocale.h | 18 ------------------
- 2 files changed, 20 deletions(-)
- delete mode 100644 include/__support/nuttx/xlocale.h
-
-diff --git libcxx/include/__locale libcxx/include/__locale
-index 77e5faab2..054973e9f 100644
---- libcxx/include/__locale
-+++ libcxx/include/__locale
-@@ -22,8 +22,6 @@
- #if defined(_LIBCPP_MSVCRT_LIKE)
- # include <cstring>
- # include <__support/win32/locale_win32.h>
--#elif defined(__NuttX__)
--# include <__support/nuttx/xlocale.h>
- #elif defined(_AIX) || defined(__MVS__)
- # include <__support/ibm/xlocale.h>
- #elif defined(__ANDROID__)
-diff --git libcxx/include/__support/nuttx/xlocale.h libcxx/include/__support/nuttx/xlocale.h
-deleted file mode 100644
-index be738e3b6..000000000
---- libcxx/include/__support/nuttx/xlocale.h
-+++ /dev/null
-@@ -1,18 +0,0 @@
--// -*- C++ -*-
--//===-----------------------------------------------------------------------===//
--//
--// 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
--//
--//===----------------------------------------------------------------------===//
--
--#ifndef _LIBCPP_SUPPORT_NUTTX_XLOCALE_H
--#define _LIBCPP_SUPPORT_NUTTX_XLOCALE_H
--
--#if defined(__NuttX__)
--#include <__support/xlocale/__posix_l_fallback.h>
--#include <__support/xlocale/__strtonum_fallback.h>
--#endif // __NuttX__
--
--#endif
--- 
-2.17.1
-
diff --git a/libs/libxx/0001-libc-abi-avoid-the-waring-__EXCEPTIONS-is-not-define.patch b/libs/libxx/0001-libc-abi-avoid-the-waring-__EXCEPTIONS-is-not-define.patch
deleted file mode 100644
index 3a2d0e864a..0000000000
--- a/libs/libxx/0001-libc-abi-avoid-the-waring-__EXCEPTIONS-is-not-define.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From d74ec1669d8f09d2ac9289423b51ae8b3af13d11 Mon Sep 17 00:00:00 2001
-From: Xiang Xiao <xi...@xiaomi.com>
-Date: Sat, 28 Aug 2021 02:11:15 +0800
-Subject: [PATCH] [libc++abi] avoid the waring: "__EXCEPTIONS" is not defined,
- evaluates to 0 [-Werror=undef]
-
-Signed-off-by: Xiang Xiao <xi...@xiaomi.com>
-Change-Id: I228cf44401f7ef9d7f49d8b806177bae1242d674
----
- include/__cxxabi_config.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git libcxxabi/include/__cxxabi_config.h libcxxabi/include/__cxxabi_config.h
-index cffedb8..05ed8b6 100644
---- libcxxabi/include/__cxxabi_config.h
-+++ libcxxabi/include/__cxxabi_config.h
-@@ -93,7 +93,7 @@
- #  if !__has_feature(cxx_exceptions)
- #    define _LIBCXXABI_NO_EXCEPTIONS
- #  endif
--#elif defined(_LIBCXXABI_COMPILER_GCC) && !__EXCEPTIONS
-+#elif defined(_LIBCXXABI_COMPILER_GCC) && !defined(__EXCEPTIONS)
- #  define _LIBCXXABI_NO_EXCEPTIONS
- #endif
- 
--- 
-2.25.1
-
diff --git a/libs/libxx/0001-libc-avoid-the-waring-__EXCEPTIONS-is-not-defined-ev.patch b/libs/libxx/0001-libc-avoid-the-waring-__EXCEPTIONS-is-not-defined-ev.patch
deleted file mode 100644
index a46ea8557b..0000000000
--- a/libs/libxx/0001-libc-avoid-the-waring-__EXCEPTIONS-is-not-defined-ev.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 828208f5061fabe5c42ceee6fb1ab0783c956271 Mon Sep 17 00:00:00 2001
-From: Xiang Xiao <xi...@xiaomi.com>
-Date: Sat, 28 Aug 2021 09:20:09 +0800
-Subject: [PATCH] [libc++] avoid the waring: "__EXCEPTIONS" is not defined,
- evaluates to 0 [-Werror=undef]
-
-Signed-off-by: Xiang Xiao <xi...@xiaomi.com>
-Change-Id: If529bbb2f87e55dce5d0df37f2bf72c3d02bf260
----
- include/__config | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git libcxx/include/__config libcxx/include/__config
-index e5828628d..edfe51224 100644
---- libcxx/include/__config
-+++ libcxx/include/__config
-@@ -551,7 +551,7 @@ typedef __char32_t char32_t;
- 
- #define _LIBCPP_NORETURN __attribute__((noreturn))
- 
--#if !__EXCEPTIONS
-+#if !defined(__EXCEPTIONS)
- #  define _LIBCPP_NO_EXCEPTIONS
- #endif
- 
--- 
-2.25.1
-
diff --git a/libs/libxx/0001-libcxx-Rename-PS-macro-to-avoid-clashing-with-Xtensa.patch b/libs/libxx/0001-libcxx-Rename-PS-macro-to-avoid-clashing-with-Xtensa.patch
deleted file mode 100644
index b2f7dc5e5a..0000000000
--- a/libs/libxx/0001-libcxx-Rename-PS-macro-to-avoid-clashing-with-Xtensa.patch
+++ /dev/null
@@ -1,182 +0,0 @@
-From 213f9acccb725a7ddcd9f41eee9d5234d81e1dc0 Mon Sep 17 00:00:00 2001
-From: Gustavo Henrique Nihei <gu...@espressif.com>
-Date: Fri, 25 Mar 2022 10:18:40 -0300
-Subject: [PATCH 1/2] [libcxx] Rename PS() macro to avoid clashing with Xtensa
- register name
-
-This patch addresses a clash with the PS register from Xtensa
-defined in the <specreg.h> header file, which is commonly
-included in OS implementation.
-
-Issue identified while building libc++ port for Apache NuttX, targeting
-Xtensa-based chips (e.g. Espressif's ESP32).
-
-Signed-off-by: Gustavo Henrique Nihei <gu...@espressif.com>
-
-Differential Revision: https://reviews.llvm.org/D122479
----
- libcxx/src/filesystem/filesystem_common.h |  4 +-
- libcxx/src/filesystem/operations.cpp      | 46 +++++++++++------------
- 2 files changed, 24 insertions(+), 26 deletions(-)
-
-diff --git a/libcxx/src/filesystem/filesystem_common.h b/libcxx/src/filesystem/filesystem_common.h
-index e0fdbccf96b1..b62f1406de39 100644
---- a/libcxx/src/filesystem/filesystem_common.h
-+++ b/libcxx/src/filesystem/filesystem_common.h
-@@ -41,9 +41,9 @@
- #endif
- 
- #if defined(_LIBCPP_WIN32API)
--#define PS(x) (L##x)
-+#  define PATHSTR(x) (L##x)
- #else
--#define PS(x) (x)
-+#  define PATHSTR(x) (x)
- #endif
- 
- _LIBCPP_BEGIN_NAMESPACE_FILESYSTEM
-diff --git a/libcxx/src/filesystem/operations.cpp b/libcxx/src/filesystem/operations.cpp
-index 50a895dc2fae..830781def52d 100644
---- a/libcxx/src/filesystem/operations.cpp
-+++ b/libcxx/src/filesystem/operations.cpp
-@@ -188,14 +188,14 @@ public:
-     switch (State) {
-     case PS_BeforeBegin:
-     case PS_AtEnd:
--      return PS("");
-+      return PATHSTR("");
-     case PS_InRootDir:
-       if (RawEntry[0] == '\\')
--        return PS("\\");
-+        return PATHSTR("\\");
-       else
--        return PS("/");
-+        return PATHSTR("/");
-     case PS_InTrailingSep:
--      return PS("");
-+      return PATHSTR("");
-     case PS_InRootName:
-     case PS_InFilenames:
-       return RawEntry;
-@@ -303,8 +303,8 @@ private:
- };
- 
- string_view_pair separate_filename(string_view_t const& s) {
--  if (s == PS(".") || s == PS("..") || s.empty())
--    return string_view_pair{s, PS("")};
-+  if (s == PATHSTR(".") || s == PATHSTR("..") || s.empty())
-+    return string_view_pair{s, PATHSTR("")};
-   auto pos = s.find_last_of('.');
-   if (pos == string_view_t::npos || pos == 0)
-     return string_view_pair{s, string_view_t{}};
-@@ -591,8 +591,8 @@ filesystem_error::~filesystem_error() {}
- void filesystem_error::__create_what(int __num_paths) {
-   const char* derived_what = system_error::what();
-   __storage_->__what_ = [&]() -> string {
--    const path::value_type* p1 = path1().native().empty() ? PS("\"\"") : path1().c_str();
--    const path::value_type* p2 = path2().native().empty() ? PS("\"\"") : path2().c_str();
-+    const path::value_type* p1 = path1().native().empty() ? PATHSTR("\"\"") : path1().c_str();
-+    const path::value_type* p2 = path2().native().empty() ? PATHSTR("\"\"") : path2().c_str();
-     switch (__num_paths) {
-     default:
-       return detail::format_string("filesystem error: %s", derived_what);
-@@ -1378,7 +1378,7 @@ path& path::replace_extension(path const& replacement) {
-   }
-   if (!replacement.empty()) {
-     if (replacement.native()[0] != '.') {
--      __pn_ += PS(".");
-+      __pn_ += PATHSTR(".");
-     }
-     __pn_.append(replacement.__pn_);
-   }
-@@ -1500,14 +1500,14 @@ enum PathPartKind : unsigned char {
- static PathPartKind ClassifyPathPart(string_view_t Part) {
-   if (Part.empty())
-     return PK_TrailingSep;
--  if (Part == PS("."))
-+  if (Part == PATHSTR("."))
-     return PK_Dot;
--  if (Part == PS(".."))
-+  if (Part == PATHSTR(".."))
-     return PK_DotDot;
--  if (Part == PS("/"))
-+  if (Part == PATHSTR("/"))
-     return PK_RootSep;
- #if defined(_LIBCPP_WIN32API)
--  if (Part == PS("\\"))
-+  if (Part == PATHSTR("\\"))
-     return PK_RootSep;
- #endif
-   return PK_Filename;
-@@ -1557,7 +1557,7 @@ path path::lexically_normal() const {
-         NewPathSize -= Parts.back().first.size();
-         Parts.pop_back();
-       } else if (LastKind != PK_RootSep)
--        AddPart(PK_DotDot, PS(".."));
-+        AddPart(PK_DotDot, PATHSTR(".."));
-       MaybeNeedTrailingSep = LastKind == PK_Filename;
-       break;
-     }
-@@ -1572,7 +1572,7 @@ path path::lexically_normal() const {
-   }
-   // [fs.path.generic]p6.8: If the path is empty, add a dot.
-   if (Parts.empty())
--    return PS(".");
-+    return PATHSTR(".");
- 
-   // [fs.path.generic]p6.7: If the last filename is dot-dot, remove any
-   // trailing directory-separator.
-@@ -1584,7 +1584,7 @@ path path::lexically_normal() const {
-     Result /= PK.first;
- 
-   if (NeedTrailingSep)
--    Result /= PS("");
-+    Result /= PATHSTR("");
- 
-   return Result;
- }
-@@ -1593,9 +1593,9 @@ static int DetermineLexicalElementCount(PathParser PP) {
-   int Count = 0;
-   for (; PP; ++PP) {
-     auto Elem = *PP;
--    if (Elem == PS(".."))
-+    if (Elem == PATHSTR(".."))
-       --Count;
--    else if (Elem != PS(".") && Elem != PS(""))
-+    else if (Elem != PATHSTR(".") && Elem != PATHSTR(""))
-       ++Count;
-   }
-   return Count;
-@@ -1642,15 +1642,15 @@ path path::lexically_relative(const path& base) const {
-     return {};
- 
-   // if n == 0 and (a == end() || a->empty()), returns path("."); otherwise
--  if (ElemCount == 0 && (PP.atEnd() || *PP == PS("")))
--    return PS(".");
-+  if (ElemCount == 0 && (PP.atEnd() || *PP == PATHSTR("")))
-+    return PATHSTR(".");
- 
-   // return a path constructed with 'n' dot-dot elements, followed by the the
-   // elements of '*this' after the mismatch.
-   path Result;
-   // FIXME: Reserve enough room in Result that it won't have to re-allocate.
-   while (ElemCount--)
--    Result /= PS("..");
-+    Result /= PATHSTR("..");
-   for (; PP; ++PP)
-     Result /= *PP;
-   return Result;
-@@ -1662,9 +1662,7 @@ static int CompareRootName(PathParser *LHS, PathParser *RHS) {
-   if (!LHS->inRootName() && !RHS->inRootName())
-     return 0;
- 
--  auto GetRootName = [](PathParser *Parser) -> string_view_t {
--    return Parser->inRootName() ? **Parser : PS("");
--  };
-+  auto GetRootName = [](PathParser* Parser) -> string_view_t { return Parser->inRootName() ? **Parser : PATHSTR(""); };
-   int res = GetRootName(LHS).compare(GetRootName(RHS));
-   ConsumeRootName(LHS);
-   ConsumeRootName(RHS);
--- 
-2.32.0
-
diff --git a/libs/libxx/0002-Omit-atomic_-un-signed_lock_free-if-unsupported.patch b/libs/libxx/0002-Omit-atomic_-un-signed_lock_free-if-unsupported.patch
deleted file mode 100644
index d5020f1276..0000000000
--- a/libs/libxx/0002-Omit-atomic_-un-signed_lock_free-if-unsupported.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From ff00346174831ec01bc6b85c39c19d502cfa2093 Mon Sep 17 00:00:00 2001
-From: Brian Cain <bc...@quicinc.com>
-Date: Thu, 27 Jan 2022 08:09:11 -0800
-Subject: [PATCH 2/2] Omit atomic_{,un}signed_lock_free if unsupported
-
-On targets that have limited atomic support, e.g. ones that define
-ATOMIC_*_LOCK_FREE to '1' ("sometimes lock free"), we would end up
-referencing yet-undefined __libcpp_{,un}signed_lock_free.
-
-This commit adds a guard to prevent these references for such
-targets.
-
-Differential Revision: https://reviews.llvm.org/D118391
----
- libcxx/include/atomic | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/libcxx/include/atomic b/libcxx/include/atomic
-index 0fc799a24319..57d01ad2791a 100644
---- a/libcxx/include/atomic
-+++ b/libcxx/include/atomic
-@@ -2791,10 +2791,13 @@ typedef conditional<_LIBCPP_CONTENTION_LOCK_FREE, __cxx_contention_t, char>::typ
- typedef conditional<_LIBCPP_CONTENTION_LOCK_FREE, __cxx_contention_t, unsigned char>::type      __libcpp_unsigned_lock_free;
- #else
-     // No signed/unsigned lock-free types
-+#define _LIBCPP_NO_LOCK_FREE_TYPES
- #endif
- 
-+#if !defined(_LIBCPP_NO_LOCK_FREE_TYPES)
- typedef atomic<__libcpp_signed_lock_free> atomic_signed_lock_free;
- typedef atomic<__libcpp_unsigned_lock_free> atomic_unsigned_lock_free;
-+#endif
- 
- #define ATOMIC_FLAG_INIT {false}
- #define ATOMIC_VAR_INIT(__v) {__v}
--- 
-2.32.0
-
diff --git a/libs/libxx/Kconfig b/libs/libxx/Kconfig
index 4588a95ba9..2bc325d1af 100644
--- a/libs/libxx/Kconfig
+++ b/libs/libxx/Kconfig
@@ -51,18 +51,14 @@ config UCLIBCXX
 
 endchoice
 
-if LIBCXXMINI
-
 config ETL
 	bool "Embedded Template Library (ETL)"
-	depends on ALLOW_MIT_COMPONENTS
+	depends on LIBCXXMINI && ALLOW_MIT_COMPONENTS
 	---help---
 		ETL A C++ Template library for Embedded applications
 		Implements C++ templates such as containers, string
 		singleton math without C++ STL libraries
 
-endif
-
 if LIBCXX || UCLIBCXX
 
 choice
@@ -84,6 +80,12 @@ config LIBSUPCXX
 
 endchoice
 
+config LIBCXXABI_VERSION
+	string "Select libcxxabi version"
+	depends on LIBCXXABI
+	default LIBCXX_VERSION if LIBCXX
+	default "15.0.7" if !LIBCXX
+
 endif
 
 config CXX_STANDARD
@@ -110,4 +112,10 @@ config UCLIBCXX_BUFSIZE
 	default 32
 
 endif
+
+config LIBCXX_VERSION
+	string "Select libcxx version"
+	depends on LIBCXX
+	default "15.0.7"
+
 endif
diff --git a/libs/libxx/__config_site b/libs/libxx/__config_site
new file mode 100644
index 0000000000..8662a132f0
--- /dev/null
+++ b/libs/libxx/__config_site
@@ -0,0 +1,52 @@
+//===----------------------------------------------------------------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef _LIBCPP___CONFIG_SITE
+#define _LIBCPP___CONFIG_SITE
+
+/* The following is generated from include/__config_site.in
+ * in Ubunutu 22.0.4 with g++ 11.3.0.
+ */
+
+#define _LIBCPP_ABI_VERSION 1
+#define _LIBCPP_ABI_NAMESPACE __1
+/* #undef _LIBCPP_ABI_FORCE_ITANIUM */
+/* #undef _LIBCPP_ABI_FORCE_MICROSOFT */
+/* #undef _LIBCPP_HAS_NO_THREADS */
+/* #undef _LIBCPP_HAS_NO_MONOTONIC_CLOCK */
+/* #undef _LIBCPP_HAS_MUSL_LIBC */
+/* #undef _LIBCPP_HAS_THREAD_API_PTHREAD */
+/* #undef _LIBCPP_HAS_THREAD_API_EXTERNAL */
+/* #undef _LIBCPP_HAS_THREAD_API_WIN32 */
+/* #undef _LIBCPP_HAS_THREAD_LIBRARY_EXTERNAL */
+/* #undef _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS */
+#define _LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS
+/* #undef _LIBCPP_NO_VCRUNTIME */
+/* #undef _LIBCPP_TYPEINFO_COMPARISON_IMPLEMENTATION */
+/* #undef _LIBCPP_HAS_NO_FILESYSTEM_LIBRARY */
+/* #undef _LIBCPP_HAS_PARALLEL_ALGORITHMS */
+/* #undef _LIBCPP_HAS_NO_RANDOM_DEVICE */
+/* #undef _LIBCPP_HAS_NO_LOCALIZATION */
+/* #undef _LIBCPP_HAS_NO_WIDE_CHARACTERS */
+#define _LIBCPP_ENABLE_ASSERTIONS_DEFAULT 0
+/* #undef _LIBCPP_ENABLE_DEBUG_MODE */
+
+// __USE_MINGW_ANSI_STDIO gets redefined on MinGW
+#ifdef __clang__
+#  pragma clang diagnostic push
+#  pragma clang diagnostic ignored "-Wmacro-redefined"
+#endif
+
+
+
+
+#ifdef __clang__
+#  pragma clang diagnostic pop
+#endif
+
+#endif // _LIBCPP___CONFIG_SITE
diff --git a/libs/libxx/libcxx.cmake b/libs/libxx/libcxx.cmake
index d501cdc5fc..3937cfe7db 100644
--- a/libs/libxx/libcxx.cmake
+++ b/libs/libxx/libcxx.cmake
@@ -20,7 +20,7 @@
 
 if(NOT EXISTS ${CMAKE_CURRENT_LIST_DIR}/libcxx)
 
-  set(LIBCXX_VERSION 12.0.0)
+  set(LIBCXX_VERSION ${CONFIG_LIBCXX_VERSION})
 
   # cmake-format: off
   set(LIBCXX_PATCH_COMMAND
diff --git a/libs/libxx/libcxx.defs b/libs/libxx/libcxx.defs
index 3a372c063d..b13a54ab6a 100644
--- a/libs/libxx/libcxx.defs
+++ b/libs/libxx/libcxx.defs
@@ -18,7 +18,7 @@
 #
 ###########################################################################
 
-LIBCXX_VERSION=12.0.0
+LIBCXX_VERSION=$(patsubst "%",%,$(CONFIG_LIBCXX_VERSION))
 
 # Download and unpack tarball if no git repo found
 ifeq ($(wildcard libcxx/.git),)
@@ -29,17 +29,12 @@ libcxx: libcxx-$(LIBCXX_VERSION).src.tar.xz
 	$(Q) tar -xf libcxx-$(LIBCXX_VERSION).src.tar.xz \
 	         --exclude libcxx-$(LIBCXX_VERSION).src/test/std/pstl
 	$(Q) mv libcxx-$(LIBCXX_VERSION).src libcxx
-	$(Q) patch -p0 < 0001-Remove-the-locale-fallback-for-NuttX.patch
-	$(Q) patch -p0 < 0001-libc-avoid-the-waring-__EXCEPTIONS-is-not-defined-ev.patch
-	$(Q) patch -p1 < 0001-libcxx-Rename-PS-macro-to-avoid-clashing-with-Xtensa.patch
-ifeq ($(CONFIG_LIBC_ARCH_ATOMIC),y)
-	$(Q) patch -p1 < 0002-Omit-atomic_-un-signed_lock_free-if-unsupported.patch
-endif
 	$(Q) touch $@
 endif
 
 $(TOPDIR)/include/libcxx: libcxx
 	$(Q) $(DIRLINK) $(CURDIR)/libcxx/include $(TOPDIR)/include/libcxx
+	$(Q) cp $(CURDIR)/__config_site $(TOPDIR)/include/libcxx/__config_site
 
 context:: $(TOPDIR)/include/libcxx
 
@@ -51,6 +46,7 @@ ifeq ($(wildcard libcxx/.git),)
 endif
 
 CXXFLAGS += ${DEFINE_PREFIX}_LIBCPP_BUILDING_LIBRARY
+CXXFLAGS += ${INCDIR_PREFIX}$(CURDIR)/libcxx/src
 
 ifeq ($(CONFIG_LIBSUPCXX), y)
 CXXFLAGS += ${DEFINE_PREFIX}__GLIBCXX__
@@ -67,8 +63,6 @@ endif
 #       |                        ^~~~~~~~~~
 libcxx/src/barrier.cpp_CXXFLAGS += -Wno-shadow
 libcxx/src/locale.cpp_CXXFLAGS += -Wno-shadow
-
-libcxx/src/filesystem/directory_iterator.cpp_CXXFLAGS += -Wno-shadow
 libcxx/src/filesystem/operations.cpp_CXXFLAGS += -Wno-shadow
 
 # Workaround the following warning with "GCC 12"
@@ -131,14 +125,6 @@ libcxx/src/condition_variable.cpp_CXXFLAGS += -Wno-sign-compare
 #              std::
 libcxx/src/filesystem/directory_iterator.cpp_CXXFLAGS += -Wno-unqualified-std-cast-call
 
-CPPSRCS += $(notdir $(wildcard libcxx/src/*.cpp))
-CPPSRCS += $(notdir $(wildcard libcxx/src/experimental/*.cpp))
-CPPSRCS += $(notdir $(wildcard libcxx/src/filesystem/*.cpp))
-
-DEPPATH += --dep-path libcxx/src
-DEPPATH += --dep-path libcxx/src/experimental
-DEPPATH += --dep-path libcxx/src/filesystem
-
-VPATH += libcxx/src
-VPATH += libcxx/src/experimental
-VPATH += libcxx/src/filesystem
+CPPSRCS += $(wildcard libcxx/src/*.cpp)
+CPPSRCS += $(wildcard libcxx/src/experimental/*.cpp)
+CPPSRCS += $(wildcard libcxx/src/filesystem/*.cpp)
diff --git a/libs/libxx/libcxxabi.cmake b/libs/libxx/libcxxabi.cmake
index 1868fe08ad..30393e0113 100644
--- a/libs/libxx/libcxxabi.cmake
+++ b/libs/libxx/libcxxabi.cmake
@@ -20,7 +20,7 @@
 
 if(NOT EXISTS ${CMAKE_CURRENT_LIST_DIR}/libcxxabi)
 
-  set(LIBCXXABI_VERSION 12.0.0)
+  set(LIBCXXABI_VERSION CONFIG_LIBCXXABI_VERSION)
 
   FetchContent_Declare(
     libcxxabi
diff --git a/libs/libxx/libcxxabi.defs b/libs/libxx/libcxxabi.defs
index 263b658848..f64087a7f6 100644
--- a/libs/libxx/libcxxabi.defs
+++ b/libs/libxx/libcxxabi.defs
@@ -18,7 +18,7 @@
 #
 ###########################################################################
 
-LIBCXXABI_VERSION=12.0.0
+LIBCXXABI_VERSION=$(patsubst "%",%,$(CONFIG_LIBCXXABI_VERSION))
 
 libcxxabi-$(LIBCXXABI_VERSION).src.tar.xz:
 	$(call DOWNLOAD,https://github.com/llvm/llvm-project/releases/download/llvmorg-$(LIBCXXABI_VERSION),libcxxabi-$(LIBCXXABI_VERSION).src.tar.xz)
@@ -26,10 +26,8 @@ libcxxabi-$(LIBCXXABI_VERSION).src.tar.xz:
 libcxxabi: libcxxabi-$(LIBCXXABI_VERSION).src.tar.xz
 	$(Q) tar -xf libcxxabi-$(LIBCXXABI_VERSION).src.tar.xz
 	$(Q) mv libcxxabi-$(LIBCXXABI_VERSION).src libcxxabi
-	$(Q) patch -p0 < 0001-libc-abi-avoid-the-waring-__EXCEPTIONS-is-not-define.patch
 	$(Q) touch $@
 
-
 # Download and unpack tarball if no git repo found
 ifeq ($(wildcard libcxxabi/.git),)
 distclean::
@@ -64,4 +62,3 @@ CXXFLAGS += -frtti
 
 DEPPATH += --dep-path libcxxabi/src
 VPATH += libcxxabi/src
-