| // -*- 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 |