123e1ed65SLouis Dionne // -*- C++ -*- 223e1ed65SLouis Dionne //===----------------------------------------------------------------------===// 323e1ed65SLouis Dionne // 423e1ed65SLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 523e1ed65SLouis Dionne // See https://llvm.org/LICENSE.txt for license information. 623e1ed65SLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 723e1ed65SLouis Dionne // 823e1ed65SLouis Dionne //===----------------------------------------------------------------------===// 923e1ed65SLouis Dionne 1023e1ed65SLouis Dionne #ifndef _LIBCPP___CONFIGURATION_PLATFORM_H 1123e1ed65SLouis Dionne #define _LIBCPP___CONFIGURATION_PLATFORM_H 1223e1ed65SLouis Dionne 1323e1ed65SLouis Dionne #include <__config_site> 1423e1ed65SLouis Dionne 1523e1ed65SLouis Dionne #ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER 1623e1ed65SLouis Dionne # pragma GCC system_header 1723e1ed65SLouis Dionne #endif 1823e1ed65SLouis Dionne 1923e1ed65SLouis Dionne #if defined(__ELF__) 2023e1ed65SLouis Dionne # define _LIBCPP_OBJECT_FORMAT_ELF 1 2123e1ed65SLouis Dionne #elif defined(__MACH__) 2223e1ed65SLouis Dionne # define _LIBCPP_OBJECT_FORMAT_MACHO 1 2323e1ed65SLouis Dionne #elif defined(_WIN32) 2423e1ed65SLouis Dionne # define _LIBCPP_OBJECT_FORMAT_COFF 1 2523e1ed65SLouis Dionne #elif defined(__wasm__) 2623e1ed65SLouis Dionne # define _LIBCPP_OBJECT_FORMAT_WASM 1 2723e1ed65SLouis Dionne #elif defined(_AIX) 2823e1ed65SLouis Dionne # define _LIBCPP_OBJECT_FORMAT_XCOFF 1 2923e1ed65SLouis Dionne #else 3023e1ed65SLouis Dionne // ... add new file formats here ... 3123e1ed65SLouis Dionne #endif 3223e1ed65SLouis Dionne 33*5f2389d4SJoseph Huber // To detect which libc we're using 34*5f2389d4SJoseph Huber #if __has_include(<features.h>) 3523e1ed65SLouis Dionne # include <features.h> 36*5f2389d4SJoseph Huber #endif 37*5f2389d4SJoseph Huber 38*5f2389d4SJoseph Huber #if defined(__linux__) 3923e1ed65SLouis Dionne # if defined(__GLIBC_PREREQ) 4023e1ed65SLouis Dionne # define _LIBCPP_GLIBC_PREREQ(a, b) __GLIBC_PREREQ(a, b) 4123e1ed65SLouis Dionne # else 4223e1ed65SLouis Dionne # define _LIBCPP_GLIBC_PREREQ(a, b) 0 4323e1ed65SLouis Dionne # endif // defined(__GLIBC_PREREQ) 44*5f2389d4SJoseph Huber #endif 4523e1ed65SLouis Dionne 4623e1ed65SLouis Dionne #ifndef __BYTE_ORDER__ 4723e1ed65SLouis Dionne # error \ 4823e1ed65SLouis Dionne "Your compiler doesn't seem to define __BYTE_ORDER__, which is required by libc++ to know the endianness of your target platform" 4923e1ed65SLouis Dionne #endif 5023e1ed65SLouis Dionne 5123e1ed65SLouis Dionne #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ 5223e1ed65SLouis Dionne # define _LIBCPP_LITTLE_ENDIAN 5323e1ed65SLouis Dionne #elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ 5423e1ed65SLouis Dionne # define _LIBCPP_BIG_ENDIAN 5523e1ed65SLouis Dionne #endif // __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ 5623e1ed65SLouis Dionne 5723e1ed65SLouis Dionne #endif // _LIBCPP___CONFIGURATION_PLATFORM_H 58