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