
There were some remaining headers that were not guarded with _LIBCPP_HAS_LOCALIZATION, leading to errors when trying to use modules on platforms that don't support localization (since all the headers get pulled in when building the 'std' module). This patch brings these headers in line with what we do for every other header that depends on localization. This patch also requires including <picolibc.h> from <__configuration/platform.h> in order to define _NEWLIB_VERSION. In the long term, we should use a better approach for doing that, such as defining a macro in the __config_site header.
64 lines
2.2 KiB
C++
64 lines
2.2 KiB
C++
// -*- 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___CONFIGURATION_PLATFORM_H
|
|
#define _LIBCPP___CONFIGURATION_PLATFORM_H
|
|
|
|
#include <__config_site>
|
|
|
|
#ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER
|
|
# pragma GCC system_header
|
|
#endif
|
|
|
|
#if defined(__ELF__)
|
|
# define _LIBCPP_OBJECT_FORMAT_ELF 1
|
|
#elif defined(__MACH__)
|
|
# define _LIBCPP_OBJECT_FORMAT_MACHO 1
|
|
#elif defined(_WIN32)
|
|
# define _LIBCPP_OBJECT_FORMAT_COFF 1
|
|
#elif defined(__wasm__)
|
|
# define _LIBCPP_OBJECT_FORMAT_WASM 1
|
|
#elif defined(_AIX)
|
|
# define _LIBCPP_OBJECT_FORMAT_XCOFF 1
|
|
#else
|
|
// ... add new file formats here ...
|
|
#endif
|
|
|
|
// Need to detect which libc we're using if we're on Linux.
|
|
#if defined(__linux__) || defined(__AMDGPU__) || defined(__NVPTX__)
|
|
# if __has_include(<features.h>)
|
|
# include <features.h>
|
|
# if defined(__GLIBC_PREREQ)
|
|
# define _LIBCPP_GLIBC_PREREQ(a, b) __GLIBC_PREREQ(a, b)
|
|
# else
|
|
# define _LIBCPP_GLIBC_PREREQ(a, b) 0
|
|
# endif // defined(__GLIBC_PREREQ)
|
|
# endif
|
|
#endif
|
|
|
|
// This is required in order for _NEWLIB_VERSION to be defined in places where we use it.
|
|
// TODO: We shouldn't be including arbitrarily-named headers from libc++ since this can break valid
|
|
// user code. Move code paths that need _NEWLIB_VERSION to another customization mechanism.
|
|
#if __has_include(<picolibc.h>)
|
|
# include <picolibc.h>
|
|
#endif
|
|
|
|
#ifndef __BYTE_ORDER__
|
|
# error \
|
|
"Your compiler doesn't seem to define __BYTE_ORDER__, which is required by libc++ to know the endianness of your target platform"
|
|
#endif
|
|
|
|
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
|
# define _LIBCPP_LITTLE_ENDIAN
|
|
#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
|
|
# define _LIBCPP_BIG_ENDIAN
|
|
#endif // __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
|
|
|
|
#endif // _LIBCPP___CONFIGURATION_PLATFORM_H
|