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 a12aa1de1..075ebbe81 100644 --- a/libcxx/include/CMakeLists.txt +++ b/libcxx/include/CMakeLists.txt @@ -549,6 +549,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 108153883..e4434809c 100644 --- a/libcxx/include/__config +++ b/libcxx/include/__config @@ -930,7 +930,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__) @@ -1008,7 +1009,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 e0ffa0ca0..33e994abe 100644 --- a/libcxx/include/__locale +++ b/libcxx/include/__locale @@ -44,6 +44,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 000000000..0f939d2f6 --- /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 874866f69..55632f101 100644 --- a/libcxx/include/locale +++ b/libcxx/include/locale @@ -216,7 +216,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 bef26ec50..fbb2899b1 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__)