Platform.h 23.4 KB
Newer Older
mjs's avatar
mjs committed
1
/*
ap@webkit.org's avatar
ap@webkit.org committed
2
 * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc.  All rights reserved.
3
 * Copyright (C) 2007-2009 Torch Mobile, Inc.
mjs's avatar
mjs committed
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
eric@webkit.org's avatar
eric@webkit.org committed
24
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mjs's avatar
mjs committed
25
26
 */

mjs's avatar
mjs committed
27
28
#ifndef WTF_Platform_h
#define WTF_Platform_h
mjs's avatar
mjs committed
29

weinig's avatar
weinig committed
30
/* PLATFORM handles OS, operating environment, graphics API, and CPU */
31
32
33
34
35
#define PLATFORM(WTF_FEATURE) (defined WTF_PLATFORM_##WTF_FEATURE  && WTF_PLATFORM_##WTF_FEATURE)
#define COMPILER(WTF_FEATURE) (defined WTF_COMPILER_##WTF_FEATURE  && WTF_COMPILER_##WTF_FEATURE)
#define HAVE(WTF_FEATURE) (defined HAVE_##WTF_FEATURE  && HAVE_##WTF_FEATURE)
#define USE(WTF_FEATURE) (defined WTF_USE_##WTF_FEATURE  && WTF_USE_##WTF_FEATURE)
#define ENABLE(WTF_FEATURE) (defined ENABLE_##WTF_FEATURE  && ENABLE_##WTF_FEATURE)
mjs's avatar
mjs committed
36

weinig's avatar
weinig committed
37
/* Operating systems - low-level dependencies */
mjs's avatar
mjs committed
38

weinig's avatar
weinig committed
39
40
41
/* PLATFORM(DARWIN) */
/* Operating system level dependencies for Mac OS X / Darwin that should */
/* be used regardless of operating environment */
mjs's avatar
mjs committed
42
#ifdef __APPLE__
mjs's avatar
mjs committed
43
#define WTF_PLATFORM_DARWIN 1
kevino@webkit.org's avatar
kevino@webkit.org committed
44
45
46
47
48
49
#include <AvailabilityMacros.h>
#if !defined(MAC_OS_X_VERSION_10_5) || MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5
#define BUILDING_ON_TIGER 1
#elif !defined(MAC_OS_X_VERSION_10_6) || MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_6
#define BUILDING_ON_LEOPARD 1
#endif
50
#include <TargetConditionals.h>
mjs's avatar
mjs committed
51
52
#endif

weinig's avatar
weinig committed
53
54
55
/* PLATFORM(WIN_OS) */
/* Operating system level dependencies for Windows that should be used */
/* regardless of operating environment */
mjs's avatar
mjs committed
56
#if defined(WIN32) || defined(_WIN32)
mjs's avatar
mjs committed
57
#define WTF_PLATFORM_WIN_OS 1
mjs's avatar
mjs committed
58
59
#endif

60
/* PLATFORM(WINCE) */
61
62
63
64
/* Operating system level dependencies for Windows CE that should be used */
/* regardless of operating environment */
/* Note that for this platform PLATFORM(WIN_OS) is also defined. */
#if defined(_WIN32_WCE)
65
#define WTF_PLATFORM_WINCE 1
66
67
#endif

68
69
70
71
72
73
74
/* PLATFORM(LINUX) */
/* Operating system level dependencies for Linux-like systems that */
/* should be used regardless of operating environment */
#ifdef __linux__
#define WTF_PLATFORM_LINUX 1
#endif

oliver's avatar
oliver committed
75
76
77
78
79
80
81
/* PLATFORM(FREEBSD) */
/* Operating system level dependencies for FreeBSD-like systems that */
/* should be used regardless of operating environment */
#ifdef __FreeBSD__
#define WTF_PLATFORM_FREEBSD 1
#endif

82
83
84
85
86
87
88
/* PLATFORM(OPENBSD) */
/* Operating system level dependencies for OpenBSD systems that */
/* should be used regardless of operating environment */
#ifdef __OpenBSD__
#define WTF_PLATFORM_OPENBSD 1
#endif

89
90
91
92
93
94
95
/* PLATFORM(SOLARIS) */
/* Operating system level dependencies for Solaris that should be used */
/* regardless of operating environment */
#if defined(sun) || defined(__sun)
#define WTF_PLATFORM_SOLARIS 1
#endif

96
#if defined (__SYMBIAN32__)
97
/* we are cross-compiling, it is not really windows */
98
99
100
101
102
#undef WTF_PLATFORM_WIN_OS
#undef WTF_PLATFORM_WIN
#define WTF_PLATFORM_SYMBIAN 1
#endif

103
104
105
106
107
108
109
110

/* PLATFORM(NETBSD) */
/* Operating system level dependencies for NetBSD that should be used */
/* regardless of operating environment */
#if defined(__NetBSD__)
#define WTF_PLATFORM_NETBSD 1
#endif

111
112
113
114
115
116
117
/* PLATFORM(QNX) */
/* Operating system level dependencies for QNX that should be used */
/* regardless of operating environment */
#if defined(__QNXNTO__)
#define WTF_PLATFORM_QNX 1
#endif

weinig's avatar
weinig committed
118
119
120
/* PLATFORM(UNIX) */
/* Operating system level dependencies for Unix-like systems that */
/* should be used regardless of operating environment */
oliver's avatar
oliver committed
121
122
#if   PLATFORM(DARWIN)     \
   || PLATFORM(FREEBSD)    \
