1/* 2 * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. 3 * Copyright (C) 2007-2009 Torch Mobile, Inc. 4 * Copyright (C) Research In Motion Limited 2010. All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 16 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 19 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 20 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 22 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 23 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 */ 27 28#ifndef WTF_Platform_h 29#define WTF_Platform_h 30 31/* ==== PLATFORM handles OS, operating environment, graphics API, and 32 CPU. This macro will be phased out in favor of platform adaptation 33 macros, policy decision macros, and top-level port definitions. ==== */ 34#define PLATFORM(WTF_FEATURE) (defined WTF_PLATFORM_##WTF_FEATURE && WTF_PLATFORM_##WTF_FEATURE) 35 36 37/* ==== Platform adaptation macros: these describe properties of the target environment. ==== */ 38 39/* COMPILER() - the compiler being used to build the project */ 40#define COMPILER(WTF_FEATURE) (defined WTF_COMPILER_##WTF_FEATURE && WTF_COMPILER_##WTF_FEATURE) 41/* CPU() - the target CPU architecture */ 42#define CPU(WTF_FEATURE) (defined WTF_CPU_##WTF_FEATURE && WTF_CPU_##WTF_FEATURE) 43/* HAVE() - specific system features (headers, functions or similar) that are present or not */ 44#define HAVE(WTF_FEATURE) (defined HAVE_##WTF_FEATURE && HAVE_##WTF_FEATURE) 45/* OS() - underlying operating system; only to be used for mandated low-level services like 46 virtual memory, not to choose a GUI toolkit */ 47#define OS(WTF_FEATURE) (defined WTF_OS_##WTF_FEATURE && WTF_OS_##WTF_FEATURE) 48 49 50/* ==== Policy decision macros: these define policy choices for a particular port. ==== */ 51 52/* USE() - use a particular third-party library or optional OS service */ 53#define USE(WTF_FEATURE) (defined WTF_USE_##WTF_FEATURE && WTF_USE_##WTF_FEATURE) 54/* ENABLE() - turn on a specific feature of WebKit */ 55#define ENABLE(WTF_FEATURE) (defined ENABLE_##WTF_FEATURE && ENABLE_##WTF_FEATURE) 56 57 58 59/* ==== COMPILER() - the compiler being used to build the project ==== */ 60 61/* COMPILER(MSVC) Microsoft Visual C++ */ 62/* COMPILER(MSVC7_OR_LOWER) Microsoft Visual C++ 2003 or lower*/ 63/* COMPILER(MSVC9_OR_LOWER) Microsoft Visual C++ 2008 or lower*/ 64#if defined(_MSC_VER) 65#define WTF_COMPILER_MSVC 1 66#if _MSC_VER < 1400 67#define WTF_COMPILER_MSVC7_OR_LOWER 1 68#elif _MSC_VER < 1600 69#define WTF_COMPILER_MSVC9_OR_LOWER 1 70#endif 71#endif 72 73/* COMPILER(RVCT) - ARM RealView Compilation Tools */ 74/* COMPILER(RVCT4_OR_GREATER) - ARM RealView Compilation Tools 4.0 or greater */ 75#if defined(__CC_ARM) || defined(__ARMCC__) 76#define WTF_COMPILER_RVCT 1 77#define RVCT_VERSION_AT_LEAST(major, minor, patch, build) (__ARMCC_VERSION >= (major * 100000 + minor * 10000 + patch * 1000 + build)) 78#else 79/* Define this for !RVCT compilers, just so we can write things like RVCT_VERSION_AT_LEAST(3, 0, 0, 0). */ 80#define RVCT_VERSION_AT_LEAST(major, minor, patch, build) 0 81#endif 82 83/* COMPILER(GCC) - GNU Compiler Collection */ 84/* --gnu option of the RVCT compiler also defines __GNUC__ */ 85#if defined(__GNUC__) && !COMPILER(RVCT) 86#define WTF_COMPILER_GCC 1 87#define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) 88#define GCC_VERSION_AT_LEAST(major, minor, patch) (GCC_VERSION >= (major * 10000 + minor * 100 + patch)) 89#else 90/* Define this for !GCC compilers, just so we can write things like GCC_VERSION_AT_LEAST(4, 1, 0). */ 91#define GCC_VERSION_AT_LEAST(major, minor, patch) 0 92#endif 93 94/* COMPILER(MINGW) - MinGW GCC */ 95/* COMPILER(MINGW64) - mingw-w64 GCC - only used as additional check to exclude mingw.org specific functions */ 96#if defined(__MINGW32__) 97#define WTF_COMPILER_MINGW 1 98#include <_mingw.h> /* private MinGW header */ 99 #if defined(__MINGW64_VERSION_MAJOR) /* best way to check for mingw-w64 vs mingw.org */ 100 #define WTF_COMPILER_MINGW64 1 101 #endif /* __MINGW64_VERSION_MAJOR */ 102#endif /* __MINGW32__ */ 103 104/* COMPILER(WINSCW) - CodeWarrior for Symbian emulator */ 105#if defined(__WINSCW__) 106#define WTF_COMPILER_WINSCW 1 107/* cross-compiling, it is not really windows */ 108#undef WIN32 109#undef _WIN32 110#endif 111 112/* COMPILER(INTEL) - Intel C++ Compiler */ 113#if defined(__INTEL_COMPILER) 114#define WTF_COMPILER_INTEL 1 115#endif 116 117/* COMPILER(SUNCC) */ 118#if defined(__SUNPRO_CC) || defined(__SUNPRO_C) 119#define WTF_COMPILER_SUNCC 1 120#endif 121 122/* ==== CPU() - the target CPU architecture ==== */ 123 124/* This also defines CPU(BIG_ENDIAN) or CPU(MIDDLE_ENDIAN) or neither, as appropriate. */ 125 126/* CPU(ALPHA) - DEC Alpha */ 127#if defined(__alpha__) 128#define WTF_CPU_ALPHA 1 129#endif 130 131/* CPU(IA64) - Itanium / IA-64 */ 132#if defined(__ia64__) 133#define WTF_CPU_IA64 1 134/* 32-bit mode on Itanium */ 135#if !defined(__LP64__) 136#define WTF_CPU_IA64_32 1 137#endif 138#endif 139 140/* CPU(MIPS) - MIPS 32-bit */ 141/* Note: Only O32 ABI is tested, so we enable it for O32 ABI for now. */ 142#if (defined(mips) || defined(__mips__) || defined(MIPS) || defined(_MIPS_)) \ 143 && defined(_ABIO32) 144#define WTF_CPU_MIPS 1 145#if defined(__MIPSEB__) 146#define WTF_CPU_BIG_ENDIAN 1 147#endif 148#define WTF_MIPS_PIC (defined __PIC__) 149#define WTF_MIPS_ARCH __mips 150#define WTF_MIPS_ISA(v) (defined WTF_MIPS_ARCH && WTF_MIPS_ARCH == v) 151#define WTF_MIPS_ISA_AT_LEAST(v) (defined WTF_MIPS_ARCH && WTF_MIPS_ARCH >= v) 152#define WTF_MIPS_ARCH_REV __mips_isa_rev 153#define WTF_MIPS_ISA_REV(v) (defined WTF_MIPS_ARCH_REV && WTF_MIPS_ARCH_REV == v) 154#define WTF_MIPS_DOUBLE_FLOAT (defined __mips_hard_float && !defined __mips_single_float) 155#define WTF_MIPS_FP64 (defined __mips_fpr && __mips_fpr == 64) 156/* MIPS requires allocators to use aligned memory */ 157#define WTF_USE_ARENA_ALLOC_ALIGNMENT_INTEGER 1 158#endif /* MIPS */ 159 160/* CPU(PPC) - PowerPC 32-bit */ 161#if defined(__ppc__) \ 162 || defined(__PPC__) \ 163 || defined(__powerpc__) \ 164 || defined(__powerpc) \ 165 || defined(__POWERPC__) \ 166 || defined(_M_PPC) \ 167 || defined(__PPC) 168#define WTF_CPU_PPC 1 169#define WTF_CPU_BIG_ENDIAN 1 170#endif 171 172/* CPU(PPC64) - PowerPC 64-bit */ 173#if defined(__ppc64__) \ 174 || defined(__PPC64__) 175#define WTF_CPU_PPC64 1 176#define WTF_CPU_BIG_ENDIAN 1 177#endif 178 179/* CPU(SH4) - SuperH SH-4 */ 180#if defined(__SH4__) 181#define WTF_CPU_SH4 1 182#endif 183 184/* CPU(SPARC32) - SPARC 32-bit */ 185#if defined(__sparc) && !defined(__arch64__) || defined(__sparcv8) 186#define WTF_CPU_SPARC32 1 187#define WTF_CPU_BIG_ENDIAN 1 188#endif 189 190/* CPU(SPARC64) - SPARC 64-bit */ 191#if defined(__sparc__) && defined(__arch64__) || defined (__sparcv9) 192#define WTF_CPU_SPARC64 1 193#define WTF_CPU_BIG_ENDIAN 1 194#endif 195 196/* CPU(SPARC) - any SPARC, true for CPU(SPARC32) and CPU(SPARC64) */ 197#if CPU(SPARC32) || CPU(SPARC64) 198#define WTF_CPU_SPARC 1 199#endif 200 201/* CPU(S390X) - S390 64-bit */ 202#if defined(__s390x__) 203#define WTF_CPU_S390X 1 204#define WTF_CPU_BIG_ENDIAN 1 205#endif 206 207/* CPU(S390) - S390 32-bit */ 208#if defined(__s390__) 209#define WTF_CPU_S390 1 210#define WTF_CPU_BIG_ENDIAN 1 211#endif 212 213/* CPU(X86) - i386 / x86 32-bit */ 214#if defined(__i386__) \ 215 || defined(i386) \ 216 || defined(_M_IX86) \ 217 || defined(_X86_) \ 218 || defined(__THW_INTEL) 219#define WTF_CPU_X86 1 220#endif 221 222/* CPU(X86_64) - AMD64 / Intel64 / x86_64 64-bit */ 223#if defined(__x86_64__) \ 224 || defined(_M_X64) 225#define WTF_CPU_X86_64 1 226#endif 227 228/* CPU(ARM) - ARM, any version*/ 229#if defined(arm) \ 230 || defined(__arm__) \ 231 || defined(ARM) \ 232 || defined(_ARM_) 233#define WTF_CPU_ARM 1 234 235#if defined(__ARMEB__) || (COMPILER(RVCT) && defined(__BIG_ENDIAN)) 236#define WTF_CPU_BIG_ENDIAN 1 237 238#elif !defined(__ARM_EABI__) \ 239 && !defined(__EABI__) \ 240 && !defined(__VFP_FP__) \ 241 && !defined(_WIN32_WCE) \ 242 && !defined(ANDROID) 243#define WTF_CPU_MIDDLE_ENDIAN 1 244 245#endif 246 247#define WTF_ARM_ARCH_AT_LEAST(N) (CPU(ARM) && WTF_ARM_ARCH_VERSION >= N) 248 249/* Set WTF_ARM_ARCH_VERSION */ 250#if defined(__ARM_ARCH_4__) \ 251 || defined(__ARM_ARCH_4T__) \ 252 || defined(__MARM_ARMV4__) \ 253 || defined(_ARMV4I_) 254#define WTF_ARM_ARCH_VERSION 4 255 256#elif defined(__ARM_ARCH_5__) \ 257 || defined(__ARM_ARCH_5T__) \ 258 || defined(__MARM_ARMV5__) 259#define WTF_ARM_ARCH_VERSION 5 260 261#elif defined(__ARM_ARCH_5E__) \ 262 || defined(__ARM_ARCH_5TE__) \ 263 || defined(__ARM_ARCH_5TEJ__) 264#define WTF_ARM_ARCH_VERSION 5 265/*ARMv5TE requires allocators to use aligned memory*/ 266#define WTF_USE_ARENA_ALLOC_ALIGNMENT_INTEGER 1 267 268#elif defined(__ARM_ARCH_6__) \ 269 || defined(__ARM_ARCH_6J__) \ 270 || defined(__ARM_ARCH_6K__) \ 271 || defined(__ARM_ARCH_6Z__) \ 272 || defined(__ARM_ARCH_6ZK__) \ 273 || defined(__ARM_ARCH_6T2__) \ 274 || defined(__ARMV6__) 275#define WTF_ARM_ARCH_VERSION 6 276 277#elif defined(__ARM_ARCH_7A__) \ 278 || defined(__ARM_ARCH_7R__) 279#define WTF_ARM_ARCH_VERSION 7 280 281/* RVCT sets _TARGET_ARCH_ARM */ 282#elif defined(__TARGET_ARCH_ARM) 283#define WTF_ARM_ARCH_VERSION __TARGET_ARCH_ARM 284 285#if defined(__TARGET_ARCH_5E) \ 286 || defined(__TARGET_ARCH_5TE) \ 287 || defined(__TARGET_ARCH_5TEJ) 288/*ARMv5TE requires allocators to use aligned memory*/ 289#define WTF_USE_ARENA_ALLOC_ALIGNMENT_INTEGER 1 290#endif 291 292#else 293#define WTF_ARM_ARCH_VERSION 0 294 295#endif 296 297/* Set WTF_THUMB_ARCH_VERSION */ 298#if defined(__ARM_ARCH_4T__) 299#define WTF_THUMB_ARCH_VERSION 1 300 301#elif defined(__ARM_ARCH_5T__) \ 302 || defined(__ARM_ARCH_5TE__) \ 303 || defined(__ARM_ARCH_5TEJ__) 304#define WTF_THUMB_ARCH_VERSION 2 305 306#elif defined(__ARM_ARCH_6J__) \ 307 || defined(__ARM_ARCH_6K__) \ 308 || defined(__ARM_ARCH_6Z__) \ 309 || defined(__ARM_ARCH_6ZK__) \ 310 || defined(__ARM_ARCH_6M__) 311#define WTF_THUMB_ARCH_VERSION 3 312 313#elif defined(__ARM_ARCH_6T2__) \ 314 || defined(__ARM_ARCH_7__) \ 315 || defined(__ARM_ARCH_7A__) \ 316 || defined(__ARM_ARCH_7R__) \ 317 || defined(__ARM_ARCH_7M__) 318#define WTF_THUMB_ARCH_VERSION 4 319 320/* RVCT sets __TARGET_ARCH_THUMB */ 321#elif defined(__TARGET_ARCH_THUMB) 322#define WTF_THUMB_ARCH_VERSION __TARGET_ARCH_THUMB 323 324#else 325#define WTF_THUMB_ARCH_VERSION 0 326#endif 327 328 329/* CPU(ARMV5_OR_LOWER) - ARM instruction set v5 or earlier */ 330/* On ARMv5 and below the natural alignment is required. 331 And there are some other differences for v5 or earlier. */ 332#if !defined(ARMV5_OR_LOWER) && !WTF_ARM_ARCH_AT_LEAST(6) 333#define WTF_CPU_ARMV5_OR_LOWER 1 334#endif 335 336 337/* CPU(ARM_TRADITIONAL) - Thumb2 is not available, only traditional ARM (v4 or greater) */ 338/* CPU(ARM_THUMB2) - Thumb2 instruction set is available */ 339/* Only one of these will be defined. */ 340#if !defined(WTF_CPU_ARM_TRADITIONAL) && !defined(WTF_CPU_ARM_THUMB2) 341# if defined(thumb2) || defined(__thumb2__) \ 342 || ((defined(__thumb) || defined(__thumb__)) && WTF_THUMB_ARCH_VERSION == 4) 343# define WTF_CPU_ARM_TRADITIONAL 0 344# define WTF_CPU_ARM_THUMB2 1 345# elif WTF_ARM_ARCH_AT_LEAST(4) 346# define WTF_CPU_ARM_TRADITIONAL 1 347# define WTF_CPU_ARM_THUMB2 0 348# else 349# error "Not supported ARM architecture" 350# endif 351#elif CPU(ARM_TRADITIONAL) && CPU(ARM_THUMB2) /* Sanity Check */ 352# error "Cannot use both of WTF_CPU_ARM_TRADITIONAL and WTF_CPU_ARM_THUMB2 platforms" 353#endif /* !defined(WTF_CPU_ARM_TRADITIONAL) && !defined(WTF_CPU_ARM_THUMB2) */ 354 355#if defined(__ARM_NEON__) && !defined(WTF_CPU_ARM_NEON) 356#define WTF_CPU_ARM_NEON 1 357#endif 358 359#endif /* ARM */ 360 361#if CPU(ARM) || CPU(MIPS) 362#define WTF_CPU_NEEDS_ALIGNED_ACCESS 1 363#endif 364 365/* ==== OS() - underlying operating system; only to be used for mandated low-level services like 366 virtual memory, not to choose a GUI toolkit ==== */ 367 368/* OS(ANDROID) - Android */ 369#ifdef ANDROID 370#define WTF_OS_ANDROID 1 371#endif 372 373/* OS(AIX) - AIX */ 374#ifdef _AIX 375#define WTF_OS_AIX 1 376#endif 377 378/* OS(DARWIN) - Any Darwin-based OS, including Mac OS X and iPhone OS */ 379#ifdef __APPLE__ 380#define WTF_OS_DARWIN 1 381 382/* FIXME: BUILDING_ON_.., and TARGETING... macros should be folded into the OS() system */ 383#include <AvailabilityMacros.h> 384#if !defined(MAC_OS_X_VERSION_10_5) || MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5 385#define BUILDING_ON_TIGER 1 386#elif !defined(MAC_OS_X_VERSION_10_6) || MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_6 387#define BUILDING_ON_LEOPARD 1 388#elif !defined(MAC_OS_X_VERSION_10_7) || MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_7 389#define BUILDING_ON_SNOW_LEOPARD 1 390#endif 391#if !defined(MAC_OS_X_VERSION_10_5) || MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 392#define TARGETING_TIGER 1 393#elif !defined(MAC_OS_X_VERSION_10_6) || MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_6 394#define TARGETING_LEOPARD 1 395#elif !defined(MAC_OS_X_VERSION_10_7) || MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_7 396#define TARGETING_SNOW_LEOPARD 1 397#endif 398#include <TargetConditionals.h> 399 400#endif 401 402/* OS(IOS) - iOS */ 403/* OS(MAC_OS_X) - Mac OS X (not including iOS) */ 404#if OS(DARWIN) && ((defined(TARGET_OS_EMBEDDED) && TARGET_OS_EMBEDDED) \ 405 || (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE) \ 406 || (defined(TARGET_IPHONE_SIMULATOR) && TARGET_IPHONE_SIMULATOR)) 407#define WTF_OS_IOS 1 408#elif OS(DARWIN) && defined(TARGET_OS_MAC) && TARGET_OS_MAC 409#define WTF_OS_MAC_OS_X 1 410#endif 411 412/* OS(FREEBSD) - FreeBSD */ 413#if defined(__FreeBSD__) || defined(__DragonFly__) 414#define WTF_OS_FREEBSD 1 415#endif 416 417/* OS(HAIKU) - Haiku */ 418#ifdef __HAIKU__ 419#define WTF_OS_HAIKU 1 420#endif 421 422/* OS(LINUX) - Linux */ 423#ifdef __linux__ 424#define WTF_OS_LINUX 1 425#endif 426 427/* OS(NETBSD) - NetBSD */ 428#if defined(__NetBSD__) 429#define WTF_OS_NETBSD 1 430#endif 431 432/* OS(OPENBSD) - OpenBSD */ 433#ifdef __OpenBSD__ 434#define WTF_OS_OPENBSD 1 435#endif 436 437/* OS(QNX) - QNX */ 438#if defined(__QNXNTO__) 439#define WTF_OS_QNX 1 440#endif 441 442/* OS(SOLARIS) - Solaris */ 443#if defined(sun) || defined(__sun) 444#define WTF_OS_SOLARIS 1 445#endif 446 447/* OS(WINCE) - Windows CE; note that for this platform OS(WINDOWS) is also defined */ 448#if defined(_WIN32_WCE) 449#define WTF_OS_WINCE 1 450#endif 451 452/* OS(WINDOWS) - Any version of Windows */ 453#if defined(WIN32) || defined(_WIN32) 454#define WTF_OS_WINDOWS 1 455#endif 456 457/* OS(SYMBIAN) - Symbian */ 458#if defined (__SYMBIAN32__) 459#define WTF_OS_SYMBIAN 1 460#endif 461 462/* OS(UNIX) - Any Unix-like system */ 463#if OS(AIX) \ 464 || OS(ANDROID) \ 465 || OS(DARWIN) \ 466 || OS(FREEBSD) \ 467 || OS(HAIKU) \ 468 || OS(LINUX) \ 469 || OS(NETBSD) \ 470 || OS(OPENBSD) \ 471 || OS(QNX) \ 472 || OS(SOLARIS) \ 473 || OS(SYMBIAN) \ 474 || defined(unix) \ 475 || defined(__unix) \ 476 || defined(__unix__) 477#define WTF_OS_UNIX 1 478#endif 479 480/* Operating environments */ 481 482/* FIXME: these are all mixes of OS, operating environment and policy choices. */ 483/* PLATFORM(CHROMIUM) */ 484/* PLATFORM(QT) */ 485/* PLATFORM(WX) */ 486/* PLATFORM(GTK) */ 487/* PLATFORM(HAIKU) */ 488/* PLATFORM(MAC) */ 489/* PLATFORM(WIN) */ 490#if defined(BUILDING_CHROMIUM__) 491#define WTF_PLATFORM_CHROMIUM 1 492#elif defined(BUILDING_QT__) 493#define WTF_PLATFORM_QT 1 494#elif defined(BUILDING_WX__) 495#define WTF_PLATFORM_WX 1 496#elif defined(BUILDING_GTK__) 497#define WTF_PLATFORM_GTK 1 498#elif defined(BUILDING_HAIKU__) 499#define WTF_PLATFORM_HAIKU 1 500#elif defined(BUILDING_BREWMP__) 501#define WTF_PLATFORM_BREWMP 1 502#if defined(AEE_SIMULATOR) 503#define WTF_PLATFORM_BREWMP_SIMULATOR 1 504#else 505#define WTF_PLATFORM_BREWMP_SIMULATOR 0 506#endif 507#undef WTF_OS_WINDOWS 508#undef WTF_PLATFORM_WIN 509#elif OS(DARWIN) 510#define WTF_PLATFORM_MAC 1 511#elif OS(WINDOWS) 512#define WTF_PLATFORM_WIN 1 513#endif 514 515/* PLATFORM(IOS) */ 516/* FIXME: this is sometimes used as an OS switch and sometimes for higher-level things */ 517#if (defined(TARGET_OS_EMBEDDED) && TARGET_OS_EMBEDDED) || (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE) 518#define WTF_PLATFORM_IOS 1 519#endif 520 521/* PLATFORM(IOS_SIMULATOR) */ 522#if defined(TARGET_IPHONE_SIMULATOR) && TARGET_IPHONE_SIMULATOR 523#define WTF_PLATFORM_IOS 1 524#define WTF_PLATFORM_IOS_SIMULATOR 1 525#else 526#define WTF_PLATFORM_IOS_SIMULATOR 0 527#endif 528 529#if !defined(WTF_PLATFORM_IOS) 530#define WTF_PLATFORM_IOS 0 531#endif 532 533/* PLATFORM(ANDROID) */ 534/* FIXME: this is sometimes used as an OS() switch, and other times to drive 535 policy choices */ 536#if defined(ANDROID) 537#define WTF_PLATFORM_ANDROID 1 538#endif 539 540/* Graphics engines */ 541 542/* USE(CG) and PLATFORM(CI) */ 543#if PLATFORM(MAC) || PLATFORM(IOS) 544#define WTF_USE_CG 1 545#endif 546#if PLATFORM(MAC) || PLATFORM(IOS) || (PLATFORM(WIN) && USE(CG)) 547#define WTF_USE_CA 1 548#endif 549 550/* USE(SKIA) for Win/Linux, CG for Mac */ 551#if PLATFORM(CHROMIUM) 552#if OS(DARWIN) 553#define WTF_USE_CG 1 554#define WTF_USE_ATSUI 1 555#define WTF_USE_CORE_TEXT 1 556#define WTF_USE_ICCJPEG 1 557#else 558#define WTF_USE_SKIA 1 559#define WTF_USE_CHROMIUM_NET 1 560#endif 561#endif 562 563#if PLATFORM(BREWMP) 564#define WTF_USE_SKIA 1 565#endif 566 567#if PLATFORM(GTK) 568#define WTF_USE_CAIRO 1 569#endif 570 571 572#if OS(WINCE) 573#include <ce_time.h> 574#define WTF_USE_MERSENNE_TWISTER_19937 1 575#endif 576 577#if PLATFORM(QT) && OS(UNIX) && !OS(SYMBIAN) && !OS(DARWIN) 578#define WTF_USE_PTHREAD_BASED_QT 1 579#endif 580 581#if (PLATFORM(GTK) || PLATFORM(IOS) || PLATFORM(MAC) || PLATFORM(WIN) || (PLATFORM(QT) && (OS(DARWIN) || USE(PTHREAD_BASED_QT)) && !ENABLE(SINGLE_THREADED))) && !defined(ENABLE_JSC_MULTIPLE_THREADS) 582#define ENABLE_JSC_MULTIPLE_THREADS 1 583#endif 584 585/* On Windows, use QueryPerformanceCounter by default */ 586#if OS(WINDOWS) 587#define WTF_USE_QUERY_PERFORMANCE_COUNTER 1 588#endif 589 590#if OS(WINCE) && !PLATFORM(QT) 591#define NOMINMAX /* Windows min and max conflict with standard macros */ 592#define NOSHLWAPI /* shlwapi.h not available on WinCe */ 593 594/* MSDN documentation says these functions are provided with uspce.lib. But we cannot find this file. */ 595#define __usp10__ /* disable "usp10.h" */ 596 597#define _INC_ASSERT /* disable "assert.h" */ 598#define assert(x) 599 600#endif /* OS(WINCE) && !PLATFORM(QT) */ 601 602#if PLATFORM(QT) 603#define WTF_USE_QT4_UNICODE 1 604#elif OS(WINCE) 605#define WTF_USE_WINCE_UNICODE 1 606#elif PLATFORM(BREWMP) 607#define WTF_USE_BREWMP_UNICODE 1 608#elif PLATFORM(GTK) 609/* The GTK+ Unicode backend is configurable */ 610#else 611#define WTF_USE_ICU_UNICODE 1 612#endif 613 614#if PLATFORM(MAC) && !PLATFORM(IOS) 615#if !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_TIGER) && CPU(X86_64) 616#define WTF_USE_PLUGIN_HOST_PROCESS 1 617#endif 618#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD) 619#define ENABLE_GESTURE_EVENTS 1 620#define ENABLE_RUBBER_BANDING 1 621#define WTF_USE_WK_SCROLLBAR_PAINTER 1 622#endif 623#if !defined(ENABLE_JAVA_BRIDGE) 624#define ENABLE_JAVA_BRIDGE 1 625#endif 626#if !defined(ENABLE_DASHBOARD_SUPPORT) 627#define ENABLE_DASHBOARD_SUPPORT 1 628#endif 629#define WTF_USE_CF 1 630#define WTF_USE_PTHREADS 1 631#define HAVE_PTHREAD_RWLOCK 1 632#define HAVE_READLINE 1 633#define HAVE_RUNLOOP_TIMER 1 634#define ENABLE_FULLSCREEN_API 1 635#define ENABLE_SMOOTH_SCROLLING 1 636#define ENABLE_WEB_ARCHIVE 1 637#endif /* PLATFORM(MAC) && !PLATFORM(IOS) */ 638 639#if PLATFORM(CHROMIUM) && OS(DARWIN) 640#define WTF_USE_CF 1 641#define WTF_USE_PTHREADS 1 642#define HAVE_PTHREAD_RWLOCK 1 643#endif 644 645#if PLATFORM(BREWMP) 646#define ENABLE_SINGLE_THREADED 1 647#endif 648 649#if PLATFORM(QT) && OS(DARWIN) 650#define WTF_USE_CF 1 651#endif 652 653#if OS(DARWIN) && !defined(BUILDING_ON_TIGER) && !PLATFORM(GTK) && !PLATFORM(QT) 654#define ENABLE_PURGEABLE_MEMORY 1 655#endif 656 657#if PLATFORM(IOS) 658#define ENABLE_CONTEXT_MENUS 0 659#define ENABLE_DRAG_SUPPORT 0 660#define ENABLE_DATA_TRANSFER_ITEMS 0 661#define ENABLE_FTPDIR 1 662#define ENABLE_GEOLOCATION 1 663#define ENABLE_ICONDATABASE 0 664#define ENABLE_INSPECTOR 0 665#define ENABLE_JAVA_BRIDGE 0 666#define ENABLE_NETSCAPE_PLUGIN_API 0 667#define ENABLE_ORIENTATION_EVENTS 1 668#define ENABLE_REPAINT_THROTTLING 1 669#define HAVE_READLINE 1 670#define WTF_USE_CF 1 671#define WTF_USE_PTHREADS 1 672#define HAVE_PTHREAD_RWLOCK 1 673#define ENABLE_WEB_ARCHIVE 1 674#endif 675 676#if PLATFORM(ANDROID) 677#define WEBCORE_NAVIGATOR_VENDOR "Google Inc." 678 679#define LOG_DISABLED 1 680// This must be defined before we include FastMalloc.h in config.h. 681#define USE_SYSTEM_MALLOC 1 682 683// USE defines 684#define WTF_USE_PTHREADS 1 685#define WTF_USE_SKIA 1 686#if !defined WTF_USE_ACCELERATED_COMPOSITING 687#define WTF_USE_ACCELERATED_COMPOSITING 1 688#define ENABLE_3D_RENDERING 1 689#endif 690 691// ENABLE guards 692#define ENABLE_JAVA_BRIDGE 1 693// Prevents Webkit from drawing the caret in textfields and textareas 694// This prevents unnecessary invals. 695#define ENABLE_TEXT_CARET 1 696#define ENABLE_JAVASCRIPT_DEBUGGER 0 697#define ENABLE_ORIENTATION_EVENTS 1 698#if !defined(ENABLE_JIT) && !ENABLE(ANDROID_JSC_JIT) 699#define ENABLE_JIT 0 700#endif 701#define ENABLE_WEB_ARCHIVE 1 702#define ENABLE_FULLSCREEN_API 1 703#define ENABLE_DOM_STORAGE 1 704#define ENABLE_FTPDIR 0 705#ifndef ENABLE_SVG 706#define ENABLE_SVG 0 707#endif 708#define ENABLE_VIDEO 1 709#if ENABLE_SVG 710#if !defined(ENABLE_SVG_ANIMATION) 711#define ENABLE_SVG_ANIMATION 0 712#endif 713#define ENABLE_SVG_AS_IMAGE 1 714#define ENABLE_SVG_FILTERS 1 715#define ENABLE_SVG_FONTS 1 716#define ENABLE_SVG_FOREIGN_OBJECT 1 717#define ENABLE_SVG_USE 1 718#endif 719#define ENABLE_XBL 0 720#define ENABLE_XHTMLMP 0 721#define ENABLE_XPATH 1 722#define ENABLE_XSLT 1 723#define ENABLE_OFFLINE_WEB_APPLICATIONS 1 724#define ENABLE_TOUCH_EVENTS 1 725#define ENABLE_GEOLOCATION 1 726#define ENABLE_INSPECTOR 0 727#define ENABLE_EVENT_SOURCE 0 728#define ENABLE_DEVICE_ORIENTATION 1 729#define ENABLE_FILE_READER 1 730#define ENABLE_BLOB 1 731// Converts ListBoxes to dropdown popup lists. 732#define ENABLE_NO_LISTBOX_RENDERING 1 733#define ENABLE_LINK_PREFETCH 1 734#define ENABLE_WEB_TIMING 1 735 736// Android ENABLE guards not present upstream 737#define ENABLE_COMPOSITED_FIXED_ELEMENTS 1 // FIXME: Rename to ENABLE_ANDROID_COMPOSITED_FIXED_ELEMENTS 738#define ENABLE_APPLICATION_INSTALLED 1 // FIXME: Rename to ENABLE_ANDROID_APPLICATION_INSTALLED 739#define ENABLE_ANDROID_INSTALLABLE_WEB_APPS 1 740// Enable scrollable divs in separate layers. This might be upstreamed to 741// webkit.org but for now, it is just an Android feature. 742#define ENABLE_ANDROID_OVERFLOW_SCROLL 1 743 744// Other Android guards not present upstream 745#define ANDROID_FLATTEN_FRAMESET 746#define ANDROID_LAYOUT 747#define ANDROID_FIX 748// Ensure that the fixed elements are always relative to the top document. 749#define ANDROID_FIXED_ELEMENTS 750// Passes the webkit-originated changes of a focused textfield to our UI 751// thread 752#define ANDROID_ACCEPT_CHANGES_TO_FOCUSED_TEXTFIELDS 753// Allow us to turn off the blinking caret as desired. 754#define ANDROID_ALLOW_TURNING_OFF_CARET 755#define ANDROID_META_SUPPORT 756#define ANDROID_MULTIPLE_WINDOWS 757#define ANDROID_CSS_RING 758#define ANDROID_CSS_TAP_HIGHLIGHT_COLOR 759#define ANDROID_BLOCK_NETWORK_IMAGE 760// Changes needed to support native plugins (npapi.h). If the change is generic, 761// it may be under a different #define (see: PLUGIN_PLATFORM_SETVALUE, 762// PLUGIN_SCHEDULE_TIMER) 763#define ANDROID_PLUGINS 764// This enables a portable implementation of NPN_[Un]ScheduleTimer 765// Will submit this as a patch to apple 766#define PLUGIN_SCHEDULE_TIMER // FIXME: Rename to ANDROID_PLUGIN_SCHEDULE_TIMER 767// This adds platformInit() and platformSetValue() to pluginview 768// Will submit this as a patch to apple 769#define PLUGIN_PLATFORM_SETVALUE // FIXME: Rename to ANDROID_PLUGIN_PLATFORM_SETVALUE 770// This enables logging the DOM tree, Render tree even for the release build 771#define ANDROID_DOM_LOGGING 772// Notify WebViewCore when a clipped out rectangle is drawn, 773// so that all invals are captured by the display tree. 774#define ANDROID_CAPTURE_OFFSCREEN_PAINTS 775// Enable dumping the display tree to a file (triggered in WebView.java) 776#define ANDROID_DUMP_DISPLAY_TREE 777// Animated GIF support. 778#define ANDROID_ANIMATED_GIF 779// apple-touch-icon support in <link> tags 780#define ANDROID_APPLE_TOUCH_ICON 781// track changes to the style that may change what is drawn 782#define ANDROID_STYLE_VERSION 783 784#if !defined(WTF_USE_CHROME_NETWORK_STACK) 785#define WTF_USE_CHROME_NETWORK_STACK 0 786#endif /* !defined(WTF_USE_CHROME_NETWORK_STACK) */ 787 788// This is present in JavaScriptCore/config.h, which Android does not use. 789#define WTF_CHANGES 1 790#endif /* PLATFORM(ANDROID) */ 791 792#if PLATFORM(WIN) && !OS(WINCE) 793#define WTF_USE_CF 1 794#define WTF_USE_PTHREADS 0 795#endif 796 797#if PLATFORM(WIN) && !OS(WINCE) && !PLATFORM(CHROMIUM) && !defined(WIN_CAIRO) 798#define WTF_USE_CFNETWORK 1 799#endif 800 801#if USE(CFNETWORK) || PLATFORM(MAC) 802#define WTF_USE_CFURLCACHE 1 803#define WTF_USE_CFURLSTORAGESESSIONS 1 804#endif 805 806#if PLATFORM(WIN) && !OS(WINCE) && !PLATFORM(CHROMIUM) && !PLATFORM(QT) 807#define ENABLE_WEB_ARCHIVE 1 808#endif 809 810#if PLATFORM(WX) 811#define ENABLE_ASSEMBLER 1 812#define ENABLE_GLOBAL_FASTMALLOC_NEW 0 813#if OS(DARWIN) 814#define WTF_USE_CF 1 815#ifndef BUILDING_ON_TIGER 816#define WTF_USE_CORE_TEXT 1 817#define ENABLE_WEB_ARCHIVE 1 818#else 819#define WTF_USE_ATSUI 1 820#endif 821#endif 822#endif 823 824#if PLATFORM(GTK) 825#if HAVE(PTHREAD_H) 826#define WTF_USE_PTHREADS 1 827#define HAVE_PTHREAD_RWLOCK 1 828#endif 829#endif 830 831#if PLATFORM(HAIKU) 832#define HAVE_POSIX_MEMALIGN 1 833#define WTF_USE_CURL 1 834#define WTF_USE_PTHREADS 1 835#define HAVE_PTHREAD_RWLOCK 1 836#define USE_SYSTEM_MALLOC 1 837#define ENABLE_NETSCAPE_PLUGIN_API 0 838#endif 839 840#if PLATFORM(BREWMP) 841#define USE_SYSTEM_MALLOC 1 842#endif 843 844#if PLATFORM(BREWMP_SIMULATOR) 845#define ENABLE_JIT 0 846#endif 847 848#if !defined(HAVE_ACCESSIBILITY) 849#if PLATFORM(IOS) || PLATFORM(MAC) || PLATFORM(WIN) || PLATFORM(GTK) || PLATFORM(CHROMIUM) 850#define HAVE_ACCESSIBILITY 1 851#endif 852#endif /* !defined(HAVE_ACCESSIBILITY) */ 853 854#if OS(UNIX) && !OS(SYMBIAN) 855#define HAVE_SIGNAL_H 1 856#endif 857 858#if !defined(HAVE_STRNSTR) 859#if OS(DARWIN) || OS(FREEBSD) 860#define HAVE_STRNSTR 1 861#endif 862#endif 863 864#if !OS(WINDOWS) && !OS(SOLARIS) && !OS(QNX) \ 865 && !OS(SYMBIAN) && !OS(HAIKU) && !OS(RVCT) \ 866 && !OS(ANDROID) && !PLATFORM(BREWMP) 867#define HAVE_TM_GMTOFF 1 868#define HAVE_TM_ZONE 1 869#define HAVE_TIMEGM 1 870#endif 871 872#if OS(DARWIN) 873 874#define HAVE_ERRNO_H 1 875#define HAVE_LANGINFO_H 1 876#define HAVE_MMAP 1 877#define HAVE_MERGESORT 1 878#define HAVE_SBRK 1 879#define HAVE_STRINGS_H 1 880#define HAVE_SYS_PARAM_H 1 881#define HAVE_SYS_TIME_H 1 882#define HAVE_SYS_TIMEB_H 1 883#define WTF_USE_ACCELERATE 1 884 885#if !defined(TARGETING_TIGER) && !defined(TARGETING_LEOPARD) 886 887#define HAVE_DISPATCH_H 1 888#define HAVE_HOSTED_CORE_ANIMATION 1 889 890#if !PLATFORM(IOS) 891#define HAVE_MADV_FREE_REUSE 1 892#define HAVE_MADV_FREE 1 893#define HAVE_PTHREAD_SETNAME_NP 1 894#endif 895 896#endif 897 898#if PLATFORM(IOS) 899#define HAVE_MADV_FREE 1 900#endif 901 902#elif OS(WINDOWS) 903 904#if OS(WINCE) 905#define HAVE_ERRNO_H 0 906#else 907#define HAVE_SYS_TIMEB_H 1 908#define HAVE_ALIGNED_MALLOC 1 909#define HAVE_ISDEBUGGERPRESENT 1 910#endif 911#define HAVE_VIRTUALALLOC 1 912 913#elif OS(SYMBIAN) 914 915#define HAVE_ERRNO_H 1 916#define HAVE_MMAP 0 917#define HAVE_SBRK 1 918 919#define HAVE_SYS_TIME_H 1 920#define HAVE_STRINGS_H 1 921 922#if !COMPILER(RVCT) 923#define HAVE_SYS_PARAM_H 1 924#endif 925 926#elif PLATFORM(BREWMP) 927 928#define HAVE_ERRNO_H 1 929 930#elif OS(QNX) 931 932#define HAVE_ERRNO_H 1 933#define HAVE_MMAP 1 934#define HAVE_SBRK 1 935#define HAVE_STRINGS_H 1 936#define HAVE_SYS_PARAM_H 1 937#define HAVE_SYS_TIME_H 1 938 939#elif OS(ANDROID) 940 941#define HAVE_ERRNO_H 1 942#define HAVE_LANGINFO_H 0 943#define HAVE_MMAP 1 944#define HAVE_SBRK 1 945#define HAVE_STRINGS_H 1 946#define HAVE_SYS_PARAM_H 1 947#define HAVE_SYS_TIME_H 1 948 949#else 950 951/* FIXME: is this actually used or do other platforms generate their own config.h? */ 952 953#define HAVE_ERRNO_H 1 954/* As long as Haiku doesn't have a complete support of locale this will be disabled. */ 955#if !OS(HAIKU) 956#define HAVE_LANGINFO_H 1 957#endif 958#define HAVE_MMAP 1 959#define HAVE_SBRK 1 960#define HAVE_STRINGS_H 1 961#define HAVE_SYS_PARAM_H 1 962#define HAVE_SYS_TIME_H 1 963 964#endif 965 966/* ENABLE macro defaults */ 967 968#if PLATFORM(QT) 969/* We must not customize the global operator new and delete for the Qt port. */ 970#define ENABLE_GLOBAL_FASTMALLOC_NEW 0 971#if !OS(UNIX) || OS(SYMBIAN) 972#define USE_SYSTEM_MALLOC 1 973#endif 974#endif 975 976/* fastMalloc match validation allows for runtime verification that 977 new is matched by delete, fastMalloc is matched by fastFree, etc. */ 978#if !defined(ENABLE_FAST_MALLOC_MATCH_VALIDATION) 979#define ENABLE_FAST_MALLOC_MATCH_VALIDATION 0 980#endif 981 982#if !defined(ENABLE_ICONDATABASE) 983#define ENABLE_ICONDATABASE 1 984#endif 985 986#if !defined(ENABLE_DATABASE) 987#define ENABLE_DATABASE 1 988#endif 989 990#if !defined(ENABLE_JAVASCRIPT_DEBUGGER) 991#define ENABLE_JAVASCRIPT_DEBUGGER 1 992#endif 993 994#if !defined(ENABLE_FTPDIR) 995#define ENABLE_FTPDIR 1 996#endif 997 998#if !defined(ENABLE_CONTEXT_MENUS) 999#define ENABLE_CONTEXT_MENUS 1 1000#endif 1001 1002#if !defined(ENABLE_DRAG_SUPPORT) 1003#define ENABLE_DRAG_SUPPORT 1 1004#endif 1005 1006#if !defined(ENABLE_DATA_TRANSFER_ITEMS) 1007#define ENABLE_DATA_TRANSFER_ITEMS 0 1008#endif 1009 1010#if !defined(ENABLE_DASHBOARD_SUPPORT) 1011#define ENABLE_DASHBOARD_SUPPORT 0 1012#endif 1013 1014#if !defined(ENABLE_INSPECTOR) 1015#define ENABLE_INSPECTOR 1 1016#endif 1017 1018#if !defined(ENABLE_JAVA_BRIDGE) 1019#define ENABLE_JAVA_BRIDGE 0 1020#endif 1021 1022#if !defined(ENABLE_NETSCAPE_PLUGIN_API) 1023#define ENABLE_NETSCAPE_PLUGIN_API 1 1024#endif 1025 1026#if !defined(ENABLE_NETSCAPE_PLUGIN_METADATA_CACHE) 1027#define ENABLE_NETSCAPE_PLUGIN_METADATA_CACHE 0 1028#endif 1029 1030#if !defined(ENABLE_PURGEABLE_MEMORY) 1031#define ENABLE_PURGEABLE_MEMORY 0 1032#endif 1033 1034#if !defined(WTF_USE_PLUGIN_HOST_PROCESS) 1035#define WTF_USE_PLUGIN_HOST_PROCESS 0 1036#endif 1037 1038#if !defined(ENABLE_ORIENTATION_EVENTS) 1039#define ENABLE_ORIENTATION_EVENTS 0 1040#endif 1041 1042#if !defined(ENABLE_OPCODE_STATS) 1043#define ENABLE_OPCODE_STATS 0 1044#endif 1045 1046#if !defined(ENABLE_GLOBAL_FASTMALLOC_NEW) 1047#define ENABLE_GLOBAL_FASTMALLOC_NEW 1 1048#endif 1049 1050#define ENABLE_DEBUG_WITH_BREAKPOINT 0 1051#define ENABLE_SAMPLING_COUNTERS 0 1052#define ENABLE_SAMPLING_FLAGS 0 1053#define ENABLE_OPCODE_SAMPLING 0 1054#define ENABLE_CODEBLOCK_SAMPLING 0 1055#if ENABLE(CODEBLOCK_SAMPLING) && !ENABLE(OPCODE_SAMPLING) 1056#error "CODEBLOCK_SAMPLING requires OPCODE_SAMPLING" 1057#endif 1058#if ENABLE(OPCODE_SAMPLING) || ENABLE(SAMPLING_FLAGS) 1059#define ENABLE_SAMPLING_THREAD 1 1060#endif 1061 1062#if !defined(ENABLE_GEOLOCATION) 1063#define ENABLE_GEOLOCATION 0 1064#endif 1065 1066#if !defined(ENABLE_GESTURE_RECOGNIZER) 1067#define ENABLE_GESTURE_RECOGNIZER 0 1068#endif 1069 1070#if !defined(ENABLE_NOTIFICATIONS) 1071#define ENABLE_NOTIFICATIONS 0 1072#endif 1073 1074#if PLATFORM(IOS) 1075#define ENABLE_TEXT_CARET 0 1076#endif 1077 1078#if !defined(ENABLE_TEXT_CARET) 1079#define ENABLE_TEXT_CARET 1 1080#endif 1081 1082#if !defined(ENABLE_ON_FIRST_TEXTAREA_FOCUS_SELECT_ALL) 1083#define ENABLE_ON_FIRST_TEXTAREA_FOCUS_SELECT_ALL 0 1084#endif 1085 1086#if !defined(ENABLE_FULLSCREEN_API) 1087#define ENABLE_FULLSCREEN_API 0 1088#endif 1089 1090#if !defined(WTF_USE_JSVALUE64) && !defined(WTF_USE_JSVALUE32_64) 1091#if (CPU(X86_64) && (OS(UNIX) || OS(WINDOWS))) \ 1092 || (CPU(IA64) && !CPU(IA64_32)) \ 1093 || CPU(ALPHA) \ 1094 || CPU(SPARC64) \ 1095 || CPU(S390X) \ 1096 || CPU(PPC64) 1097#define WTF_USE_JSVALUE64 1 1098#else 1099#define WTF_USE_JSVALUE32_64 1 1100#endif 1101#endif /* !defined(WTF_USE_JSVALUE64) && !defined(WTF_USE_JSVALUE32_64) */ 1102 1103#if !defined(ENABLE_REPAINT_THROTTLING) 1104#define ENABLE_REPAINT_THROTTLING 0 1105#endif 1106 1107/* Disable the JIT on versions of GCC prior to 4.1 */ 1108#if !defined(ENABLE_JIT) && COMPILER(GCC) && !GCC_VERSION_AT_LEAST(4, 1, 0) 1109#define ENABLE_JIT 0 1110#endif 1111 1112/* JIT is not implemented for 64 bit on MSVC */ 1113#if !defined(ENABLE_JIT) && COMPILER(MSVC) && CPU(X86_64) 1114#define ENABLE_JIT 0 1115#endif 1116 1117/* The JIT is enabled by default on all x86, x64-64, ARM & MIPS platforms. */ 1118#if !defined(ENABLE_JIT) \ 1119 && (CPU(X86) || CPU(X86_64) || CPU(ARM) || CPU(MIPS)) \ 1120 && (OS(DARWIN) || !COMPILER(GCC) || GCC_VERSION_AT_LEAST(4, 1, 0)) \ 1121 && !OS(WINCE) 1122#define ENABLE_JIT 1 1123#endif 1124 1125/* Currently only implemented for JSVALUE64, only tested on PLATFORM(MAC) */ 1126#if ENABLE(JIT) && USE(JSVALUE64) && PLATFORM(MAC) 1127#define ENABLE_DFG_JIT 1 1128/* Enabled with restrictions to circumvent known performance regressions. */ 1129#define ENABLE_DFG_JIT_RESTRICTIONS 1 1130#endif 1131 1132/* Ensure that either the JIT or the interpreter has been enabled. */ 1133#if !defined(ENABLE_INTERPRETER) && !ENABLE(JIT) 1134#define ENABLE_INTERPRETER 1 1135#endif 1136#if !(ENABLE(JIT) || ENABLE(INTERPRETER)) 1137#error You have to have at least one execution model enabled to build JSC 1138#endif 1139 1140#if CPU(SH4) && PLATFORM(QT) 1141#define ENABLE_JIT 1 1142#define ENABLE_YARR 1 1143#define ENABLE_YARR_JIT 1 1144#define WTF_USE_JIT_STUB_ARGUMENT_REGISTER 1 1145#define ENABLE_ASSEMBLER 1 1146#endif 1147 1148/* Configure the JIT */ 1149#if ENABLE(JIT) 1150 #if CPU(ARM) 1151 #if !defined(ENABLE_JIT_USE_SOFT_MODULO) && WTF_ARM_ARCH_AT_LEAST(5) 1152 #define ENABLE_JIT_USE_SOFT_MODULO 1 1153 #endif 1154 #endif 1155 1156 #ifndef ENABLE_JIT_OPTIMIZE_CALL 1157 #define ENABLE_JIT_OPTIMIZE_CALL 1 1158 #endif 1159 #ifndef ENABLE_JIT_OPTIMIZE_NATIVE_CALL 1160 #define ENABLE_JIT_OPTIMIZE_NATIVE_CALL 1 1161 #endif 1162 #ifndef ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS 1163 #define ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS 1 1164 #endif 1165 #ifndef ENABLE_JIT_OPTIMIZE_METHOD_CALLS 1166 #define ENABLE_JIT_OPTIMIZE_METHOD_CALLS 1 1167 #endif 1168#endif 1169 1170#if CPU(X86) && COMPILER(MSVC) 1171#define JSC_HOST_CALL __fastcall 1172#elif CPU(X86) && COMPILER(GCC) 1173#define JSC_HOST_CALL __attribute__ ((fastcall)) 1174#else 1175#define JSC_HOST_CALL 1176#endif 1177 1178/* Configure the interpreter */ 1179#if COMPILER(GCC) || (RVCT_VERSION_AT_LEAST(4, 0, 0, 0) && defined(__GNUC__)) 1180#define HAVE_COMPUTED_GOTO 1 1181#endif 1182#if HAVE(COMPUTED_GOTO) && ENABLE(INTERPRETER) 1183#define ENABLE_COMPUTED_GOTO_INTERPRETER 1 1184#endif 1185 1186/* Regular Expression Tracing - Set to 1 to trace RegExp's in jsc. Results dumped at exit */ 1187#define ENABLE_REGEXP_TRACING 0 1188 1189/* Yet Another Regex Runtime - turned on by default for JIT enabled ports. */ 1190#if PLATFORM(CHROMIUM) 1191#define ENABLE_YARR_JIT 0 1192 1193#elif ENABLE(JIT) && !defined(ENABLE_YARR_JIT) 1194#define ENABLE_YARR_JIT 1 1195 1196/* Setting this flag compares JIT results with interpreter results. */ 1197#define ENABLE_YARR_JIT_DEBUG 0 1198#endif 1199 1200#if ENABLE(JIT) || ENABLE(YARR_JIT) 1201#define ENABLE_ASSEMBLER 1 1202#endif 1203/* Setting this flag prevents the assembler from using RWX memory; this may improve 1204 security but currectly comes at a significant performance cost. */ 1205#if PLATFORM(IOS) 1206#define ENABLE_ASSEMBLER_WX_EXCLUSIVE 1 1207#endif 1208 1209/* Pick which allocator to use; we only need an executable allocator if the assembler is compiled in. 1210 On x86-64 we use a single fixed mmap, on other platforms we mmap on demand. */ 1211#if ENABLE(ASSEMBLER) 1212#if CPU(X86_64) 1213#define ENABLE_EXECUTABLE_ALLOCATOR_FIXED 1 1214#else 1215#define ENABLE_EXECUTABLE_ALLOCATOR_DEMAND 1 1216#endif 1217#endif 1218 1219#if !defined(ENABLE_PAN_SCROLLING) && OS(WINDOWS) 1220#define ENABLE_PAN_SCROLLING 1 1221#endif 1222 1223#if !defined(ENABLE_SMOOTH_SCROLLING) 1224#define ENABLE_SMOOTH_SCROLLING 0 1225#endif 1226 1227#if !defined(ENABLE_WEB_ARCHIVE) 1228#define ENABLE_WEB_ARCHIVE 0 1229#endif 1230 1231/* Use the QXmlStreamReader implementation for XMLDocumentParser */ 1232/* Use the QXmlQuery implementation for XSLTProcessor */ 1233#if PLATFORM(QT) 1234#define WTF_USE_QXMLSTREAM 1 1235#define WTF_USE_QXMLQUERY 1 1236#endif 1237 1238#if PLATFORM(MAC) 1239/* Complex text framework */ 1240#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) 1241#define WTF_USE_ATSUI 0 1242#define WTF_USE_CORE_TEXT 1 1243#else 1244#define WTF_USE_ATSUI 1 1245#define WTF_USE_CORE_TEXT 0 1246#endif 1247#endif 1248 1249/* Accelerated compositing */ 1250#if (PLATFORM(MAC) && !defined(BUILDING_ON_TIGER)) || PLATFORM(IOS) || PLATFORM(QT) || (PLATFORM(WIN) && !OS(WINCE) &&!defined(WIN_CAIRO)) 1251#define WTF_USE_ACCELERATED_COMPOSITING 1 1252#endif 1253 1254#if (PLATFORM(MAC) && !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD)) || PLATFORM(IOS) 1255#define WTF_USE_PROTECTION_SPACE_AUTH_CALLBACK 1 1256#endif 1257 1258#if PLATFORM(MAC) && !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD) 1259#define WTF_USE_AVFOUNDATION 1 1260#endif 1261 1262#if COMPILER(GCC) 1263#define WARN_UNUSED_RETURN __attribute__ ((warn_unused_result)) 1264#else 1265#define WARN_UNUSED_RETURN 1266#endif 1267 1268#if !ENABLE(NETSCAPE_PLUGIN_API) || (ENABLE(NETSCAPE_PLUGIN_API) && ((OS(UNIX) && (PLATFORM(QT) || PLATFORM(WX))) || PLATFORM(GTK))) 1269#define ENABLE_PLUGIN_PACKAGE_SIMPLE_HASH 1 1270#endif 1271 1272/* Set up a define for a common error that is intended to cause a build error -- thus the space after Error. */ 1273#define WTF_PLATFORM_CFNETWORK Error USE_macro_should_be_used_with_CFNETWORK 1274 1275#define ENABLE_JSC_ZOMBIES 0 1276 1277/* FIXME: Eventually we should enable this for all platforms and get rid of the define. */ 1278#if PLATFORM(MAC) || PLATFORM(WIN) || PLATFORM(QT) 1279#define WTF_USE_PLATFORM_STRATEGIES 1 1280#endif 1281 1282#if PLATFORM(WIN) 1283#define WTF_USE_CROSS_PLATFORM_CONTEXT_MENUS 1 1284#endif 1285 1286/* Geolocation request policy. pre-emptive policy is to acquire user permission before acquiring location. 1287 Client based implementations will have option to choose between pre-emptive and nonpre-emptive permission policy. 1288 pre-emptive permission policy is enabled by default for all client-based implementations. */ 1289#if ENABLE(CLIENT_BASED_GEOLOCATION) 1290#define WTF_USE_PREEMPT_GEOLOCATION_PERMISSION 1 1291#endif 1292 1293#if CPU(ARM_THUMB2) 1294#define ENABLE_BRANCH_COMPACTION 1 1295#endif 1296 1297#if ENABLE(GLIB_SUPPORT) 1298#include "GTypedefs.h" 1299#endif 1300 1301/* FIXME: This define won't be needed once #27551 is fully landed. However, 1302 since most ports try to support sub-project independence, adding new headers 1303 to WTF causes many ports to break, and so this way we can address the build 1304 breakages one port at a time. */ 1305#define WTF_USE_EXPORT_MACROS 0 1306 1307#if PLATFORM(QT) || PLATFORM(GTK) 1308#define WTF_USE_UNIX_DOMAIN_SOCKETS 1 1309#endif 1310 1311#endif /* WTF_Platform_h */ 1312