Add ENABLE_PERIODIC_MEMORY_MONITOR flag.
[WebKit-https.git] / Source / WTF / wtf / PlatformEnable.h
1 /*
2  * Copyright (C) 2006-2020 Apple Inc. All rights reserved.
3  * Copyright (C) 2007-2009 Torch Mobile, Inc.
4  * Copyright (C) 2010, 2011 Research In Motion Limited. All rights reserved.
5  * Copyright (C) 2013 Samsung Electronics. All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  */
28
29 #pragma once
30
31 #ifndef WTF_PLATFORM_GUARD_AGAINST_INDIRECT_INCLUSION
32 #error "Please #include <wtf/Platform.h> instead of this file directly."
33 #endif
34
35
36 #define ENABLE(WTF_FEATURE) (defined ENABLE_##WTF_FEATURE && ENABLE_##WTF_FEATURE)
37
38 /* Use this file to list _all_ ENABLE() macros. Define the macros to be one of the following values:
39  *  - "0" disables the feature by default. The feature can still be enabled for a specific port or environment.
40  *  - "1" enables the feature by default. The feature can still be disabled for a specific port or environment.
41  *
42  * The feature defaults in this file are only taken into account if the (port specific) build system
43  * has not enabled or disabled a particular feature.
44  *
45  * Use this file to define ENABLE() macros only. Do not use this file to define USE() or macros !
46  *
47  * Only define a macro if it was not defined before - always check for !defined first.
48  *
49  * Keep the file sorted by the name of the defines. As an exception you can change the order
50  * to allow interdependencies between the default values.
51  *
52  * Below are a few potential commands to take advantage of this file running from the Source/WTF directory
53  *
54  * Get the list of feature defines: grep -o "ENABLE_\(\w\+\)" wtf/PlatformEnable.h | sort | uniq
55  * Get the list of features enabled by default for a PLATFORM(XXX): gcc -E -dM -I. -DWTF_PLATFORM_XXX "wtf/Platform.h" | grep "ENABLE_\w\+ 1" | cut -d' ' -f2 | sort
56  */
57
58
59 /* FIXME: This should be renamed to ENABLE_ASSERTS for consistency and so it can be used as ENABLE(ASSERTS). */
60 /* ASSERT_ENABLED should be true if we want the current compilation unit to
61    do debug assertion checks unconditionally (e.g. treat a debug ASSERT
62    like a RELEASE_ASSERT.
63 */
64 #ifndef ASSERT_ENABLED
65 #ifdef NDEBUG
66 #define ASSERT_ENABLED 0
67 #else
68 #define ASSERT_ENABLED 1
69 #endif
70 #endif
71
72
73 /* ==== Platform additions: additions to PlatformEnable.h from outside the main repository ==== */
74
75 #if USE(APPLE_INTERNAL_SDK) && __has_include(<WebKitAdditions/AdditionalFeatureDefines.h>)
76 #include <WebKitAdditions/AdditionalFeatureDefines.h>
77 #endif
78
79
80
81 /* ==== Platform specific defaults ==== */
82
83 /* --------- Apple Cocoa platforms --------- */
84 #if PLATFORM(COCOA)
85 #include <wtf/PlatformEnableCocoa.h>
86 #endif
87
88 /* --------- Apple Windows port --------- */
89 #if PLATFORM(WIN) && !PLATFORM(WIN_CAIRO)
90 #include <wtf/PlatformEnableWinApple.h>
91 #endif
92
93 /* --------- Windows CAIRO port --------- */
94 #if PLATFORM(WIN_CAIRO)
95 #include <wtf/PlatformEnableWinCairo.h>
96 #endif
97
98
99
100 /* ---------  ENABLE macro defaults --------- */
101
102 /* Do not use PLATFORM() tests in this section ! */
103
104 #if !defined(ENABLE_WEBPROCESS_NSRUNLOOP)
105 #define ENABLE_WEBPROCESS_NSRUNLOOP 0
106 #endif
107
108 #if !defined(ENABLE_WEBPROCESS_WINDOWSERVER_BLOCKING)
109 #define ENABLE_WEBPROCESS_WINDOWSERVER_BLOCKING 0
110 #endif
111
112 #if !defined(ENABLE_MAC_GESTURE_EVENTS)
113 #define ENABLE_MAC_GESTURE_EVENTS 0
114 #endif
115
116 #if !defined(ENABLE_CURSOR_VISIBILITY)
117 #define ENABLE_CURSOR_VISIBILITY 0
118 #endif
119
120 #if !defined(ENABLE_AIRPLAY_PICKER)
121 #define ENABLE_AIRPLAY_PICKER 0
122 #endif
123
124 #if !defined(ENABLE_APPLE_PAY_REMOTE_UI)
125 #define ENABLE_APPLE_PAY_REMOTE_UI 0
126 #endif
127
128 #if !defined(ENABLE_AUTOCORRECT)
129 #define ENABLE_AUTOCORRECT 0
130 #endif
131
132 #if !defined(ENABLE_AUTOCAPITALIZE)
133 #define ENABLE_AUTOCAPITALIZE 0
134 #endif
135
136 #if !defined(ENABLE_TEXT_AUTOSIZING)
137 #define ENABLE_TEXT_AUTOSIZING 0
138 #endif
139
140 #if !defined(ENABLE_IOS_GESTURE_EVENTS)
141 #define ENABLE_IOS_GESTURE_EVENTS 0
142 #endif
143
144 #if !defined(ENABLE_IOS_TOUCH_EVENTS)
145 #define ENABLE_IOS_TOUCH_EVENTS 0
146 #endif
147
148 #if !defined(ENABLE_PRIMARY_SNAPSHOTTED_PLUGIN_HEURISTIC)
149 #define ENABLE_PRIMARY_SNAPSHOTTED_PLUGIN_HEURISTIC 0
150 #endif
151
152 #if !defined(ENABLE_WKPDFVIEW)
153 #define ENABLE_WKPDFVIEW 0
154 #endif
155
156 #if !defined(ENABLE_PREVIEW_CONVERTER)
157 #define ENABLE_PREVIEW_CONVERTER 0
158 #endif
159
160 #if !defined(ENABLE_META_VIEWPORT)
161 #define ENABLE_META_VIEWPORT 0
162 #endif
163
164
165 #if !defined(ENABLE_FILE_REPLACEMENT)
166 #define ENABLE_FILE_REPLACEMENT 0
167 #endif
168
169 #if !defined(ENABLE_UI_SIDE_COMPOSITING)
170 #define ENABLE_UI_SIDE_COMPOSITING 0
171 #endif
172
173 #if !defined(ENABLE_3D_TRANSFORMS)
174 #define ENABLE_3D_TRANSFORMS 0
175 #endif
176
177 #if !defined(ENABLE_ACCESSIBILITY)
178 #define ENABLE_ACCESSIBILITY 1
179 #endif
180
181 #if !defined(ENABLE_ACCELERATED_2D_CANVAS)
182 #define ENABLE_ACCELERATED_2D_CANVAS 0
183 #endif
184
185 #if !defined(ENABLE_OVERFLOW_SCROLLING_TOUCH)
186 #define ENABLE_OVERFLOW_SCROLLING_TOUCH 0
187 #endif
188
189 #if !defined(ENABLE_APNG)
190 #define ENABLE_APNG 1
191 #endif
192
193 #if !defined(ENABLE_CHANNEL_MESSAGING)
194 #define ENABLE_CHANNEL_MESSAGING 1
195 #endif
196
197 #if !defined(ENABLE_CONTENT_EXTENSIONS)
198 #define ENABLE_CONTENT_EXTENSIONS 0
199 #endif
200
201 #if !defined(ENABLE_CONTEXT_MENUS)
202 #define ENABLE_CONTEXT_MENUS 1
203 #endif
204
205 #if !defined(ENABLE_CONTEXT_MENU_EVENT)
206 #define ENABLE_CONTEXT_MENU_EVENT 1
207 #endif
208
209 #if !defined(ENABLE_CSS3_TEXT)
210 #define ENABLE_CSS3_TEXT 0
211 #endif
212
213 #if !defined(ENABLE_CSS_BOX_DECORATION_BREAK)
214 #define ENABLE_CSS_BOX_DECORATION_BREAK 1
215 #endif
216
217 #if !defined(ENABLE_CSS_COMPOSITING)
218 #define ENABLE_CSS_COMPOSITING 0
219 #endif
220
221 #if !defined(ENABLE_CSS_IMAGE_RESOLUTION)
222 #define ENABLE_CSS_IMAGE_RESOLUTION 0
223 #endif
224
225 #if !defined(ENABLE_CSS_CONIC_GRADIENTS)
226 #define ENABLE_CSS_CONIC_GRADIENTS 0
227 #endif
228
229 #if !defined(ENABLE_CUSTOM_CURSOR_SUPPORT)
230 #define ENABLE_CUSTOM_CURSOR_SUPPORT 1
231 #endif
232
233 #if !defined(ENABLE_DARK_MODE_CSS)
234 #define ENABLE_DARK_MODE_CSS 0
235 #endif
236
237 #if !defined(ENABLE_DATALIST_ELEMENT)
238 #define ENABLE_DATALIST_ELEMENT 0
239 #endif
240
241 #if !defined(ENABLE_DEVICE_ORIENTATION)
242 #define ENABLE_DEVICE_ORIENTATION 0
243 #endif
244
245 #if !defined(ENABLE_DOWNLOAD_ATTRIBUTE)
246 #define ENABLE_DOWNLOAD_ATTRIBUTE 1
247 #endif
248
249 #if !defined(ENABLE_DRAG_SUPPORT)
250 #define ENABLE_DRAG_SUPPORT 1
251 #endif
252
253 #if !defined(ENABLE_ENCRYPTED_MEDIA)
254 #define ENABLE_ENCRYPTED_MEDIA 0
255 #endif
256
257 #if !defined(ENABLE_FAST_JIT_PERMISSIONS)
258 #define ENABLE_FAST_JIT_PERMISSIONS 0
259 #endif
260
261 #if !defined(ENABLE_FILTERS_LEVEL_2)
262 #define ENABLE_FILTERS_LEVEL_2 0
263 #endif
264
265 #if !defined(ENABLE_FTPDIR)
266 #define ENABLE_FTPDIR 1
267 #endif
268
269 #if !defined(ENABLE_FULLSCREEN_API)
270 #define ENABLE_FULLSCREEN_API 0
271 #endif
272
273 #if ((PLATFORM(IOS) || PLATFORM(WATCHOS) || PLATFORM(MACCATALYST)) && HAVE(AVKIT)) || PLATFORM(MAC)
274 #if !defined(ENABLE_VIDEO_PRESENTATION_MODE)
275 #define ENABLE_VIDEO_PRESENTATION_MODE 1
276 #endif
277 #endif
278
279 #if !defined(ENABLE_GAMEPAD)
280 #define ENABLE_GAMEPAD 0
281 #endif
282
283 #if !defined(ENABLE_GEOLOCATION)
284 #define ENABLE_GEOLOCATION 0
285 #endif
286
287 #if !defined(ENABLE_INDEXED_DATABASE)
288 #define ENABLE_INDEXED_DATABASE 0
289 #endif
290
291 #if !defined(ENABLE_INDEXED_DATABASE_IN_WORKERS)
292 #define ENABLE_INDEXED_DATABASE_IN_WORKERS 0
293 #endif
294
295 #if !defined(ENABLE_INPUT_TYPE_COLOR)
296 #define ENABLE_INPUT_TYPE_COLOR 1
297 #endif
298
299 #if !defined(ENABLE_INPUT_TYPE_DATE)
300 #define ENABLE_INPUT_TYPE_DATE 0
301 #endif
302
303 #if !defined(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE)
304 #define ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE 0
305 #endif
306
307 #if !defined(ENABLE_INPUT_TYPE_DATETIMELOCAL)
308 #define ENABLE_INPUT_TYPE_DATETIMELOCAL 0
309 #endif
310
311 #if !defined(ENABLE_INPUT_TYPE_MONTH)
312 #define ENABLE_INPUT_TYPE_MONTH 0
313 #endif
314
315 #if !defined(ENABLE_INPUT_TYPE_TIME)
316 #define ENABLE_INPUT_TYPE_TIME 0
317 #endif
318
319 #if !defined(ENABLE_INPUT_TYPE_WEEK)
320 #define ENABLE_INPUT_TYPE_WEEK 0
321 #endif
322
323 #if ENABLE(INPUT_TYPE_DATE) || ENABLE(INPUT_TYPE_DATETIME_INCOMPLETE) || ENABLE(INPUT_TYPE_DATETIMELOCAL) || ENABLE(INPUT_TYPE_MONTH) || ENABLE(INPUT_TYPE_TIME) || ENABLE(INPUT_TYPE_WEEK)
324 #if !defined(ENABLE_DATE_AND_TIME_INPUT_TYPES)
325 #define ENABLE_DATE_AND_TIME_INPUT_TYPES 1
326 #endif
327 #endif
328
329 #if !defined(ENABLE_INSPECTOR_ALTERNATE_DISPATCHERS)
330 #define ENABLE_INSPECTOR_ALTERNATE_DISPATCHERS 0
331 #endif
332
333 #if !defined(ENABLE_INSPECTOR_TELEMETRY)
334 #define ENABLE_INSPECTOR_TELEMETRY 0
335 #endif
336
337 #if !defined(ENABLE_LAYOUT_FORMATTING_CONTEXT)
338 #define ENABLE_LAYOUT_FORMATTING_CONTEXT 0
339 #endif
340
341 #if !defined(ENABLE_LEGACY_CSS_VENDOR_PREFIXES)
342 #define ENABLE_LEGACY_CSS_VENDOR_PREFIXES 0
343 #endif
344
345 #if !defined(ENABLE_LETTERPRESS)
346 #define ENABLE_LETTERPRESS 0
347 #endif
348
349 #if !defined(ENABLE_MATHML)
350 #define ENABLE_MATHML 1
351 #endif
352
353 #if !defined(ENABLE_MEDIA_CAPTURE)
354 #define ENABLE_MEDIA_CAPTURE 0
355 #endif
356
357 #if !defined(ENABLE_MEDIA_CONTROLS_SCRIPT)
358 #define ENABLE_MEDIA_CONTROLS_SCRIPT 0
359 #endif
360
361 #if !defined(ENABLE_MEDIA_SOURCE)
362 #define ENABLE_MEDIA_SOURCE 0
363 #endif
364
365 #if !defined(ENABLE_MEDIA_STATISTICS)
366 #define ENABLE_MEDIA_STATISTICS 0
367 #endif
368
369 #if !defined(ENABLE_MEDIA_STREAM)
370 #define ENABLE_MEDIA_STREAM 0
371 #endif
372
373 #if !defined(ENABLE_METER_ELEMENT)
374 #define ENABLE_METER_ELEMENT 1
375 #endif
376
377 #if !defined(ENABLE_MHTML)
378 #define ENABLE_MHTML 0
379 #endif
380
381 #if !defined(ENABLE_MOUSE_CURSOR_SCALE)
382 #define ENABLE_MOUSE_CURSOR_SCALE 0
383 #endif
384
385 #if !defined(ENABLE_MOUSE_FORCE_EVENTS)
386 #define ENABLE_MOUSE_FORCE_EVENTS 1
387 #endif
388
389 #if !defined(ENABLE_NETSCAPE_PLUGIN_API)
390 #define ENABLE_NETSCAPE_PLUGIN_API 1
391 #endif
392
393 #if !defined(ENABLE_NETSCAPE_PLUGIN_METADATA_CACHE)
394 #define ENABLE_NETSCAPE_PLUGIN_METADATA_CACHE 0
395 #endif
396
397 #if !defined(ENABLE_NOTIFICATIONS)
398 #define ENABLE_NOTIFICATIONS 0
399 #endif
400
401 #if !defined(ENABLE_OFFSCREEN_CANVAS)
402 #define ENABLE_OFFSCREEN_CANVAS 0
403 #endif
404
405 #if !defined(ENABLE_ORIENTATION_EVENTS)
406 #define ENABLE_ORIENTATION_EVENTS 0
407 #endif
408
409 #if OS(WINDOWS)
410 #if !defined(ENABLE_PAN_SCROLLING)
411 #define ENABLE_PAN_SCROLLING 1
412 #endif
413 #endif
414
415 #if !defined(ENABLE_PAYMENT_REQUEST)
416 #define ENABLE_PAYMENT_REQUEST 0
417 #endif
418
419 #if !defined(ENABLE_PERIODIC_MEMORY_MONITOR)
420 #define ENABLE_PERIODIC_MEMORY_MONITOR 0
421 #endif
422
423 #if !defined(ENABLE_POINTER_LOCK)
424 #define ENABLE_POINTER_LOCK 1
425 #endif
426
427 #if !defined(ENABLE_QUOTA)
428 #define ENABLE_QUOTA 0
429 #endif
430
431 #if !defined(ENABLE_REMOTE_INSPECTOR)
432 #define ENABLE_REMOTE_INSPECTOR 0
433 #endif
434
435 #if !defined(ENABLE_RUBBER_BANDING)
436 #define ENABLE_RUBBER_BANDING 0
437 #endif
438
439 #if !defined(ENABLE_SECURITY_ASSERTIONS)
440 /* Enable security assertions on all ASAN builds and debug builds. */
441 #if ASAN_ENABLED || !defined(NDEBUG)
442 #define ENABLE_SECURITY_ASSERTIONS 1
443 #endif
444 #endif
445
446 #if !defined(ENABLE_SEPARATED_WX_HEAP)
447 #define ENABLE_SEPARATED_WX_HEAP 0
448 #endif
449
450 #if !defined(ENABLE_SMOOTH_SCROLLING)
451 #define ENABLE_SMOOTH_SCROLLING 0
452 #endif
453
454 #if !defined(ENABLE_SPEECH_SYNTHESIS)
455 #define ENABLE_SPEECH_SYNTHESIS 0
456 #endif
457
458 #if !defined(ENABLE_SPELLCHECK)
459 #define ENABLE_SPELLCHECK 0
460 #endif
461
462 #if !defined(ENABLE_STREAMS_API)
463 #define ENABLE_STREAMS_API 1
464 #endif
465
466 #if !defined(ENABLE_SVG_FONTS)
467 #define ENABLE_SVG_FONTS 1
468 #endif
469
470 #if !defined(ENABLE_TEXT_CARET)
471 #define ENABLE_TEXT_CARET 1
472 #endif
473
474 #if !defined(ENABLE_TEXT_SELECTION)
475 #define ENABLE_TEXT_SELECTION 1
476 #endif
477
478 #if !defined(ENABLE_ASYNC_SCROLLING)
479 #define ENABLE_ASYNC_SCROLLING 0
480 #endif
481
482 #if !defined(ENABLE_TOUCH_EVENTS)
483 #define ENABLE_TOUCH_EVENTS 0
484 #endif
485
486 #if !defined(ENABLE_VIDEO)
487 #define ENABLE_VIDEO 0
488 #endif
489
490 #if !defined(ENABLE_VIDEO_TRACK)
491 #define ENABLE_VIDEO_TRACK 0
492 #endif
493
494 #if !defined(ENABLE_DATACUE_VALUE)
495 #define ENABLE_DATACUE_VALUE 0
496 #endif
497
498 #if !defined(ENABLE_WEBGL)
499 #define ENABLE_WEBGL 0
500 #endif
501
502 #if !defined(ENABLE_GRAPHICS_CONTEXT_GL)
503 #define ENABLE_GRAPHICS_CONTEXT_GL ENABLE_WEBGL
504 #endif
505
506 #if !defined(ENABLE_WEB_ARCHIVE)
507 #define ENABLE_WEB_ARCHIVE 0
508 #endif
509
510 #if !defined(ENABLE_WEB_AUDIO)
511 #define ENABLE_WEB_AUDIO 0
512 #endif
513
514 #if !defined(ENABLE_XSLT)
515 #define ENABLE_XSLT 1
516 #endif
517
518 #if !defined(ENABLE_DATA_INTERACTION)
519 #define ENABLE_DATA_INTERACTION 0
520 #endif
521
522 #if !defined(ENABLE_SERVICE_WORKER)
523 #define ENABLE_SERVICE_WORKER 1
524 #endif
525
526 #if !defined(ENABLE_MONOSPACE_FONT_EXCEPTION)
527 #define ENABLE_MONOSPACE_FONT_EXCEPTION 0
528 #endif
529
530 #if !defined(ENABLE_FULL_KEYBOARD_ACCESS)
531 #define ENABLE_FULL_KEYBOARD_ACCESS 0
532 #endif
533
534 #if !defined(ENABLE_PLATFORM_DRIVEN_TEXT_CHECKING)
535 #define ENABLE_PLATFORM_DRIVEN_TEXT_CHECKING 0
536 #endif
537
538 #if !defined(ENABLE_WEB_PLAYBACK_CONTROLS_MANAGER)
539 #define ENABLE_WEB_PLAYBACK_CONTROLS_MANAGER 0
540 #endif
541
542 #if !defined(ENABLE_RESOURCE_USAGE)
543 #define ENABLE_RESOURCE_USAGE 0
544 #endif
545
546 #if !defined(ENABLE_SEC_ITEM_SHIM)
547 #define ENABLE_SEC_ITEM_SHIM 0
548 #endif
549
550 #if !defined(ENABLE_DATA_DETECTION)
551 #define ENABLE_DATA_DETECTION 0
552 #endif
553
554 #if !defined(ENABLE_FILE_SHARE)
555 #define ENABLE_FILE_SHARE 1
556 #endif
557
558 /*
559  * Enable this to put each IsoHeap and other allocation categories into their own malloc heaps, so that tools like vmmap can show how big each heap is.
560  * Turn BENABLE_MALLOC_HEAP_BREAKDOWN on in bmalloc together when using this.
561  */
562 #if !defined(ENABLE_MALLOC_HEAP_BREAKDOWN)
563 #define ENABLE_MALLOC_HEAP_BREAKDOWN 0
564 #endif
565
566 #if !defined(ENABLE_CFPREFS_DIRECT_MODE)
567 #define ENABLE_CFPREFS_DIRECT_MODE 0
568 #endif
569
570
571
572 /* FIXME: This section of the file has not been cleaned up yet and needs major work. */
573
574 /* FIXME: JSC_OBJC_API_ENABLED does not match the normal ENABLE naming convention. */
575 #if !PLATFORM(COCOA)
576 #if !defined(JSC_OBJC_API_ENABLED)
577 #define JSC_OBJC_API_ENABLED 0
578 #endif
579 #endif
580
581 /* The JIT is enabled by default on all x86-64 & ARM64 platforms. */
582 #if !defined(ENABLE_JIT) && (CPU(X86_64) || CPU(ARM64)) && !CPU(APPLE_ARMV7K)
583 #define ENABLE_JIT 1
584 #endif
585
586 #if USE(JSVALUE32_64)
587 #if (CPU(ARM_THUMB2) || CPU(MIPS)) && OS(LINUX)
588 /* On ARMv7 and MIPS on Linux the JIT is enabled unless explicitly disabled. */
589 #if !defined(ENABLE_JIT)
590 #define ENABLE_JIT 1
591 #endif
592 #else
593 /* Disable JIT on all other 32bit architectures. */
594 #undef ENABLE_JIT
595 #define ENABLE_JIT 0
596 #endif
597 #endif
598
599 #if !defined(ENABLE_C_LOOP)
600 #if ENABLE(JIT) || CPU(X86_64) || (CPU(ARM64) && !defined(__ILP32__))
601 #define ENABLE_C_LOOP 0
602 #else
603 #define ENABLE_C_LOOP 1
604 #endif
605 #endif
606
607 /* FIXME: This should be turned into an #error invariant */
608 /* The FTL *does not* work on 32-bit platforms. Disable it even if someone asked us to enable it. */
609 #if USE(JSVALUE32_64)
610 #undef ENABLE_FTL_JIT
611 #define ENABLE_FTL_JIT 0
612 #endif
613
614 /* FIXME: This should be turned into an #error invariant */
615 /* The FTL is disabled on the iOS simulator, mostly for simplicity. */
616 #if PLATFORM(IOS_FAMILY_SIMULATOR)
617 #undef ENABLE_FTL_JIT
618 #define ENABLE_FTL_JIT 0
619 #endif
620
621 /* If possible, try to enable a disassembler. This is optional. We proceed in two
622    steps: first we try to find some disassembler that we can use, and then we
623    decide if the high-level disassembler API can be enabled. */
624 #if !defined(ENABLE_UDIS86) && ENABLE(JIT) && CPU(X86_64) && !USE(CAPSTONE)
625 #define ENABLE_UDIS86 1
626 #endif
627
628 #if !defined(ENABLE_ARM64_DISASSEMBLER) && ENABLE(JIT) && CPU(ARM64) && !USE(CAPSTONE)
629 #define ENABLE_ARM64_DISASSEMBLER 1
630 #endif
631
632 #if !defined(ENABLE_DISASSEMBLER) && (ENABLE(UDIS86) || ENABLE(ARM64_DISASSEMBLER) || (ENABLE(JIT) && USE(CAPSTONE)))
633 #define ENABLE_DISASSEMBLER 1
634 #endif
635
636 #if !defined(ENABLE_DFG_JIT) && ENABLE(JIT)
637
638 /* Enable the DFG JIT on X86 and X86_64. */
639 #if CPU(X86_64) && (OS(DARWIN) || OS(LINUX) || OS(FREEBSD) || OS(HURD) || OS(WINDOWS))
640 #define ENABLE_DFG_JIT 1
641 #endif
642
643 /* Enable the DFG JIT on ARMv7.  Only tested on iOS, Linux, and FreeBSD. */
644 #if (CPU(ARM_THUMB2) || CPU(ARM64)) && (OS(DARWIN) || OS(LINUX) || OS(FREEBSD))
645 #define ENABLE_DFG_JIT 1
646 #endif
647
648 /* Enable the DFG JIT on MIPS. */
649 #if CPU(MIPS)
650 #define ENABLE_DFG_JIT 1
651 #endif
652
653 #endif /* !defined(ENABLE_DFG_JIT) && ENABLE(JIT) */
654
655 /* Concurrent JS only works on 64-bit platforms because it requires that
656    values get stored to atomically. This is trivially true on 64-bit platforms,
657    but not true at all on 32-bit platforms where values are composed of two
658    separate sub-values. */
659 #if ENABLE(JIT) && USE(JSVALUE64)
660 #define ENABLE_CONCURRENT_JS 1
661 #endif
662
663 #if (CPU(X86_64) || CPU(ARM64)) && HAVE(FAST_TLS)
664 #define ENABLE_FAST_TLS_JIT 1
665 #endif
666
667 #if ENABLE(JIT) && (CPU(X86) || CPU(X86_64) || CPU(ARM_THUMB2) || CPU(ARM64) || CPU(MIPS))
668 #define ENABLE_MASM_PROBE 1
669 #endif
670
671 /* FIXME: This should be turned into an #error invariant */
672 /* If the baseline jit is not available, then disable upper tiers as well.
673    The MacroAssembler::probe() is also required for supporting the upper tiers. */
674 #if !ENABLE(JIT) || !ENABLE(MASM_PROBE)
675 #undef ENABLE_DFG_JIT
676 #undef ENABLE_FTL_JIT
677 #define ENABLE_DFG_JIT 0
678 #define ENABLE_FTL_JIT 0
679 #endif
680
681 /* FIXME: This should be turned into an #error invariant */
682 /* If the DFG jit is not available, then disable upper tiers as well: */
683 #if !ENABLE(DFG_JIT)
684 #undef ENABLE_FTL_JIT
685 #define ENABLE_FTL_JIT 0
686 #endif
687
688 /* This controls whether B3 is built. B3 is needed for FTL JIT and WebAssembly */
689 #if ENABLE(FTL_JIT)
690 #define ENABLE_B3_JIT 1
691 #endif
692
693 #if !defined(ENABLE_WEBASSEMBLY) && (ENABLE(B3_JIT) && PLATFORM(COCOA) && CPU(ADDRESS64))
694 #define ENABLE_WEBASSEMBLY 1
695 #endif
696
697 /* The SamplingProfiler is the probabilistic and low-overhead profiler used by
698  * JSC to measure where time is spent inside a JavaScript program.
699  * In configurations other than Windows and Darwin, because layout of mcontext_t depends on standard libraries (like glibc),
700  * sampling profiler is enabled if WebKit uses pthreads and glibc. */
701 #if !defined(ENABLE_SAMPLING_PROFILER) && (!ENABLE(C_LOOP) && (OS(WINDOWS) || HAVE(MACHINE_CONTEXT)))
702 #define ENABLE_SAMPLING_PROFILER 1
703 #endif
704
705 #if ENABLE(WEBASSEMBLY) && HAVE(MACHINE_CONTEXT)
706 #define ENABLE_WEBASSEMBLY_FAST_MEMORY 1
707 #endif
708
709 /* Counts uses of write barriers using sampling counters. Be sure to also
710    set ENABLE_SAMPLING_COUNTERS to 1. */
711 #if !defined(ENABLE_WRITE_BARRIER_PROFILING)
712 #define ENABLE_WRITE_BARRIER_PROFILING 0
713 #endif
714
715 /* Logs all allocation-related activity that goes through fastMalloc or the
716    JSC GC (both cells and butterflies). Also logs marking. Note that this
717    isn't a completely accurate view of the heap since it doesn't include all
718    butterfly resize operations, doesn't tell you what is going on with weak
719    references (other than to tell you when they're marked), and doesn't
720    track direct mmap() allocations or things like JIT allocation. */
721 #if !defined(ENABLE_ALLOCATION_LOGGING)
722 #define ENABLE_ALLOCATION_LOGGING 0
723 #endif
724
725 /* Enable verification that that register allocations are not made within generated control flow.
726    Turned on for debug builds. */
727 #if !defined(ENABLE_DFG_REGISTER_ALLOCATION_VALIDATION) && ENABLE(DFG_JIT) && !defined(NDEBUG)
728 #define ENABLE_DFG_REGISTER_ALLOCATION_VALIDATION 1
729 #endif
730
731 /* Determine if we need to enable Computed Goto Opcodes or not: */
732 #if HAVE(COMPUTED_GOTO) || !ENABLE(C_LOOP)
733 #define ENABLE_COMPUTED_GOTO_OPCODES 1
734 #endif
735
736 /* Regular Expression Tracing - Set to 1 to trace RegExp's in jsc.  Results dumped at exit */
737 #if !defined(ENABLE_REGEXP_TRACING)
738 #define ENABLE_REGEXP_TRACING 0
739 #endif
740
741 /* Yet Another Regex Runtime - turned on by default for JIT enabled ports. */
742 #if !defined(ENABLE_YARR_JIT) && ENABLE(JIT)
743 #define ENABLE_YARR_JIT 1
744 #endif
745
746 /* Setting this flag compares JIT results with interpreter results. */
747 #if !defined(ENABLE_YARR_JIT) && ENABLE(JIT)
748 #define ENABLE_YARR_JIT_DEBUG 0
749 #endif
750
751 /* Enable JIT'ing Regular Expressions that have nested parenthesis . */
752 #if ENABLE(YARR_JIT) && (CPU(ARM64) || (CPU(X86_64) && !OS(WINDOWS)))
753 #define ENABLE_YARR_JIT_ALL_PARENS_EXPRESSIONS 1
754 #endif
755
756 /* Enable JIT'ing Regular Expressions that have nested back references. */
757 #if ENABLE(YARR_JIT) && (CPU(ARM64) || (CPU(X86_64) && !OS(WINDOWS)))
758 #define ENABLE_YARR_JIT_BACKREFERENCES 1
759 #endif
760
761 /* If either the JIT or the RegExp JIT is enabled, then the Assembler must be
762    enabled as well: */
763 #if ENABLE(JIT) || ENABLE(YARR_JIT) || !ENABLE(C_LOOP)
764 #if defined(ENABLE_ASSEMBLER) && !ENABLE_ASSEMBLER
765 #error "Cannot enable the JIT or RegExp JIT without enabling the Assembler"
766 #else
767 #undef ENABLE_ASSEMBLER
768 #define ENABLE_ASSEMBLER 1
769 #endif
770 #endif
771
772 /* If the Disassembler is enabled, then the Assembler must be enabled as well: */
773 #if ENABLE(DISASSEMBLER)
774 #if defined(ENABLE_ASSEMBLER) && !ENABLE_ASSEMBLER
775 #error "Cannot enable the Disassembler without enabling the Assembler"
776 #else
777 #undef ENABLE_ASSEMBLER
778 #define ENABLE_ASSEMBLER 1
779 #endif
780 #endif
781
782 #if !defined(ENABLE_EXCEPTION_SCOPE_VERIFICATION)
783 #define ENABLE_EXCEPTION_SCOPE_VERIFICATION ASSERT_ENABLED
784 #endif
785
786 #if ENABLE(DFG_JIT) && HAVE(MACHINE_CONTEXT) && (CPU(X86_64) || CPU(ARM64))
787 #define ENABLE_SIGNAL_BASED_VM_TRAPS 1
788 #endif
789
790 /* CSS Selector JIT Compiler */
791 #if !defined(ENABLE_CSS_SELECTOR_JIT) && ((CPU(X86_64) || CPU(ARM64) || (CPU(ARM_THUMB2) && OS(DARWIN))) && ENABLE(JIT) && (OS(DARWIN) || PLATFORM(GTK) || PLATFORM(WPE)))
792 #define ENABLE_CSS_SELECTOR_JIT 1
793 #endif
794
795 #if CPU(ARM_THUMB2) || CPU(ARM64)
796 #define ENABLE_BRANCH_COMPACTION 1
797 #endif
798
799 #if !defined(ENABLE_THREADING_LIBDISPATCH) && HAVE(DISPATCH_H)
800 #define ENABLE_THREADING_LIBDISPATCH 1
801 #elif !defined(ENABLE_THREADING_OPENMP) && defined(_OPENMP)
802 #define ENABLE_THREADING_OPENMP 1
803 #elif !defined(THREADING_GENERIC)
804 #define ENABLE_THREADING_GENERIC 1
805 #endif
806
807 #if !defined(ENABLE_GC_VALIDATION) && !defined(NDEBUG)
808 #define ENABLE_GC_VALIDATION 1
809 #endif
810
811 #if !defined(ENABLE_BINDING_INTEGRITY) && !OS(WINDOWS)
812 #define ENABLE_BINDING_INTEGRITY 1
813 #endif
814
815 #if !defined(ENABLE_TREE_DEBUGGING) && !defined(NDEBUG)
816 #define ENABLE_TREE_DEBUGGING 1
817 #endif
818
819 #if !defined(ENABLE_OPENTYPE_VERTICAL) && PLATFORM(GTK) || PLATFORM(WPE)
820 #define ENABLE_OPENTYPE_VERTICAL 1
821 #endif
822
823 #if !defined(ENABLE_OPENTYPE_MATH) && (OS(DARWIN) && USE(CG)) || (USE(FREETYPE) && !PLATFORM(GTK)) || (PLATFORM(WIN) && (USE(CG) || USE(CAIRO)))
824 #define ENABLE_OPENTYPE_MATH 1
825 #endif
826
827 #if !defined(ENABLE_INLINE_PATH_DATA) && USE(CG)
828 #define ENABLE_INLINE_PATH_DATA 1
829 #endif
830
831 /* Disable SharedArrayBuffers until Spectre security concerns are mitigated. */
832 #define ENABLE_SHARED_ARRAY_BUFFER 0
833
834
835 #if ((PLATFORM(COCOA) || PLATFORM(PLAYSTATION) || PLATFORM(WPE)) && ENABLE(ASYNC_SCROLLING)) || PLATFORM(GTK)
836 #define ENABLE_KINETIC_SCROLLING 1
837 #endif
838
839 #if PLATFORM(MAC)
840 // FIXME: Maybe this can be combined with ENABLE_KINETIC_SCROLLING.
841 #define ENABLE_WHEEL_EVENT_LATCHING 1
842 #endif
843
844 #if !defined(ENABLE_SCROLLING_THREAD)
845 #if USE(NICOSIA)
846 #define ENABLE_SCROLLING_THREAD 1
847 #else
848 #define ENABLE_SCROLLING_THREAD 0
849 #endif
850 #endif
851
852 /* This feature works by embedding the OpcodeID in the 32 bit just before the generated LLint code
853    that executes each opcode. It cannot be supported by the CLoop since there's no way to embed the
854    OpcodeID word in the CLoop's switch statement cases. It is also currently not implemented for MSVC.
855 */
856 #if !defined(ENABLE_LLINT_EMBEDDED_OPCODE_ID) && !ENABLE(C_LOOP) && !COMPILER(MSVC) && (CPU(X86) || CPU(X86_64) || CPU(ARM64) || (CPU(ARM_THUMB2) && OS(DARWIN)))
857 #define ENABLE_LLINT_EMBEDDED_OPCODE_ID 1
858 #endif
859
860
861
862
863
864 /* Asserts, invariants for macro definitions */
865
866 #if ENABLE(VIDEO_TRACK) && !ENABLE(VIDEO)
867 #error "ENABLE(VIDEO_TRACK) requires ENABLE(VIDEO)"
868 #endif
869
870 #if ENABLE(MEDIA_CONTROLS_SCRIPT) && !ENABLE(VIDEO)
871 #error "ENABLE(MEDIA_CONTROLS_SCRIPT) requires ENABLE(VIDEO)"
872 #endif
873
874 #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS) && !ENABLE(REMOTE_INSPECTOR)
875 #error "ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS) requires ENABLE(REMOTE_INSPECTOR)"
876 #endif
877
878 #if ENABLE(IOS_TOUCH_EVENTS) && !ENABLE(TOUCH_EVENTS)
879 #error "ENABLE(IOS_TOUCH_EVENTS) requires ENABLE(TOUCH_EVENTS)"
880 #endif
881
882 #if ENABLE(WEBGL) && !ENABLE(GRAPHICS_CONTEXT_GL)
883 #error "ENABLE(WEBGL) requires ENABLE(GRAPHICS_CONTEXT_GL)"
884 #endif
885
886 #if ENABLE(WEBGL2) && !ENABLE(WEBGL)
887 #error "ENABLE(WEBGL2) requires ENABLE(WEBGL)"
888 #endif
889
890 #if CPU(ARM64) && CPU(ADDRESS64)
891 #define USE_JUMP_ISLANDS 1
892 #endif