123
   || PLATFORM(SYMBIAN)    \
124
   || PLATFORM(NETBSD)     \
mjs's avatar
mjs committed
125
126
127
   || defined(unix)        \
   || defined(__unix)      \
   || defined(__unix__)    \
128
   || defined(_AIX)        \
129
130
   || defined(__HAIKU__)   \
   || defined(__QNXNTO__)
mjs's avatar
mjs committed
131
#define WTF_PLATFORM_UNIX 1
mjs's avatar
mjs committed
132
133
#endif

weinig's avatar
weinig committed
134
/* Operating environments */
mjs's avatar
mjs committed
135

136
/* PLATFORM(CHROMIUM) */
137
/* PLATFORM(QT) */
zecke's avatar
/:    
zecke committed
138
/* PLATFORM(GTK) */
weinig's avatar
weinig committed
139
140
/* PLATFORM(MAC) */
/* PLATFORM(WIN) */
141
142
143
#if defined(BUILDING_CHROMIUM__)
#define WTF_PLATFORM_CHROMIUM 1
#elif defined(BUILDING_QT__)
mjs's avatar
mjs committed
144
#define WTF_PLATFORM_QT 1
thatcher's avatar
thatcher committed
145
146
147

/* PLATFORM(KDE) */
#if defined(BUILDING_KDE__)
mjs's avatar
mjs committed
148
#define WTF_PLATFORM_KDE 1
thatcher's avatar
thatcher committed
149
150
#endif

151
152
#elif defined(BUILDING_WX__)
#define WTF_PLATFORM_WX 1
zecke's avatar
/:    
zecke committed
153
154
#elif defined(BUILDING_GTK__)
#define WTF_PLATFORM_GTK 1
155
156
#elif defined(BUILDING_HAIKU__)
#define WTF_PLATFORM_HAIKU 1
157
#elif PLATFORM(DARWIN)
mjs's avatar
mjs committed
158
#define WTF_PLATFORM_MAC 1
159
#elif PLATFORM(WIN_OS)
mjs's avatar
mjs committed
160
#define WTF_PLATFORM_WIN 1
mjs's avatar
mjs committed
161
#endif
ggaren's avatar
ggaren committed
162

163
/* PLATFORM(IPHONE) */
164
#if (defined(TARGET_OS_EMBEDDED) && TARGET_OS_EMBEDDED) || (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE)
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
#define WTF_PLATFORM_IPHONE 1
#endif

/* PLATFORM(IPHONE_SIMULATOR) */
#if defined(TARGET_IPHONE_SIMULATOR) && TARGET_IPHONE_SIMULATOR
#define WTF_PLATFORM_IPHONE 1
#define WTF_PLATFORM_IPHONE_SIMULATOR 1
#else
#define WTF_PLATFORM_IPHONE_SIMULATOR 0
#endif

#if !defined(WTF_PLATFORM_IPHONE)
#define WTF_PLATFORM_IPHONE 0
#endif

180
181
/* Graphics engines */

eric@webkit.org's avatar
eric@webkit.org committed
182
/* PLATFORM(CG) and PLATFORM(CI) */
183
#if PLATFORM(MAC) || PLATFORM(IPHONE)
mjs's avatar
mjs committed
184
#define WTF_PLATFORM_CG 1
185
186
#endif
#if PLATFORM(MAC) && !PLATFORM(IPHONE)
187
#define WTF_PLATFORM_CI 1
eric@webkit.org's avatar
eric@webkit.org committed
188
189
#endif

190
/* PLATFORM(SKIA) for Win/Linux, CG/CI for Mac */
eric@webkit.org's avatar
eric@webkit.org committed
191
#if PLATFORM(CHROMIUM)
192
193
194
195
196
#if PLATFORM(DARWIN)
#define WTF_PLATFORM_CG 1
#define WTF_PLATFORM_CI 1
#define WTF_USE_ATSUI 1
#else
eric@webkit.org's avatar
eric@webkit.org committed
197
198
#define WTF_PLATFORM_SKIA 1
#endif
199
#endif
eric@webkit.org's avatar
eric@webkit.org committed
200
201

/* Makes PLATFORM(WIN) default to PLATFORM(CAIRO) */
eric@webkit.org's avatar
eric@webkit.org committed
202
/* FIXME: This should be changed from a blacklist to a whitelist */
203
#if !PLATFORM(MAC) && !PLATFORM(QT) && !PLATFORM(WX) && !PLATFORM(CHROMIUM) && !PLATFORM(WINCE) && !PLATFORM(HAIKU)
mjs's avatar
mjs committed
204
#define WTF_PLATFORM_CAIRO 1
205
206
#endif

weinig's avatar
weinig committed
207
/* CPU */
mjs's avatar
mjs committed
208

weinig's avatar
weinig committed
209
/* PLATFORM(PPC) */
mjs's avatar
mjs committed
210
211
212
213
214
215
216
#if   defined(__ppc__)     \
   || defined(__PPC__)     \
   || defined(__powerpc__) \
   || defined(__powerpc)   \
   || defined(__POWERPC__) \
   || defined(_M_PPC)      \
   || defined(__PPC)
mjs's avatar
mjs committed
217
218
#define WTF_PLATFORM_PPC 1
#define WTF_PLATFORM_BIG_ENDIAN 1
mjs's avatar
mjs committed
219
220
#endif

weinig's avatar
weinig committed
221
/* PLATFORM(PPC64) */
mjs's avatar
mjs committed
222
223
#if   defined(__ppc64__) \
   || defined(__PPC64__)
