1/*
2 * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
3 * Copyright (C) 2007-2009 Torch Mobile, Inc.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
18 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 */
26
27#ifndef WTF_Platform_h
28#define WTF_Platform_h
29
30/* ==== PLATFORM handles OS, operating environment, graphics API, and
31 CPU. This macro will be phased out in favor of platform adaptation
32 macros, policy decision macros, and top-level port definitions. ==== */
33#define PLATFORM(WTF_FEATURE) (defined WTF_PLATFORM_##WTF_FEATURE && WTF_PLATFORM_##WTF_FEATURE)
34
35
36/* ==== Platform adaptation macros: these describe properties of the target environment. ==== */
37
38/* COMPILER() - the compiler being used to build the project */
39#define COMPILER(WTF_FEATURE) (defined WTF_COMPILER_##WTF_FEATURE && WTF_COMPILER_##WTF_FEATURE)
40/* COMPILER_SUPPORTS() - whether the compiler being used to build the project supports the given feature. */
41#define COMPILER_SUPPORTS(WTF_COMPILER_FEATURE) (defined WTF_COMPILER_SUPPORTS_##WTF_COMPILER_FEATURE && WTF_COMPILER_SUPPORTS_##WTF_COMPILER_FEATURE)
42
43/* CPU() - the target CPU architecture */
44#define CPU(WTF_FEATURE) (defined WTF_CPU_##WTF_FEATURE && WTF_CPU_##WTF_FEATURE)
45/* HAVE() - specific system features (headers, functions or similar) that are present or not */
46#define HAVE(WTF_FEATURE) (defined HAVE_##WTF_FEATURE && HAVE_##WTF_FEATURE)
47/* OS() - underlying operating system; only to be used for mandated low-level services like
48 virtual memory, not to choose a GUI toolkit */
49#define OS(WTF_FEATURE) (defined WTF_OS_##WTF_FEATURE && WTF_OS_##WTF_FEATURE)
50
51
52/* ==== Policy decision macros: these define policy choices for a particular port. ==== */
53
54/* USE() - use a particular third-party library or optional OS service */
55#define USE(WTF_FEATURE) (defined WTF_USE_##WTF_FEATURE && WTF_USE_##WTF_FEATURE)
56/* ENABLE() - turn on a specific feature of WebKit */
57#define ENABLE(WTF_FEATURE) (defined ENABLE_##WTF_FEATURE && ENABLE_##WTF_FEATURE)
58
59
60
61/* ==== COMPILER() - the compiler being used to build the project ==== */
62
63/* COMPILER(CLANG) - Clang */
64#if defined(__clang__)
65#define WTF_COMPILER_CLANG 1
66
67#define WTF_COMPILER_SUPPORTS_C_STATIC_ASSERT __has_feature(c_static_assert)
68#define WTF_COMPILER_SUPPORTS_CXX_STATIC_ASSERT __has_feature(cxx_static_assert)
69#endif
70
71/* COMPILER(MSVC) Microsoft Visual C++ */
72/* COMPILER(MSVC7) Microsoft Visual C++ v7 or lower*/
73#if defined(_MSC_VER)
74#define WTF_COMPILER_MSVC 1
75#if _MSC_VER < 1400
76#define WTF_COMPILER_MSVC7 1
77#endif
78#endif
79
80/* COMPILER(RVCT) - ARM RealView Compilation Tools */
81#if defined(__CC_ARM) || defined(__ARMCC__)
82#define WTF_COMPILER_RVCT 1
83#endif
84
85/* COMPILER(GCC) - GNU Compiler Collection */
86/* --gnu option of the RVCT compiler also defines __GNUC__ */
87#if defined(__GNUC__) && !COMPILER(RVCT)
88#define WTF_COMPILER_GCC 1
89#define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
90#define GCC_VERSION_AT_LEAST(major, minor, patch) (GCC_VERSION >= (major * 10000 + minor * 100 + patch))
91#else
92/* Define this for !GCC compilers, just so we can write things like GCC_VERSION_AT_LEAST(4, 1, 0). */
93#define GCC_VERSION_AT_LEAST(major, minor, patch) 0
94#endif
95
96/* Specific compiler features */
97#if COMPILER(GCC) && !COMPILER(CLANG)
98#if GCC_VERSION_AT_LEAST(4, 8, 0)
99#pragma GCC diagnostic ignored "-Wunused-local-typedefs"
100#endif
101#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
102/* C11 support */
103#define WTF_COMPILER_SUPPORTS_C_STATIC_ASSERT 1
104#endif
105#if defined(__GXX_EXPERIMENTAL_CXX0X__) || (defined(__cplusplus) && __cplusplus >= 201103L)
106/* C++11 support */
107#if GCC_VERSION_AT_LEAST(4, 3, 0)
108#define WTF_COMPILER_SUPPORTS_CXX_STATIC_ASSERT 1
109#endif
110#endif /* defined(__GXX_EXPERIMENTAL_CXX0X__) || (defined(__cplusplus) && __cplusplus >= 201103L) */
111#endif /* COMPILER(GCC) */
112
113
114/* COMPILER(MINGW) - MinGW GCC */
115/* COMPILER(MINGW64) - mingw-w64 GCC - only used as additional check to exclude mingw.org specific functions */
116#if defined(__MINGW32__)
117#define WTF_COMPILER_MINGW 1
118#include <_mingw.h> /* private MinGW header */
119 #if defined(__MINGW64_VERSION_MAJOR) /* best way to check for mingw-w64 vs mingw.org */
120 #define WTF_COMPILER_MINGW64 1
121 #endif /* __MINGW64_VERSION_MAJOR */
122#endif /* __MINGW32__ */
123
124/* COMPILER(SUNCC) - Sun CC compiler, also known as Sun Studio or Sun Pro */
125#if defined(__SUNPRO_CC) || defined(__SUNPRO_C)
126#define WTF_COMPILER_SUNCC 1
127#endif
128
129/* COMPILER(WINSCW) - CodeWarrior for Symbian emulator */
130#if defined(__WINSCW__)
131#define WTF_COMPILER_WINSCW 1
132#endif
133
134/* COMPILER(INTEL) - Intel C++ Compiler */
135#if defined(__INTEL_COMPILER)
136#define WTF_COMPILER_INTEL 1
137#endif
138
139/* COMPILER(ACC) - HP aCC */
140#if defined(__HP_aCC)
141#define WTF_COMPILER_ACC 1
142#endif
143
144/* COMPILER(XLC) - IBM XL */
145#if defined(__xlC__)
146#define WTF_COMPILER_XLC 1
147#endif
148
149
150/* ==== CPU() - the target CPU architecture ==== */
151
152/* This also defines CPU(BIG_ENDIAN) or CPU(MIDDLE_ENDIAN) or neither, as appropriate. */
153
154/* CPU(ALPHA) - DEC Alpha */
155#if defined(__alpha__)
156#define WTF_CPU_ALPHA 1
157#endif
158
159/* CPU(IA64) - Itanium / IA-64 */
160#if defined(__ia64__) || defined(__ia64) || defined(_M_IA64)
161#define WTF_CPU_IA64 1
162/* 32-bit mode on Itanium */
163#if !defined(__LP64__)
164#define WTF_CPU_IA64_32 1
165#endif
166/* Itanium can be both big- and little-endian;
167 we need to determine at compile time which one it is.
168 - HP's aCC compiler only compiles big-endian (so HP-UXi is always big-endian)
169 - GCC defines __BIG_ENDIAN__ for us (default on HP-UX)
170 - Linux is usually little-endian
171 - I've never seen AIX or Windows on IA-64, but they should be little-endian too
172*/
173#if defined(__BIG_ENDIAN__) || defined(__HP_aCC)
174# define WTF_CPU_BIG_ENDIAN 1
175#endif
176#endif
177
178/* CPU(HPPA) - a.k.a. PA-RISC */
179#if defined(__hppa) || defined(__hppa__)
180#define WTF_CPU_HPPA 1
181#define WTF_CPU_BIG_ENDIAN 1
182#endif
183
184/* CPU(PPC) - PowerPC 32-bit */
185#if defined(__ppc__) \
186 || defined(__PPC__) \
187 || defined(__powerpc__) \
188 || defined(__powerpc) \
189 || defined(__POWERPC__) \
190 || defined(_M_PPC) \
191 || defined(__PPC)
192#define WTF_CPU_PPC 1
193#ifndef __LITTLE_ENDIAN__
194#define WTF_CPU_BIG_ENDIAN 1
195#endif
196#endif
197
198/* CPU(PPC64) - PowerPC 64-bit */
199#if defined(__ppc64__) \
200 || defined(__PPC64__)
201#define WTF_CPU_PPC64 1
202#ifndef __LITTLE_ENDIAN__
203#define WTF_CPU_BIG_ENDIAN 1
204#endif
205#endif
206
207/* CPU(SH4) - SuperH SH-4 */
208#if defined(__SH4__)
209#define WTF_CPU_SH4 1
210#endif
211
212/* CPU(SPARC32) - SPARC 32-bit */
213#if defined(__sparc) && !defined(__arch64__) || defined(__sparcv8)
214#define WTF_CPU_SPARC32 1
215#define WTF_CPU_BIG_ENDIAN 1
216#endif
217
218/* CPU(SPARC64) - SPARC 64-bit */
219#if defined(__sparc__) && defined(__arch64__) || defined (__sparcv9)
220#define WTF_CPU_SPARC64 1
221#define WTF_CPU_BIG_ENDIAN 1
222#endif
223
224/* CPU(SPARC) - any SPARC, true for CPU(SPARC32) and CPU(SPARC64) */
225#if CPU(SPARC32) || CPU(SPARC64)
226#define WTF_CPU_SPARC 1
227#endif
228
229/* CPU(X86) - i386 / x86 32-bit */
230#if defined(__i386__) \
231 || defined(i386) \
232 || defined(_M_IX86) \
233 || defined(_X86_) \
234 || defined(__THW_INTEL)
235#define WTF_CPU_X86 1
236#endif
237
238/* CPU(X86_64) - AMD64 / Intel64 / x86_64 64-bit */
239#if defined(__x86_64__) \
240 || defined(_M_X64)
241#define WTF_CPU_X86_64 1
242
243#if defined(__ILP32__)
244#define WTF_CPU_X32 1
245#endif
246
247#endif
248
249/* 64-bit mode on AIX */
250#ifdef __64BIT__
251#define WTF_CPU_AIX64 1
252#endif
253
254/* CPU(AARCH64) - AArch64 */
255#if defined(__aarch64__) || defined(_M_ARM64)
256#define WTF_CPU_AARCH64 1
257#if defined(__AARCH64EB__)
258#define WTF_CPU_BIG_ENDIAN 1
259#endif
260#endif
261
262/* CPU(ARM) - ARM, any version*/
263#if defined(arm) \
264 || defined(__arm__) \
265 || defined(__MARM__)
266#define WTF_CPU_ARM 1
267
268#if defined(__ARMEB__)
269#define WTF_CPU_BIG_ENDIAN 1
270
271#elif !defined(__ARM_EABI__) \
272 && !defined(__EABI__) \
273 && !defined(__VFP_FP__) \
274 && !defined(ANDROID)
275#define WTF_CPU_MIDDLE_ENDIAN 1
276
277#endif
278
279#define WTF_ARM_ARCH_AT_LEAST(N) (CPU(ARM) && WTF_ARM_ARCH_VERSION >= N)
280
281/* Set WTF_ARM_ARCH_VERSION */
282#if defined(__ARM_ARCH_4__) \
283 || defined(__ARM_ARCH_4T__) \
284 || defined(__MARM_ARMV4__) \
285 || defined(_ARMV4I_)
286#define WTF_ARM_ARCH_VERSION 4
287
288#elif defined(__ARM_ARCH_5__) \
289 || defined(__ARM_ARCH_5T__) \
290 || defined(__ARM_ARCH_5E__) \
291 || defined(__ARM_ARCH_5TE__) \
292 || defined(__ARM_ARCH_5TEJ__) \
293 || defined(__MARM_ARMV5__)
294#define WTF_ARM_ARCH_VERSION 5
295
296#elif defined(__ARM_ARCH_6__) \
297 || defined(__ARM_ARCH_6J__) \
298 || defined(__ARM_ARCH_6K__) \
299 || defined(__ARM_ARCH_6Z__) \
300 || defined(__ARM_ARCH_6ZK__) \
301 || defined(__ARM_ARCH_6T2__) \
302 || defined(__ARMV6__)
303#define WTF_ARM_ARCH_VERSION 6
304
305#elif defined(__ARM_ARCH_7A__) \
306 || defined(__ARM_ARCH_7R__)
307#define WTF_ARM_ARCH_VERSION 7
308
309/* RVCT sets _TARGET_ARCH_ARM */
310#elif defined(__TARGET_ARCH_ARM)
311#define WTF_ARM_ARCH_VERSION __TARGET_ARCH_ARM
312
313#else
314#define WTF_ARM_ARCH_VERSION 0
315
316#endif
317
318/* Set WTF_THUMB_ARCH_VERSION */
319#if defined(__ARM_ARCH_4T__)
320#define WTF_THUMB_ARCH_VERSION 1
321
322#elif defined(__ARM_ARCH_5T__) \
323 || defined(__ARM_ARCH_5TE__) \
324 || defined(__ARM_ARCH_5TEJ__)
325#define WTF_THUMB_ARCH_VERSION 2
326
327#elif defined(__ARM_ARCH_6J__) \
328 || defined(__ARM_ARCH_6K__) \
329 || defined(__ARM_ARCH_6Z__) \
330 || defined(__ARM_ARCH_6ZK__) \
331 || defined(__ARM_ARCH_6M__)
332#define WTF_THUMB_ARCH_VERSION 3
333
334#elif defined(__ARM_ARCH_6T2__) \
335 || defined(__ARM_ARCH_7__) \
336 || defined(__ARM_ARCH_7A__) \
337 || defined(__ARM_ARCH_7R__) \
338 || defined(__ARM_ARCH_7M__)
339#define WTF_THUMB_ARCH_VERSION 4
340
341/* RVCT sets __TARGET_ARCH_THUMB */
342#elif defined(__TARGET_ARCH_THUMB)
343#define WTF_THUMB_ARCH_VERSION __TARGET_ARCH_THUMB
344
345#else
346#define WTF_THUMB_ARCH_VERSION 0
347#endif
348
349
350/* CPU(ARMV5_OR_LOWER) - ARM instruction set v5 or earlier */
351/* On ARMv5 and below the natural alignment is required.
352 And there are some other differences for v5 or earlier. */
353#if !defined(ARMV5_OR_LOWER) && !WTF_ARM_ARCH_AT_LEAST(6)
354#define WTF_CPU_ARMV5_OR_LOWER 1
355#endif
356
357
358/* CPU(ARM_TRADITIONAL) - Thumb2 is not available, only traditional ARM (v4 or greater) */
359/* CPU(ARM_THUMB2) - Thumb2 instruction set is available */
360/* Only one of these will be defined. */
361#if !defined(WTF_CPU_ARM_TRADITIONAL) && !defined(WTF_CPU_ARM_THUMB2)
362# if defined(thumb2) || defined(__thumb2__) \
363 || ((defined(__thumb) || defined(__thumb__)) && WTF_THUMB_ARCH_VERSION == 4)
364# define WTF_CPU_ARM_TRADITIONAL 0
365# define WTF_CPU_ARM_THUMB2 1
366# elif WTF_ARM_ARCH_AT_LEAST(4)
367# define WTF_CPU_ARM_TRADITIONAL 1
368# define WTF_CPU_ARM_THUMB2 0
369# else
370# error "Not supported ARM architecture"
371# endif
372#elif CPU(ARM_TRADITIONAL) && CPU(ARM_THUMB2) /* Sanity Check */
373# error "Cannot use both of WTF_CPU_ARM_TRADITIONAL and WTF_CPU_ARM_THUMB2 platforms"
374#endif /* !defined(WTF_CPU_ARM_TRADITIONAL) && !defined(WTF_CPU_ARM_THUMB2) */
375
376#endif /* ARM */
377
378#if (defined(mips) || defined(__mips__) || defined(MIPS) || defined(_MIPS_))
379#define WTF_CPU_MIPS 1
380#include <sgidefs.h>
381#if defined(__MIPSEB__)
382#define WTF_CPU_BIG_ENDIAN 1
383#endif
384/* CPU(MIPS64) - MIPS 64-bit both BIG and LITTLE endian */
385#if defined(_MIPS_SIM_ABI64) && (_MIPS_SIM == _MIPS_SIM_ABI64)
386#define WTF_CPU_MIPS64 1
387#endif
388
389/* CPU(MIPSN32) - MIPS N32 ABI both BIG and LITTLE endian */
390#if defined(_MIPS_SIM_ABIN32) && (_MIPS_SIM == _MIPS_SIM_ABIN32)
391#define WTF_CPU_MIPSN32 1
392#endif
393
394/* CPU(MIPS32) - MIPS O32 ABI both BIG and LITTLE endian */
395#if defined(_MIPS_SIM_ABI32) && (_MIPS_SIM == _MIPS_SIM_ABI32)
396#define WTF_CPU_MIPS32 1
397#endif
398#endif /* __mips__ */
399
400/* CPU(RISCV64) - RISC-V 64-bit */
401#if defined(__riscv) && __riscv_xlen == 64
402#define WTF_CPU_RISCV64 1
403#endif
404
405/* CPU(RISCV32) - RISC-V 32-bit */
406#if defined(__riscv) && __riscv_xlen == 32
407#define WTF_CPU_RISCV32 1
408#endif
409
410/* ==== OS() - underlying operating system; only to be used for mandated low-level services like
411 virtual memory, not to choose a GUI toolkit ==== */
412
413/* OS(ANDROID) - Android */
414#ifdef ANDROID
415#define WTF_OS_ANDROID 1
416#endif
417
418/* OS(AIX) - AIX */
419#ifdef _AIX
420#define WTF_OS_AIX 1
421#endif
422
423/* OS(DARWIN) - Any Darwin-based OS, including Mac OS X and iPhone OS */
424#ifdef __APPLE__
425#define WTF_OS_DARWIN 1
426
427/* FIXME: BUILDING_ON_.., and TARGETING... macros should be folded into the OS() system */
428#include <AvailabilityMacros.h>
429#if !defined(MAC_OS_X_VERSION_10_5) || MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5
430#define BUILDING_ON_TIGER 1
431#elif !defined(MAC_OS_X_VERSION_10_6) || MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_6
432#define BUILDING_ON_LEOPARD 1
433#elif !defined(MAC_OS_X_VERSION_10_7) || MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_7
434#define BUILDING_ON_SNOW_LEOPARD 1
435#endif
436#if !defined(MAC_OS_X_VERSION_10_5) || MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5
437#define TARGETING_TIGER 1
438#elif !defined(MAC_OS_X_VERSION_10_6) || MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_6
439#define TARGETING_LEOPARD 1
440#elif !defined(MAC_OS_X_VERSION_10_7) || MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_7
441#define TARGETING_SNOW_LEOPARD 1
442#endif
443#include <TargetConditionals.h>
444
445#endif
446
447/* OS(IPHONE_OS) - iPhone OS */
448/* OS(MAC_OS_X) - Mac OS X (not including iPhone OS) */
449#if OS(DARWIN) && ((defined(TARGET_OS_EMBEDDED) && TARGET_OS_EMBEDDED) \
450 || (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE) \
451 || (defined(TARGET_IPHONE_SIMULATOR) && TARGET_IPHONE_SIMULATOR))
452#define WTF_OS_IPHONE_OS 1
453#elif OS(DARWIN) && defined(TARGET_OS_MAC) && TARGET_OS_MAC
454#define WTF_OS_MAC_OS_X 1
455#endif
456
457/* OS(FREEBSD) - FreeBSD */
458#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__FreeBSD_kernel__)
459#define WTF_OS_FREEBSD 1
460#endif
461
462/* OS(HAIKU) - Haiku */
463#ifdef __HAIKU__
464#define WTF_OS_HAIKU 1
465#endif
466
467/* OS(HPUX) - HP-UX */
468#if defined(hpux) || defined(__hpux)
469#define WTF_OS_HPUX 1
470#ifndef MAP_ANON
471#define MAP_ANON MAP_ANONYMOUS
472#endif
473#endif
474
475/* OS(LINUX) - Linux */
476#ifdef __linux__
477#define WTF_OS_LINUX 1
478#endif
479
480/* OS(NETBSD) - NetBSD */
481#if defined(__NetBSD__)
482#define WTF_PLATFORM_NETBSD 1
483#endif
484
485/* OS(OPENBSD) - OpenBSD */
486#ifdef __OpenBSD__
487#define WTF_OS_OPENBSD 1
488#endif
489
490/* OS(QNX) - QNX */
491#if defined(__QNXNTO__)
492#define WTF_OS_QNX 1
493#endif
494
495/* OS(SOLARIS) - Solaris */
496#if defined(sun) || defined(__sun)
497#define WTF_OS_SOLARIS 1
498#endif
499
500/* OS(WINCE) - Windows CE; note that for this platform OS(WINDOWS) is also defined */
501#if defined(_WIN32_WCE)
502#define WTF_OS_WINCE 1
503#endif
504
505/* OS(WINDOWS) - Any version of Windows */
506#if defined(WIN32) || defined(_WIN32)
507#define WTF_OS_WINDOWS 1
508#endif
509
510/* OS(SYMBIAN) - Symbian */
511#if defined (__SYMBIAN32__)
512/* we are cross-compiling, it is not really windows */
513#undef WTF_OS_WINDOWS
514#undef WTF_PLATFORM_WIN
515#define WTF_OS_SYMBIAN 1
516#endif
517
518/* OS(UNIX) - Any Unix-like system */
519#if OS(AIX) \
520 || OS(ANDROID) \
521 || OS(DARWIN) \
522 || OS(FREEBSD) \
523 || OS(HAIKU) \
524 || OS(HPUX) \
525 || OS(LINUX) \
526 || OS(NETBSD) \
527 || OS(OPENBSD) \
528 || OS(QNX) \
529 || OS(SOLARIS) \
530 || OS(SYMBIAN) \
531 || defined(unix) \
532 || defined(__unix) \
533 || defined(__unix__)
534#define WTF_OS_UNIX 1
535
536#endif
537
538/* Operating environments */
539
540/* FIXME: these are all mixes of OS, operating environment and policy choices. */
541/* PLATFORM(CHROMIUM) */
542/* PLATFORM(QT) */
543/* PLATFORM(WX) */
544/* PLATFORM(GTK) */
545/* PLATFORM(HAIKU) */
546/* PLATFORM(MAC) */
547/* PLATFORM(WIN) */
548#if defined(BUILDING_CHROMIUM__)
549#define WTF_PLATFORM_CHROMIUM 1
550#elif defined(BUILDING_QT__)
551#define WTF_PLATFORM_QT 1
552#elif defined(BUILDING_WX__)
553#define WTF_PLATFORM_WX 1
554#elif defined(BUILDING_GTK__)
555#define WTF_PLATFORM_GTK 1
556#elif defined(BUILDING_HAIKU__)
557#define WTF_PLATFORM_HAIKU 1
558#elif OS(DARWIN)
559#define WTF_PLATFORM_MAC 1
560#elif OS(WINDOWS)
561#define WTF_PLATFORM_WIN 1
562#endif
563
564#if !PLATFORM(QT)
565/* PLATFORM(IPHONE) */
566/* FIXME: this is sometimes used as an OS switch and sometimes for higher-level things */
567#if (defined(TARGET_OS_EMBEDDED) && TARGET_OS_EMBEDDED) || (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE)
568#define WTF_PLATFORM_IPHONE 1
569#endif
570
571/* PLATFORM(IPHONE_SIMULATOR) */
572#if defined(TARGET_IPHONE_SIMULATOR) && TARGET_IPHONE_SIMULATOR
573#define WTF_PLATFORM_IPHONE 1
574#define WTF_PLATFORM_IPHONE_SIMULATOR 1
575#else
576#define WTF_PLATFORM_IPHONE_SIMULATOR 0
577#endif
578
579#if !defined(WTF_PLATFORM_IPHONE)
580#define WTF_PLATFORM_IPHONE 0
581#endif
582#endif
583
584/* PLATFORM(ANDROID) */
585/* FIXME: this is sometimes used as an OS() switch, and other times to drive
586 policy choices */
587#if defined(ANDROID)
588#define WTF_PLATFORM_ANDROID 1
589#endif
590
591/* Graphics engines */
592
593/* PLATFORM(CG) and PLATFORM(CI) */
594#if PLATFORM(MAC) || PLATFORM(IPHONE)
595#define WTF_PLATFORM_CG 1
596#endif
597#if PLATFORM(MAC) && !PLATFORM(IPHONE)
598#define WTF_PLATFORM_CI 1
599#endif
600
601/* PLATFORM(SKIA) for Win/Linux, CG/CI for Mac */
602#if PLATFORM(CHROMIUM)
603#define ENABLE_HISTORY_ALWAYS_ASYNC 1
604#if OS(DARWIN)
605#define WTF_PLATFORM_CG 1
606#define WTF_PLATFORM_CI 1
607#define WTF_USE_ATSUI 1
608#define WTF_USE_CORE_TEXT 1
609#else
610#define WTF_PLATFORM_SKIA 1
611#endif
612#endif
613
614#if PLATFORM(GTK)
615#define WTF_PLATFORM_CAIRO 1
616#endif
617
618
619/* OS(WINCE) && PLATFORM(QT)
620 We can not determine the endianess at compile time. For
621 Qt for Windows CE the endianess is specified in the
622 device specific makespec
623*/
624#if OS(WINCE) && PLATFORM(QT)
625# include <QtGlobal>
626# undef WTF_CPU_BIG_ENDIAN
627# undef WTF_CPU_MIDDLE_ENDIAN
628# if Q_BYTE_ORDER == Q_BIG_ENDIAN
629# define WTF_CPU_BIG_ENDIAN 1
630# endif
631
632# include <ce_time.h>
633#endif
634
635#if (PLATFORM(IPHONE) || PLATFORM(MAC) || PLATFORM(WIN) || (PLATFORM(QT) && OS(DARWIN) && !ENABLE(SINGLE_THREADED))) && !defined(ENABLE_JSC_MULTIPLE_THREADS)
636#define ENABLE_JSC_MULTIPLE_THREADS 1
637#endif
638
639/* On Windows, use QueryPerformanceCounter by default */
640#if OS(WINDOWS)
641#define WTF_USE_QUERY_PERFORMANCE_COUNTER 1
642#endif
643
644#if OS(WINCE) && !PLATFORM(QT)
645#undef ENABLE_JSC_MULTIPLE_THREADS
646#define ENABLE_JSC_MULTIPLE_THREADS 0
647#define USE_SYSTEM_MALLOC 0
648#define ENABLE_ICONDATABASE 0
649#define ENABLE_JAVASCRIPT_DEBUGGER 0
650#define ENABLE_FTPDIR 0
651#define ENABLE_PAN_SCROLLING 0
652#define ENABLE_WML 1
653#define HAVE_ACCESSIBILITY 0
654
655#define NOMINMAX /* Windows min and max conflict with standard macros */
656#define NOSHLWAPI /* shlwapi.h not available on WinCe */
657
658/* MSDN documentation says these functions are provided with uspce.lib. But we cannot find this file. */
659#define __usp10__ /* disable "usp10.h" */
660
661#define _INC_ASSERT /* disable "assert.h" */
662#define assert(x)
663
664/* _countof is only included in CE6; for CE5 we need to define it ourself */
665#ifndef _countof
666#define _countof(x) (sizeof(x) / sizeof((x)[0]))
667#endif
668
669#endif /* OS(WINCE) && !PLATFORM(QT) */
670
671#if PLATFORM(QT)
672#define WTF_USE_QT4_UNICODE 1
673#elif OS(WINCE)
674#define WTF_USE_WINCE_UNICODE 1
675#elif PLATFORM(GTK)
676/* The GTK+ Unicode backend is configurable */
677#else
678#define WTF_USE_ICU_UNICODE 1
679#endif
680
681#if PLATFORM(MAC) && !PLATFORM(IPHONE)
682#define WTF_PLATFORM_CF 1
683#define WTF_USE_PTHREADS 1
684#define HAVE_PTHREAD_RWLOCK 1
685#if !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_TIGER) && CPU(X86_64)
686#define WTF_USE_PLUGIN_HOST_PROCESS 1
687#endif
688#if !defined(ENABLE_MAC_JAVA_BRIDGE)
689#define ENABLE_MAC_JAVA_BRIDGE 1
690#endif
691#if !defined(ENABLE_DASHBOARD_SUPPORT)
692#define ENABLE_DASHBOARD_SUPPORT 1
693#endif
694#define HAVE_READLINE 1
695#define HAVE_RUNLOOP_TIMER 1
696#endif /* PLATFORM(MAC) && !PLATFORM(IPHONE) */
697
698#if PLATFORM(CHROMIUM) && OS(DARWIN)
699#define WTF_PLATFORM_CF 1
700#define WTF_USE_PTHREADS 1
701#define HAVE_PTHREAD_RWLOCK 1
702#endif
703
704#if PLATFORM(QT) && OS(DARWIN)
705#define WTF_PLATFORM_CF 1
706#endif
707
708#if PLATFORM(IPHONE)
709#define ENABLE_CONTEXT_MENUS 0
710#define ENABLE_DRAG_SUPPORT 0
711#define ENABLE_FTPDIR 1
712#define ENABLE_GEOLOCATION 1
713#define ENABLE_ICONDATABASE 0
714#define ENABLE_INSPECTOR 0
715#define ENABLE_MAC_JAVA_BRIDGE 0
716#define ENABLE_NETSCAPE_PLUGIN_API 0
717#define ENABLE_ORIENTATION_EVENTS 1
718#define ENABLE_REPAINT_THROTTLING 1
719#define HAVE_READLINE 1
720#define WTF_PLATFORM_CF 1
721#endif
722
723#if OS(IPHONE_OS) && !PLATFORM(QT)
724#define WTF_USE_PTHREADS 1
725#define HAVE_PTHREAD_RWLOCK 1
726#endif
727
728#if PLATFORM(ANDROID)
729#if !PLATFORM(QT)
730#define WTF_USE_PTHREADS 1
731#define ENABLE_MAC_JAVA_BRIDGE 1
732#define ENABLE_JAVASCRIPT_DEBUGGER 0
733#endif /* !PLATFORM(QT) */
734#define WTF_PLATFORM_SGL 1
735#define USE_SYSTEM_MALLOC 1
736#define LOG_DISABLED 1
737/* Prevents Webkit from drawing the caret in textfields and textareas
738 This prevents unnecessary invals. */
739#define ENABLE_TEXT_CARET 1
740#endif /* PLATFORM(ANDROID) */
741
742#if PLATFORM(WIN)
743#define WTF_USE_WININET 1
744#endif
745
746#if PLATFORM(WX)
747#define ENABLE_ASSEMBLER 1
748#if OS(DARWIN)
749#define WTF_PLATFORM_CF 1
750#endif
751#endif
752
753#if PLATFORM(GTK)
754#if HAVE(PTHREAD_H)
755#define WTF_USE_PTHREADS 1
756#define HAVE_PTHREAD_RWLOCK 1
757#endif
758#endif
759
760#if PLATFORM(HAIKU)
761#define HAVE_POSIX_MEMALIGN 1
762#define WTF_USE_CURL 1
763#define WTF_USE_PTHREADS 1
764#define HAVE_PTHREAD_RWLOCK 1
765#define USE_SYSTEM_MALLOC 1
766#define ENABLE_NETSCAPE_PLUGIN_API 0
767#endif
768
769#if !defined(HAVE_ACCESSIBILITY)
770#if PLATFORM(IPHONE) || PLATFORM(MAC) || PLATFORM(WIN) || PLATFORM(GTK) || PLATFORM(CHROMIUM)
771#define HAVE_ACCESSIBILITY 1
772#endif
773#endif /* !defined(HAVE_ACCESSIBILITY) */
774
775#if OS(UNIX) && !OS(SYMBIAN)
776#define HAVE_SIGNAL_H 1
777#endif
778
779#if !OS(WINDOWS) && !OS(SOLARIS) && !OS(QNX) \
780 && !OS(SYMBIAN) && !OS(HAIKU) && !OS(RVCT) \
781 && !OS(ANDROID) && !OS(AIX) && !OS(HPUX)
782#define HAVE_TM_GMTOFF 1
783#define HAVE_TM_ZONE 1
784#define HAVE_TIMEGM 1
785#endif
786
787#if OS(DARWIN)
788
789#define HAVE_ERRNO_H 1
790#define HAVE_LANGINFO_H 1
791#define HAVE_MMAP 1
792#define HAVE_MERGESORT 1
793#define HAVE_SBRK 1
794#define HAVE_STRINGS_H 1
795#define HAVE_SYS_PARAM_H 1
796#define HAVE_SYS_TIME_H 1
797#define HAVE_SYS_TIMEB_H 1
798
799#if !defined(TARGETING_TIGER) && !defined(TARGETING_LEOPARD)
800
801#define HAVE_DISPATCH_H 1
802
803#if !PLATFORM(IPHONE)
804#define HAVE_MADV_FREE_REUSE 1
805#define HAVE_MADV_FREE 1
806#define HAVE_PTHREAD_SETNAME_NP 1
807#endif
808
809#endif
810
811#if PLATFORM(IPHONE)
812#define HAVE_MADV_FREE 1
813#endif
814
815#elif OS(WINDOWS)
816
817#if OS(WINCE)
818#define HAVE_ERRNO_H 0
819#else
820#define HAVE_SYS_TIMEB_H 1
821#endif
822#define HAVE_VIRTUALALLOC 1
823
824#elif OS(SYMBIAN)
825
826#define HAVE_ERRNO_H 1
827#define HAVE_MMAP 0
828#define HAVE_SBRK 1
829
830#define HAVE_SYS_TIME_H 1
831#define HAVE_STRINGS_H 1
832
833#if !COMPILER(RVCT)
834#define HAVE_SYS_PARAM_H 1
835#endif
836
837#elif OS(QNX)
838
839#define HAVE_ERRNO_H 1
840#define HAVE_MMAP 1
841#define HAVE_SBRK 1
842#define HAVE_STRINGS_H 1
843#define HAVE_SYS_PARAM_H 1
844#define HAVE_SYS_TIME_H 1
845
846#elif OS(ANDROID)
847
848#define HAVE_ERRNO_H 1
849#define HAVE_LANGINFO_H 0
850#define HAVE_MMAP 1
851#define HAVE_SBRK 1
852#define HAVE_STRINGS_H 1
853#define HAVE_SYS_PARAM_H 1
854#define HAVE_SYS_TIME_H 1
855
856#else
857
858/* FIXME: is this actually used or do other platforms generate their own config.h? */
859
860#define HAVE_ERRNO_H 1
861/* As long as Haiku doesn't have a complete support of locale this will be disabled. */
862#if !OS(HAIKU)
863#define HAVE_LANGINFO_H 1
864#endif
865#define HAVE_MMAP 1
866#define HAVE_SBRK 1
867#define HAVE_STRINGS_H 1
868#define HAVE_SYS_PARAM_H 1
869#define HAVE_SYS_TIME_H 1
870
871#endif
872
873/* ENABLE macro defaults */
874
875/* fastMalloc match validation allows for runtime verification that
876 new is matched by delete, fastMalloc is matched by fastFree, etc. */
877#if !defined(ENABLE_FAST_MALLOC_MATCH_VALIDATION)
878#define ENABLE_FAST_MALLOC_MATCH_VALIDATION 0
879#endif
880
881#if !defined(ENABLE_ICONDATABASE)
882#define ENABLE_ICONDATABASE 1
883#endif
884
885#if !defined(ENABLE_DATABASE)
886#define ENABLE_DATABASE 1
887#endif
888
889#if !defined(ENABLE_JAVASCRIPT_DEBUGGER)
890#define ENABLE_JAVASCRIPT_DEBUGGER 1
891#endif
892
893#if !defined(ENABLE_FTPDIR)
894#define ENABLE_FTPDIR 1
895#endif
896
897#if !defined(ENABLE_CONTEXT_MENUS)
898#define ENABLE_CONTEXT_MENUS 1
899#endif
900
901#if !defined(ENABLE_DRAG_SUPPORT)
902#define ENABLE_DRAG_SUPPORT 1
903#endif
904
905#if !defined(ENABLE_DASHBOARD_SUPPORT)
906#define ENABLE_DASHBOARD_SUPPORT 0
907#endif
908
909#if !defined(ENABLE_INSPECTOR)
910#define ENABLE_INSPECTOR 1
911#endif
912
913#if !defined(ENABLE_MAC_JAVA_BRIDGE)
914#define ENABLE_MAC_JAVA_BRIDGE 0
915#endif
916
917#if !defined(ENABLE_NETSCAPE_PLUGIN_API)
918#define ENABLE_NETSCAPE_PLUGIN_API 1
919#endif
920
921#if !defined(WTF_USE_PLUGIN_HOST_PROCESS)
922#define WTF_USE_PLUGIN_HOST_PROCESS 0
923#endif
924
925#if !defined(ENABLE_ORIENTATION_EVENTS)
926#define ENABLE_ORIENTATION_EVENTS 0
927#endif
928
929#if !defined(ENABLE_OPCODE_STATS)
930#define ENABLE_OPCODE_STATS 0
931#endif
932
933#define ENABLE_SAMPLING_COUNTERS 0
934#define ENABLE_SAMPLING_FLAGS 0
935#define ENABLE_OPCODE_SAMPLING 0
936#define ENABLE_CODEBLOCK_SAMPLING 0
937#if ENABLE(CODEBLOCK_SAMPLING) && !ENABLE(OPCODE_SAMPLING)
938#error "CODEBLOCK_SAMPLING requires OPCODE_SAMPLING"
939#endif
940#if ENABLE(OPCODE_SAMPLING) || ENABLE(SAMPLING_FLAGS)
941#define ENABLE_SAMPLING_THREAD 1
942#endif
943
944#if !defined(ENABLE_GEOLOCATION)
945#define ENABLE_GEOLOCATION 0
946#endif
947
948#if !defined(ENABLE_NOTIFICATIONS)
949#define ENABLE_NOTIFICATIONS 0
950#endif
951
952#if !defined(ENABLE_TEXT_CARET)
953#define ENABLE_TEXT_CARET 1
954#endif
955
956#if !defined(ENABLE_ON_FIRST_TEXTAREA_FOCUS_SELECT_ALL)
957#define ENABLE_ON_FIRST_TEXTAREA_FOCUS_SELECT_ALL 0
958#endif
959
960#if !defined(WTF_USE_JSVALUE64) && !defined(WTF_USE_JSVALUE32) && !defined(WTF_USE_JSVALUE32_64)
961#if (CPU(X86_64) && !CPU(X32) && (OS(UNIX) || OS(WINDOWS) || OS(SOLARIS) || OS(HPUX))) || (CPU(IA64) && !CPU(IA64_32)) || CPU(ALPHA) || CPU(AIX64) || CPU(SPARC64) || CPU(MIPS64) || CPU(AARCH64) || CPU(RISCV64)
962#define WTF_USE_JSVALUE64 1
963#elif CPU(ARM) || CPU(PPC64) || CPU(RISCV32)
964#define WTF_USE_JSVALUE32 1
965#elif OS(WINDOWS) && COMPILER(MINGW)
966/* Using JSVALUE32_64 causes padding/alignement issues for JITStubArg
967on MinGW. See https://bugs.webkit.org/show_bug.cgi?id=29268 */
968#define WTF_USE_JSVALUE32 1
969#else
970#define WTF_USE_JSVALUE32_64 1
971#endif
972#endif /* !defined(WTF_USE_JSVALUE64) && !defined(WTF_USE_JSVALUE32) && !defined(WTF_USE_JSVALUE32_64) */
973
974#if !defined(ENABLE_REPAINT_THROTTLING)
975#define ENABLE_REPAINT_THROTTLING 0
976#endif
977
978/* Disable JIT on x32 */
979#if CPU(X32)
980#define ENABLE_JIT 0
981#endif
982
983#if !defined(ENABLE_JIT)
984
985/* The JIT is tested & working on x86_64 Mac */
986#if CPU(X86_64) && PLATFORM(MAC)
987 #define ENABLE_JIT 1
988/* The JIT is tested & working on x86 Mac */
989#elif CPU(X86) && PLATFORM(MAC)
990 #define ENABLE_JIT 1
991 #define WTF_USE_JIT_STUB_ARGUMENT_VA_LIST 1
992#elif CPU(ARM_THUMB2) && PLATFORM(IPHONE)
993 #define ENABLE_JIT 1
994/* The JIT is tested & working on x86 Windows */
995#elif CPU(X86) && PLATFORM(WIN)
996 #define ENABLE_JIT 1
997#endif
998
999#if PLATFORM(QT)
1000#if CPU(X86_64) && OS(DARWIN)
1001 #define ENABLE_JIT 1
1002#elif CPU(X86) && OS(DARWIN)
1003 #define ENABLE_JIT 1
1004 #define WTF_USE_JIT_STUB_ARGUMENT_VA_LIST 1
1005#elif CPU(X86) && OS(WINDOWS) && COMPILER(MINGW) && GCC_VERSION >= 40100
1006 #define ENABLE_JIT 1
1007 #define WTF_USE_JIT_STUB_ARGUMENT_VA_LIST 1
1008#elif CPU(X86) && OS(WINDOWS) && COMPILER(MSVC)
1009 #define ENABLE_JIT 1
1010 #define WTF_USE_JIT_STUB_ARGUMENT_REGISTER 1
1011#elif CPU(X86) && OS(LINUX) && GCC_VERSION >= 40100
1012 #define ENABLE_JIT 1
1013 #define WTF_USE_JIT_STUB_ARGUMENT_VA_LIST 1
1014#elif CPU(X86_64) && OS(LINUX) && GCC_VERSION >= 40100
1015 #define ENABLE_JIT 1
1016#elif CPU(ARM_TRADITIONAL) && OS(LINUX)
1017 #define ENABLE_JIT 1
1018#endif
1019#endif /* PLATFORM(QT) */
1020
1021#endif /* !defined(ENABLE_JIT) */
1022
1023#if ENABLE(JIT)
1024#ifndef ENABLE_JIT_OPTIMIZE_CALL
1025#define ENABLE_JIT_OPTIMIZE_CALL 1
1026#endif
1027#ifndef ENABLE_JIT_OPTIMIZE_NATIVE_CALL
1028#define ENABLE_JIT_OPTIMIZE_NATIVE_CALL 1
1029#endif
1030#ifndef ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS
1031#define ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS 1
1032#endif
1033#ifndef ENABLE_JIT_OPTIMIZE_METHOD_CALLS
1034#define ENABLE_JIT_OPTIMIZE_METHOD_CALLS 1
1035#endif
1036#endif
1037
1038#if CPU(X86) && COMPILER(MSVC)
1039#define JSC_HOST_CALL __fastcall
1040#elif CPU(X86) && COMPILER(GCC)
1041#define JSC_HOST_CALL __attribute__ ((fastcall))
1042#else
1043#define JSC_HOST_CALL
1044#endif
1045
1046#if COMPILER(GCC) && !ENABLE(JIT)
1047#define HAVE_COMPUTED_GOTO 1
1048#endif
1049
1050#if ENABLE(JIT) && defined(COVERAGE)
1051 #define WTF_USE_INTERPRETER 0
1052#else
1053 #define WTF_USE_INTERPRETER 1
1054#endif
1055
1056/* Yet Another Regex Runtime. */
1057#if !defined(ENABLE_YARR_JIT)
1058
1059/* YARR supports x86 & x86-64, and has been tested on Mac and Windows. */
1060#if (CPU(X86) && PLATFORM(MAC)) \
1061 || (CPU(X86_64) && PLATFORM(MAC)) \
1062 || (CPU(ARM_THUMB2) && PLATFORM(IPHONE)) \
1063 || (CPU(X86) && PLATFORM(WIN))
1064#define ENABLE_YARR 1
1065#define ENABLE_YARR_JIT 1
1066#endif
1067
1068#if PLATFORM(QT)
1069#if (CPU(X86) && OS(WINDOWS) && COMPILER(MINGW) && GCC_VERSION >= 40100) \
1070 || (CPU(X86_64) && OS(WINDOWS) && COMPILER(MINGW64) && GCC_VERSION >= 40100) \
1071 || (CPU(X86) && OS(WINDOWS) && COMPILER(MSVC)) \
1072 || (CPU(X86) && OS(LINUX) && GCC_VERSION >= 40100) \
1073 || (CPU(X86_64) && OS(LINUX) && GCC_VERSION >= 40100) \
1074 || (CPU(ARM_TRADITIONAL) && OS(LINUX))
1075#define ENABLE_YARR 1
1076#define ENABLE_YARR_JIT 1
1077#endif
1078#endif
1079
1080#endif /* !defined(ENABLE_YARR_JIT) */
1081
1082/* Sanity Check */
1083#if ENABLE(YARR_JIT) && !ENABLE(YARR)
1084#error "YARR_JIT requires YARR"
1085#endif
1086
1087#if ENABLE(JIT) || ENABLE(YARR_JIT)
1088#define ENABLE_ASSEMBLER 1
1089#endif
1090/* Setting this flag prevents the assembler from using RWX memory; this may improve
1091 security but currectly comes at a significant performance cost. */
1092#if PLATFORM(IPHONE)
1093#define ENABLE_ASSEMBLER_WX_EXCLUSIVE 1
1094#else
1095#define ENABLE_ASSEMBLER_WX_EXCLUSIVE 0
1096#endif
1097
1098/* Pick which allocator to use; we only need an executable allocator if the assembler is compiled in.
1099 On x86-64 we use a single fixed mmap, on other platforms we mmap on demand. */
1100#if ENABLE(ASSEMBLER)
1101#if CPU(X86_64) && !COMPILER(MINGW64)
1102#define ENABLE_EXECUTABLE_ALLOCATOR_FIXED 1
1103#else
1104#define ENABLE_EXECUTABLE_ALLOCATOR_DEMAND 1
1105#endif
1106#endif
1107
1108#if !defined(ENABLE_PAN_SCROLLING) && OS(WINDOWS)
1109#define ENABLE_PAN_SCROLLING 1
1110#endif
1111
1112/* Use the QXmlStreamReader implementation for XMLTokenizer */
1113/* Use the QXmlQuery implementation for XSLTProcessor */
1114#if PLATFORM(QT)
1115#define WTF_USE_QXMLSTREAM 1
1116#define WTF_USE_QXMLQUERY 1
1117#endif
1118
1119#if !PLATFORM(QT)
1120#define WTF_USE_FONT_FAST_PATH 1
1121#endif
1122
1123/* Accelerated compositing */
1124#if PLATFORM(MAC)
1125#if !defined(BUILDING_ON_TIGER)
1126#define WTF_USE_ACCELERATED_COMPOSITING 1
1127#endif
1128#endif
1129
1130#if PLATFORM(IPHONE)
1131#define WTF_USE_ACCELERATED_COMPOSITING 1
1132#endif
1133
1134/* FIXME: Defining ENABLE_3D_RENDERING here isn't really right, but it's always used with
1135 with WTF_USE_ACCELERATED_COMPOSITING, and it allows the feature to be turned on and
1136 off in one place. */
1137#if PLATFORM(WIN)
1138#include "QuartzCorePresent.h"
1139#if QUARTZCORE_PRESENT
1140#define WTF_USE_ACCELERATED_COMPOSITING 1
1141#define ENABLE_3D_RENDERING 1
1142#endif
1143#endif
1144
1145#if COMPILER(GCC)
1146#define WARN_UNUSED_RETURN __attribute__ ((warn_unused_result))
1147#else
1148#define WARN_UNUSED_RETURN
1149#endif
1150
1151#if !ENABLE(NETSCAPE_PLUGIN_API) || (ENABLE(NETSCAPE_PLUGIN_API) && ((OS(UNIX) && (PLATFORM(QT) || PLATFORM(WX))) || PLATFORM(GTK)))
1152#define ENABLE_PLUGIN_PACKAGE_SIMPLE_HASH 1
1153#endif
1154
1155/* Set up a define for a common error that is intended to cause a build error -- thus the space after Error. */
1156#define WTF_PLATFORM_CFNETWORK Error USE_macro_should_be_used_with_CFNETWORK
1157
1158#define ENABLE_JSC_ZOMBIES 0
1159
1160#endif /* WTF_Platform_h */
1161

source code of qtscript/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h