1
0
mirror of https://github.com/Interlisp/maiko.git synced 2026-01-13 23:27:12 +00:00
Anarchos e2e2c7e394
Haiku OS port (#485)
* Haiku OS port
* haiku with X11 backend
* haiku has stpncpy
* Haiku is not Linux.
* X not stable enough on Haiku
* Haiku : settimeofday is a no-op
* Haiku : no need to define settimeofday at all (pointed by nbriggs)

---------

Signed-off-by: Anarchos <sylvain_kerjean@hotmail.com>
2024-04-10 20:14:46 -07:00

203 lines
4.9 KiB
C

#ifndef MAIKO_PLATFORM_H
#define MAIKO_PLATFORM_H 1
/*
* Set up various preprocessor definitions based upon
* the platform.
*/
#if defined(__APPLE__) && defined(__MACH__)
# define MAIKO_OS_MACOS 1
# define MAIKO_OS_NAME "macOS"
# define MAIKO_OS_UNIX_LIKE 1
# define MAIKO_OS_DETECTED 1
#endif
#ifdef __CYGWIN__
# define MAIKO_OS_CYGWIN 1
# define MAIKO_OS_NAME "Cygwin"
# define MAIKO_OS_UNIX_LIKE 1
# define MAIKO_EMULATE_TIMER_INTERRUPTS 1
# define MAIKO_EMULATE_ASYNC_INTERRUPTS 1
# define MAIKO_OS_DETECTED 1
#endif
#ifdef __DragonFly__
# define MAIKO_OS_DRAGONFLYBSD 1
# define MAIKO_OS_NAME "DragonFly BSD"
# define MAIKO_OS_BSD_LIKE 1
# define MAIKO_OS_UNIX_LIKE 1
# define MAIKO_OS_DETECTED 1
#endif
#ifdef __FreeBSD__
# define MAIKO_OS_FREEBSD 1
# define MAIKO_OS_NAME "FreeBSD"
# define MAIKO_OS_BSD_LIKE 1
# define MAIKO_OS_UNIX_LIKE 1
# define MAIKO_OS_DETECTED 1
#endif
#ifdef __linux__
# define MAIKO_OS_LINUX 1
# define MAIKO_OS_NAME "Linux"
# define MAIKO_OS_UNIX_LIKE 1
# define MAIKO_OS_DETECTED 1
#endif
#ifdef __NetBSD__
# define MAIKO_OS_NETBSD 1
# define MAIKO_OS_NAME "NetBSD"
# define MAIKO_OS_BSD_LIKE 1
# define MAIKO_OS_UNIX_LIKE 1
# define MAIKO_OS_DETECTED 1
#endif
#ifdef __OpenBSD__
# define MAIKO_OS_OPENBSD 1
# define MAIKO_OS_NAME "OpenBSD"
# define MAIKO_OS_BSD_LIKE 1
# define MAIKO_OS_UNIX_LIKE 1
# define MAIKO_OS_DETECTED 1
#endif
#ifdef amigaos3
# define MAIKO_OS_AMIGAOS3 1
# define MAIKO_OS_NAME "AmigaOS 3"
# define MAIKO_OS_UNIX_LIKE 1
# define MAIKO_OS_DETECTED 1
#endif
/* __SVR4: Defined by clang, gcc, and Sun Studio.
* __SVR4__ was only defined by Sun Studio. */
#if defined(__sun) && defined(__SVR4)
# define MAIKO_OS_SOLARIS 1
# define MAIKO_OS_NAME "Solaris"
# define MAIKO_OS_UNIX_LIKE 1
# define MAIKO_OS_DETECTED 1
#endif
#if defined(_WIN32) || defined(__WINDOWS__)
# define MAIKO_OS_WINDOWS 1
# define MAIKO_OS_NAME "Windows"
# define MAIKO_OS_DETECTED 1
#endif
#ifdef __EMSCRIPTEN__
# define MAIKO_OS_LINUX 1
# define MAIKO_OS_EMSCRIPTEN 1
# define MAIKO_OS_NAME "Emscripten"
# define MAIKO_EMULATE_TIMER_INTERRUPTS 1
# define MAIKO_EMULATE_ASYNC_INTERRUPTS 1
# define MAIKO_OS_UNIX_LIKE 1
# define MAIKO_OS_DETECTED
# define MAIKO_ARCH_NAME "WebAssembly"
# define MAIKO_ARCH_WORD_BITS 32
# define MAIKO_ARCH_DETECTED 1
#endif
/* __x86_64__: GNU C, __x86_64: Sun Studio, _M_AMD64: Visual Studio */
#if defined(__x86_64__) || defined(__x86_64) || defined(_M_AMD64)
# define MAIKO_ARCH_X86_64 1
# define MAIKO_ARCH_NAME "x86_64"
# define MAIKO_ARCH_WORD_BITS 64
# define MAIKO_ARCH_DETECTED 1
#endif
/* __arm__: GNU C */
#ifdef __arm__
# define MAIKO_ARCH_ARM 1
# define MAIKO_ARCH_NAME "arm"
# define MAIKO_ARCH_WORD_BITS 32
# define MAIKO_ARCH_DETECTED 1
#endif
/* __aarch64__: GNU C */
#ifdef __aarch64__
# define MAIKO_ARCH_ARM64 1
# define MAIKO_ARCH_NAME "arm64"
# define MAIKO_ARCH_WORD_BITS 64
# define MAIKO_ARCH_DETECTED 1
#endif
/* __i386: GNU C, Sun Studio, _M_IX86: Visual Studio */
#if defined(__i386) || defined(_M_IX86)
# define MAIKO_ARCH_X86 1
# define MAIKO_ARCH_NAME "x86"
# define MAIKO_ARCH_WORD_BITS 32
# define MAIKO_ARCH_DETECTED 1
#endif
#if defined(__ppc__) || defined(__ppc64__)
# define MAIKO_ARCH_POWERPC 1
# define MAIKO_ARCH_NAME "PowerPC"
# ifdef __ppc64__
# define MAIKO_ARCH_WORD_BITS 64
# else
# define MAIKO_ARCH_WORD_BITS 32
# endif
# define MAIKO_ARCH_DETECTED 1
#endif
/* Documented at https://github.com/riscv/riscv-toolchain-conventions */
#ifdef __riscv
# define MAIKO_ARCH_RISCV 1
# define MAIKO_ARCH_NAME "RISC-V"
# define MAIKO_ARCH_WORD_BITS __riscv_xlen
# define MAIKO_ARCH_DETECTED 1
#endif
/* __sparc__: GNU C, __sparc: Sun Studio */
#if defined(__sparc__) || defined(__sparc)
# define MAIKO_ARCH_SPARC 1
# define MAIKO_ARCH_NAME "SPARC"
# ifdef __sparcv9
# define MAIKO_ARCH_WORD_BITS 64
# else
# define MAIKO_ARCH_WORD_BITS 32
# endif
# define MAIKO_ARCH_DETECTED 1
#endif
#ifdef __mc68000
# define MAIKO_ARCH_M68000 1
# define MAIKO_ARCH_NAME "Motorola68K"
# define MAIKO_ARCH_WORD_BITS 32
# define MAIKO_ARCH_DETECTED 1
#endif
#ifdef __HAIKU__
# define MAIKO_OS_HAIKU 1
# define MAIKO_OS_NAME "Haiku"
# define MAIKO_OS_UNIX_LIKE 1
# define MAIKO_OS_DETECTED 1
#endif
/* Modern GNU C, Clang, Sun Studio provide __BYTE_ORDER__
* Older GNU C (ca. 4.0.1) provides __BIG_ENDIAN__/__LITTLE_ENDIAN__
*/
#if defined(__BYTE_ORDER__)
# if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
# define BYTESWAP 1
# elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
# undef BYTESWAP
# else
# error "Unknown byte order"
# endif
#elif __BIG_ENDIAN__ == 1
# undef BYTESWAP
#elif __LITTLE_ENDIAN__ == 1
# define BYTESWAP 1
#else
# error "Could not detect byte order"
#endif
#ifndef MAIKO_OS_DETECTED
# error "Could not detect OS."
#endif
#ifndef MAIKO_ARCH_DETECTED
# error "Could not detect system architecture."
#endif
#endif /* MAIKO_PLATFORM_H */