mjs's avatar
mjs committed
224
225
#define WTF_PLATFORM_PPC64 1
#define WTF_PLATFORM_BIG_ENDIAN 1
mjs's avatar
mjs committed
226
227
#endif

228
/* PLATFORM(ARM) */
229
230
#define PLATFORM_ARM_ARCH(N) (PLATFORM(ARM) && ARM_ARCH_VERSION >= N)

ddkilzer's avatar
ddkilzer committed
231
232
#if   defined(arm) \
   || defined(__arm__)
mjs's avatar
mjs committed
233
#define WTF_PLATFORM_ARM 1
234

235
236
#if defined(__ARMEB__)
#define WTF_PLATFORM_BIG_ENDIAN 1
237
238
239
240

#elif !defined(__ARM_EABI__) \
   && !defined(__EABI__) \
   && !defined(__VFP_FP__)
mjs's avatar
mjs committed
241
#define WTF_PLATFORM_MIDDLE_ENDIAN 1
242

mjs's avatar
mjs committed
243
#endif
244
245
246
247
248
249

/* Set ARM_ARCH_VERSION */
#if   defined(__ARM_ARCH_4__) \
   || defined(__ARM_ARCH_4T__) \
   || defined(__MARM_ARMV4__) \
   || defined(_ARMV4I_)
250
#define ARM_ARCH_VERSION 4
251
252
253
254
255
256
257

#elif defined(__ARM_ARCH_5__) \
   || defined(__ARM_ARCH_5T__) \
   || defined(__ARM_ARCH_5E__) \
   || defined(__ARM_ARCH_5TE__) \
   || defined(__ARM_ARCH_5TEJ__) \
   || defined(__MARM_ARMV5__)
258
#define ARM_ARCH_VERSION 5
259
260
261
262
263
264
265
266

#elif defined(__ARM_ARCH_6__) \
   || defined(__ARM_ARCH_6J__) \
   || defined(__ARM_ARCH_6K__) \
   || defined(__ARM_ARCH_6Z__) \
   || defined(__ARM_ARCH_6ZK__) \
   || defined(__ARM_ARCH_6T2__) \
   || defined(__ARMV6__)
267
#define ARM_ARCH_VERSION 6
268
269
270

#elif defined(__ARM_ARCH_7A__) \
   || defined(__ARM_ARCH_7R__)
271
#define ARM_ARCH_VERSION 7
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310

/* RVCT sets _TARGET_ARCH_ARM */
#elif defined(__TARGET_ARCH_ARM)
#define ARM_ARCH_VERSION __TARGET_ARCH_ARM

#else
#define ARM_ARCH_VERSION 0

#endif

/* Set THUMB_ARM_VERSION */
#if   defined(__ARM_ARCH_4T__)
#define THUMB_ARCH_VERSION 1

#elif defined(__ARM_ARCH_5T__) \
   || defined(__ARM_ARCH_5TE__) \
   || defined(__ARM_ARCH_5TEJ__)
#define THUMB_ARCH_VERSION 2

#elif defined(__ARM_ARCH_6J__) \
   || defined(__ARM_ARCH_6K__) \
   || defined(__ARM_ARCH_6Z__) \
   || defined(__ARM_ARCH_6ZK__) \
   || defined(__ARM_ARCH_6M__)
#define THUMB_ARCH_VERSION 3

#elif defined(__ARM_ARCH_6T2__) \
   || defined(__ARM_ARCH_7__) \
   || defined(__ARM_ARCH_7A__) \
   || defined(__ARM_ARCH_7R__) \
   || defined(__ARM_ARCH_7M__)
#define THUMB_ARCH_VERSION 4

/* RVCT sets __TARGET_ARCH_THUMB */
#elif defined(__TARGET_ARCH_THUMB)
#define THUMB_ARCH_VERSION __TARGET_ARCH_THUMB

#else
#define THUMB_ARCH_VERSION 0
311
#endif
312

313
314
315
316
/* On ARMv5 and below the natural alignment is required. */
#if !defined(ARM_REQUIRE_NATURAL_ALIGNMENT) && ARM_ARCH_VERSION <= 5
#define ARM_REQUIRE_NATURAL_ALIGNMENT 1
#endif
317

318
319
/* Defines two pseudo-platforms for ARM and Thumb-2 instruction set. */
#if !defined(WTF_PLATFORM_ARM_TRADITIONAL) && !defined(WTF_PLATFORM_ARM_THUMB2)
320
321
#  if defined(thumb2) || defined(__thumb2__) \
  || ((defined(__thumb) || defined(__thumb__)) && THUMB_ARCH_VERSION == 4)
322
323
324
325
326
327
328
329
330
331
332
#    define WTF_PLATFORM_ARM_TRADITIONAL 0
#    define WTF_PLATFORM_ARM_THUMB2 1
#  elif PLATFORM_ARM_ARCH(4)
#    define WTF_PLATFORM_ARM_TRADITIONAL 1
#    define WTF_PLATFORM_ARM_THUMB2 0
#  else
#    error "Not supported ARM architecture"
#  endif
#elif PLATFORM(ARM_TRADITIONAL) && PLATFORM(ARM_THUMB2) /* Sanity Check */
#  error "Cannot use both of WTF_PLATFORM_ARM_TRADITIONAL and WTF_PLATFORM_ARM_THUMB2 platforms"
#endif // !defined(ARM_TRADITIONAL) && !defined(ARM_THUMB2)
333
#endif /* ARM */
mjs's avatar
mjs committed
334

