/* Copyright 2015, Michele Santullo * This file is part of DoorKeeper. * * DoorKeeper is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * DoorKeeper is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with DoorKeeper. If not, see . */ #ifndef id054C8BCA27C84EAA825922EC0A4F3317 #define id054C8BCA27C84EAA825922EC0A4F3317 #if defined(__GNUC__) # include #else # error "Please add endianness detection for your compiler" #endif #define DK_ARM_ARCH_6 0 #define DK_ARM_ARCH_6J 1 #define DK_ARM_ARCH_6K 2 #define DK_ARM_ARCH_6Z 3 #define DK_ARM_ARCH_6ZK 4 #define DK_ARM_ARCH_6T2 5 #define DK_ARM_ARCH_7 6 #define DK_ARM_ARCH_7A 7 #define DK_ARM_ARCH_7R 8 #define DK_ARM_ARCH_7M 9 #define DK_ARM_ARCH_7S 10 #if defined(__ANDROID__) # define DK_POSIX # define DK_ANDROID # define DK_MOBILE #elif defined(SAILFISHOS) # define DK_POSIX # define DK_SAILFISHOS # define DK_MOBILE #elif defined(__gnu_linux__) || defined(__linux__) || defined(linux) # define DK_POSIX # define DK_LINUX # define DK_PC #elif defined(_WIN16) || defined(_WIN32) || defined(_WIN64) || \ defined(__WIN32__) || defined(__TOS_WIN__) || defined(__WINDOWS__) # if defined(_WIN32) || defined(__WIN32__) # define DK_WIN32 # endif # define DK_WINDOWS # define DK_PC #else # error "Unknown platform" #endif #if defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || \ defined(__x86_64) || defined(_M_X64) || defined(_M_AMD64) # define DK_X86_64 # define DK_64_BIT #elif defined(__arm__) # if defined(__ARMEL__) && __ARMEL__ == 1 # define DK_ARM_EL # else # define DK_ARM_HF # endif # if defined(__ARM_ARCH_6__) # define DK_ARM_ARCH DK_ARM_ARCH_6 # elif defined(__ARM_ARCH_6J__) # define DK_ARM_ARCH DK_ARM_ARCH_6J # elif defined(__ARM_ARCH_6K__) # define DK_ARM_ARCH DK_ARM_ARCH_6K # elif defined(__ARM_ARCH_6Z__) # define DK_ARM_ARCH DK_ARM_ARCH_6Z # elif defined(__ARM_ARCH_6ZK__) # define DK_ARM_ARCH DK_ARM_ARCH_6ZK # elif defined(__ARM_ARCH_6T2__) # define DK_ARM_ARCH DK_ARM_ARCH_6T2 # elif defined(__ARM_ARCH_7__) # define DK_ARM_ARCH DK_ARM_ARCH_7 # elif defined(__ARM_ARCH_7A__) # define DK_ARM_ARCH DK_ARM_ARCH_7A # elif defined(__ARM_ARCH_7R__) # define DK_ARM_ARCH DK_ARM_ARCH_7R # elif defined(__ARM_ARCH_7M__) # define DK_ARM_ARCH DK_ARM_ARCH_7M # elif defined(__ARM_ARCH_7S__) # define DK_ARM_ARCH DK_ARM_ARCH_7S # else # error "Unknown ARM version" # endif # define DK_32_BIT # define DK_ARM #elif defined(_M_ARM) # if _M_ARM != 6 && _M_ARM != 7 # error "Unknown ARM version" # endif # if _M_ARM == 6 # define DK_ARM_ARCH DK_ARM_ARCH_6 # elif _M_ARM == 7 # define DK_ARM_ARC DK_ARM_ARCH_7 # endif # define DK_32_BIT # define DK_ARM #elif defined(__TARGET_ARCH_ARM) # if __TARGET_ARCH_ARM != 6 && __TARGET_ARCH_ARM != 7 # error "Unknown ARM version" # endif # define DK_ARM_VERSION __TARGET_ARCH_ARM # define DK_32_BIT # define DK_ARM #elif defined(__aarch64__) # define DK_ARM # define DK_64_BIT #elif defined(i386) || defined(__i386) || defined(__i386__) || \ defined(__i486__) || defined(__i586__) || defined(__i686__) || \ defined(_M_I86) || defined(_M_IX86) || defined(_X86_) || defined(__INTEL__) # define DK_X86 # define DK_32_BIT #elif defined(__ia64__) || defined(_IA64) || defined(__IA64__) || \ defined(_M_IA64) || defined(__itanium__) # define DK_IA64 # define DK_64_BIT #else # error "Unknown architecture" #endif #if defined(DK_ARM_ARCH) # if DK_ARM_ARCH == DK_ARM_ARCH_6 || DK_ARM_ARCH == DK_ARM_ARCH_6J || \ DK_ARM_ARCH == DK_ARM_ARCH_6K || DK_ARM_ARCH == DK_ARM_ARCH_6Z || \ DK_ARM_ARCH == DK_ARM_ARCH_6ZK || DK_ARM_ARCH == DK_ARM_ARCH_6T2 # define DK_ARM_VERSION 6 # elif DK_ARM_ARCH == DK_ARM_ARCH_7 || DK_ARM_ARCH == DK_ARM_ARCH_7A || \ DK_ARM_ARCH == DK_ARM_ARCH_7R || DK_ARM_ARCH == DK_ARM_ARCH_7M || \ DK_ARM_ARCH == DK_ARM_ARCH_7S # define DK_ARM_VERSION 7 # else # error "Unknown ARM version" # endif # if defined(__GNUC__) # if defined(__ARM_PCS_VFP) # define DK_ARM_HARDFLOAT # elif defined(__ARM_PCS) # define DK_ARM_SOFTFLOAT # else # error "Unkown floating point mode" # endif # else # error "Unknown compiler" # endif #endif #if defined(__ARMEB__) || \ (defined(__BYTE_ORDER) && __BYTE_ORDER == __BIG_ENDIAN) # define DK_BIG_ENDIAN #elif defined(__ARMEL__) || \ (defined(__BYTE_ORDER) && __BYTE_ORDER == __LITTLE_ENDIAN) # define DK_LITTLE_ENDIAN #else # error "Unknown endianness" #endif #endif