]> git.saurik.com Git - apple/javascriptcore.git/blame - wtf/Platform.h
JavaScriptCore-576.tar.gz
[apple/javascriptcore.git] / wtf / Platform.h
CommitLineData
b37bf2e1 1/*
9dae56ea 2 * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
f9bf01c6 3 * Copyright (C) 2007-2009 Torch Mobile, Inc.
b37bf2e1
A
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
9dae56ea 24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
b37bf2e1
A
25 */
26
27#ifndef WTF_Platform_h
28#define WTF_Platform_h
29
f9bf01c6
A
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)
b37bf2e1 34
b37bf2e1 35
f9bf01c6
A
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/* CPU() - the target CPU architecture */
41#define CPU(WTF_FEATURE) (defined WTF_CPU_##WTF_FEATURE && WTF_CPU_##WTF_FEATURE)
42/* HAVE() - specific system features (headers, functions or similar) that are present or not */
43#define HAVE(WTF_FEATURE) (defined HAVE_##WTF_FEATURE && HAVE_##WTF_FEATURE)
44/* OS() - underlying operating system; only to be used for mandated low-level services like
45 virtual memory, not to choose a GUI toolkit */
46#define OS(WTF_FEATURE) (defined WTF_OS_##WTF_FEATURE && WTF_OS_##WTF_FEATURE)
47
48
49/* ==== Policy decision macros: these define policy choices for a particular port. ==== */
50
51/* USE() - use a particular third-party library or optional OS service */
52#define USE(WTF_FEATURE) (defined WTF_USE_##WTF_FEATURE && WTF_USE_##WTF_FEATURE)
53/* ENABLE() - turn on a specific feature of WebKit */
54#define ENABLE(WTF_FEATURE) (defined ENABLE_##WTF_FEATURE && ENABLE_##WTF_FEATURE)
55
56
57
58/* ==== COMPILER() - the compiler being used to build the project ==== */
59
60/* COMPILER(MSVC) Microsoft Visual C++ */
61/* COMPILER(MSVC7) Microsoft Visual C++ v7 or lower*/
62#if defined(_MSC_VER)
63#define WTF_COMPILER_MSVC 1
64#if _MSC_VER < 1400
65#define WTF_COMPILER_MSVC7 1
66#endif
67#endif
68
69/* COMPILER(RVCT) - ARM RealView Compilation Tools */
70#if defined(__CC_ARM) || defined(__ARMCC__)
71#define WTF_COMPILER_RVCT 1
72#endif
73
74/* COMPILER(GCC) - GNU Compiler Collection */
75/* --gnu option of the RVCT compiler also defines __GNUC__ */
76#if defined(__GNUC__) && !COMPILER(RVCT)
77#define WTF_COMPILER_GCC 1
78#define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
79#endif
80
81/* COMPILER(MINGW) - MinGW GCC */
82#if defined(MINGW) || defined(__MINGW32__)
83#define WTF_COMPILER_MINGW 1
84#endif
85
86/* COMPILER(WINSCW) - CodeWarrior for Symbian emulator */
87#if defined(__WINSCW__)
88#define WTF_COMPILER_WINSCW 1
89#endif
90
91
92
93/* ==== CPU() - the target CPU architecture ==== */
94
95/* This also defines CPU(BIG_ENDIAN) or CPU(MIDDLE_ENDIAN) or neither, as appropriate. */
96
97/* CPU(ALPHA) - DEC Alpha */
98#if defined(__alpha__)
99#define WTF_CPU_ALPHA 1
100#endif
101
102/* CPU(IA64) - Itanium / IA-64 */
103#if defined(__ia64__)
104#define WTF_CPU_IA64 1
105#endif
106
107/* CPU(PPC) - PowerPC 32-bit */
108#if defined(__ppc__) \
109 || defined(__PPC__) \
110 || defined(__powerpc__) \
111 || defined(__powerpc) \
112 || defined(__POWERPC__) \
113 || defined(_M_PPC) \
114 || defined(__PPC)
115#define WTF_CPU_PPC 1
116#define WTF_CPU_BIG_ENDIAN 1
117#endif
118
119/* CPU(PPC64) - PowerPC 64-bit */
120#if defined(__ppc64__) \
121 || defined(__PPC64__)
122#define WTF_CPU_PPC64 1
123#define WTF_CPU_BIG_ENDIAN 1
124#endif
125
126/* CPU(SH4) - SuperH SH-4 */
127#if defined(__SH4__)
128#define WTF_CPU_SH4 1
129#endif
130
131/* CPU(SPARC32) - SPARC 32-bit */
132#if defined(__sparc) && !defined(__arch64__) || defined(__sparcv8)
133#define WTF_CPU_SPARC32 1
134#define WTF_CPU_BIG_ENDIAN 1
135#endif
136
137/* CPU(SPARC64) - SPARC 64-bit */
138#if defined(__sparc__) && defined(__arch64__) || defined (__sparcv9)
139#define WTF_CPU_SPARC64 1
140#define WTF_CPU_BIG_ENDIAN 1
141#endif
142
143/* CPU(SPARC) - any SPARC, true for CPU(SPARC32) and CPU(SPARC64) */
144#if CPU(SPARC32) || CPU(SPARC64)
145#define WTF_CPU_SPARC
146#endif
147
148/* CPU(X86) - i386 / x86 32-bit */
149#if defined(__i386__) \
150 || defined(i386) \
151 || defined(_M_IX86) \
152 || defined(_X86_) \
153 || defined(__THW_INTEL)
154#define WTF_CPU_X86 1
155#endif
156
157/* CPU(X86_64) - AMD64 / Intel64 / x86_64 64-bit */
158#if defined(__x86_64__) \
159 || defined(_M_X64)
160#define WTF_CPU_X86_64 1
161#endif
162
163/* CPU(ARM) - ARM, any version*/
164#if defined(arm) \
165 || defined(__arm__)
166#define WTF_CPU_ARM 1
167
168#if defined(__ARMEB__)
169#define WTF_CPU_BIG_ENDIAN 1
170
171#elif !defined(__ARM_EABI__) \
172 && !defined(__EABI__) \
173 && !defined(__VFP_FP__) \
174 && !defined(ANDROID)
175#define WTF_CPU_MIDDLE_ENDIAN 1
176
177#endif
178
179#define WTF_ARM_ARCH_AT_LEAST(N) (CPU(ARM) && WTF_ARM_ARCH_VERSION >= N)
180
181/* Set WTF_ARM_ARCH_VERSION */
182#if defined(__ARM_ARCH_4__) \
183 || defined(__ARM_ARCH_4T__) \
184 || defined(__MARM_ARMV4__) \
185 || defined(_ARMV4I_)
186#define WTF_ARM_ARCH_VERSION 4
187
188#elif defined(__ARM_ARCH_5__) \
189 || defined(__ARM_ARCH_5T__) \
190 || defined(__ARM_ARCH_5E__) \
191 || defined(__ARM_ARCH_5TE__) \
192 || defined(__ARM_ARCH_5TEJ__) \
193 || defined(__MARM_ARMV5__)
194#define WTF_ARM_ARCH_VERSION 5
195
196#elif defined(__ARM_ARCH_6__) \
197 || defined(__ARM_ARCH_6J__) \
198 || defined(__ARM_ARCH_6K__) \
199 || defined(__ARM_ARCH_6Z__) \
200 || defined(__ARM_ARCH_6ZK__) \
201 || defined(__ARM_ARCH_6T2__) \
202 || defined(__ARMV6__)
203#define WTF_ARM_ARCH_VERSION 6
204
205#elif defined(__ARM_ARCH_7A__) \
206 || defined(__ARM_ARCH_7R__)
207#define WTF_ARM_ARCH_VERSION 7
208
209/* RVCT sets _TARGET_ARCH_ARM */
210#elif defined(__TARGET_ARCH_ARM)
211#define WTF_ARM_ARCH_VERSION __TARGET_ARCH_ARM
212
213#else
214#define WTF_ARM_ARCH_VERSION 0
215
216#endif
217
218/* Set WTF_THUMB_ARCH_VERSION */
219#if defined(__ARM_ARCH_4T__)
220#define WTF_THUMB_ARCH_VERSION 1
221
222#elif defined(__ARM_ARCH_5T__) \
223 || defined(__ARM_ARCH_5TE__) \
224 || defined(__ARM_ARCH_5TEJ__)
225#define WTF_THUMB_ARCH_VERSION 2
226
227#elif defined(__ARM_ARCH_6J__) \
228 || defined(__ARM_ARCH_6K__) \
229 || defined(__ARM_ARCH_6Z__) \
230 || defined(__ARM_ARCH_6ZK__) \
231 || defined(__ARM_ARCH_6M__)
232#define WTF_THUMB_ARCH_VERSION 3
233
234#elif defined(__ARM_ARCH_6T2__) \
235 || defined(__ARM_ARCH_7__) \
236 || defined(__ARM_ARCH_7A__) \
237 || defined(__ARM_ARCH_7R__) \
238 || defined(__ARM_ARCH_7M__)
239#define WTF_THUMB_ARCH_VERSION 4
240
241/* RVCT sets __TARGET_ARCH_THUMB */
242#elif defined(__TARGET_ARCH_THUMB)
243#define WTF_THUMB_ARCH_VERSION __TARGET_ARCH_THUMB
244
245#else
246#define WTF_THUMB_ARCH_VERSION 0
247#endif
248
249
250/* CPU(ARMV5_OR_LOWER) - ARM instruction set v5 or earlier */
251/* On ARMv5 and below the natural alignment is required.
252 And there are some other differences for v5 or earlier. */
253#if !defined(ARMV5_OR_LOWER) && !WTF_ARM_ARCH_AT_LEAST(6)
254#define WTF_CPU_ARMV5_OR_LOWER 1
255#endif
256
257
258/* CPU(ARM_TRADITIONAL) - Thumb2 is not available, only traditional ARM (v4 or greater) */
259/* CPU(ARM_THUMB2) - Thumb2 instruction set is available */
260/* Only one of these will be defined. */
261#if !defined(WTF_CPU_ARM_TRADITIONAL) && !defined(WTF_CPU_ARM_THUMB2)
262# if defined(thumb2) || defined(__thumb2__) \
263 || ((defined(__thumb) || defined(__thumb__)) && WTF_THUMB_ARCH_VERSION == 4)
264# define WTF_CPU_ARM_TRADITIONAL 0
265# define WTF_CPU_ARM_THUMB2 1
266# elif WTF_ARM_ARCH_AT_LEAST(4)
267# define WTF_CPU_ARM_TRADITIONAL 1
268# define WTF_CPU_ARM_THUMB2 0
269# else
270# error "Not supported ARM architecture"
271# endif
272#elif CPU(ARM_TRADITIONAL) && CPU(ARM_THUMB2) /* Sanity Check */
273# error "Cannot use both of WTF_CPU_ARM_TRADITIONAL and WTF_CPU_ARM_THUMB2 platforms"
274#endif /* !defined(WTF_CPU_ARM_TRADITIONAL) && !defined(WTF_CPU_ARM_THUMB2) */
275
276#endif /* ARM */
277
278
279
280/* ==== OS() - underlying operating system; only to be used for mandated low-level services like
281 virtual memory, not to choose a GUI toolkit ==== */
282
283/* OS(ANDROID) - Android */
284#ifdef ANDROID
285#define WTF_OS_ANDROID 1
286#endif
287
288/* OS(AIX) - AIX */
289#ifdef _AIX
290#define WTF_OS_AIX 1
291#endif
292
293/* OS(DARWIN) - Any Darwin-based OS, including Mac OS X and iPhone OS */
b37bf2e1 294#ifdef __APPLE__
f9bf01c6
A
295#define WTF_OS_DARWIN 1
296
297/* FIXME: BUILDING_ON_.., and TARGETING... macros should be folded into the OS() system */
ba379fdc
A
298#include <AvailabilityMacros.h>
299#if !defined(MAC_OS_X_VERSION_10_5) || MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5
300#define BUILDING_ON_TIGER 1
301#elif !defined(MAC_OS_X_VERSION_10_6) || MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_6
302#define BUILDING_ON_LEOPARD 1
f9bf01c6
A
303#elif !defined(MAC_OS_X_VERSION_10_7) || MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_7
304#define BUILDING_ON_SNOW_LEOPARD 1
305#endif
306#if !defined(MAC_OS_X_VERSION_10_5) || MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5
307#define TARGETING_TIGER 1
308#elif !defined(MAC_OS_X_VERSION_10_6) || MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_6
309#define TARGETING_LEOPARD 1
310#elif !defined(MAC_OS_X_VERSION_10_7) || MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_7
311#define TARGETING_SNOW_LEOPARD 1
ba379fdc
A
312#endif
313#include <Availability.h>
9dae56ea 314#include <TargetConditionals.h>
f9bf01c6 315
b37bf2e1
A
316#endif
317
f9bf01c6
A
318/* OS(IPHONE_OS) - iPhone OS */
319/* OS(MAC_OS_X) - Mac OS X (not including iPhone OS) */
320#if OS(DARWIN) && ((defined(TARGET_OS_EMBEDDED) && TARGET_OS_EMBEDDED) \
321 || (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE) \
322 || (defined(TARGET_IPHONE_SIMULATOR) && TARGET_IPHONE_SIMULATOR))
323#define WTF_OS_IPHONE_OS 1
324#elif OS(DARWIN) && defined(TARGET_OS_MAC) && TARGET_OS_MAC
325#define WTF_OS_MAC_OS_X 1
b37bf2e1
A
326#endif
327
f9bf01c6
A
328/* OS(FREEBSD) - FreeBSD */
329#ifdef __FreeBSD__
330#define WTF_OS_FREEBSD 1
331#endif
332
333/* OS(HAIKU) - Haiku */
334#ifdef __HAIKU__
335#define WTF_OS_HAIKU 1
ba379fdc
A
336#endif
337
f9bf01c6 338/* OS(LINUX) - Linux */
ba379fdc 339#ifdef __linux__
f9bf01c6 340#define WTF_OS_LINUX 1
9dae56ea
A
341#endif
342
f9bf01c6
A
343/* OS(NETBSD) - NetBSD */
344#if defined(__NetBSD__)
345#define WTF_PLATFORM_NETBSD 1
b37bf2e1
A
346#endif
347
f9bf01c6 348/* OS(OPENBSD) - OpenBSD */
9dae56ea 349#ifdef __OpenBSD__
f9bf01c6 350#define WTF_OS_OPENBSD 1
9dae56ea
A
351#endif
352
f9bf01c6
A
353/* OS(QNX) - QNX */
354#if defined(__QNXNTO__)
355#define WTF_OS_QNX 1
b37bf2e1
A
356#endif
357
f9bf01c6
A
358/* OS(SOLARIS) - Solaris */
359#if defined(sun) || defined(__sun)
360#define WTF_OS_SOLARIS 1
9dae56ea
A
361#endif
362
f9bf01c6
A
363/* OS(WINCE) - Windows CE; note that for this platform OS(WINDOWS) is also defined */
364#if defined(_WIN32_WCE)
365#define WTF_OS_WINCE 1
366#endif
9dae56ea 367
f9bf01c6
A
368/* OS(WINDOWS) - Any version of Windows */
369#if defined(WIN32) || defined(_WIN32)
370#define WTF_OS_WINDOWS 1
9dae56ea
A
371#endif
372
f9bf01c6
A
373/* OS(SYMBIAN) - Symbian */
374#if defined (__SYMBIAN32__)
375/* we are cross-compiling, it is not really windows */
376#undef WTF_OS_WINDOWS
377#undef WTF_PLATFORM_WIN
378#define WTF_OS_SYMBIAN 1
379#endif
380
381/* OS(UNIX) - Any Unix-like system */
382#if OS(AIX) \
383 || OS(ANDROID) \
384 || OS(DARWIN) \
385 || OS(FREEBSD) \
386 || OS(HAIKU) \
387 || OS(LINUX) \
388 || OS(NETBSD) \
389 || OS(OPENBSD) \
390 || OS(QNX) \
391 || OS(SOLARIS) \
392 || OS(SYMBIAN) \
393 || defined(unix) \
394 || defined(__unix) \
395 || defined(__unix__)
396#define WTF_OS_UNIX 1
b37bf2e1
A
397#endif
398
399/* Operating environments */
400
f9bf01c6 401/* FIXME: these are all mixes of OS, operating environment and policy choices. */
9dae56ea 402/* PLATFORM(CHROMIUM) */
b37bf2e1 403/* PLATFORM(QT) */
f9bf01c6 404/* PLATFORM(WX) */
b37bf2e1 405/* PLATFORM(GTK) */
f9bf01c6 406/* PLATFORM(HAIKU) */
b37bf2e1
A
407/* PLATFORM(MAC) */
408/* PLATFORM(WIN) */
9dae56ea
A
409#if defined(BUILDING_CHROMIUM__)
410#define WTF_PLATFORM_CHROMIUM 1
411#elif defined(BUILDING_QT__)
b37bf2e1 412#define WTF_PLATFORM_QT 1
b37bf2e1
A
413#elif defined(BUILDING_WX__)
414#define WTF_PLATFORM_WX 1
415#elif defined(BUILDING_GTK__)
416#define WTF_PLATFORM_GTK 1
f9bf01c6
A
417#elif defined(BUILDING_HAIKU__)
418#define WTF_PLATFORM_HAIKU 1
419#elif OS(DARWIN)
b37bf2e1 420#define WTF_PLATFORM_MAC 1
f9bf01c6 421#elif OS(WINDOWS)
b37bf2e1
A
422#define WTF_PLATFORM_WIN 1
423#endif
424
9dae56ea 425/* PLATFORM(IPHONE) */
f9bf01c6 426/* FIXME: this is sometimes used as an OS switch and sometimes for higher-level things */
ba379fdc 427#if (defined(TARGET_OS_EMBEDDED) && TARGET_OS_EMBEDDED) || (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE)
9dae56ea
A
428#define WTF_PLATFORM_IPHONE 1
429#endif
430
431/* PLATFORM(IPHONE_SIMULATOR) */
ba379fdc 432#if defined(TARGET_IPHONE_SIMULATOR) && TARGET_IPHONE_SIMULATOR
9dae56ea
A
433#define WTF_PLATFORM_IPHONE 1
434#define WTF_PLATFORM_IPHONE_SIMULATOR 1
435#else
436#define WTF_PLATFORM_IPHONE_SIMULATOR 0
437#endif
438
439#if !defined(WTF_PLATFORM_IPHONE)
440#define WTF_PLATFORM_IPHONE 0
441#endif
442
f9bf01c6
A
443/* PLATFORM(ANDROID) */
444/* FIXME: this is sometimes used as an OS() switch, and other times to drive
445 policy choices */
446#if defined(ANDROID)
447#define WTF_PLATFORM_ANDROID 1
448#endif
449
b37bf2e1
A
450/* Graphics engines */
451
9dae56ea
A
452/* PLATFORM(CG) and PLATFORM(CI) */
453#define WTF_PLATFORM_CG 1
454
455/* PLATFORM(SKIA) for Win/Linux, CG/CI for Mac */
456#if PLATFORM(CHROMIUM)
f9bf01c6
A
457#define ENABLE_HISTORY_ALWAYS_ASYNC 1
458#if OS(DARWIN)
b37bf2e1
A
459#define WTF_PLATFORM_CG 1
460#define WTF_PLATFORM_CI 1
9dae56ea 461#define WTF_USE_ATSUI 1
f9bf01c6 462#define WTF_USE_CORE_TEXT 1
9dae56ea
A
463#else
464#define WTF_PLATFORM_SKIA 1
465#endif
b37bf2e1
A
466#endif
467
f9bf01c6 468#if PLATFORM(GTK)
9dae56ea 469#define WTF_PLATFORM_CAIRO 1
b37bf2e1
A
470#endif
471
b37bf2e1 472
f9bf01c6 473/* OS(WINCE) && PLATFORM(QT)
9dae56ea
A
474 We can not determine the endianess at compile time. For
475 Qt for Windows CE the endianess is specified in the
476 device specific makespec
477*/
f9bf01c6 478#if OS(WINCE) && PLATFORM(QT)
9dae56ea
A
479# include <QtGlobal>
480# undef WTF_PLATFORM_BIG_ENDIAN
481# undef WTF_PLATFORM_MIDDLE_ENDIAN
482# if Q_BYTE_ORDER == Q_BIG_EDIAN
483# define WTF_PLATFORM_BIG_ENDIAN 1
484# endif
b37bf2e1 485
f9bf01c6 486# include <ce_time.h>
b37bf2e1
A
487#endif
488
f9bf01c6
A
489#if (PLATFORM(IPHONE) || PLATFORM(MAC) || PLATFORM(WIN) || (PLATFORM(QT) && OS(DARWIN) && !ENABLE(SINGLE_THREADED))) && !defined(ENABLE_JSC_MULTIPLE_THREADS)
490#define ENABLE_JSC_MULTIPLE_THREADS 1
ba379fdc
A
491#endif
492
f9bf01c6
A
493/* On Windows, use QueryPerformanceCounter by default */
494#if OS(WINDOWS)
495#define WTF_USE_QUERY_PERFORMANCE_COUNTER 1
b37bf2e1
A
496#endif
497
f9bf01c6
A
498#if OS(WINCE) && !PLATFORM(QT)
499#undef ENABLE_JSC_MULTIPLE_THREADS
500#define ENABLE_JSC_MULTIPLE_THREADS 0
501#define USE_SYSTEM_MALLOC 0
502#define ENABLE_ICONDATABASE 0
503#define ENABLE_JAVASCRIPT_DEBUGGER 0
504#define ENABLE_FTPDIR 0
505#define ENABLE_PAN_SCROLLING 0
506#define ENABLE_WML 1
507#define HAVE_ACCESSIBILITY 0
9dae56ea 508
f9bf01c6
A
509#define NOMINMAX /* Windows min and max conflict with standard macros */
510#define NOSHLWAPI /* shlwapi.h not available on WinCe */
b37bf2e1 511
f9bf01c6
A
512/* MSDN documentation says these functions are provided with uspce.lib. But we cannot find this file. */
513#define __usp10__ /* disable "usp10.h" */
b37bf2e1 514
f9bf01c6
A
515#define _INC_ASSERT /* disable "assert.h" */
516#define assert(x)
b37bf2e1 517
f9bf01c6
A
518/* _countof is only included in CE6; for CE5 we need to define it ourself */
519#ifndef _countof
520#define _countof(x) (sizeof(x) / sizeof((x)[0]))
9dae56ea
A
521#endif
522
f9bf01c6
A
523#endif /* OS(WINCE) && !PLATFORM(QT) */
524
525#if PLATFORM(QT)
b37bf2e1 526#define WTF_USE_QT4_UNICODE 1
f9bf01c6
A
527#elif OS(WINCE)
528#define WTF_USE_WINCE_UNICODE 1
9dae56ea
A
529#elif PLATFORM(GTK)
530/* The GTK+ Unicode backend is configurable */
b37bf2e1
A
531#else
532#define WTF_USE_ICU_UNICODE 1
533#endif
534
b37bf2e1 535
f9bf01c6 536#if PLATFORM(CHROMIUM) && OS(DARWIN)
b37bf2e1
A
537#define WTF_PLATFORM_CF 1
538#define WTF_USE_PTHREADS 1
f9bf01c6 539#define HAVE_PTHREAD_RWLOCK 1
9dae56ea 540#endif
b37bf2e1 541
ba379fdc 542#define DONT_FINALIZE_ON_MAIN_THREAD 1
f9bf01c6
A
543
544#if PLATFORM(QT) && OS(DARWIN)
545#define WTF_PLATFORM_CF 1
546#endif
547
ba379fdc
A
548#define ENABLE_CONTEXT_MENUS 0
549#define ENABLE_DRAG_SUPPORT 0
b37bf2e1 550#define ENABLE_FTPDIR 1
ba379fdc
A
551#define ENABLE_GEOLOCATION 1
552#define ENABLE_ICONDATABASE 0
553#define ENABLE_INSPECTOR 0
9dae56ea
A
554#define ENABLE_JIT 0
555#define ENABLE_MAC_JAVA_BRIDGE 0
9dae56ea 556#define ENABLE_NETSCAPE_PLUGIN_API 0
ba379fdc 557#define ENABLE_ORIENTATION_EVENTS 1
f9bf01c6 558#define ENABLE_RANGETYPE_AS_TEXT 1
9dae56ea
A
559#define ENABLE_REPAINT_THROTTLING 1
560#define ENABLE_RESPECT_EXIF_ORIENTATION 1
f9bf01c6
A
561#define ENABLE_YARR 0
562#define ENABLE_YARR_JIT 0
563#define HAVE_PTHREAD_RWLOCK 1
ba379fdc
A
564#define HAVE_READLINE 1
565#define HAVE_RUNLOOP_TIMER 0
566#define WTF_PLATFORM_CF 1
567#define WTF_USE_PTHREADS 1
f9bf01c6
A
568#define WTF_USE_WEB_THREAD 1
569
570#if PLATFORM(ANDROID)
571#define WTF_USE_PTHREADS 1
572#define WTF_PLATFORM_SGL 1
573#define USE_SYSTEM_MALLOC 1
574#define ENABLE_MAC_JAVA_BRIDGE 1
575#define LOG_DISABLED 1
576/* Prevents Webkit from drawing the caret in textfields and textareas
577 This prevents unnecessary invals. */
578#define ENABLE_TEXT_CARET 1
579#define ENABLE_JAVASCRIPT_DEBUGGER 0
580#endif
b37bf2e1
A
581
582#if PLATFORM(WIN)
583#define WTF_USE_WININET 1
584#endif
585
586#if PLATFORM(WX)
ba379fdc 587#define ENABLE_ASSEMBLER 1
f9bf01c6
A
588#if OS(DARWIN)
589#define WTF_PLATFORM_CF 1
590#endif
b37bf2e1
A
591#endif
592
9dae56ea
A
593#if PLATFORM(GTK)
594#if HAVE(PTHREAD_H)
595#define WTF_USE_PTHREADS 1
f9bf01c6 596#define HAVE_PTHREAD_RWLOCK 1
9dae56ea 597#endif
b37bf2e1
A
598#endif
599
f9bf01c6
A
600#if PLATFORM(HAIKU)
601#define HAVE_POSIX_MEMALIGN 1
602#define WTF_USE_CURL 1
603#define WTF_USE_PTHREADS 1
604#define HAVE_PTHREAD_RWLOCK 1
605#define USE_SYSTEM_MALLOC 1
606#define ENABLE_NETSCAPE_PLUGIN_API 0
607#endif
608
9dae56ea
A
609#if !defined(HAVE_ACCESSIBILITY)
610#define HAVE_ACCESSIBILITY 1
611#endif /* !defined(HAVE_ACCESSIBILITY) */
612
f9bf01c6 613#if OS(UNIX) && !OS(SYMBIAN)
ba379fdc 614#define HAVE_SIGNAL_H 1
9dae56ea
A
615#endif
616
f9bf01c6
A
617#if !OS(WINDOWS) && !OS(SOLARIS) && !OS(QNX) \
618 && !OS(SYMBIAN) && !OS(HAIKU) && !OS(RVCT) \
619 && !OS(ANDROID)
620#define HAVE_TM_GMTOFF 1
621#define HAVE_TM_ZONE 1
622#define HAVE_TIMEGM 1
623#endif
624
625#if OS(DARWIN)
9dae56ea
A
626
627#define HAVE_ERRNO_H 1
ba379fdc 628#define HAVE_LANGINFO_H 1
9dae56ea
A
629#define HAVE_MMAP 1
630#define HAVE_MERGESORT 1
631#define HAVE_SBRK 1
632#define HAVE_STRINGS_H 1
633#define HAVE_SYS_PARAM_H 1
634#define HAVE_SYS_TIME_H 1
635#define HAVE_SYS_TIMEB_H 1
636
f9bf01c6
A
637#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD)
638
639#define HAVE_DISPATCH_H 1
640
641
642#endif
ba379fdc
A
643
644#define HAVE_MADV_FREE 1
f9bf01c6 645#define HAVE_PTHREAD_SETNAME_NP 1
ba379fdc 646
f9bf01c6 647#elif OS(WINDOWS)
9dae56ea 648
f9bf01c6 649#if OS(WINCE)
9dae56ea
A
650#define HAVE_ERRNO_H 0
651#else
652#define HAVE_SYS_TIMEB_H 1
653#endif
654#define HAVE_VIRTUALALLOC 1
655
f9bf01c6 656#elif OS(SYMBIAN)
9dae56ea
A
657
658#define HAVE_ERRNO_H 1
659#define HAVE_MMAP 0
660#define HAVE_SBRK 1
661
662#define HAVE_SYS_TIME_H 1
663#define HAVE_STRINGS_H 1
664
665#if !COMPILER(RVCT)
666#define HAVE_SYS_PARAM_H 1
b37bf2e1
A
667#endif
668
f9bf01c6
A
669#elif OS(QNX)
670
671#define HAVE_ERRNO_H 1
672#define HAVE_MMAP 1
673#define HAVE_SBRK 1
674#define HAVE_STRINGS_H 1
675#define HAVE_SYS_PARAM_H 1
676#define HAVE_SYS_TIME_H 1
677
678#elif OS(ANDROID)
679
680#define HAVE_ERRNO_H 1
681#define HAVE_LANGINFO_H 0
682#define HAVE_MMAP 1
683#define HAVE_SBRK 1
684#define HAVE_STRINGS_H 1
685#define HAVE_SYS_PARAM_H 1
686#define HAVE_SYS_TIME_H 1
687
9dae56ea
A
688#else
689
690/* FIXME: is this actually used or do other platforms generate their own config.h? */
691
692#define HAVE_ERRNO_H 1
f9bf01c6
A
693/* As long as Haiku doesn't have a complete support of locale this will be disabled. */
694#if !OS(HAIKU)
ba379fdc 695#define HAVE_LANGINFO_H 1
f9bf01c6 696#endif
9dae56ea
A
697#define HAVE_MMAP 1
698#define HAVE_SBRK 1
699#define HAVE_STRINGS_H 1
700#define HAVE_SYS_PARAM_H 1
701#define HAVE_SYS_TIME_H 1
702
b37bf2e1
A
703#endif
704
9dae56ea
A
705/* ENABLE macro defaults */
706
ba379fdc
A
707/* fastMalloc match validation allows for runtime verification that
708 new is matched by delete, fastMalloc is matched by fastFree, etc. */
709#if !defined(ENABLE_FAST_MALLOC_MATCH_VALIDATION)
710#define ENABLE_FAST_MALLOC_MATCH_VALIDATION 0
711#endif
712
b37bf2e1
A
713#if !defined(ENABLE_ICONDATABASE)
714#define ENABLE_ICONDATABASE 1
715#endif
716
717#if !defined(ENABLE_DATABASE)
718#define ENABLE_DATABASE 1
719#endif
720
9dae56ea
A
721#if !defined(ENABLE_JAVASCRIPT_DEBUGGER)
722#define ENABLE_JAVASCRIPT_DEBUGGER 1
723#endif
724
b37bf2e1
A
725#if !defined(ENABLE_FTPDIR)
726#define ENABLE_FTPDIR 1
727#endif
728
ba379fdc
A
729#if !defined(ENABLE_CONTEXT_MENUS)
730#define ENABLE_CONTEXT_MENUS 1
731#endif
732
733#if !defined(ENABLE_DRAG_SUPPORT)
734#define ENABLE_DRAG_SUPPORT 1
735#endif
736
f9bf01c6
A
737#if !defined(ENABLE_DASHBOARD_SUPPORT)
738#define ENABLE_DASHBOARD_SUPPORT 0
739#endif
740
741#if !defined(ENABLE_GEOLOCATION_PERMISSION_CACHE)
742#define ENABLE_GEOLOCATION_PERMISSION_CACHE 0
743#endif
744
ba379fdc
A
745#if !defined(ENABLE_INSPECTOR)
746#define ENABLE_INSPECTOR 1
747#endif
748
9dae56ea
A
749#if !defined(ENABLE_MAC_JAVA_BRIDGE)
750#define ENABLE_MAC_JAVA_BRIDGE 0
b37bf2e1
A
751#endif
752
9dae56ea
A
753#if !defined(ENABLE_NETSCAPE_PLUGIN_API)
754#define ENABLE_NETSCAPE_PLUGIN_API 1
755#endif
756
ba379fdc
A
757#if !defined(WTF_USE_PLUGIN_HOST_PROCESS)
758#define WTF_USE_PLUGIN_HOST_PROCESS 0
9dae56ea
A
759#endif
760
ba379fdc
A
761#if !defined(ENABLE_ORIENTATION_EVENTS)
762#define ENABLE_ORIENTATION_EVENTS 0
b37bf2e1
A
763#endif
764
ba379fdc
A
765#if !defined(ENABLE_RESPECT_EXIF_ORIENTATION)
766#define ENABLE_RESPECT_EXIF_ORIENTATION 0
b37bf2e1
A
767#endif
768
9dae56ea
A
769#if !defined(ENABLE_OPCODE_STATS)
770#define ENABLE_OPCODE_STATS 0
771#endif
772
ba379fdc
A
773#define ENABLE_SAMPLING_COUNTERS 0
774#define ENABLE_SAMPLING_FLAGS 0
775#define ENABLE_OPCODE_SAMPLING 0
9dae56ea 776#define ENABLE_CODEBLOCK_SAMPLING 0
ba379fdc
A
777#if ENABLE(CODEBLOCK_SAMPLING) && !ENABLE(OPCODE_SAMPLING)
778#error "CODEBLOCK_SAMPLING requires OPCODE_SAMPLING"
9dae56ea 779#endif
ba379fdc
A
780#if ENABLE(OPCODE_SAMPLING) || ENABLE(SAMPLING_FLAGS)
781#define ENABLE_SAMPLING_THREAD 1
9dae56ea
A
782#endif
783
784#if !defined(ENABLE_GEOLOCATION)
785#define ENABLE_GEOLOCATION 0
786#endif
787
f9bf01c6
A
788#if !defined(ENABLE_NOTIFICATIONS)
789#define ENABLE_NOTIFICATIONS 0
790#endif
791
792#define ENABLE_TEXT_CARET 0
793
9dae56ea
A
794#if !defined(ENABLE_TEXT_CARET)
795#define ENABLE_TEXT_CARET 1
796#endif
797
ba379fdc
A
798#if !defined(ENABLE_ON_FIRST_TEXTAREA_FOCUS_SELECT_ALL)
799#define ENABLE_ON_FIRST_TEXTAREA_FOCUS_SELECT_ALL 0
800#endif
801
802#if !defined(WTF_USE_JSVALUE64) && !defined(WTF_USE_JSVALUE32) && !defined(WTF_USE_JSVALUE32_64)
f9bf01c6 803#if (CPU(X86_64) && (OS(UNIX) || OS(WINDOWS))) || CPU(IA64) || CPU(ALPHA)
ba379fdc 804#define WTF_USE_JSVALUE64 1
f9bf01c6
A
805#elif CPU(ARM) && !PLATFORM(IPHONE) || CPU(PPC64) || (PLATFORM(IPHONE) && defined(WTF_ARM_ARCH_VERSION) && WTF_ARM_ARCH_VERSION == 6 && !defined(__llvm__))
806/* FIXME: <rdar://problem/7478149> gcc-4.2 compiler bug with USE(JSVALUE32_64) and armv6 target */
807#define WTF_USE_JSVALUE32 1
808#elif OS(WINDOWS) && COMPILER(MINGW)
809/* Using JSVALUE32_64 causes padding/alignement issues for JITStubArg
810on MinGW. See https://bugs.webkit.org/show_bug.cgi?id=29268 */
ba379fdc
A
811#define WTF_USE_JSVALUE32 1
812#else
813#define WTF_USE_JSVALUE32_64 1
9dae56ea 814#endif
f9bf01c6 815#endif /* !defined(WTF_USE_JSVALUE64) && !defined(WTF_USE_JSVALUE32) && !defined(WTF_USE_JSVALUE32_64) */
9dae56ea
A
816
817#if !defined(ENABLE_REPAINT_THROTTLING)
818#define ENABLE_REPAINT_THROTTLING 0
819#endif
820
821#if !defined(ENABLE_JIT)
f9bf01c6 822
ba379fdc 823/* The JIT is tested & working on x86_64 Mac */
f9bf01c6 824#if CPU(X86_64) && PLATFORM(MAC)
ba379fdc 825 #define ENABLE_JIT 1
9dae56ea 826/* The JIT is tested & working on x86 Mac */
f9bf01c6 827#elif CPU(X86) && PLATFORM(MAC)
9dae56ea
A
828 #define ENABLE_JIT 1
829 #define WTF_USE_JIT_STUB_ARGUMENT_VA_LIST 1
f9bf01c6
A
830#elif CPU(ARM_THUMB2) && PLATFORM(IPHONE)
831 #define ENABLE_JIT 1
9dae56ea 832/* The JIT is tested & working on x86 Windows */
f9bf01c6 833#elif CPU(X86) && PLATFORM(WIN)
9dae56ea 834 #define ENABLE_JIT 1
9dae56ea 835#endif
f9bf01c6
A
836
837#if PLATFORM(QT)
838#if CPU(X86_64) && OS(DARWIN)
839 #define ENABLE_JIT 1
840#elif CPU(X86) && OS(DARWIN)
841 #define ENABLE_JIT 1
842 #define WTF_USE_JIT_STUB_ARGUMENT_VA_LIST 1
843#elif CPU(X86) && OS(WINDOWS) && COMPILER(MINGW) && GCC_VERSION >= 40100
844 #define ENABLE_JIT 1
845 #define WTF_USE_JIT_STUB_ARGUMENT_VA_LIST 1
846#elif CPU(X86) && OS(WINDOWS) && COMPILER(MSVC)
847 #define ENABLE_JIT 1
848 #define WTF_USE_JIT_STUB_ARGUMENT_REGISTER 1
849#elif CPU(X86) && OS(LINUX) && GCC_VERSION >= 40100
850 #define ENABLE_JIT 1
851 #define WTF_USE_JIT_STUB_ARGUMENT_VA_LIST 1
852#elif CPU(X86_64) && OS(LINUX) && GCC_VERSION >= 40100
853 #define ENABLE_JIT 1
854#elif CPU(ARM_TRADITIONAL) && OS(LINUX)
855 #define ENABLE_JIT 1
9dae56ea 856#endif
f9bf01c6
A
857#endif /* PLATFORM(QT) */
858
859#endif /* !defined(ENABLE_JIT) */
9dae56ea
A
860
861#if ENABLE(JIT)
ba379fdc
A
862#ifndef ENABLE_JIT_OPTIMIZE_CALL
863#define ENABLE_JIT_OPTIMIZE_CALL 1
864#endif
865#ifndef ENABLE_JIT_OPTIMIZE_NATIVE_CALL
866#define ENABLE_JIT_OPTIMIZE_NATIVE_CALL 1
867#endif
868#ifndef ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS
869#define ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS 1
870#endif
871#ifndef ENABLE_JIT_OPTIMIZE_METHOD_CALLS
872#define ENABLE_JIT_OPTIMIZE_METHOD_CALLS 1
873#endif
874#endif
875
f9bf01c6 876#if CPU(X86) && COMPILER(MSVC)
ba379fdc 877#define JSC_HOST_CALL __fastcall
f9bf01c6 878#elif CPU(X86) && COMPILER(GCC)
ba379fdc
A
879#define JSC_HOST_CALL __attribute__ ((fastcall))
880#else
881#define JSC_HOST_CALL
882#endif
883
884#if COMPILER(GCC) && !ENABLE(JIT)
885#define HAVE_COMPUTED_GOTO 1
9dae56ea 886#endif
ba379fdc
A
887
888#if ENABLE(JIT) && defined(COVERAGE)
889 #define WTF_USE_INTERPRETER 0
890#else
891 #define WTF_USE_INTERPRETER 1
9dae56ea
A
892#endif
893
ba379fdc 894/* Yet Another Regex Runtime. */
f9bf01c6
A
895#if !defined(ENABLE_YARR_JIT)
896
ba379fdc 897/* YARR supports x86 & x86-64, and has been tested on Mac and Windows. */
f9bf01c6
A
898#if (CPU(X86) && PLATFORM(MAC)) \
899 || (CPU(X86_64) && PLATFORM(MAC)) \
900 || (CPU(ARM_THUMB2) && PLATFORM(IPHONE)) \
901 || (CPU(X86) && PLATFORM(WIN))
902#define ENABLE_YARR 1
903#define ENABLE_YARR_JIT 1
904#endif
905
906#if PLATFORM(QT)
907#if (CPU(X86) && OS(WINDOWS) && COMPILER(MINGW) && GCC_VERSION >= 40100) \
908 || (CPU(X86) && OS(WINDOWS) && COMPILER(MSVC)) \
909 || (CPU(X86) && OS(LINUX) && GCC_VERSION >= 40100) \
910 || (CPU(X86_64) && OS(LINUX) && GCC_VERSION >= 40100) \
911 || (CPU(ARM_TRADITIONAL) && OS(LINUX))
ba379fdc
A
912#define ENABLE_YARR 1
913#define ENABLE_YARR_JIT 1
914#endif
f9bf01c6
A
915#endif
916
917#endif /* !defined(ENABLE_YARR_JIT) */
918
ba379fdc
A
919/* Sanity Check */
920#if ENABLE(YARR_JIT) && !ENABLE(YARR)
921#error "YARR_JIT requires YARR"
9dae56ea
A
922#endif
923
ba379fdc 924#if ENABLE(JIT) || ENABLE(YARR_JIT)
9dae56ea
A
925#define ENABLE_ASSEMBLER 1
926#endif
ba379fdc
A
927/* Setting this flag prevents the assembler from using RWX memory; this may improve
928 security but currectly comes at a significant performance cost. */
ba379fdc 929#define ENABLE_ASSEMBLER_WX_EXCLUSIVE 1
9dae56ea 930
f9bf01c6 931#if !defined(ENABLE_PAN_SCROLLING) && OS(WINDOWS)
9dae56ea
A
932#define ENABLE_PAN_SCROLLING 1
933#endif
934
f9bf01c6
A
935/* Use the QXmlStreamReader implementation for XMLTokenizer */
936/* Use the QXmlQuery implementation for XSLTProcessor */
9dae56ea 937#if PLATFORM(QT)
9dae56ea 938#define WTF_USE_QXMLSTREAM 1
f9bf01c6 939#define WTF_USE_QXMLQUERY 1
9dae56ea
A
940#endif
941
942#if !PLATFORM(QT)
943#define WTF_USE_FONT_FAST_PATH 1
944#endif
945
ba379fdc
A
946/* Accelerated compositing */
947#if PLATFORM(MAC)
f9bf01c6 948#if !defined(BUILDING_ON_TIGER)
ba379fdc
A
949#define WTF_USE_ACCELERATED_COMPOSITING 1
950#endif
951#endif
952
953#define WTF_USE_ACCELERATED_COMPOSITING 1
954
f9bf01c6
A
955/* FIXME: Defining ENABLE_3D_RENDERING here isn't really right, but it's always used with
956 with WTF_USE_ACCELERATED_COMPOSITING, and it allows the feature to be turned on and
957 off in one place. */
958#if PLATFORM(WIN)
959#include "QuartzCorePresent.h"
960#if QUARTZCORE_PRESENT
961#define WTF_USE_ACCELERATED_COMPOSITING 1
962#define ENABLE_3D_RENDERING 1
963#endif
964#endif
965
966#if COMPILER(GCC)
967#define WARN_UNUSED_RETURN __attribute__ ((warn_unused_result))
968#else
969#define WARN_UNUSED_RETURN
970#endif
971
972#if !ENABLE(NETSCAPE_PLUGIN_API) || (ENABLE(NETSCAPE_PLUGIN_API) && ((OS(UNIX) && (PLATFORM(QT) || PLATFORM(WX))) || PLATFORM(GTK)))
973#define ENABLE_PLUGIN_PACKAGE_SIMPLE_HASH 1
974#endif
975
976/* Set up a define for a common error that is intended to cause a build error -- thus the space after Error. */
977#define WTF_PLATFORM_CFNETWORK Error USE_macro_should_be_used_with_CFNETWORK
978
979#define ENABLE_JSC_ZOMBIES 0
980
b37bf2e1 981#endif /* WTF_Platform_h */