weinig's avatar
weinig committed
335
/* PLATFORM(X86) */
mjs's avatar
mjs committed
336
337
338
339
340
#if   defined(__i386__) \
   || defined(i386)     \
   || defined(_M_IX86)  \
   || defined(_X86_)    \
   || defined(__THW_INTEL)
mjs's avatar
mjs committed
341
#define WTF_PLATFORM_X86 1
mjs's avatar
mjs committed
342
343
#endif

weinig's avatar
weinig committed
344
/* PLATFORM(X86_64) */
345
#if   defined(__x86_64__) \
346
   || defined(_M_X64)
mjs's avatar
mjs committed
347
#define WTF_PLATFORM_X86_64 1
348
349
#endif

ddkilzer@apple.com's avatar
ddkilzer@apple.com committed
350
351
352
353
354
/* PLATFORM(SH4) */
#if defined(__SH4__)
#define WTF_PLATFORM_SH4 1
#endif

355
/* PLATFORM(SPARC64) */
356
#if defined(__sparc__) && defined(__arch64__) || defined (__sparcv9)
357
358
359
360
#define WTF_PLATFORM_SPARC64 1
#define WTF_PLATFORM_BIG_ENDIAN 1
#endif

361
/* PLATFORM(WINCE) && PLATFORM(QT)
362
363
364
365
   We can not determine the endianess at compile time. For
   Qt for Windows CE the endianess is specified in the
   device specific makespec
*/
366
#if PLATFORM(WINCE) && PLATFORM(QT)
367
368
369
370
371
372
373
374
#   include <QtGlobal>
#   undef WTF_PLATFORM_BIG_ENDIAN
#   undef WTF_PLATFORM_MIDDLE_ENDIAN
#   if Q_BYTE_ORDER == Q_BIG_EDIAN
#       define WTF_PLATFORM_BIG_ENDIAN 1
#   endif
#endif

weinig's avatar
weinig committed
375
/* Compiler */
mjs's avatar
mjs committed
376

weinig's avatar
weinig committed
377
/* COMPILER(MSVC) */
mjs's avatar
mjs committed
378
#if defined(_MSC_VER)
mjs's avatar
mjs committed
379
#define WTF_COMPILER_MSVC 1
380
381
382
#if _MSC_VER < 1400
#define WTF_COMPILER_MSVC7 1
#endif
mjs's avatar
mjs committed
383
384
#endif

385
386
387
388
389
/* COMPILER(RVCT) */
#if defined(__CC_ARM) || defined(__ARMCC__)
#define WTF_COMPILER_RVCT 1
#endif

weinig's avatar
weinig committed
390
/* COMPILER(GCC) */
391
392
/* --gnu option of the RVCT compiler also defines __GNUC__ */
#if defined(__GNUC__) && !COMPILER(RVCT)
mjs's avatar
mjs committed
393
#define WTF_COMPILER_GCC 1
394
#define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
mjs's avatar
mjs committed
395
396
#endif

397
398
399
400
401
/* COMPILER(MINGW) */
#if defined(MINGW) || defined(__MINGW32__)
#define WTF_COMPILER_MINGW 1
#endif

weinig's avatar
weinig committed
402
403
/* COMPILER(BORLAND) */
/* not really fully supported - is this relevant any more? */
mjs's avatar
mjs committed
404
#if defined(__BORLANDC__)
mjs's avatar
mjs committed
405
#define WTF_COMPILER_BORLAND 1
mjs's avatar
mjs committed
406
407
#endif

weinig's avatar
weinig committed
408
409
/* COMPILER(CYGWIN) */
/* not really fully supported - is this relevant any more? */
mjs's avatar
mjs committed
410
#if defined(__CYGWIN__)
mjs's avatar
mjs committed
411
#define WTF_COMPILER_CYGWIN 1
mjs's avatar
mjs committed
412
413
#endif

414
415
416
417
418
/* COMPILER(WINSCW) */
#if defined(__WINSCW__)
#define WTF_COMPILER_WINSCW 1
#endif

419
#if (PLATFORM(IPHONE) || PLATFORM(MAC) || PLATFORM(WIN)) && !defined(ENABLE_JSC_MULTIPLE_THREADS)
420
#define ENABLE_JSC_MULTIPLE_THREADS 1
staikos's avatar
staikos committed
421
422
#endif

423
424
425
426
427
/* On Windows, use QueryPerformanceCounter by default */
#if PLATFORM(WIN_OS)
#define WTF_USE_QUERY_PERFORMANCE_COUNTER  1
#endif

428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
#if PLATFORM(WINCE) && !PLATFORM(QT)
#undef ENABLE_JSC_MULTIPLE_THREADS
#define ENABLE_JSC_MULTIPLE_THREADS        0
#define USE_SYSTEM_MALLOC                  0
#define ENABLE_ICONDATABASE                0
#define ENABLE_JAVASCRIPT_DEBUGGER         0
#define ENABLE_FTPDIR                      0
#define ENABLE_PAN_SCROLLING               0
#define ENABLE_WML                         1
#define HAVE_ACCESSIBILITY                 0

#define NOMINMAX       // Windows min and max conflict with standard macros
#define NOSHLWAPI      // shlwapi.h not available on WinCe

// MSDN documentation says these functions are provided with uspce.lib.  But we cannot find this file.
#define __usp10__      // disable "usp10.h"

#define _INC_ASSERT    // disable "assert.h"
#define assert(x)

