diff --git a/libs/libxx/0001-libcxx-Port-to-NuttX-https-nuttx.apache.org-RTOS.patch b/libs/libxx/0001-libcxx-Port-to-NuttX-https-nuttx.apache.org-RTOS.patch index 97b56c522d..964ce7c543 100644 --- a/libs/libxx/0001-libcxx-Port-to-NuttX-https-nuttx.apache.org-RTOS.patch +++ b/libs/libxx/0001-libcxx-Port-to-NuttX-https-nuttx.apache.org-RTOS.patch @@ -1,24 +1,62 @@ -From f2c553278288eef4c98ac4bbebc07a03af033718 Mon Sep 17 00:00:00 2001 +From 10891b1c9eda0c87e33b0c0ba87f17a83930093c Mon Sep 17 00:00:00 2001 From: Xiang Xiao -Date: Mon, 15 Jun 2020 16:00:51 +0800 +Date: Fri, 2 Oct 2020 13:25:43 +0800 Subject: [PATCH] [libcxx] Port to NuttX(https://nuttx.apache.org/) RTOS -Signed-off-by: Xiang Xiao -Change-Id: I6ae68add2287aacbe66ae9d6a500a1fd1e131cd9 +Since NuttX conform to POSIX standard, the code need to add is very simple + +Co-authored-by: YAMAMOTO Takashi + +Differential Revision: https://reviews.llvm.org/D88718 --- - include/__config | 1 + + include/__config | 31 +++++++++++++++++++++++++- include/__locale | 2 ++ - include/support/nuttx/xlocale.h | 27 +++++++++++++++++++++++++++ - src/include/config_elast.h | 2 +- + include/support/nuttx/xlocale.h | 18 +++++++++++++++ + src/include/config_elast.h | 4 ++++ src/locale.cpp | 2 +- - 5 files changed, 32 insertions(+), 2 deletions(-) + 5 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 include/support/nuttx/xlocale.h diff --git a/include/__config libcxx/include/__config -index de09601e5..404c34b09 100644 +index 575147cead4..32036094017 100644 --- a/include/__config +++ libcxx/include/__config -@@ -1130,6 +1130,7 @@ extern "C" void __sanitizer_annotate_contiguous_container( +@@ -10,6 +10,34 @@ + #ifndef _LIBCPP_CONFIG + #define _LIBCPP_CONFIG + ++// NuttX is sometimes built as a native target. ++// In that case, the __NuttX__ macro is predefined by the compiler. ++// https://github.com/NuttX/buildroot ++// ++// In other cases, __NuttX__ is an ordinary user-definded macro. ++// It's especially the case for NuttX sim, which is a target to run ++// the entire NuttX as a program on the host OS, which can be Linux, ++// macOS, Windows, etc. ++// https://cwiki.apache.org/confluence/display/NUTTX/NuttX+Simulation ++// In that case, the host OS compiler is used to build NuttX. ++// Thus, eg. NuttX sim on macOS is built with __APPLE__. ++// We #undef predefined macros for those possible host OSes here ++// because the OS APIs this library should use are of NuttX, ++// not the host OS. ++#if defined(__NuttX__) ++#undef __linux__ ++#undef __APPLE__ ++#undef __FreeBSD__ ++#undef __NetBSD__ ++#undef _WIN32 ++#undef __sun__ ++#undef _AIX ++// For the current use of the __unix__ macro in this library, ++// NuttX is not __unix__. ++// This might need to be revisited in future. ++#undef __unix__ ++#endif ++ + #if defined(_MSC_VER) && !defined(__clang__) + # if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) + # define _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER +@@ -1125,6 +1153,7 @@ _LIBCPP_FUNC_VIS extern "C" void __sanitizer_annotate_contiguous_container( # if defined(__FreeBSD__) || \ defined(__wasi__) || \ defined(__NetBSD__) || \ @@ -26,8 +64,17 @@ index de09601e5..404c34b09 100644 defined(__linux__) || \ defined(__GNU__) || \ defined(__APPLE__) || \ +@@ -1227,7 +1256,7 @@ _LIBCPP_FUNC_VIS extern "C" void __sanitizer_annotate_contiguous_container( + # endif + #endif + +-#if defined(__BIONIC__) || defined(__CloudABI__) || \ ++#if defined(__BIONIC__) || defined(__CloudABI__) || defined(__NuttX__) || \ + defined(__Fuchsia__) || defined(__wasi__) || defined(_LIBCPP_HAS_MUSL_LIBC) + #define _LIBCPP_PROVIDES_DEFAULT_RUNE_TABLE + #endif diff --git a/include/__locale libcxx/include/__locale -index 6d10fa4d3..fb391861f 100644 +index 6d10fa4d3d6..fb391861f23 100644 --- a/include/__locale +++ libcxx/include/__locale @@ -21,6 +21,8 @@ @@ -41,10 +88,10 @@ index 6d10fa4d3..fb391861f 100644 #elif defined(__ANDROID__) diff --git a/include/support/nuttx/xlocale.h libcxx/include/support/nuttx/xlocale.h new file mode 100644 -index 000000000..f10c0f982 +index 00000000000..b70d6200504 --- /dev/null +++ libcxx/include/support/nuttx/xlocale.h -@@ -0,0 +1,27 @@ +@@ -0,0 +1,18 @@ +// -*- C++ -*- +//===-------------------- support/nuttx/xlocale.h -------------------------===// +// @@ -60,33 +107,30 @@ index 000000000..f10c0f982 +#if defined(__NuttX__) +#include +#include -+ -+#define _LIBCPP_PROVIDES_DEFAULT_RUNE_TABLE -+ -+#undef __linux__ -+#undef __unix__ -+#undef __APPLE__ -+#undef __GLIBC__ -+#undef _NEWLIB_VERSION -+ +#endif // __NuttX__ + +#endif diff --git a/src/include/config_elast.h libcxx/src/include/config_elast.h -index 501cbc4ff..1c8650af5 100644 +index 501cbc4ffeb..3113f9fb5cd 100644 --- a/src/include/config_elast.h +++ libcxx/src/include/config_elast.h -@@ -19,7 +19,7 @@ +@@ -17,10 +17,14 @@ + #include + #endif ++// Note: _LIBCPP_ELAST needs to be defined only on platforms ++// where strerror/strerror_r can't handle out-of-range errno values. #if defined(ELAST) #define _LIBCPP_ELAST ELAST --#elif defined(_NEWLIB_VERSION) -+#elif defined(__NuttX__) || defined(_NEWLIB_VERSION) + #elif defined(_NEWLIB_VERSION) #define _LIBCPP_ELAST __ELASTERROR ++#elif defined(__NuttX__) ++// No _LIBCPP_ELAST needed on NuttX #elif defined(__Fuchsia__) // No _LIBCPP_ELAST needed on Fuchsia + #elif defined(__wasi__) diff --git a/src/locale.cpp libcxx/src/locale.cpp -index b9180880e..25699f29e 100644 +index b9180880e49..25699f29ec9 100644 --- a/src/locale.cpp +++ libcxx/src/locale.cpp @@ -30,7 +30,7 @@