platform.h (5366B)
1/** 2 * WinPR: Windows Portable Runtime 3 * Platform-Specific Definitions 4 * 5 * Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com> 6 * 7 * Licensed under the Apache License, Version 2.0 (the "License"); 8 * you may not use this file except in compliance with the License. 9 * You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the License is distributed on an "AS IS" BASIS, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the License for the specific language governing permissions and 17 * limitations under the License. 18 */ 19 20#ifndef WINPR_PLATFORM_H 21#define WINPR_PLATFORM_H 22 23#include <stdlib.h> 24 25#include <winpr/wtypes.h> 26 27/* 28 * Processor Architectures: 29 * http://sourceforge.net/p/predef/wiki/Architectures/ 30 * 31 * Visual Studio Predefined Macros: 32 * http://msdn.microsoft.com/en-ca/library/vstudio/b0084kay.aspx 33 */ 34 35/* Intel x86 (_M_IX86) */ 36 37#if defined(i386) || defined(__i386) || defined(__i386__) || defined(__i486__) || \ 38 defined(__i586__) || defined(__i686__) || defined(__X86__) || defined(_X86_) || \ 39 defined(__I86__) || defined(__IA32__) || defined(__THW_INTEL__) || defined(__INTEL__) 40#ifndef _M_IX86 41#define _M_IX86 1 42#endif 43#endif 44 45/* AMD64 (_M_AMD64) */ 46 47#if defined(__amd64) || defined(__amd64__) || defined(__x86_64) || defined(__x86_64__) || \ 48 defined(_M_X64) 49#ifndef _M_AMD64 50#define _M_AMD64 1 51#endif 52#endif 53 54/* Intel x86 or AMD64 (_M_IX86_AMD64) */ 55 56#if defined(_M_IX86) || defined(_M_AMD64) 57#ifndef _M_IX86_AMD64 58#define _M_IX86_AMD64 1 59#endif 60#endif 61 62/* ARM (_M_ARM) */ 63 64#if defined(__arm__) || defined(__thumb__) || defined(__TARGET_ARCH_ARM) || \ 65 defined(__TARGET_ARCH_THUMB) 66#ifndef _M_ARM 67#define _M_ARM 1 68#endif 69#endif 70 71/* ARM64 (_M_ARM64) */ 72 73#if defined(__aarch64__) 74#ifndef _M_ARM64 75#define _M_ARM64 1 76#endif 77#endif 78 79/* MIPS (_M_MIPS) */ 80 81#if defined(mips) || defined(__mips) || defined(__mips__) || defined(__MIPS__) 82#ifndef _M_MIPS 83#define _M_MIPS 1 84#endif 85#endif 86 87/* MIPS64 (_M_MIPS64) */ 88 89#if defined(mips64) || defined(__mips64) || defined(__mips64__) || defined(__MIPS64__) 90#ifndef _M_MIPS64 91#define _M_MIPS64 1 92#endif 93#endif 94 95/* PowerPC (_M_PPC) */ 96 97#if defined(__ppc__) || defined(__powerpc) || defined(__powerpc__) || defined(__POWERPC__) || \ 98 defined(_ARCH_PPC) 99#ifndef _M_PPC 100#define _M_PPC 1 101#endif 102#endif 103 104/* Intel Itanium (_M_IA64) */ 105 106#if defined(__ia64) || defined(__ia64__) || defined(_IA64) || defined(__IA64__) 107#ifndef _M_IA64 108#define _M_IA64 1 109#endif 110#endif 111 112/* Alpha (_M_ALPHA) */ 113 114#if defined(__alpha) || defined(__alpha__) 115#ifndef _M_ALPHA 116#define _M_ALPHA 1 117#endif 118#endif 119 120/* SPARC (_M_SPARC) */ 121 122#if defined(__sparc) || defined(__sparc__) 123#ifndef _M_SPARC 124#define _M_SPARC 1 125#endif 126#endif 127 128/** 129 * Operating Systems: 130 * http://sourceforge.net/p/predef/wiki/OperatingSystems/ 131 */ 132 133/* Windows (_WIN32) */ 134 135/* WinRT (_WINRT) */ 136 137#if defined(WINAPI_FAMILY) 138#if (WINAPI_FAMILY == WINAPI_FAMILY_APP) 139#ifndef _WINRT 140#define _WINRT 1 141#endif 142#endif 143#endif 144 145#if defined(__cplusplus_winrt) 146#ifndef _WINRT 147#define _WINRT 1 148#endif 149#endif 150 151/* Linux (__linux__) */ 152 153#if defined(linux) || defined(__linux) 154#ifndef __linux__ 155#define __linux__ 1 156#endif 157#endif 158 159/* GNU/Linux (__gnu_linux__) */ 160 161/* Apple Platforms (iOS, Mac OS X) */ 162 163#if (defined(__APPLE__) && defined(__MACH__)) 164 165#include <TargetConditionals.h> 166 167#if (TARGET_OS_IPHONE == 1) || (TARGET_IPHONE_SIMULATOR == 1) 168 169/* iOS (__IOS__) */ 170 171#ifndef __IOS__ 172#define __IOS__ 1 173#endif 174 175#elif (TARGET_OS_MAC == 1) 176 177/* Mac OS X (__MACOSX__) */ 178 179#ifndef __MACOSX__ 180#define __MACOSX__ 1 181#endif 182 183#endif 184#endif 185 186/* Android (__ANDROID__) */ 187 188/* Cygwin (__CYGWIN__) */ 189 190/* FreeBSD (__FreeBSD__) */ 191 192/* NetBSD (__NetBSD__) */ 193 194/* OpenBSD (__OpenBSD__) */ 195 196/* DragonFly (__DragonFly__) */ 197 198/* Solaris (__sun) */ 199 200#if defined(sun) 201#ifndef __sun 202#define __sun 1 203#endif 204#endif 205 206/* IRIX (__sgi) */ 207 208#if defined(sgi) 209#ifndef __sgi 210#define __sgi 1 211#endif 212#endif 213 214/* AIX (_AIX) */ 215 216#if defined(__TOS_AIX__) 217#ifndef _AIX 218#define _AIX 1 219#endif 220#endif 221 222/* HP-UX (__hpux) */ 223 224#if defined(hpux) || defined(_hpux) 225#ifndef __hpux 226#define __hpux 1 227#endif 228#endif 229 230/* BeOS (__BEOS__) */ 231 232/* QNX (__QNXNTO__) */ 233 234/** 235 * Endianness: 236 * http://sourceforge.net/p/predef/wiki/Endianness/ 237 */ 238 239#if defined(__gnu_linux__) 240#include <endian.h> 241#endif 242 243#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || \ 244 defined(__DragonFly__) || defined(__APPLE__) 245#include <sys/param.h> 246#endif 247 248/* Big-Endian */ 249 250#ifdef __BYTE_ORDER 251 252#if (__BYTE_ORDER == __BIG_ENDIAN) 253#ifndef __BIG_ENDIAN__ 254#define __BIG_ENDIAN__ 1 255#endif 256#endif 257 258#else 259 260#if defined(__ARMEB__) || defined(__THUMBEB__) || defined(__AARCH64EB__) || defined(_MIPSEB) || \ 261 defined(__MIPSEB) || defined(__MIPSEB__) 262#ifndef __BIG_ENDIAN__ 263#define __BIG_ENDIAN__ 1 264#endif 265#endif 266 267#endif /* __BYTE_ORDER */ 268 269/* Little-Endian */ 270 271#ifdef __BYTE_ORDER 272 273#if (__BYTE_ORDER == __LITTLE_ENDIAN) 274#ifndef __LITTLE_ENDIAN__ 275#define __LITTLE_ENDIAN__ 1 276#endif 277#endif 278 279#else 280 281#if defined(__ARMEL__) || defined(__THUMBEL__) || defined(__AARCH64EL__) || defined(_MIPSEL) || \ 282 defined(__MIPSEL) || defined(__MIPSEL__) 283#ifndef __LITTLE_ENDIAN__ 284#define __LITTLE_ENDIAN__ 1 285#endif 286#endif 287 288#endif /* __BYTE_ORDER */ 289 290#endif /* WINPR_PLATFORM_H */