448
449
450
// _countof is only included in CE6; for CE5 we need to define it ourself
#ifndef _countof
#define _countof(x) (sizeof(x) / sizeof((x)[0]))
451
452
#endif

453
#endif  /* PLATFORM(WINCE) && !PLATFORM(QT) */
454

455
/* for Unicode, KDE uses Qt */
hyatt's avatar
hyatt committed
456
457
#if PLATFORM(KDE) || PLATFORM(QT)
#define WTF_USE_QT4_UNICODE 1
458
459
#elif PLATFORM(WINCE)
#define WTF_USE_WINCE_UNICODE 1
460
461
#elif PLATFORM(GTK)
/* The GTK+ Unicode backend is configurable */
darin's avatar
darin committed
462
#else
mjs's avatar
mjs committed
463
#define WTF_USE_ICU_UNICODE 1
mjs's avatar
mjs committed
464
465
#endif

466
#if PLATFORM(MAC) && !PLATFORM(IPHONE)
mjs's avatar
mjs committed
467
#define WTF_PLATFORM_CF 1
andersca's avatar
andersca committed
468
#define WTF_USE_PTHREADS 1
469
#define HAVE_PTHREAD_RWLOCK 1
470
471
472
#if !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_TIGER) && defined(__x86_64__)
#define WTF_USE_PLUGIN_HOST_PROCESS 1
#endif
473
#if !defined(ENABLE_MAC_JAVA_BRIDGE)
ddkilzer@apple.com's avatar
ddkilzer@apple.com committed
474
#define ENABLE_MAC_JAVA_BRIDGE 1
475
476
#endif
#if !defined(ENABLE_DASHBOARD_SUPPORT)
477
#define ENABLE_DASHBOARD_SUPPORT 1
478
#endif
ggaren@apple.com's avatar
ggaren@apple.com committed
479
#define HAVE_READLINE 1
480
#define HAVE_RUNLOOP_TIMER 1
481
#endif /* PLATFORM(MAC) && !PLATFORM(IPHONE) */
ggaren's avatar
ggaren committed
482

483
484
485
#if PLATFORM(CHROMIUM) && PLATFORM(DARWIN)
#define WTF_PLATFORM_CF 1
#define WTF_USE_PTHREADS 1
486
#define HAVE_PTHREAD_RWLOCK 1
487
488
#endif

489
#if PLATFORM(IPHONE)
bolsinga@apple.com's avatar
bolsinga@apple.com committed
490
#define ENABLE_CONTEXT_MENUS 0
bolsinga@apple.com's avatar
bolsinga@apple.com committed
491
#define ENABLE_DRAG_SUPPORT 0
492
#define ENABLE_FTPDIR 1
493
494
#define ENABLE_GEOLOCATION 1
#define ENABLE_ICONDATABASE 0
bolsinga@apple.com's avatar
bolsinga@apple.com committed
495
#define ENABLE_INSPECTOR 0
496
497
#define ENABLE_MAC_JAVA_BRIDGE 0
#define ENABLE_NETSCAPE_PLUGIN_API 0
498
#define ENABLE_ORIENTATION_EVENTS 1
499
#define ENABLE_REPAINT_THROTTLING 1
500
501
502
#define HAVE_READLINE 1
#define WTF_PLATFORM_CF 1
#define WTF_USE_PTHREADS 1
503
#define HAVE_PTHREAD_RWLOCK 1
504
505
#endif

ggaren's avatar
ggaren committed
506
#if PLATFORM(WIN)
mjs's avatar
mjs committed
507
#define WTF_USE_WININET 1
ggaren's avatar
ggaren committed
508
509
#endif

510
#if PLATFORM(WX)
511
#define ENABLE_ASSEMBLER 1
512
513
#endif

514
515
516
#if PLATFORM(GTK)
#if HAVE(PTHREAD_H)
#define WTF_USE_PTHREADS 1
517
#define HAVE_PTHREAD_RWLOCK 1
518
519
520
#endif
#endif

521
522
523
524
#if PLATFORM(HAIKU)
#define HAVE_POSIX_MEMALIGN 1
#define WTF_USE_CURL 1
#define WTF_USE_PTHREADS 1
525
#define HAVE_PTHREAD_RWLOCK 1
526
527
528
529
#define USE_SYSTEM_MALLOC 1
#define ENABLE_NETSCAPE_PLUGIN_API 0
#endif

530
#if !defined(HAVE_ACCESSIBILITY)
531
#if PLATFORM(IPHONE) || PLATFORM(MAC) || PLATFORM(WIN) || PLATFORM(GTK) || PLATFORM(CHROMIUM)
532
533
#define HAVE_ACCESSIBILITY 1
#endif
534
#endif /* !defined(HAVE_ACCESSIBILITY) */
535

536
537
538
539
#if PLATFORM(UNIX) && !PLATFORM(SYMBIAN)
#define HAVE_SIGNAL_H 1
#endif

540
541
#if !PLATFORM(WIN_OS) && !PLATFORM(SOLARIS) && !PLATFORM(QNX) \
    && !PLATFORM(SYMBIAN) && !PLATFORM(HAIKU) && !COMPILER(RVCT)
542
543
544
545
546
#define HAVE_TM_GMTOFF 1
#define HAVE_TM_ZONE 1
#define HAVE_TIMEGM 1
#endif     

ggaren@apple.com's avatar
ggaren@apple.com committed
547
548
549
#if PLATFORM(DARWIN)

