You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
178 lines
5.0 KiB
178 lines
5.0 KiB
/*
|
|
** Target architecture selection.
|
|
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
|
*/
|
|
|
|
#ifndef RAVI_ARCH_H
|
|
#define RAVI_ARCH_H
|
|
|
|
#include "lua.h"
|
|
|
|
/* Target endianess. */
|
|
#define RAVI__ARCH_LE 0
|
|
#define RAVI__ARCH_BE 1
|
|
|
|
/* Target architectures. */
|
|
#define RAVI__ARCH_X86 1
|
|
#define RAVI__ARCH_x86 1
|
|
#define RAVI__ARCH_X64 2
|
|
#define RAVI__ARCH_x64 2
|
|
#define RAVI__ARCH_ARM 3
|
|
#define RAVI__ARCH_arm 3
|
|
#define RAVI__ARCH_ARM64 4
|
|
#define RAVI__ARCH_arm64 4
|
|
#define RAVI__ARCH_PPC 5
|
|
#define RAVI__ARCH_ppc 5
|
|
#define RAVI__ARCH_MIPS 6
|
|
#define RAVI__ARCH_mips 6
|
|
#define RAVI__ARCH_MIPS32 6
|
|
#define RAVI__ARCH_mips32 6
|
|
#define RAVI__ARCH_MIPS64 7
|
|
#define RAVI__ARCH_mips64 7
|
|
|
|
/* Target OS. */
|
|
#define RAVI__OS_OTHER 0
|
|
#define RAVI__OS_WINDOWS 1
|
|
#define RAVI__OS_LINUX 2
|
|
#define RAVI__OS_OSX 3
|
|
#define RAVI__OS_BSD 4
|
|
#define RAVI__OS_POSIX 5
|
|
|
|
/* Select native target if no target defined. */
|
|
#ifndef RAVI__TARGET
|
|
#if defined(__i386) || defined(__i386__) || defined(_M_IX86)
|
|
#define RAVI__TARGET RAVI__ARCH_X86
|
|
#elif defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) || defined(_M_AMD64)
|
|
#define RAVI__TARGET RAVI__ARCH_X64
|
|
#elif defined(__arm__) || defined(__arm) || defined(__ARM__) || defined(__ARM)
|
|
#error "No support for this architecture (yet)"
|
|
#define RAVI__TARGET RAVI__ARCH_ARM
|
|
#elif defined(__aarch64__)
|
|
#define RAVI__TARGET RAVI__ARCH_ARM64
|
|
#elif defined(__ppc__) || defined(__ppc) || defined(__PPC__) || defined(__PPC) || defined(__powerpc__) || defined(__powerpc) || defined(__POWERPC__) || defined(__POWERPC) || defined(_M_PPC)
|
|
#error "No support for this architecture (yet)"
|
|
#define RAVI__TARGET RAVI__ARCH_PPC
|
|
#elif defined(__mips64__) || defined(__mips64) || defined(__MIPS64__) || defined(__MIPS64)
|
|
#error "No support for this architecture (yet)"
|
|
#define RAVI__TARGET RAVI__ARCH_MIPS64
|
|
#elif defined(__mips__) || defined(__mips) || defined(__MIPS__) || defined(__MIPS)
|
|
#error "No support for this architecture (yet)"
|
|
#define RAVI__TARGET RAVI__ARCH_MIPS32
|
|
#else
|
|
#error "No support for this architecture (yet)"
|
|
#endif
|
|
#endif
|
|
|
|
/* Select native OS if no target OS defined. */
|
|
#ifndef RAVI__OS
|
|
#if defined(_WIN32) && !defined(_XBOX_VER)
|
|
#define RAVI__OS RAVI__OS_WINDOWS
|
|
#elif defined(__linux__)
|
|
#define RAVI__OS RAVI__OS_LINUX
|
|
#elif defined(__MACH__) && defined(__APPLE__)
|
|
#define RAVI__OS RAVI__OS_OSX
|
|
#elif (defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || \
|
|
defined(__NetBSD__) || defined(__OpenBSD__) || \
|
|
defined(__DragonFly__)) && !defined(__ORBIS__)
|
|
#define RAVI__OS RAVI__OS_BSD
|
|
#elif (defined(__sun__) && defined(__svr4__)) || defined(__HAIKU__)
|
|
#define RAVI__OS RAVI__OS_POSIX
|
|
#elif defined(__CYGWIN__)
|
|
#define RAVI_TARGET_CYGWIN 1
|
|
#define RAVI__OS RAVI__OS_POSIX
|
|
#else
|
|
#define RAVI__OS RAVI__OS_OTHER
|
|
#endif
|
|
#endif
|
|
|
|
/* Set target OS properties. */
|
|
#if RAVI__OS == RAVI__OS_WINDOWS
|
|
#define RAVI_OS_NAME "Windows"
|
|
#elif RAVI__OS == RAVI__OS_LINUX
|
|
#define RAVI_OS_NAME "Linux"
|
|
#elif RAVI__OS == RAVI__OS_OSX
|
|
#define RAVI_OS_NAME "OSX"
|
|
#elif RAVI__OS == RAVI__OS_BSD
|
|
#define RAVI_OS_NAME "BSD"
|
|
#elif RAVI__OS == RAVI__OS_POSIX
|
|
#define RAVI_OS_NAME "POSIX"
|
|
#else
|
|
#define RAVI_OS_NAME "Other"
|
|
#endif
|
|
|
|
#define RAVI_TARGET_WINDOWS (RAVI__OS == RAVI__OS_WINDOWS)
|
|
#define RAVI_TARGET_LINUX (RAVI__OS == RAVI__OS_LINUX)
|
|
#define RAVI_TARGET_OSX (RAVI__OS == RAVI__OS_OSX)
|
|
#define RAVI_TARGET_IOS (RAVI_TARGET_OSX && (RAVI__TARGET == RAVI__ARCH_ARM || RAVI__TARGET == RAVI__ARCH_ARM64))
|
|
#define RAVI_TARGET_POSIX (RAVI__OS > RAVI__OS_WINDOWS)
|
|
#define RAVI_TARGET_DLOPEN RAVI_TARGET_POSIX
|
|
|
|
/* Set target architecture properties. */
|
|
#if RAVI__TARGET == RAVI__ARCH_X86
|
|
|
|
#define RAVI_ARCH_NAME "x86"
|
|
#define RAVI_ARCH_BITS 32
|
|
#define RAVI_ARCH_ENDIAN RAVI__ARCH_LE
|
|
#if RAVI_TARGET_WINDOWS || RAVI_TARGET_CYGWIN
|
|
#define RAVI_ABI_WIN 1
|
|
#else
|
|
#define RAVI_ABI_WIN 0
|
|
#endif
|
|
#define RAVI_TARGET_X86 1
|
|
#define RAVI_TARGET_X86ORX64 1
|
|
|
|
#elif RAVI__TARGET == RAVI__ARCH_X64
|
|
|
|
#define RAVI_ARCH_NAME "x64"
|
|
#define RAVI_ARCH_BITS 64
|
|
#define RAVI_ARCH_ENDIAN RAVI__ARCH_LE
|
|
#if RAVI_TARGET_WINDOWS || RAVI_TARGET_CYGWIN
|
|
#define RAVI_ABI_WIN 1
|
|
#else
|
|
#define RAVI_ABI_WIN 0
|
|
#endif
|
|
#define RAVI_TARGET_X64 1
|
|
#define RAVI_TARGET_X86ORX64 1
|
|
|
|
#elif RAVI__TARGET == RAVI__ARCH_ARM64
|
|
|
|
#define RAVI_ARCH_BITS 64
|
|
#if defined(__AARCH64EB__)
|
|
#define RAVI_ARCH_NAME "arm64be"
|
|
#define RAVI_ARCH_ENDIAN RAVI__ARCH_BE
|
|
#else
|
|
#define RAVI_ARCH_NAME "arm64"
|
|
#define RAVI_ARCH_ENDIAN RAVI__ARCH_LE
|
|
#endif
|
|
#define RAVI_TARGET_ARM64 1
|
|
|
|
#else
|
|
#error "No target architecture defined"
|
|
#endif
|
|
|
|
#ifndef RAVI_PAGESIZE
|
|
#define RAVI_PAGESIZE 4096
|
|
#endif
|
|
|
|
#if RAVI_ARCH_ENDIAN == RAVI__ARCH_BE
|
|
#define RAVI_LE 0
|
|
#define RAVI_BE 1
|
|
#define RAVI_ENDIAN_SELECT(le, be) be
|
|
#define RAVI_ENDIAN_LOHI(lo, hi) hi lo
|
|
#else
|
|
#define RAVI_LE 1
|
|
#define RAVI_BE 0
|
|
#define RAVI_ENDIAN_SELECT(le, be) le
|
|
#define RAVI_ENDIAN_LOHI(lo, hi) lo hi
|
|
#endif
|
|
|
|
#if RAVI_ARCH_BITS == 32
|
|
#define RAVI_32 1
|
|
#define RAVI_64 0
|
|
#else
|
|
#define RAVI_32 0
|
|
#define RAVI_64 1
|
|
#endif
|
|
|
|
#endif
|