From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Daniel Bertalan Date: Thu, 14 Apr 2022 10:17:13 +0200 Subject: [PATCH] [libc++] Add support for SerenityOS This commit teaches libc++ about what features are available in our LibC, namely: * We do not have locale support, so no-op shims should be used in place of the C locale API. * The number of errno constants defined by us is given by the value of the `ELAST` macro. * Multithreading is implemented though the pthread library. * Use libc++'s builtin character type table instead of the one provided by LibC as there's a lot of extra porting work to convince the rest of locale.cpp to use our character type table properly. --- libcxx/include/CMakeLists.txt | 1 + libcxx/include/__config | 5 +++-- libcxx/include/__locale | 2 ++ libcxx/include/__support/serenity/xlocale.h | 24 +++++++++++++++++++++ libcxx/include/locale | 2 +- libcxx/src/include/config_elast.h | 2 ++ 6 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 libcxx/include/__support/serenity/xlocale.h diff --git a/libcxx/include/CMakeLists.txt b/libcxx/include/CMakeLists.txt index f7c2d99e78b08ff823b9d510a8608ebf50031b82..8d3cb754ddf4c599708b2be38fab1574ce3a4923 100644 --- a/libcxx/include/CMakeLists.txt +++ b/libcxx/include/CMakeLists.txt @@ -495,6 +495,7 @@ set(files __support/musl/xlocale.h __support/newlib/xlocale.h __support/openbsd/xlocale.h + __support/serenity/xlocale.h __support/solaris/floatingpoint.h __support/solaris/wchar.h __support/solaris/xlocale.h diff --git a/libcxx/include/__config b/libcxx/include/__config index 8c2f7614af537e71a76cb5292d5765d6ff8cd279..c7ebf50cb5ebb3a96029cd9a8a38d836cf19a01e 100644 --- a/libcxx/include/__config +++ b/libcxx/include/__config @@ -912,7 +912,8 @@ _LIBCPP_BEGIN_NAMESPACE_STD _LIBCPP_END_NAMESPACE_STD defined(__sun__) || \ defined(__MVS__) || \ defined(_AIX) || \ - defined(__EMSCRIPTEN__) + defined(__EMSCRIPTEN__) || \ + defined(__serenity__) // clang-format on # define _LIBCPP_HAS_THREAD_API_PTHREAD # elif defined(__Fuchsia__) @@ -990,7 +991,7 @@ _LIBCPP_BEGIN_NAMESPACE_STD _LIBCPP_END_NAMESPACE_STD # endif # if defined(__BIONIC__) || defined(__NuttX__) || defined(__Fuchsia__) || defined(__wasi__) || \ - defined(_LIBCPP_HAS_MUSL_LIBC) || defined(__OpenBSD__) + defined(_LIBCPP_HAS_MUSL_LIBC) || defined(__OpenBSD__) || defined(__serenity__) # define _LIBCPP_PROVIDES_DEFAULT_RUNE_TABLE # endif diff --git a/libcxx/include/__locale b/libcxx/include/__locale index 40f9a3ff57c22635254be654227333b2a10eca6a..1c499c078b44a49abead17ce566801b4c34733f3 100644 --- a/libcxx/include/__locale +++ b/libcxx/include/__locale @@ -42,6 +42,8 @@ # include <__support/musl/xlocale.h> #elif defined(_LIBCPP_HAS_MUSL_LIBC) # include <__support/musl/xlocale.h> +#elif defined(__serenity__) +# include <__support/serenity/xlocale.h> #endif #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) diff --git a/libcxx/include/__support/serenity/xlocale.h b/libcxx/include/__support/serenity/xlocale.h new file mode 100644 index 0000000000000000000000000000000000000000..0f939d2f6989e2ad617145308d079776fe87b6ce --- /dev/null +++ b/libcxx/include/__support/serenity/xlocale.h @@ -0,0 +1,24 @@ +//===----------------------------------------------------------------------===// +// +// 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_SERENITY_XLOCALE_H +#define _LIBCPP_SUPPORT_SERENITY_XLOCALE_H + +#if defined(__serenity__) + +#include +#include +#include +#include +#include <__support/xlocale/__nop_locale_mgmt.h> +#include <__support/xlocale/__posix_l_fallback.h> +#include <__support/xlocale/__strtonum_fallback.h> + +#endif // __serenity__ + +#endif diff --git a/libcxx/include/locale b/libcxx/include/locale index b01c66d0430f66ee74118e73296780bb864e920b..da29b7d00c709788facb049f417b6d5ccb5b70e1 100644 --- a/libcxx/include/locale +++ b/libcxx/include/locale @@ -217,7 +217,7 @@ template class messages_byname; #if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__)) // Most unix variants have catopen. These are the specific ones that don't. -# if !defined(__BIONIC__) && !defined(_NEWLIB_VERSION) && !defined(__EMSCRIPTEN__) +# if !defined(__BIONIC__) && !defined(_NEWLIB_VERSION) && !defined(__EMSCRIPTEN__) && !defined(__serenity__) # define _LIBCPP_HAS_CATOPEN 1 # include # endif diff --git a/libcxx/src/include/config_elast.h b/libcxx/src/include/config_elast.h index bef26ec5019eccab758733eb85a1f8a6fc404968..fbb2899b1939a2f9ce7a39337c99e48c7749f7f2 100644 --- a/libcxx/src/include/config_elast.h +++ b/libcxx/src/include/config_elast.h @@ -35,6 +35,8 @@ #define _LIBCPP_ELAST 4095 #elif defined(__APPLE__) // No _LIBCPP_ELAST needed on Apple +#elif defined(__serenity__) +// No _LIBCPP_ELAST needed on SerenityOS #elif defined(__sun__) #define _LIBCPP_ELAST ESTALE #elif defined(__MVS__)