#define HAVE_ERRNO_H 1
kevino@webkit.org's avatar
kevino@webkit.org committed
550
#define HAVE_LANGINFO_H 1
ggaren@apple.com's avatar
ggaren@apple.com committed
551
552
553
554
555
556
557
558
#define HAVE_MMAP 1
#define HAVE_MERGESORT 1
#define HAVE_SBRK 1
#define HAVE_STRINGS_H 1
#define HAVE_SYS_PARAM_H 1
#define HAVE_SYS_TIME_H 1
#define HAVE_SYS_TIMEB_H 1

559
#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) && !PLATFORM(IPHONE)
560
#define HAVE_MADV_FREE_REUSE 1
oliver@apple.com's avatar
oliver@apple.com committed
561
#define HAVE_MADV_FREE 1
562
#define HAVE_PTHREAD_SETNAME_NP 1
563
#endif
oliver@apple.com's avatar
oliver@apple.com committed
564

565
566
567
568
#if PLATFORM(IPHONE)
#define HAVE_MADV_FREE 1
#endif

ggaren@apple.com's avatar
ggaren@apple.com committed
569
570
571
#elif PLATFORM(WIN_OS)

#define HAVE_FLOAT_H 1
572
#if PLATFORM(WINCE)
573
574
#define HAVE_ERRNO_H 0
#else
ggaren@apple.com's avatar
ggaren@apple.com committed
575
#define HAVE_SYS_TIMEB_H 1
576
#endif
ggaren@apple.com's avatar
ggaren@apple.com committed
577
578
#define HAVE_VIRTUALALLOC 1

579
580
581
582
583
584
585
586
587
588
589
590
591
#elif PLATFORM(SYMBIAN)

#define HAVE_ERRNO_H 1
#define HAVE_MMAP 0
#define HAVE_SBRK 1

#define HAVE_SYS_TIME_H 1
#define HAVE_STRINGS_H 1

#if !COMPILER(RVCT)
#define HAVE_SYS_PARAM_H 1
#endif

592
593
594
595
596
597
598
599
600
#elif PLATFORM(QNX)

#define HAVE_ERRNO_H 1
#define HAVE_MMAP 1
#define HAVE_SBRK 1
#define HAVE_STRINGS_H 1
#define HAVE_SYS_PARAM_H 1
#define HAVE_SYS_TIME_H 1

ggaren@apple.com's avatar
ggaren@apple.com committed
601
602
603
604
605
#else

/* FIXME: is this actually used or do other platforms generate their own config.h? */

#define HAVE_ERRNO_H 1
606
607
/* As long as Haiku doesn't have a complete support of locale this will be disabled. */
#if !PLATFORM(HAIKU)
608
#define HAVE_LANGINFO_H 1
609
#endif
ggaren@apple.com's avatar
ggaren@apple.com committed
610
611
612
613
614
615
616
617
#define HAVE_MMAP 1
#define HAVE_SBRK 1
#define HAVE_STRINGS_H 1
#define HAVE_SYS_PARAM_H 1
#define HAVE_SYS_TIME_H 1

#endif

ddkilzer@apple.com's avatar
ddkilzer@apple.com committed
618
619
/* ENABLE macro defaults */

620
621
622
623
624
625
/* fastMalloc match validation allows for runtime verification that
   new is matched by delete, fastMalloc is matched by fastFree, etc. */
#if !defined(ENABLE_FAST_MALLOC_MATCH_VALIDATION)
#define ENABLE_FAST_MALLOC_MATCH_VALIDATION 0
#endif

626
627
628
#if !defined(ENABLE_ICONDATABASE)
#define ENABLE_ICONDATABASE 1
#endif
629

hausmann's avatar
hausmann committed
630
631
632
633
#if !defined(ENABLE_DATABASE)
#define ENABLE_DATABASE 1
#endif

pkasting@chromium.org's avatar
pkasting@chromium.org committed
634
635
636
637
#if !defined(ENABLE_JAVASCRIPT_DEBUGGER)
#define ENABLE_JAVASCRIPT_DEBUGGER 1
#endif

638
#if !defined(ENABLE_FTPDIR)
beidson's avatar
beidson committed
639
640
641
#define ENABLE_FTPDIR 1
#endif

bolsinga@apple.com's avatar
bolsinga@apple.com committed
642
643
644
645
#if !defined(ENABLE_CONTEXT_MENUS)
#define ENABLE_CONTEXT_MENUS 1
#endif

bolsinga@apple.com's avatar
bolsinga@apple.com committed
646
647
648
649
#if !defined(ENABLE_DRAG_SUPPORT)
#define ENABLE_DRAG_SUPPORT 1
#endif

eric@webkit.org's avatar
eric@webkit.org committed
650
651
652
653
#if !defined(ENABLE_DASHBOARD_SUPPORT)
#define ENABLE_DASHBOARD_SUPPORT 0
#endif

bolsinga@apple.com's avatar
bolsinga@apple.com committed
654
655
656
657
#if !defined(ENABLE_INSPECTOR)
#define ENABLE_INSPECTOR 1
#endif

ddkilzer@apple.com's avatar
ddkilzer@apple.com committed
658
659
660
661
#if !defined(ENABLE_MAC_JAVA_BRIDGE)
#define ENABLE_MAC_JAVA_BRIDGE 0
#endif

ddkilzer@apple.com's avatar
ddkilzer@apple.com committed
662
#if !defined(ENABLE_NETSCAPE_PLUGIN_API)
eric@webkit.org's avatar
eric@webkit.org committed
663
#define ENABLE_NETSCAPE_PLUGIN_API 1
ddkilzer@apple.com's avatar
ddkilzer@apple.com committed
664
665
#endif

