1e78f53d1SNikolas Klauser // -*- C++ -*- 2e78f53d1SNikolas Klauser //===----------------------------------------------------------------------===// 3e78f53d1SNikolas Klauser // 4e78f53d1SNikolas Klauser // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5e78f53d1SNikolas Klauser // See https://llvm.org/LICENSE.txt for license information. 6e78f53d1SNikolas Klauser // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7e78f53d1SNikolas Klauser // 8e78f53d1SNikolas Klauser //===----------------------------------------------------------------------===// 9e78f53d1SNikolas Klauser 10ce777190SNikolas Klauser #ifndef _LIBCPP___CXX03___CONFIGURATION_PLATFORM_H 11ce777190SNikolas Klauser #define _LIBCPP___CXX03___CONFIGURATION_PLATFORM_H 12e78f53d1SNikolas Klauser 13*b9a2658aSNikolas Klauser #include <__cxx03/__configuration/config_site_shim.h> 14e78f53d1SNikolas Klauser 15e78f53d1SNikolas Klauser #ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER 16e78f53d1SNikolas Klauser # pragma GCC system_header 17e78f53d1SNikolas Klauser #endif 18e78f53d1SNikolas Klauser 19e78f53d1SNikolas Klauser #if defined(__ELF__) 20e78f53d1SNikolas Klauser # define _LIBCPP_OBJECT_FORMAT_ELF 1 21e78f53d1SNikolas Klauser #elif defined(__MACH__) 22e78f53d1SNikolas Klauser # define _LIBCPP_OBJECT_FORMAT_MACHO 1 23e78f53d1SNikolas Klauser #elif defined(_WIN32) 24e78f53d1SNikolas Klauser # define _LIBCPP_OBJECT_FORMAT_COFF 1 25e78f53d1SNikolas Klauser #elif defined(__wasm__) 26e78f53d1SNikolas Klauser # define _LIBCPP_OBJECT_FORMAT_WASM 1 27e78f53d1SNikolas Klauser #elif defined(_AIX) 28e78f53d1SNikolas Klauser # define _LIBCPP_OBJECT_FORMAT_XCOFF 1 29e78f53d1SNikolas Klauser #else 30e78f53d1SNikolas Klauser // ... add new file formats here ... 31e78f53d1SNikolas Klauser #endif 32e78f53d1SNikolas Klauser 33e78f53d1SNikolas Klauser // Need to detect which libc we're using if we're on Linux. 34e78f53d1SNikolas Klauser #if defined(__linux__) 35e78f53d1SNikolas Klauser # include <features.h> 36e78f53d1SNikolas Klauser # if defined(__GLIBC_PREREQ) 37e78f53d1SNikolas Klauser # define _LIBCPP_GLIBC_PREREQ(a, b) __GLIBC_PREREQ(a, b) 38e78f53d1SNikolas Klauser # else 39e78f53d1SNikolas Klauser # define _LIBCPP_GLIBC_PREREQ(a, b) 0 40e78f53d1SNikolas Klauser # endif // defined(__GLIBC_PREREQ) 41e78f53d1SNikolas Klauser #endif // defined(__linux__) 42e78f53d1SNikolas Klauser 43e78f53d1SNikolas Klauser #ifndef __BYTE_ORDER__ 44e78f53d1SNikolas Klauser # error \ 45e78f53d1SNikolas Klauser "Your compiler doesn't seem to define __BYTE_ORDER__, which is required by libc++ to know the endianness of your target platform" 46e78f53d1SNikolas Klauser #endif 47e78f53d1SNikolas Klauser 48e78f53d1SNikolas Klauser #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ 49e78f53d1SNikolas Klauser # define _LIBCPP_LITTLE_ENDIAN 50e78f53d1SNikolas Klauser #elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ 51e78f53d1SNikolas Klauser # define _LIBCPP_BIG_ENDIAN 52e78f53d1SNikolas Klauser #endif // __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ 53e78f53d1SNikolas Klauser 54ce777190SNikolas Klauser #endif // _LIBCPP___CXX03___CONFIGURATION_PLATFORM_H 55