52e23336118a7c0b651d03cc5fe065d978abd36a
[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_POINTER_LOCK)
420 #define ENABLE_POINTER_LOCK 1
421 #endif
422
423 #if !defined(ENABLE_QUOTA)
424 #define ENABLE_QUOTA 0
425 #endif
426
427 #if !defined(ENABLE_REMOTE_INSPECTOR)
428 #define ENABLE_REMOTE_INSPECTOR 0
429 #endif
430
431 #if !defined(ENABLE_RUBBER_BANDING)
432 #define ENABLE_RUBBER_BANDING 0
433 #endif
434
435 #if !defined(ENABLE_SECURITY_ASSERTIONS)
436 /* Enable security assertions on all ASAN builds and debug builds. */
437 #if ASAN_ENABLED || !defined(NDEBUG)
438 #define ENABLE_SECURITY_ASSERTIONS 1
439 #endif
440 #endif
441
442 #if !defined(ENABLE_SEPARATED_WX_HEAP)
443 #define ENABLE_SEPARATED_WX_HEAP 0
444 #endif
445
446 #if !defined(ENABLE_SMOOTH_SCROLLING)
447 #define ENABLE_SMOOTH_SCROLLING 0
448 #endif
449
450 #if !defined(ENABLE_SPEECH_SYNTHESIS)
451 #define ENABLE_SPEECH_SYNTHESIS 0
452 #endif
453
454 #if !defined(ENABLE_SPELLCHECK)
455 #define ENABLE_SPELLCHECK 0
456 #endif
457
458 #if !defined(ENABLE_STREAMS_API)
459 #define ENABLE_STREAMS_API 1
460 #endif
461
462 #if !defined(ENABLE_SVG_FONTS)
463 #define ENABLE_SVG_FONTS 1
464 #endif
465
466 #if !defined(ENABLE_TEXT_CARET)
467 #define ENABLE_TEXT_CARET 1
468 #endif
469
470 #if !defined(ENABLE_TEXT_SELECTION)
471 #define ENABLE_TEXT_SELECTION 1
472 #endif
473
474 #if !defined(ENABLE_ASYNC_SCROLLING)
475 #define ENABLE_ASYNC_SCROLLING 0
476 #endif
477
478 #if !defined(ENABLE_TOUCH_EVENTS)
479 #define ENABLE_TOUCH_EVENTS 0
480 #endif
481
482 #if !defined(ENABLE_VIDEO)
483 #define ENABLE_VIDEO 0
484 #endif
485
486 #if !defined(ENABLE_VIDEO_TRACK)
487 #define ENABLE_VIDEO_TRACK 0
488 #endif
489
490 #if !defined(ENABLE_DATACUE_VALUE)
491 #define ENABLE_DATACUE_VALUE 0
492 #endif
493
494 #if !defined(ENABLE_WEBGL)
495 #define ENABLE_WEBGL 0
496 #endif
497
498 #if !defined(ENABLE_GRAPHICS_CONTEXT_GL)
499 #define ENABLE_GRAPHICS_CONTEXT_GL ENABLE_WEBGL
500 #endif
501
502 #if !defined(ENABLE_WEB_ARCHIVE)
503 #define ENABLE_WEB_ARCHIVE 0
504 #endif
505
506 #if !defined(ENABLE_WEB_AUDIO)
507 #define ENABLE_WEB_AUDIO 0
508 #endif
509
510 #if !defined(ENABLE_XSLT)
511 #define ENABLE_XSLT 1
512 #endif
513
514 #if !defined(ENABLE_DATA_INTERACTION)
515 #define ENABLE_DATA_INTERACTION 0
516 #endif
517
518 #if !defined(ENABLE_SERVICE_WORKER)
519 #define ENABLE_SERVICE_WORKER 1
520 #endif
521
522 #if !defined(ENABLE_MONOSPACE_FONT_EXCEPTION)
523 #define ENABLE_MONOSPACE_FONT_EXCEPTION 0
524 #endif
525
526 #if !defined(ENABLE_FULL_KEYBOARD_ACCESS)
527 #define ENABLE_FULL_KEYBOARD_ACCESS 0
528 #endif
529
530 #if !defined(ENABLE_PLATFORM_DRIVEN_TEXT_CHECKING)
531 #define ENABLE_PLATFORM_DRIVEN_TEXT_CHECKING 0
532 #endif
533
534 #if !defined(ENABLE_WEB_PLAYBACK_CONTROLS_MANAGER)
535 #define ENABLE_WEB_PLAYBACK_CONTROLS_MANAGER 0
536 #endif
537
538 #if !defined(ENABLE_RESOURCE_USAGE)
539 #define ENABLE_RESOURCE_USAGE 0
540 #endif
541
542 #if !defined(ENABLE_SEC_ITEM_SHIM)
543 #define ENABLE_SEC_ITEM_SHIM 0
544 #endif
545
546 #if !defined(ENABLE_DATA_DETECTION)
547 #define ENABLE_DATA_DETECTION 0
548 #endif
549
550 #if !defined(ENABLE_FILE_SHARE)
551 #define ENABLE_FILE_SHARE 1
552 #endif
553
554 /*
555  * 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.
556  * Turn BENABLE_MALLOC_HEAP_BREAKDOWN on in bmalloc together when using this.
557  */
558 #if !defined(ENABLE_MALLOC_HEAP_BREAKDOWN)
559 #define ENABLE_MALLOC_HEAP_BREAKDOWN 0
560 #endif
561
562 #if !defined(ENABLE_CFPREFS_DIRECT_MODE)
563 #define ENABLE_CFPREFS_DIRECT_MODE 0
564 #endif
565
566
567
568 /* FIXME: This section of the file has not been cleaned up yet and needs major work. */
569
570 /* FIXME: JSC_OBJC_API_ENABLED does not match the normal ENABLE naming convention. */
571 #if !PLATFORM(COCOA)
572 #if !defined(JSC_OBJC_API_ENABLED)
573 #define JSC_OBJC_API_ENABLED 0
574 #endif
575 #endif
576
577 /* The JIT is enabled by default on all x86-64 & ARM64 platforms. */
578 #if !defined(ENABLE_JIT) && (CPU(X86_64) || CPU(ARM64)) && !CPU(APPLE_ARMV7K)
579 #define ENABLE_JIT 1
580 #endif
581
582 #if USE(JSVALUE32_64)
583 #if (CPU(ARM_THUMB2) || CPU(MIPS)) && OS(LINUX)
584 /* On ARMv7 and MIPS on Linux the JIT is enabled unless explicitly disabled. */
585 #if !defined(ENABLE_JIT)
586 #define ENABLE_JIT 1
587 #endif
588 #else
589 /* Disable JIT on all other 32bit architectures. */
590 #undef ENABLE_JIT
591 #define ENABLE_JIT 0
592 #endif
593 #endif
594
595 #if !defined(ENABLE_C_LOOP)
596 #if ENABLE(JIT) || CPU(X86_64) || (CPU(ARM64) && !defined(__ILP32__))
597 #define ENABLE_C_LOOP 0
598 #else
599 #define ENABLE_C_LOOP 1
600 #endif
601 #endif
602
603 /* FIXME: This should be turned into an #error invariant */
604 /* The FTL *does not* work on 32-bit platforms. Disable it even if someone asked us to enable it. */
605 #if USE(JSVALUE32_64)
606 #undef ENABLE_FTL_JIT
607 #define ENABLE_FTL_JIT 0
608 #endif
609
610 /* FIXME: This should be turned into an #error invariant */
611 /* The FTL is disabled on the iOS simulator, mostly for simplicity. */
612 #if PLATFORM(IOS_FAMILY_SIMULATOR)
613 #undef ENABLE_FTL_JIT
614 #define ENABLE_FTL_JIT 0
615 #endif
616
617 /* If possible, try to enable a disassembler. This is optional. We proceed in two
618    steps: first we try to find some disassembler that we can use, and then we
619    decide if the high-level disassembler API can be enabled. */
620 #if !defined(ENABLE_UDIS86) && ENABLE(JIT) && CPU(X86_64) && !USE(CAPSTONE)
621 #define ENABLE_UDIS86 1
622 #endif
623
624 #if !defined(ENABLE_ARM64_DISASSEMBLER) && ENABLE(JIT) && CPU(ARM64) && !USE(CAPSTONE)
625 #define ENABLE_ARM64_DISASSEMBLER 1
626 #endif
627
628 #if !defined(ENABLE_DISASSEMBLER) && (ENABLE(UDIS86) || ENABLE(ARM64_DISASSEMBLER) || (ENABLE(JIT) && USE(CAPSTONE)))
629 #define ENABLE_DISASSEMBLER 1
630 #endif
631
632 #if !defined(ENABLE_DFG_JIT) && ENABLE(JIT)
633
634 /* Enable the DFG JIT on X86 and X86_64. */
635 #if CPU(X86_64) && (OS(DARWIN) || OS(LINUX) || OS(FREEBSD) || OS(HURD) || OS(WINDOWS))
636 #define ENABLE_DFG_JIT 1
637 #endif
638
639 /* Enable the DFG JIT on ARMv7.  Only tested on iOS, Linux, and FreeBSD. */
640 #if (CPU(ARM_THUMB2) || CPU(ARM64)) && (OS(DARWIN) || OS(LINUX) || OS(FREEBSD))
641 #define ENABLE_DFG_JIT 1
642 #endif
643
644 /* Enable the DFG JIT on MIPS. */
645 #if CPU(MIPS)
646 #define ENABLE_DFG_JIT 1
647 #endif
648
649 #endif /* !defined(ENABLE_DFG_JIT) && ENABLE(JIT) */
650
651 /* Concurrent JS only works on 64-bit platforms because it requires that
652    values get stored to atomically. This is trivially true on 64-bit platforms,
653    but not true at all on 32-bit platforms where values are composed of two
654    separate sub-values. */
655 #if ENABLE(JIT) && USE(JSVALUE64)
656 #define ENABLE_CONCURRENT_JS 1
657 #endif
658
659 #if (CPU(X86_64) || CPU(ARM64)) && HAVE(FAST_TLS)
660 #define ENABLE_FAST_TLS_JIT 1
661 #endif
662
663 #if ENABLE(JIT) && (CPU(X86) || CPU(X86_64) || CPU(ARM_THUMB2) || CPU(ARM64) || CPU(MIPS))
664 #define ENABLE_MASM_PROBE 1
665 #endif
666
667 /* FIXME: This should be turned into an #error invariant */
668 /* If the baseline jit is not available, then disable upper tiers as well.
669    The MacroAssembler::probe() is also required for supporting the upper tiers. */
670 #if !ENABLE(JIT) || !ENABLE(MASM_PROBE)
671 #undef ENABLE_DFG_JIT
672 #undef ENABLE_FTL_JIT
673 #define ENABLE_DFG_JIT 0
674 #define ENABLE_FTL_JIT 0
675 #endif
676
677 /* FIXME: This should be turned into an #error invariant */
678 /* If the DFG jit is not available, then disable upper tiers as well: */
679 #if !ENABLE(DFG_JIT)
680 #undef ENABLE_FTL_JIT
681 #define ENABLE_FTL_JIT 0
682 #endif
683
684 /* This controls whether B3 is built. B3 is needed for FTL JIT and WebAssembly */
685 #if ENABLE(FTL_JIT)
686 #define ENABLE_B3_JIT 1
687 #endif
688
689 #if !defined(ENABLE_WEBASSEMBLY) && (ENABLE(B3_JIT) && PLATFORM(COCOA) && CPU(ADDRESS64))
690 #define ENABLE_WEBASSEMBLY 1
691 #endif
692
693 /* The SamplingProfiler is the probabilistic and low-overhead profiler used by
694  * JSC to measure where time is spent inside a JavaScript program.
695  * In configurations other than Windows and Darwin, because layout of mcontext_t depends on standard libraries (like glibc),
696  * sampling profiler is enabled if WebKit uses pthreads and glibc. */
697 #if !defined(ENABLE_SAMPLING_PROFILER) && (!ENABLE(C_LOOP) && (OS(WINDOWS) || HAVE(MACHINE_CONTEXT)))
698 #define ENABLE_SAMPLING_PROFILER 1
699 #endif
700
701 #if ENABLE(WEBASSEMBLY) && HAVE(MACHINE_CONTEXT)
702 #define ENABLE_WEBASSEMBLY_FAST_MEMORY 1
703 #endif
704
705 /* Counts uses of write barriers using sampling counters. Be sure to also
706    set ENABLE_SAMPLING_COUNTERS to 1. */
707 #if !defined(ENABLE_WRITE_BARRIER_PROFILING)
708 #define ENABLE_WRITE_BARRIER_PROFILING 0
709 #endif
710
711 /* Logs all allocation-related activity that goes through fastMalloc or the
712    JSC GC (both cells and butterflies). Also logs marking. Note that this
713    isn't a completely accurate view of the heap since it doesn't include all
714    butterfly resize operations, doesn't tell you what is going on with weak
715    references (other than to tell you when they're marked), and doesn't
716    track direct mmap() allocations or things like JIT allocation. */
717 #if !defined(ENABLE_ALLOCATION_LOGGING)
718 #define ENABLE_ALLOCATION_LOGGING 0
719 #endif
720
721 /* Enable verification that that register allocations are not made within generated control flow.
722    Turned on for debug builds. */
723 #if !defined(ENABLE_DFG_REGISTER_ALLOCATION_VALIDATION) && ENABLE(DFG_JIT) && !defined(NDEBUG)
724 #define ENABLE_DFG_REGISTER_ALLOCATION_VALIDATION 1
725 #endif
726
727 /* Determine if we need to enable Computed Goto Opcodes or not: */
728 #if HAVE(COMPUTED_GOTO) || !ENABLE(C_LOOP)
729 #define ENABLE_COMPUTED_GOTO_OPCODES 1
730 #endif
731
732 /* Regular Expression Tracing - Set to 1 to trace RegExp's in jsc.  Results dumped at exit */
733 #if !defined(ENABLE_REGEXP_TRACING)
734 #define ENABLE_REGEXP_TRACING 0
735 #endif
736
737 /* Yet Another Regex Runtime - turned on by default for JIT enabled ports. */
738 #if !defined(ENABLE_YARR_JIT) && ENABLE(JIT)
739 #define ENABLE_YARR_JIT 1
740 #endif
741
742 /* Setting this flag compares JIT results with interpreter results. */
743 #if !defined(ENABLE_YARR_JIT) && ENABLE(JIT)
744 #define ENABLE_YARR_JIT_DEBUG 0
745 #endif
746
747 /* Enable JIT'ing Regular Expressions that have nested parenthesis . */
748 #if ENABLE(YARR_JIT) && (CPU(ARM64) || (CPU(X86_64) && !OS(WINDOWS)))
749 #define ENABLE_YARR_JIT_ALL_PARENS_EXPRESSIONS 1
750 #endif
751
752 /* Enable JIT'ing Regular Expressions that have nested back references. */
753 #if ENABLE(YARR_JIT) && (CPU(ARM64) || (CPU(X86_64) && !OS(WINDOWS)))
754 #define ENABLE_YARR_JIT_BACKREFERENCES 1
755 #endif
756
757 /* If either the JIT or the RegExp JIT is enabled, then the Assembler must be
758    enabled as well: */
759 #if ENABLE(JIT) || ENABLE(YARR_JIT) || !ENABLE(C_LOOP)
760 #if defined(ENABLE_ASSEMBLER) && !ENABLE_ASSEMBLER
761 #error "Cannot enable the JIT or RegExp JIT without enabling the Assembler"
762 #else
763 #undef ENABLE_ASSEMBLER
764 #define ENABLE_ASSEMBLER 1
765 #endif
766 #endif
767
768 /* If the Disassembler is enabled, then the Assembler must be enabled as well: */
769 #if ENABLE(DISASSEMBLER)
770 #if defined(ENABLE_ASSEMBLER) && !ENABLE_ASSEMBLER
771 #error "Cannot enable the Disassembler without enabling the Assembler"
772 #else
773 #undef ENABLE_ASSEMBLER
774 #define ENABLE_ASSEMBLER 1
775 #endif
776 #endif
777
778 #if !defined(ENABLE_EXCEPTION_SCOPE_VERIFICATION)
779 #define ENABLE_EXCEPTION_SCOPE_VERIFICATION ASSERT_ENABLED
780 #endif
781
782 #if ENABLE(DFG_JIT) && HAVE(MACHINE_CONTEXT) && (CPU(X86_64) || CPU(ARM64))
783 #define ENABLE_SIGNAL_BASED_VM_TRAPS 1
784 #endif
785
786 /* CSS Selector JIT Compiler */
787 #if !defined(ENABLE_CSS_SELECTOR_JIT) && ((CPU(X86_64) || CPU(ARM64) || (CPU(ARM_THUMB2) && OS(DARWIN))) && ENABLE(JIT) && (OS(DARWIN) || PLATFORM(GTK) || PLATFORM(WPE)))
788 #define ENABLE_CSS_SELECTOR_JIT 1
789 #endif
790
791 #if CPU(ARM_THUMB2) || CPU(ARM64)
792 #define ENABLE_BRANCH_COMPACTION 1
793 #endif
794
795 #if !defined(ENABLE_THREADING_LIBDISPATCH) && HAVE(DISPATCH_H)
796 #define ENABLE_THREADING_LIBDISPATCH 1
797 #elif !defined(ENABLE_THREADING_OPENMP) && defined(_OPENMP)
798 #define ENABLE_THREADING_OPENMP 1
799 #elif !defined(THREADING_GENERIC)
800 #define ENABLE_THREADING_GENERIC 1
801 #endif
802
803 #if !defined(ENABLE_GC_VALIDATION) && !defined(NDEBUG)
804 #define ENABLE_GC_VALIDATION 1
805 #endif
806
807 #if !defined(ENABLE_BINDING_INTEGRITY) && !OS(WINDOWS)
808 #define ENABLE_BINDING_INTEGRITY 1
809 #endif
810
811 #if !defined(ENABLE_TREE_DEBUGGING) && !defined(NDEBUG)
812 #define ENABLE_TREE_DEBUGGING 1
813 #endif
814
815 #if !defined(ENABLE_OPENTYPE_VERTICAL) && PLATFORM(GTK) || PLATFORM(WPE)
816 #define ENABLE_OPENTYPE_VERTICAL 1
817 #endif
818
819 #if !defined(ENABLE_OPENTYPE_MATH) && (OS(DARWIN) && USE(CG)) || (USE(FREETYPE) && !PLATFORM(GTK)) || (PLATFORM(WIN) && (USE(CG) || USE(CAIRO)))
820 #define ENABLE_OPENTYPE_MATH 1
821 #endif
822
823 #if !defined(ENABLE_INLINE_PATH_DATA) && USE(CG)
824 #define ENABLE_INLINE_PATH_DATA 1
825 #endif
826
827 /* Disable SharedArrayBuffers until Spectre security concerns are mitigated. */
828 #define ENABLE_SHARED_ARRAY_BUFFER 0
829
830
831 #if ((PLATFORM(COCOA) || PLATFORM(PLAYSTATION) || PLATFORM(WPE)) && ENABLE(ASYNC_SCROLLING)) || PLATFORM(GTK)
832 #define ENABLE_KINETIC_SCROLLING 1
833 #endif
834
835 #if PLATFORM(MAC)
836 // FIXME: Maybe this can be combined with ENABLE_KINETIC_SCROLLING.
837 #define ENABLE_WHEEL_EVENT_LATCHING 1
838 #endif
839
840 #if !defined(ENABLE_SCROLLING_THREAD)
841 #if USE(NICOSIA)
842 #define ENABLE_SCROLLING_THREAD 1
843 #else
844 #define ENABLE_SCROLLING_THREAD 0
845 #endif
846 #endif
847
848 /* This feature works by embedding the OpcodeID in the 32 bit just before the generated LLint code
849    that executes each opcode. It cannot be supported by the CLoop since there's no way to embed the
850    OpcodeID word in the CLoop's switch statement cases. It is also currently not implemented for MSVC.
851 */
852 #if !defined(ENABLE_LLINT_EMBEDDED_OPCODE_ID) && !ENABLE(C_LOOP) && !COMPILER(MSVC) && (CPU(X86) || CPU(X86_64) || CPU(ARM64) || (CPU(ARM_THUMB2) && OS(DARWIN)))
853 #define ENABLE_LLINT_EMBEDDED_OPCODE_ID 1
854 #endif
855
856
857
858
859
860 /* Asserts, invariants for macro definitions */
861
862 #if ENABLE(VIDEO_TRACK) && !ENABLE(VIDEO)
863 #error "ENABLE(VIDEO_TRACK) requires ENABLE(VIDEO)"
864 #endif
865
866 #if ENABLE(MEDIA_CONTROLS_SCRIPT) && !ENABLE(VIDEO)
867 #error "ENABLE(MEDIA_CONTROLS_SCRIPT) requires ENABLE(VIDEO)"
868 #endif
869
870 #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS) && !ENABLE(REMOTE_INSPECTOR)
871 #error "ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS) requires ENABLE(REMOTE_INSPECTOR)"
872 #endif
873
874 #if ENABLE(IOS_TOUCH_EVENTS) && !ENABLE(TOUCH_EVENTS)
875 #error "ENABLE(IOS_TOUCH_EVENTS) requires ENABLE(TOUCH_EVENTS)"
876 #endif
877
878 #if ENABLE(WEBGL) && !ENABLE(GRAPHICS_CONTEXT_GL)
879 #error "ENABLE(WEBGL) requires ENABLE(GRAPHICS_CONTEXT_GL)"
880 #endif
881
882 #if ENABLE(WEBGL2) && !ENABLE(WEBGL)
883 #error "ENABLE(WEBGL2) requires ENABLE(WEBGL)"
884 #endif
885
886 #if CPU(ARM64) && CPU(ADDRESS64)
887 #define USE_JUMP_ISLANDS 1
888 #endif