666
667
668
669
#if !defined(WTF_USE_PLUGIN_HOST_PROCESS)
#define WTF_USE_PLUGIN_HOST_PROCESS 0
#endif

670
671
672
673
#if !defined(ENABLE_ORIENTATION_EVENTS)
#define ENABLE_ORIENTATION_EVENTS 0
#endif

674
675
#if !defined(ENABLE_OPCODE_STATS)
#define ENABLE_OPCODE_STATS 0
676
677
#endif

678
#define ENABLE_SAMPLING_COUNTERS 0
679
680
#define ENABLE_SAMPLING_FLAGS 0
#define ENABLE_OPCODE_SAMPLING 0
681
#define ENABLE_CODEBLOCK_SAMPLING 0
682
683
#if ENABLE(CODEBLOCK_SAMPLING) && !ENABLE(OPCODE_SAMPLING)
#error "CODEBLOCK_SAMPLING requires OPCODE_SAMPLING"
684
#endif
685
686
#if ENABLE(OPCODE_SAMPLING) || ENABLE(SAMPLING_FLAGS)
#define ENABLE_SAMPLING_THREAD 1
687
#endif
688

ddkilzer@apple.com's avatar
ddkilzer@apple.com committed
689
690
691
692
#if !defined(ENABLE_GEOLOCATION)
#define ENABLE_GEOLOCATION 0
#endif

693
694
695
696
#if !defined(ENABLE_NOTIFICATIONS)
#define ENABLE_NOTIFICATIONS 0
#endif

abarth@webkit.org's avatar
abarth@webkit.org committed
697
698
699
700
#if !defined(ENABLE_TEXT_CARET)
#define ENABLE_TEXT_CARET 1
#endif

701
702
703
704
#if !defined(ENABLE_ON_FIRST_TEXTAREA_FOCUS_SELECT_ALL)
#define ENABLE_ON_FIRST_TEXTAREA_FOCUS_SELECT_ALL 0
#endif

705
#if !defined(WTF_USE_JSVALUE64) && !defined(WTF_USE_JSVALUE32) && !defined(WTF_USE_JSVALUE32_64)
706
#if PLATFORM(X86_64) && (PLATFORM(DARWIN) || PLATFORM(LINUX))
707
#define WTF_USE_JSVALUE64 1
708
#elif PLATFORM(ARM) || PLATFORM(PPC64)
709
#define WTF_USE_JSVALUE32 1
710
711
712
713
#elif PLATFORM(WIN_OS) && COMPILER(MINGW)
/* Using JSVALUE32_64 causes padding/alignement issues for JITStubArg
on MinGW. See https://bugs.webkit.org/show_bug.cgi?id=29268 */
#define WTF_USE_JSVALUE32 1
714
#else
715
#define WTF_USE_JSVALUE32_64 1
716
#endif
717
#endif /* !defined(WTF_USE_JSVALUE64) && !defined(WTF_USE_JSVALUE32) && !defined(WTF_USE_JSVALUE32_64) */
718

antti@apple.com's avatar
antti@apple.com committed
719
720
721
722
#if !defined(ENABLE_REPAINT_THROTTLING)
#define ENABLE_REPAINT_THROTTLING 0
#endif

oliver@apple.com's avatar
oliver@apple.com committed
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
#if !defined(ENABLE_JIT)

/* The JIT is tested & working on x86_64 Mac */
#if PLATFORM(X86_64) && PLATFORM(MAC)
    #define ENABLE_JIT 1
/* The JIT is tested & working on x86 Mac */
#elif PLATFORM(X86) && PLATFORM(MAC)
    #define ENABLE_JIT 1
    #define WTF_USE_JIT_STUB_ARGUMENT_VA_LIST 1
#elif PLATFORM(ARM_THUMB2) && PLATFORM(IPHONE)
    /* Under development, temporarily disabled until 16Mb link range limit in assembler is fixed. */
    #define ENABLE_JIT 0
    #define ENABLE_JIT_OPTIMIZE_NATIVE_CALL 0
/* The JIT is tested & working on x86 Windows */
#elif PLATFORM(X86) && PLATFORM(WIN)
    #define ENABLE_JIT 1
#endif

#if PLATFORM(QT)
#if PLATFORM(X86) && PLATFORM(WIN_OS) && COMPILER(MINGW) && GCC_VERSION >= 40100
    #define ENABLE_JIT 1
    #define WTF_USE_JIT_STUB_ARGUMENT_VA_LIST 1
#elif PLATFORM(X86) && PLATFORM(WIN_OS) && COMPILER(MSVC)
    #define ENABLE_JIT 1
    #define WTF_USE_JIT_STUB_ARGUMENT_REGISTER 1
#elif PLATFORM(X86) && PLATFORM(LINUX) && GCC_VERSION >= 40100
    #define ENABLE_JIT 1
    #define WTF_USE_JIT_STUB_ARGUMENT_VA_LIST 1
#elif PLATFORM(ARM_TRADITIONAL) && PLATFORM(LINUX)
    #define ENABLE_JIT 1
    #if PLATFORM(ARM_THUMB2)
        #define ENABLE_JIT_OPTIMIZE_NATIVE_CALL 0
    #endif
#endif
#endif /* PLATFORM(QT) */

#endif /* !defined(ENABLE_JIT) */

