0ab2c59721b8d776c5e93a481d910e690de0a064
[WebKit-https.git] / JavaScriptCore / wtf / Platform.h
1 /*
2  * Copyright (C) 2006 Apple Computer, Inc.  All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef WTF_Platform_h
27 #define WTF_Platform_h
28
29 /* PLATFORM handles OS, operating environment, graphics API, and CPU */
30 #define PLATFORM(WTF_FEATURE) (defined( WTF_PLATFORM_##WTF_FEATURE ) && WTF_PLATFORM_##WTF_FEATURE)
31 #define COMPILER(WTF_FEATURE) (defined( WTF_COMPILER_##WTF_FEATURE ) && WTF_COMPILER_##WTF_FEATURE)
32 #define HAVE(WTF_FEATURE) (defined( HAVE_##WTF_FEATURE ) && HAVE_##WTF_FEATURE)
33 #define USE(WTF_FEATURE) (defined( WTF_USE_##WTF_FEATURE ) && WTF_USE_##WTF_FEATURE)
34 #define ENABLE(WTF_FEATURE) (defined( ENABLE_##WTF_FEATURE ) && ENABLE_##WTF_FEATURE)
35
36 /* Operating systems - low-level dependencies */
37
38 /* PLATFORM(DARWIN) */
39 /* Operating system level dependencies for Mac OS X / Darwin that should */
40 /* be used regardless of operating environment */
41 #ifdef __APPLE__
42 #define WTF_PLATFORM_DARWIN 1
43 #endif
44
45 /* PLATFORM(WIN_OS) */
46 /* Operating system level dependencies for Windows that should be used */
47 /* regardless of operating environment */
48 #if defined(WIN32) || defined(_WIN32)
49 #define WTF_PLATFORM_WIN_OS 1
50 #endif
51
52 /* PLATFORM(WIN_CE) */
53 /* Operating system level dependencies for Windows CE that should be used */
54 /* regardless of operating environment */
55 /* Note that for this platform PLATFORM(WIN_OS) is also defined. */
56 #if defined(_WIN32_WCE)
57 #define WTF_PLATFORM_WIN_CE 1
58 #endif
59
60 /* PLATFORM(FREEBSD) */
61 /* Operating system level dependencies for FreeBSD-like systems that */
62 /* should be used regardless of operating environment */
63 #ifdef __FreeBSD__
64 #define WTF_PLATFORM_FREEBSD 1
65 #endif
66
67 /* PLATFORM(OPENBSD) */
68 /* Operating system level dependencies for OpenBSD systems that */
69 /* should be used regardless of operating environment */
70 #ifdef __OpenBSD__
71 #define WTF_PLATFORM_OPENBSD 1
72 #endif
73
74 /* PLATFORM(SOLARIS) */
75 /* Operating system level dependencies for Solaris that should be used */
76 /* regardless of operating environment */
77 #if defined(sun) || defined(__sun)
78 #define WTF_PLATFORM_SOLARIS 1
79 #endif
80
81 #if defined (__S60__) || defined (__SYMBIAN32__)
82 /* we are cross-compiling, it is not really windows */
83 #undef WTF_PLATFORM_WIN_OS
84 #undef WTF_PLATFORM_WIN
85 #undef WTF_PLATFORM_CAIRO
86 #define WTF_PLATFORM_S60 1
87 #define WTF_PLATFORM_SYMBIAN 1
88 #endif
89
90 /* PLATFORM(UNIX) */
91 /* Operating system level dependencies for Unix-like systems that */
92 /* should be used regardless of operating environment */
93 #if   PLATFORM(DARWIN)     \
94    || PLATFORM(FREEBSD)    \
95    || PLATFORM(S60)        \
96    || defined(unix)        \
97    || defined(__unix)      \
98    || defined(__unix__)    \
99    || defined (__NetBSD__) \
100    || defined(_AIX)
101 #define WTF_PLATFORM_UNIX 1
102 #endif
103
104 /* Operating environments */
105
106 /* PLATFORM(CHROMIUM) */
107 /* PLATFORM(QT) */
108 /* PLATFORM(GTK) */
109 /* PLATFORM(MAC) */
110 /* PLATFORM(WIN) */
111 #if defined(BUILDING_CHROMIUM__)
112 #define WTF_PLATFORM_CHROMIUM 1
113 #elif defined(BUILDING_QT__)
114 #define WTF_PLATFORM_QT 1
115
116 /* PLATFORM(KDE) */
117 #if defined(BUILDING_KDE__)
118 #define WTF_PLATFORM_KDE 1
119 #endif
120
121 #elif defined(BUILDING_WX__)
122 #define WTF_PLATFORM_WX 1
123 #elif defined(BUILDING_GTK__)
124 #define WTF_PLATFORM_GTK 1
125 #elif PLATFORM(DARWIN)
126 #define WTF_PLATFORM_MAC 1
127 #elif PLATFORM(WIN_OS)
128 #define WTF_PLATFORM_WIN 1
129 #endif
130
131 /* Graphics engines */
132
133 /* PLATFORM(CG) and PLATFORM(CI) */
134 #if PLATFORM(MAC)
135 #define WTF_PLATFORM_CG 1
136 #define WTF_PLATFORM_CI 1
137 #endif
138
139 /* PLATFORM(SKIA) for Win/Linux, CG/CI for Mac */
140 #if PLATFORM(CHROMIUM)
141 #if PLATFORM(DARWIN)
142 #define WTF_PLATFORM_CG 1
143 #define WTF_PLATFORM_CI 1
144 #define WTF_USE_ATSUI 1
145 #else
146 #define WTF_PLATFORM_SKIA 1
147 #endif
148 #endif
149
150 /* Makes PLATFORM(WIN) default to PLATFORM(CAIRO) */
151 /* FIXME: This should be changed from a blacklist to a whitelist */
152 #if !PLATFORM(MAC) && !PLATFORM(QT) && !PLATFORM(WX) && !PLATFORM(CHROMIUM)
153 #define WTF_PLATFORM_CAIRO 1
154 #endif
155
156 /* CPU */
157
158 /* PLATFORM(PPC) */
159 #if   defined(__ppc__)     \
160    || defined(__PPC__)     \
161    || defined(__powerpc__) \
162    || defined(__powerpc)   \
163    || defined(__POWERPC__) \
164    || defined(_M_PPC)      \
165    || defined(__PPC)
166 #define WTF_PLATFORM_PPC 1
167 #define WTF_PLATFORM_BIG_ENDIAN 1
168 #endif
169
170 /* PLATFORM(PPC64) */
171 #if   defined(__ppc64__) \
172    || defined(__PPC64__)
173 #define WTF_PLATFORM_PPC64 1
174 #define WTF_PLATFORM_BIG_ENDIAN 1
175 #endif
176
177 /* PLATFORM(ARM) */
178 #if   defined(arm) \
179    || defined(__arm__)
180 #define WTF_PLATFORM_ARM 1
181 #if defined(__ARMEB__)
182 #define WTF_PLATFORM_BIG_ENDIAN 1
183 #elif !defined(__ARM_EABI__) && !defined(__ARMEB__) && !defined(__VFP_FP__)
184 #define WTF_PLATFORM_MIDDLE_ENDIAN 1
185 #endif
186 #if !defined(__ARM_EABI__)
187 #define WTF_PLATFORM_FORCE_PACK 1
188 #endif
189 #endif
190
191 /* PLATFORM(X86) */
192 #if   defined(__i386__) \
193    || defined(i386)     \
194    || defined(_M_IX86)  \
195    || defined(_X86_)    \
196    || defined(__THW_INTEL)
197 #define WTF_PLATFORM_X86 1
198 #endif
199
200 /* PLATFORM(X86_64) */
201 #if   defined(__x86_64__) \
202    || defined(__ia64__) \
203    || defined(_M_X64)
204 #define WTF_PLATFORM_X86_64 1
205 #endif
206
207 /* PLATFORM(SPARC64) */
208 #if defined(__sparc64__)
209 #define WTF_PLATFORM_SPARC64 1
210 #define WTF_PLATFORM_BIG_ENDIAN 1
211 #endif
212
213 /* PLATFORM(WIN_CE) && PLATFORM(QT)
214    We can not determine the endianess at compile time. For
215    Qt for Windows CE the endianess is specified in the
216    device specific makespec
217 */
218 #if PLATFORM(WIN_CE) && PLATFORM(QT)
219 #   include <QtGlobal>
220 #   undef WTF_PLATFORM_BIG_ENDIAN
221 #   undef WTF_PLATFORM_MIDDLE_ENDIAN
222 #   if Q_BYTE_ORDER == Q_BIG_EDIAN
223 #       define WTF_PLATFORM_BIG_ENDIAN 1
224 #   endif
225 #endif
226
227 /* Compiler */
228
229 /* COMPILER(MSVC) */
230 #if defined(_MSC_VER)
231 #define WTF_COMPILER_MSVC 1
232 #if _MSC_VER < 1400
233 #define WTF_COMPILER_MSVC7 1
234 #endif
235 #endif
236
237 /* COMPILER(GCC) */
238 #if defined(__GNUC__)
239 #define WTF_COMPILER_GCC 1
240 #endif
241
242 /* COMPILER(MINGW) */
243 #if defined(MINGW) || defined(__MINGW32__)
244 #define WTF_COMPILER_MINGW 1
245 #endif
246
247 /* COMPILER(BORLAND) */
248 /* not really fully supported - is this relevant any more? */
249 #if defined(__BORLANDC__)
250 #define WTF_COMPILER_BORLAND 1
251 #endif
252
253 /* COMPILER(CYGWIN) */
254 /* not really fully supported - is this relevant any more? */
255 #if defined(__CYGWIN__)
256 #define WTF_COMPILER_CYGWIN 1
257 #endif
258
259 /* COMPILER(RVCT) */
260 #if defined(__CC_ARM) || defined(__ARMCC__)
261 #define WTF_COMPILER_RVCT 1
262 #endif
263
264 /* COMPILER(WINSCW) */
265 #if defined(__WINSCW__)
266 #define WTF_COMPILER_WINSCW 1
267 #endif
268
269 #if (PLATFORM(MAC) || PLATFORM(WIN)) && !defined(ENABLE_JSC_MULTIPLE_THREADS)
270 #define ENABLE_JSC_MULTIPLE_THREADS 1
271 #endif
272
273 /* for Unicode, KDE uses Qt */
274 #if PLATFORM(KDE) || PLATFORM(QT)
275 #define WTF_USE_QT4_UNICODE 1
276 #elif PLATFORM(SYMBIAN)
277 #define WTF_USE_SYMBIAN_UNICODE 1
278 #elif PLATFORM(GTK)
279 /* The GTK+ Unicode backend is configurable */
280 #else
281 #define WTF_USE_ICU_UNICODE 1
282 #endif
283
284 #if PLATFORM(MAC)
285 #define WTF_PLATFORM_CF 1
286 #define WTF_USE_PTHREADS 1
287 #if !defined(ENABLE_MAC_JAVA_BRIDGE)
288 #define ENABLE_MAC_JAVA_BRIDGE 1
289 #endif
290 #if !defined(ENABLE_DASHBOARD_SUPPORT)
291 #define ENABLE_DASHBOARD_SUPPORT 1
292 #endif
293 #define HAVE_READLINE 1
294 #if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD)
295 #define HAVE_DTRACE 1
296 #endif
297 #endif
298
299 #if PLATFORM(CHROMIUM) && PLATFORM(DARWIN)
300 #define WTF_PLATFORM_CF 1
301 #define WTF_USE_PTHREADS 1
302 #endif
303
304 #if PLATFORM(WIN)
305 #define WTF_USE_WININET 1
306 #endif
307
308 #if PLATFORM(WX)
309 #define WTF_USE_CURL 1
310 #define WTF_USE_PTHREADS 1
311 #endif
312
313 #if PLATFORM(GTK)
314 #if HAVE(PTHREAD_H)
315 #define WTF_USE_PTHREADS 1
316 #endif
317 #endif
318
319 #if !defined(HAVE_ACCESSIBILITY)
320 #if PLATFORM(MAC) || PLATFORM(WIN) || PLATFORM(GTK) || PLATFORM(CHROMIUM)
321 #define HAVE_ACCESSIBILITY 1
322 #endif
323 #endif // !defined(HAVE_ACCESSIBILITY)
324
325 #if COMPILER(GCC)
326 #define HAVE_COMPUTED_GOTO 1
327 #endif
328
329 #if PLATFORM(DARWIN)
330
331 #define HAVE_ERRNO_H 1
332 #define HAVE_MMAP 1
333 #define HAVE_MERGESORT 1
334 #define HAVE_SBRK 1
335 #define HAVE_STRINGS_H 1
336 #define HAVE_SYS_PARAM_H 1
337 #define HAVE_SYS_TIME_H 1
338 #define HAVE_SYS_TIMEB_H 1
339
340 #elif PLATFORM(WIN_OS)
341
342 #define HAVE_FLOAT_H 1
343 #if PLATFORM(WIN_CE)
344 #define HAVE_ERRNO_H 0
345 #else
346 #define HAVE_SYS_TIMEB_H 1
347 #endif
348 #define HAVE_VIRTUALALLOC 1
349
350 #elif PLATFORM(SYMBIAN)
351
352 #define HAVE_ERRNO_H 1
353 #define HAVE_MMAP 0
354 #define HAVE_SBRK 1
355
356 #define HAVE_SYS_TIME_H 1
357 #define HAVE_STRINGS_H 1
358
359 #if !COMPILER(RVCT)
360 #define HAVE_SYS_PARAM_H 1
361 #endif
362
363 #else
364
365 /* FIXME: is this actually used or do other platforms generate their own config.h? */
366
367 #define HAVE_ERRNO_H 1
368 #define HAVE_MMAP 1
369 #define HAVE_SBRK 1
370 #define HAVE_STRINGS_H 1
371 #define HAVE_SYS_PARAM_H 1
372 #define HAVE_SYS_TIME_H 1
373
374 #endif
375
376 /* ENABLE macro defaults */
377
378 #if !defined(ENABLE_ICONDATABASE)
379 #define ENABLE_ICONDATABASE 1
380 #endif
381
382 #if !defined(ENABLE_DATABASE)
383 #define ENABLE_DATABASE 1
384 #endif
385
386 #if !defined(ENABLE_JAVASCRIPT_DEBUGGER)
387 #define ENABLE_JAVASCRIPT_DEBUGGER 1
388 #endif
389
390 #if !defined(ENABLE_FTPDIR)
391 #define ENABLE_FTPDIR 1
392 #endif
393
394 #if !defined(ENABLE_DASHBOARD_SUPPORT)
395 #define ENABLE_DASHBOARD_SUPPORT 0
396 #endif
397
398 #if !defined(ENABLE_MAC_JAVA_BRIDGE)
399 #define ENABLE_MAC_JAVA_BRIDGE 0
400 #endif
401
402 #if !defined(ENABLE_NETSCAPE_PLUGIN_API)
403 #define ENABLE_NETSCAPE_PLUGIN_API 1
404 #endif
405
406 #if !defined(ENABLE_OPCODE_STATS)
407 #define ENABLE_OPCODE_STATS 0
408 #endif
409
410 #if !defined(ENABLE_CODEBLOCK_SAMPLING)
411 #define ENABLE_CODEBLOCK_SAMPLING 0
412 #endif
413
414 #if ENABLE(CODEBLOCK_SAMPLING) && !defined(ENABLE_OPCODE_SAMPLING)
415 #define ENABLE_OPCODE_SAMPLING 1
416 #endif
417
418 #if !defined(ENABLE_OPCODE_SAMPLING)
419 #define ENABLE_OPCODE_SAMPLING 0
420 #endif
421
422 #if !defined(ENABLE_GEOLOCATION)
423 #define ENABLE_GEOLOCATION 0
424 #endif
425
426 /* CTI only supports x86 at the moment, and has only been tested on Mac and Windows. */
427 #if !defined(ENABLE_JIT) && PLATFORM(X86) && (PLATFORM(MAC) || PLATFORM(WIN))
428 #define ENABLE_JIT 1
429 #define ENABLE_JIT_OPTIMIZE_CALL 1
430 #define ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS 1
431 #define ENABLE_JIT_OPTIMIZE_ARITHMETIC 1
432 #endif
433
434 /* WREC only supports x86 at the moment, and has only been tested on Mac and Windows. */
435 #if !defined(ENABLE_WREC) && PLATFORM(X86) && (PLATFORM(MAC) || PLATFORM(WIN))
436 #define ENABLE_WREC 1
437 #endif
438
439 #if ENABLE(JIT) || ENABLE(WREC)
440 #define ENABLE_ASSEMBLER 1
441 #endif
442
443 #if !defined(ENABLE_PAN_SCROLLING) && PLATFORM(WIN_OS)
444 #define ENABLE_PAN_SCROLLING 1
445 #endif
446
447 #if !defined(ENABLE_ACTIVEX_TYPE_CONVERSION_WMPLAYER)
448 #define ENABLE_ACTIVEX_TYPE_CONVERSION_WMPLAYER 1
449 #endif
450
451 /* Use the QtXmlStreamReader implementation for XMLTokenizer */
452 #if PLATFORM(QT)
453 #if !ENABLE(XSLT)
454 #define WTF_USE_QXMLSTREAM 1
455 #endif
456 #endif
457
458 /* Use "fastcall" calling convention on MSVC */
459 #if COMPILER(MSVC)
460 #define WTF_USE_FAST_CALL_CTI_ARGUMENT 1
461 #define WTF_USE_CTI_ARGUMENT 1
462 #endif
463
464 #if !PLATFORM(QT)
465 #define WTF_USE_FONT_FAST_PATH 1
466 #endif
467
468 #endif /* WTF_Platform_h */