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