barraclough@apple.com's avatar
barraclough@apple.com committed
761
#if ENABLE(JIT)
762
763
764
765
766
767
768
769
770
771
772
773
#ifndef ENABLE_JIT_OPTIMIZE_CALL
#define ENABLE_JIT_OPTIMIZE_CALL 1
#endif
#ifndef ENABLE_JIT_OPTIMIZE_NATIVE_CALL
#define ENABLE_JIT_OPTIMIZE_NATIVE_CALL 1
#endif
#ifndef ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS
#define ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS 1
#endif
#ifndef ENABLE_JIT_OPTIMIZE_METHOD_CALLS
#define ENABLE_JIT_OPTIMIZE_METHOD_CALLS 1
#endif
barraclough@apple.com's avatar
barraclough@apple.com committed
774
#endif
775
776
777
778
779

#if PLATFORM(X86) && COMPILER(MSVC)
#define JSC_HOST_CALL __fastcall
#elif PLATFORM(X86) && COMPILER(GCC)
#define JSC_HOST_CALL __attribute__ ((fastcall))
780
#else
781
#define JSC_HOST_CALL
782
783
#endif

784
785
786
787
#if COMPILER(GCC) && !ENABLE(JIT)
#define HAVE_COMPUTED_GOTO 1
#endif

788
#if ENABLE(JIT) && defined(COVERAGE)
789
790
791
792
793
    #define WTF_USE_INTERPRETER 0
#else
    #define WTF_USE_INTERPRETER 1
#endif

794
/* Yet Another Regex Runtime. */
795
796
#if !defined(ENABLE_YARR_JIT)

797
/* YARR supports x86 & x86-64, and has been tested on Mac and Windows. */
798
799
#if (PLATFORM(X86) && PLATFORM(MAC)) \
 || (PLATFORM(X86_64) && PLATFORM(MAC)) \
800
 /* Under development, temporarily disabled until 16Mb link range limit in assembler is fixed. */ \
801
 || (PLATFORM(ARM_THUMB2) && PLATFORM(IPHONE) && 0) \
802
803
804
805
806
 || (PLATFORM(X86) && PLATFORM(WIN))
#define ENABLE_YARR 1
#define ENABLE_YARR_JIT 1
#endif

807
808
809
810
#if PLATFORM(QT)
#if (PLATFORM(X86) && PLATFORM(WIN_OS) && COMPILER(MINGW) && GCC_VERSION >= 40100) \
 || (PLATFORM(X86) && PLATFORM(WIN_OS) && COMPILER(MSVC)) \
 || (PLATFORM(X86) && PLATFORM(LINUX) && GCC_VERSION >= 40100) \
811
 || (PLATFORM(ARM_TRADITIONAL) && PLATFORM(LINUX))
812
813
814
#define ENABLE_YARR 1
#define ENABLE_YARR_JIT 1
#endif
815
816
817
818
#endif

#endif /* !defined(ENABLE_YARR_JIT) */

819
/* Sanity Check */
820
821
822
823
#if ENABLE(YARR_JIT) && !ENABLE(YARR)
#error "YARR_JIT requires YARR"
#endif

824
#if ENABLE(JIT) || ENABLE(YARR_JIT)
825
#define ENABLE_ASSEMBLER 1
826
#endif
827
828
/* Setting this flag prevents the assembler from using RWX memory; this may improve
   security but currectly comes at a significant performance cost. */
829
#if PLATFORM(IPHONE)
830
831
#define ENABLE_ASSEMBLER_WX_EXCLUSIVE 1
#else
832
#define ENABLE_ASSEMBLER_WX_EXCLUSIVE 0
833
#endif
834

835
#if !defined(ENABLE_PAN_SCROLLING) && PLATFORM(WIN_OS)
836
837
838
#define ENABLE_PAN_SCROLLING 1
#endif

839
840
/* Use the QXmlStreamReader implementation for XMLTokenizer */
/* Use the QXmlQuery implementation for XSLTProcessor */
zecke@webkit.org's avatar
zecke@webkit.org committed
841
842
#if PLATFORM(QT)
#define WTF_USE_QXMLSTREAM 1
843
#define WTF_USE_QXMLQUERY 1
zecke@webkit.org's avatar
zecke@webkit.org committed
844
845
#endif

zecke@webkit.org's avatar
WebCorv    
zecke@webkit.org committed
846
847
848
849
#if !PLATFORM(QT)
#define WTF_USE_FONT_FAST_PATH 1
#endif

850
851
/* Accelerated compositing */
#if PLATFORM(MAC)
852
#if !defined(BUILDING_ON_TIGER)
853
854
855
856
857
858
859
860
#define WTF_USE_ACCELERATED_COMPOSITING 1
#endif
#endif

#if PLATFORM(IPHONE)
#define WTF_USE_ACCELERATED_COMPOSITING 1
#endif

861
862
863
864
865
866
#if COMPILER(GCC)
#define WARN_UNUSED_RETURN __attribute__ ((warn_unused_result))
#else
#define WARN_UNUSED_RETURN
#endif

867
#if !ENABLE(NETSCAPE_PLUGIN_API) || (ENABLE(NETSCAPE_PLUGIN_API) && ((PLATFORM(UNIX) && (PLATFORM(QT) || PLATFORM(WX))) || PLATFORM(GTK)))
868
869
870
#define ENABLE_PLUGIN_PACKAGE_SIMPLE_HASH 1
#endif

871
872
873
/* Set up a define for a common error that is intended to cause a build error -- thus the space after Error. */
#define WTF_PLATFORM_CFNETWORK Error USE_macro_should_be_used_with_CFNETWORK

mjs's avatar
mjs committed
874
#endif /* WTF_Platform_h */