AuroraUX was an operating system project based on an OpenSolaris kernel and an Ada userland. There appear to be no public code or release available online anymore. The project page on Wikipedia [1] was deleted in January 2012, and a news item [2] from November 2012 has more details. [1] https://en.wikipedia.org/w/index.php?title=Special:Log/delete&page=AuroraUX [2] https://www.phoronix.com/scan.php?page=news_item&px=MTIyMTI
95 lines
2.0 KiB
C
95 lines
2.0 KiB
C
#ifndef ENDIANNESS_H
|
|
#define ENDIANNESS_H
|
|
|
|
/*
|
|
* Known limitations:
|
|
* Middle endian systems are not handled currently.
|
|
*/
|
|
|
|
#if defined(__SVR4) && defined(__sun)
|
|
#include <sys/byteorder.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 /* Solaris */
|
|
|
|
/* .. */
|
|
|
|
#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonflyBSD__) || 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(__MACH__) || 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(__linux__)
|
|
#include <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 /* GNU/Linux */
|
|
|
|
/* . */
|
|
|
|
#if !defined(_YUGA_LITTLE_ENDIAN) || !defined(_YUGA_BIG_ENDIAN)
|
|
#error Unable to determine endian
|
|
#endif /* Check we found an endianness correctly. */
|
|
|
|
#endif /* ENDIANNESS_H */
|