xref: /llvm-project/libcxx/include/__cxx03/__configuration/platform.h (revision b9a2658a3e8bd13b0f9e7a8a440832a95b377216)
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