text: /* ===-- int_endianness.h - configuration header for compiler-rt ------------===
   *
   * 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
   *
   * ===----------------------------------------------------------------------===
   *
   * This file is a configuration header for compiler-rt.
   * This file is not part of the interface of this library.
   *
   * ===----------------------------------------------------------------------===
   */
  
  #ifndef INT_ENDIANNESS_H
  #define INT_ENDIANNESS_H
  
  #if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && \
      defined(__ORDER_LITTLE_ENDIAN__)
  
  /* Clang and GCC provide built-in endianness definitions. */
  #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
  #define _YUGA_LITTLE_ENDIAN 0
  #define _YUGA_BIG_ENDIAN    1
  #elif __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
  #define _YUGA_LITTLE_ENDIAN 1
  #define _YUGA_BIG_ENDIAN    0
  #endif /* __BYTE_ORDER__ */
  
  #else /* Compilers other than Clang or GCC. */
  
  #if defined(__SVR4) && defined(__sun)
  #include <sys/byteorder.h>
  
  #if defined(_BIG_ENDIAN)
  #define _YUGA_LITTLE_ENDIAN 0
  #define _YUGA_BIG_ENDIAN    1
  #elif defined(_LITTLE_ENDIAN)
  #define _YUGA_LITTLE_ENDIAN 1
  #define _YUGA_BIG_ENDIAN    0
  #else /* !_LITTLE_ENDIAN */
  #error "unknown endianness"
  #endif /* !_LITTLE_ENDIAN */
  
  #endif /* Solaris and AuroraUX. */
  
  /* .. */
  
  #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__) ||   \
      defined(__minix)
  #include <sys/endian.h>
  
  #if _BYTE_ORDER == _BIG_ENDIAN
  #define _YUGA_LITTLE_ENDIAN 0
  #define _YUGA_BIG_ENDIAN    1
  #elif _BYTE_ORDER == _LITTLE_ENDIAN
  #define _YUGA_LITTLE_ENDIAN 1
  #define _YUGA_BIG_ENDIAN    0
  #endif /* _BYTE_ORDER */
  
  #endif /* *BSD */
  
  #if defined(__OpenBSD__)
  #include <machine/endian.h>
  
  #if _BYTE_ORDER == _BIG_ENDIAN
  #define _YUGA_LITTLE_ENDIAN 0
  #define _YUGA_BIG_ENDIAN    1
  #elif _BYTE_ORDER == _LITTLE_ENDIAN
  #define _YUGA_LITTLE_ENDIAN 1
  #define _YUGA_BIG_ENDIAN    0
  #endif /* _BYTE_ORDER */
  
  #endif /* OpenBSD */
  
  /* .. */
  
  /* Mac OSX has __BIG_ENDIAN__ or __LITTLE_ENDIAN__ automatically set by the
   * compiler (at least with GCC) */
  #if defined(__APPLE__) || defined(__ellcc__ )
  
  #ifdef __BIG_ENDIAN__
  #if __BIG_ENDIAN__
  #define _YUGA_LITTLE_ENDIAN 0
  #define _YUGA_BIG_ENDIAN    1
  #endif
  #endif /* __BIG_ENDIAN__ */
  
  #ifdef __LITTLE_ENDIAN__
  #if __LITTLE_ENDIAN__
  #define _YUGA_LITTLE_ENDIAN 1
  #define _YUGA_BIG_ENDIAN    0
  #endif
  #endif /* __LITTLE_ENDIAN__ */
  
  #endif /* Mac OSX */
  
  /* .. */
  
  #if defined(_WIN32)
  
  #define _YUGA_LITTLE_ENDIAN 1
  #define _YUGA_BIG_ENDIAN    0
  
  #endif /* Windows */
  
  #endif /* Clang or GCC. */
  
  /* . */
  
  #if !defined(_YUGA_LITTLE_ENDIAN) || !defined(_YUGA_BIG_ENDIAN)
  #error Unable to determine endian
  #endif /* Check we found an endianness correctly. */
  
  #endif /* INT_ENDIANNESS_H */
  