include(libweb_generators)
include(vulkan)
include(skia)

if (APPLE)
    find_package(unofficial-angle REQUIRED CONFIG)
endif()

set(SOURCES
    Animations/Animatable.cpp
    Animations/Animation.cpp
    Animations/AnimationEffect.cpp
    Animations/AnimationPlaybackEvent.cpp
    Animations/AnimationTimeline.cpp
    Animations/DocumentTimeline.cpp
    Animations/KeyframeEffect.cpp
    Animations/PseudoElementParsing.cpp
    ARIA/AriaData.cpp
    ARIA/ARIAMixin.cpp
    ARIA/AttributeNames.cpp
    ARIA/Roles.cpp
    ARIA/RoleType.cpp
    ARIA/StateAndProperties.cpp
    Bindings/AudioConstructor.cpp
    Bindings/HostDefined.cpp
    Bindings/ImageConstructor.cpp
    Bindings/Intrinsics.cpp
    Bindings/LocationConstructor.cpp
    Bindings/MainThreadVM.cpp
    Bindings/OptionConstructor.cpp
    Bindings/PlatformObject.cpp
    Bindings/PrincipalHostDefined.cpp
    Bindings/SyntheticHostDefined.cpp
    Clipboard/Clipboard.cpp
    Clipboard/ClipboardEvent.cpp
    Clipboard/ClipboardItem.cpp
    Clipboard/SystemClipboard.cpp
    Compression/CompressionStream.cpp
    Compression/DecompressionStream.cpp
    ContentSecurityPolicy/BlockingAlgorithms.cpp
    ContentSecurityPolicy/Directives/Directive.cpp
    ContentSecurityPolicy/Directives/DirectiveFactory.cpp
    ContentSecurityPolicy/Directives/DirectiveOperations.cpp
    ContentSecurityPolicy/Directives/Names.cpp
    ContentSecurityPolicy/Directives/SerializedDirective.cpp
    ContentSecurityPolicy/Policy.cpp
    ContentSecurityPolicy/PolicyList.cpp
    ContentSecurityPolicy/SecurityPolicyViolationEvent.cpp
    ContentSecurityPolicy/SerializedPolicy.cpp
    ContentSecurityPolicy/Violation.cpp
    Cookie/Cookie.cpp
    Cookie/ParsedCookie.cpp
    CredentialManagement/Credential.cpp
    CredentialManagement/CredentialsContainer.cpp
    CredentialManagement/FederatedCredential.cpp
    CredentialManagement/PasswordCredential.cpp
    Crypto/Crypto.cpp
    Crypto/CryptoAlgorithms.cpp
    Crypto/CryptoBindings.cpp
    Crypto/CryptoKey.cpp
    Crypto/KeyAlgorithms.cpp
    Crypto/SubtleCrypto.cpp
    CSS/Angle.cpp
    CSS/AnimationEvent.cpp
    CSS/BooleanExpression.cpp
    CSS/CalculatedOr.cpp
    CSS/CascadedProperties.cpp
    CSS/Clip.cpp
    CSS/ComputedProperties.cpp
    CSS/CountersSet.cpp
    CSS/CSS.cpp
    CSS/CSSAnimation.cpp
    CSS/CSSConditionRule.cpp
    CSS/CSSDescriptors.cpp
    CSS/CSSFontFaceDescriptors.cpp
    CSS/CSSFontFaceRule.cpp
    CSS/CSSGroupingRule.cpp
    CSS/CSSImportRule.cpp
    CSS/CSSKeyframeRule.cpp
    CSS/CSSKeyframesRule.cpp
    CSS/CSSLayerBlockRule.cpp
    CSS/CSSLayerStatementRule.cpp
    CSS/CSSMarginRule.cpp
    CSS/CSSMediaRule.cpp
    CSS/CSSNamespaceRule.cpp
    CSS/CSSNestedDeclarations.cpp
    CSS/CSSNumericType.cpp
    CSS/CSSPageRule.cpp
    CSS/CSSPageDescriptors.cpp
    CSS/CSSPropertyRule.cpp
    CSS/CSSRule.cpp
    CSS/CSSRuleList.cpp
    CSS/CSSStyleDeclaration.cpp
    CSS/CSSStyleProperties.cpp
    CSS/CSSStyleRule.cpp
    CSS/CSSStyleSheet.cpp
    CSS/CSSStyleValue.cpp
    CSS/CSSSupportsRule.cpp
    CSS/CSSTransition.cpp
    CSS/Descriptor.cpp
    CSS/Display.cpp
    CSS/EdgeRect.cpp
    CSS/Fetch.cpp
    CSS/Flex.cpp
    CSS/FontFace.cpp
    CSS/FontFaceSet.cpp
    CSS/Frequency.cpp
    CSS/GridTrackPlacement.cpp
    CSS/GridTrackSize.cpp
    CSS/Interpolation.cpp
    CSS/InvalidationSet.cpp
    CSS/Length.cpp
    CSS/LengthBox.cpp
    CSS/MediaList.cpp
    CSS/MediaQuery.cpp
    CSS/MediaQueryList.cpp
    CSS/MediaQueryListEvent.cpp
    CSS/Number.cpp
    CSS/PageSelector.cpp
    CSS/ParsedFontFace.cpp
    CSS/Parser/ComponentValue.cpp
    CSS/Parser/DescriptorParsing.cpp
    CSS/Parser/GradientParsing.cpp
    CSS/Parser/Helpers.cpp
    CSS/Parser/MediaParsing.cpp
    CSS/Parser/Parser.cpp
    CSS/Parser/PropertyParsing.cpp
    CSS/Parser/RuleContext.cpp
    CSS/Parser/RuleParsing.cpp
    CSS/Parser/SelectorParsing.cpp
    CSS/Parser/Token.cpp
    CSS/Parser/Tokenizer.cpp
    CSS/Parser/Types.cpp
    CSS/Parser/ValueParsing.cpp
    CSS/PreferredColorScheme.cpp
    CSS/PreferredContrast.cpp
    CSS/PreferredMotion.cpp
    CSS/Ratio.cpp
    CSS/Resolution.cpp
    CSS/Screen.cpp
    CSS/ScreenOrientation.cpp
    CSS/Selector.cpp
    CSS/SelectorEngine.cpp
    CSS/Serialize.cpp
    CSS/Size.cpp
    CSS/Sizing.cpp
    CSS/StyleComputer.cpp
    CSS/StyleInvalidation.cpp
    CSS/StyleInvalidationData.cpp
    CSS/StyleProperty.cpp
    CSS/StyleSheet.cpp
    CSS/StyleSheetIdentifier.cpp
    CSS/StyleSheetList.cpp
    CSS/StyleValues/AngleStyleValue.cpp
    CSS/StyleValues/BackgroundRepeatStyleValue.cpp
    CSS/StyleValues/BackgroundSizeStyleValue.cpp
    CSS/StyleValues/BasicShapeStyleValue.cpp
    CSS/StyleValues/BorderRadiusStyleValue.cpp
    CSS/StyleValues/CalculatedStyleValue.cpp
    CSS/StyleValues/ColorFunctionStyleValue.cpp
    CSS/StyleValues/ColorMixStyleValue.cpp
    CSS/StyleValues/ColorSchemeStyleValue.cpp
    CSS/StyleValues/ConicGradientStyleValue.cpp
    CSS/StyleValues/ContentStyleValue.cpp
    CSS/StyleValues/CounterDefinitionsStyleValue.cpp
    CSS/StyleValues/CounterStyleValue.cpp
    CSS/StyleValues/CSSColorValue.cpp
    CSS/StyleValues/CSSHSL.cpp
    CSS/StyleValues/CSSHWB.cpp
    CSS/StyleValues/CSSKeywordValue.cpp
    CSS/StyleValues/CSSLabLike.cpp
    CSS/StyleValues/CSSLCHLike.cpp
    CSS/StyleValues/CSSLightDark.cpp
    CSS/StyleValues/CSSRGB.cpp
    CSS/StyleValues/CursorStyleValue.cpp
    CSS/StyleValues/DisplayStyleValue.cpp
    CSS/StyleValues/EasingStyleValue.cpp
    CSS/StyleValues/EdgeStyleValue.cpp
    CSS/StyleValues/FilterValueListStyleValue.cpp
    CSS/StyleValues/FontSourceStyleValue.cpp
    CSS/StyleValues/FontStyleStyleValue.cpp
    CSS/StyleValues/GridAutoFlowStyleValue.cpp
    CSS/StyleValues/GridTemplateAreaStyleValue.cpp
    CSS/StyleValues/GridTrackPlacementStyleValue.cpp
    CSS/StyleValues/GridTrackSizeListStyleValue.cpp
    CSS/StyleValues/ImageStyleValue.cpp
    CSS/StyleValues/IntegerStyleValue.cpp
    CSS/StyleValues/LengthStyleValue.cpp
    CSS/StyleValues/LinearGradientStyleValue.cpp
    CSS/StyleValues/MathDepthStyleValue.cpp
    CSS/StyleValues/NumberStyleValue.cpp
    CSS/StyleValues/OpenTypeTaggedStyleValue.cpp
    CSS/StyleValues/PositionStyleValue.cpp
    CSS/StyleValues/RadialGradientStyleValue.cpp
    CSS/StyleValues/RectStyleValue.cpp
    CSS/StyleValues/ScrollbarColorStyleValue.cpp
    CSS/StyleValues/ShadowStyleValue.cpp
    CSS/StyleValues/ShorthandStyleValue.cpp
    CSS/StyleValues/StyleValueList.cpp
    CSS/StyleValues/TransformationStyleValue.cpp
    CSS/StyleValues/TransitionStyleValue.cpp
    CSS/StyleValues/UnicodeRangeStyleValue.cpp
    CSS/StyleValues/UnresolvedStyleValue.cpp
    CSS/Supports.cpp
    CSS/SyntaxHighlighter/SyntaxHighlighter.cpp
    CSS/SystemColor.cpp
    CSS/Time.cpp
    CSS/Transformation.cpp
    CSS/TransitionEvent.cpp
    CSS/URL.cpp
    CSS/VisualViewport.cpp
    DOM/AbortController.cpp
    DOM/AbortSignal.cpp
    DOM/AbstractRange.cpp
    DOM/AccessibilityTreeNode.cpp
    DOM/AdoptedStyleSheets.cpp
    DOM/Attr.cpp
    DOM/CDATASection.cpp
    DOM/CharacterData.cpp
    DOM/Comment.cpp
    DOM/CustomEvent.cpp
    DOM/Document.cpp
    DOM/DocumentFragment.cpp
    DOM/DocumentLoadEventDelayer.cpp
    DOM/DocumentLoading.cpp
    DOM/DocumentObserver.cpp
    DOM/DocumentType.cpp
    DOM/DOMEventListener.cpp
    DOM/DOMImplementation.cpp
    DOM/DOMTokenList.cpp
    DOM/EditingHostManager.cpp
    DOM/Element.cpp
    DOM/ElementByIdMap.cpp
    DOM/ElementFactory.cpp
    DOM/Event.cpp
    DOM/EventDispatcher.cpp
    DOM/EventTarget.cpp
    DOM/HTMLCollection.cpp
    DOM/IDLEventListener.cpp
    DOM/LiveNodeList.cpp
    DOM/MutationObserver.cpp
    DOM/MutationRecord.cpp
    DOM/MutationType.cpp
    DOM/NamedNodeMap.cpp
    DOM/Node.cpp
    DOM/NodeFilter.cpp
    DOM/NodeIterator.cpp
    DOM/NodeList.cpp
    DOM/NodeOperations.cpp
    DOM/ParentNode.cpp
    DOM/Position.cpp
    DOM/ProcessingInstruction.cpp
    DOM/QualifiedName.cpp
    DOM/Range.cpp
    DOM/ShadowRoot.cpp
    DOM/Slot.cpp
    DOM/Slottable.cpp
    DOM/StaticNodeList.cpp
    DOM/StaticRange.cpp
    DOM/StyleElementUtils.cpp
    DOM/Text.cpp
    DOM/TreeWalker.cpp
    DOM/Utils.cpp
    DOM/XMLDocument.cpp
    DOMURL/DOMURL.cpp
    DOMURL/URLSearchParams.cpp
    DOMURL/URLSearchParamsIterator.cpp
    Dump.cpp
    Editing/CommandNames.cpp
    Editing/Commands.cpp
    Editing/ExecCommand.cpp
    Editing/Internal/Algorithms.cpp
    Encoding/TextDecoder.cpp
    Encoding/TextEncoder.cpp
    Encoding/TextEncoderCommon.cpp
    Encoding/TextEncoderStream.cpp
    EntriesAPI/FileSystemEntry.cpp
    EventTiming/PerformanceEventTiming.cpp
    Fetch/Body.cpp
    Fetch/BodyInit.cpp
    Fetch/Enums.cpp
    Fetch/Fetching/Checks.cpp
    Fetch/Fetching/FetchedDataReceiver.cpp
    Fetch/Fetching/Fetching.cpp
    Fetch/Fetching/PendingResponse.cpp
    Fetch/Fetching/RefCountedFlag.cpp
    Fetch/FetchMethod.cpp
    Fetch/Headers.cpp
    Fetch/HeadersIterator.cpp
    Fetch/Infrastructure/FetchAlgorithms.cpp
    Fetch/Infrastructure/FetchController.cpp
    Fetch/Infrastructure/FetchParams.cpp
    Fetch/Infrastructure/FetchRecord.cpp
    Fetch/Infrastructure/FetchTimingInfo.cpp
    Fetch/Infrastructure/HTTP.cpp
    Fetch/Infrastructure/HTTP/Bodies.cpp
    Fetch/Infrastructure/HTTP/Headers.cpp
    Fetch/Infrastructure/HTTP/Methods.cpp
    Fetch/Infrastructure/HTTP/Requests.cpp
    Fetch/Infrastructure/HTTP/Responses.cpp
    Fetch/Infrastructure/HTTP/Statuses.cpp
    Fetch/Infrastructure/IncrementalReadLoopReadRequest.cpp
    Fetch/Infrastructure/MimeTypeBlocking.cpp
    Fetch/Infrastructure/NetworkPartitionKey.cpp
    Fetch/Infrastructure/NoSniffBlocking.cpp
    Fetch/Infrastructure/PortBlocking.cpp
    Fetch/Infrastructure/Task.cpp
    Fetch/Infrastructure/URL.cpp
    Fetch/Request.cpp
    Fetch/Response.cpp
    FileAPI/Blob.cpp
    FileAPI/BlobURLStore.cpp
    FileAPI/File.cpp
    FileAPI/FileList.cpp
    FileAPI/FileReader.cpp
    FileAPI/FileReaderSync.cpp
    Geometry/DOMMatrix.cpp
    Geometry/DOMMatrixReadOnly.cpp
    Geometry/DOMPoint.cpp
    Geometry/DOMPointReadOnly.cpp
    Geometry/DOMQuad.cpp
    Geometry/DOMRect.cpp
    Geometry/DOMRectList.cpp
    Geometry/DOMRectReadOnly.cpp
    HighResolutionTime/Performance.cpp
    HighResolutionTime/TimeOrigin.cpp
    HTML/AbstractWorker.cpp
    HTML/AnimatedBitmapDecodedImageData.cpp
    HTML/AnimationFrameCallbackDriver.cpp
    HTML/AttributeNames.cpp
    HTML/AudioTrack.cpp
    HTML/AudioTrackList.cpp
    HTML/AutocompleteElement.cpp
    HTML/BarProp.cpp
    HTML/BeforeUnloadEvent.cpp
    HTML/BroadcastChannel.cpp
    HTML/BrowsingContext.cpp
    HTML/BrowsingContextGroup.cpp
    HTML/Canvas/CanvasDrawImage.cpp
    HTML/Canvas/CanvasPath.cpp
    HTML/Canvas/CanvasState.cpp
    HTML/CanvasGradient.cpp
    HTML/CanvasPattern.cpp
    HTML/CanvasRenderingContext2D.cpp
    HTML/CloseEvent.cpp
    HTML/CloseWatcher.cpp
    HTML/CloseWatcherManager.cpp
    HTML/CommandEvent.cpp
    HTML/CORSSettingAttribute.cpp
    HTML/CrossOrigin/AbstractOperations.cpp
    HTML/CrossOrigin/Reporting.cpp
    HTML/CustomElements/CustomElementDefinition.cpp
    HTML/CustomElements/CustomElementName.cpp
    HTML/CustomElements/CustomElementReactionNames.cpp
    HTML/CustomElements/CustomElementRegistry.cpp
    HTML/DataTransfer.cpp
    HTML/DataTransferItem.cpp
    HTML/DataTransferItemList.cpp
    HTML/Dates.cpp
    HTML/DecodedImageData.cpp
    HTML/DedicatedWorkerGlobalScope.cpp
    HTML/DocumentState.cpp
    HTML/DOMParser.cpp
    HTML/DOMStringList.cpp
    HTML/DOMStringMap.cpp
    HTML/DragDataStore.cpp
    HTML/DragEvent.cpp
    HTML/ElementInternals.cpp
    HTML/EmbedderPolicy.cpp
    HTML/ErrorEvent.cpp
    HTML/EventHandler.cpp
    HTML/EventLoop/EventLoop.cpp
    HTML/EventLoop/Task.cpp
    HTML/EventLoop/TaskQueue.cpp
    HTML/EventNames.cpp
    HTML/EventSource.cpp
    HTML/FileFilter.cpp
    HTML/Focus.cpp
    HTML/FormAssociatedElement.cpp
    HTML/FormControlInfrastructure.cpp
    HTML/FormDataEvent.cpp
    HTML/GlobalEventHandlers.cpp
    HTML/HashChangeEvent.cpp
    HTML/History.cpp
    HTML/HTMLAllCollection.cpp
    HTML/HTMLAnchorElement.cpp
    HTML/HTMLAreaElement.cpp
    HTML/HTMLAudioElement.cpp
    HTML/HTMLBaseElement.cpp
    HTML/HTMLBodyElement.cpp
    HTML/HTMLBRElement.cpp
    HTML/HTMLButtonElement.cpp
    HTML/HTMLCanvasElement.cpp
    HTML/HTMLDataElement.cpp
    HTML/HTMLDataListElement.cpp
    HTML/HTMLDetailsElement.cpp
    HTML/HTMLDialogElement.cpp
    HTML/HTMLDirectoryElement.cpp
    HTML/HTMLDivElement.cpp
    HTML/HTMLDListElement.cpp
    HTML/HTMLDocument.cpp
    HTML/HTMLElement.cpp
    HTML/HTMLEmbedElement.cpp
    HTML/HTMLFieldSetElement.cpp
    HTML/HTMLFontElement.cpp
    HTML/HTMLFormControlsCollection.cpp
    HTML/HTMLFormElement.cpp
    HTML/HTMLFrameElement.cpp
    HTML/HTMLFrameSetElement.cpp
    HTML/HTMLHeadElement.cpp
    HTML/HTMLHeadingElement.cpp
    HTML/HTMLHRElement.cpp
    HTML/HTMLHtmlElement.cpp
    HTML/HTMLHyperlinkElementUtils.cpp
    HTML/HTMLIFrameElement.cpp
    HTML/HTMLImageElement.cpp
    HTML/HTMLInputElement.cpp
    HTML/HTMLLabelElement.cpp
    HTML/HTMLLegendElement.cpp
    HTML/HTMLLIElement.cpp
    HTML/HTMLLinkElement.cpp
    HTML/HTMLMapElement.cpp
    HTML/HTMLMarqueeElement.cpp
    HTML/HTMLMediaElement.cpp
    HTML/HTMLMenuElement.cpp
    HTML/HTMLMetaElement.cpp
    HTML/HTMLMeterElement.cpp
    HTML/HTMLModElement.cpp
    HTML/HTMLObjectElement.cpp
    HTML/HTMLOListElement.cpp
    HTML/HTMLOptGroupElement.cpp
    HTML/HTMLOptionElement.cpp
    HTML/HTMLOptionsCollection.cpp
    HTML/HTMLOrSVGElement.cpp
    HTML/HTMLOutputElement.cpp
    HTML/HTMLParagraphElement.cpp
    HTML/HTMLParamElement.cpp
    HTML/HTMLPictureElement.cpp
    HTML/HTMLPreElement.cpp
    HTML/HTMLProgressElement.cpp
    HTML/HTMLQuoteElement.cpp
    HTML/HTMLScriptElement.cpp
    HTML/HTMLSelectElement.cpp
    HTML/HTMLSlotElement.cpp
    HTML/HTMLSourceElement.cpp
    HTML/HTMLSpanElement.cpp
    HTML/HTMLStyleElement.cpp
    HTML/HTMLSummaryElement.cpp
    HTML/HTMLTableCaptionElement.cpp
    HTML/HTMLTableCellElement.cpp
    HTML/HTMLTableColElement.cpp
    HTML/HTMLTableElement.cpp
    HTML/HTMLTableRowElement.cpp
    HTML/HTMLTableSectionElement.cpp
    HTML/HTMLTemplateElement.cpp
    HTML/HTMLTextAreaElement.cpp
    HTML/HTMLTimeElement.cpp
    HTML/HTMLTitleElement.cpp
    HTML/HTMLTrackElement.cpp
    HTML/HTMLUListElement.cpp
    HTML/HTMLUnknownElement.cpp
    HTML/HTMLVideoElement.cpp
    HTML/ImageBitmap.cpp
    HTML/ImageData.cpp
    HTML/ImageRequest.cpp
    HTML/ListOfAvailableImages.cpp
    HTML/Location.cpp
    HTML/MediaError.cpp
    HTML/MessageChannel.cpp
    HTML/MessageEvent.cpp
    HTML/MessagePort.cpp
    HTML/MimeType.cpp
    HTML/MimeTypeArray.cpp
    HTML/Navigable.cpp
    HTML/NavigableContainer.cpp
    HTML/NavigateEvent.cpp
    HTML/Navigation.cpp
    HTML/NavigationCurrentEntryChangeEvent.cpp
    HTML/NavigationDestination.cpp
    HTML/NavigationHistoryEntry.cpp
    HTML/NavigationObserver.cpp
    HTML/NavigationParams.cpp
    HTML/NavigationTransition.cpp
    HTML/Navigator.cpp
    HTML/NavigatorBeacon.cpp
    HTML/NavigatorID.cpp
    HTML/Numbers.cpp
    HTML/PageTransitionEvent.cpp
    HTML/Parser/Entities.cpp
    HTML/Parser/HTMLEncodingDetection.cpp
    HTML/Parser/HTMLParser.cpp
    HTML/Parser/HTMLToken.cpp
    HTML/Parser/HTMLTokenizer.cpp
    HTML/Parser/ListOfActiveFormattingElements.cpp
    HTML/Parser/StackOfOpenElements.cpp
    HTML/Path2D.cpp
    HTML/Plugin.cpp
    HTML/PluginArray.cpp
    HTML/PolicyContainers.cpp
    HTML/PopoverInvokerElement.cpp
    HTML/PopStateEvent.cpp
    HTML/PotentialCORSRequest.cpp
    HTML/PromiseRejectionEvent.cpp
    HTML/RadioNodeList.cpp
    HTML/RenderingThread.cpp
    HTML/Scripting/Agent.cpp
    HTML/Scripting/ClassicScript.cpp
    HTML/Scripting/Environments.cpp
    HTML/Scripting/EnvironmentSettingsSnapshot.cpp
    HTML/Scripting/ExceptionReporter.cpp
    HTML/Scripting/Fetching.cpp
    HTML/Scripting/ImportMap.cpp
    HTML/Scripting/ImportMapParseResult.cpp
    HTML/Scripting/ModuleMap.cpp
    HTML/Scripting/ModuleScript.cpp
    HTML/Scripting/Script.cpp
    HTML/Scripting/SerializedEnvironmentSettingsObject.cpp
    HTML/Scripting/SimilarOriginWindowAgent.cpp
    HTML/Scripting/SyntheticRealmSettings.cpp
    HTML/Scripting/TemporaryExecutionContext.cpp
    HTML/Scripting/WindowEnvironmentSettingsObject.cpp
    HTML/Scripting/WorkerAgent.cpp
    HTML/Scripting/WorkerEnvironmentSettingsObject.cpp
    HTML/SelectedFile.cpp
    HTML/SelectItem.cpp
    HTML/SerializedPolicyContainer.cpp
    HTML/SessionHistoryEntry.cpp
    HTML/SessionHistoryTraversalQueue.cpp
    HTML/ShadowRealmGlobalScope.cpp
    HTML/SharedResourceRequest.cpp
    HTML/SharedWorker.cpp
    HTML/SharedWorkerGlobalScope.cpp
    HTML/SourceSet.cpp
    HTML/SourceSnapshotParams.cpp
    HTML/Storage.cpp
    HTML/StorageEvent.cpp
    HTML/StructuredSerialize.cpp
    HTML/SubmitEvent.cpp
    HTML/SyntaxHighlighter/SyntaxHighlighter.cpp
    HTML/TagNames.cpp
    HTML/TextMetrics.cpp
    HTML/TextTrack.cpp
    HTML/TextTrackCue.cpp
    HTML/TextTrackCueList.cpp
    HTML/TextTrackList.cpp
    HTML/Timer.cpp
    HTML/TimeRanges.cpp
    HTML/ToggleEvent.cpp
    HTML/TokenizedFeatures.cpp
    HTML/TrackEvent.cpp
    HTML/TraversableNavigable.cpp
    HTML/UniversalGlobalScope.cpp
    HTML/UserActivation.cpp
    HTML/ValidityState.cpp
    HTML/VideoTrack.cpp
    HTML/VideoTrackList.cpp
    HTML/WebViewHints.cpp
    HTML/Window.cpp
    HTML/WindowEventHandlers.cpp
    HTML/WindowOrWorkerGlobalScope.cpp
    HTML/WindowProxy.cpp
    HTML/Worker.cpp
    HTML/WorkerAgentParent.cpp
    HTML/WorkerDebugConsoleClient.cpp
    HTML/WorkerGlobalScope.cpp
    HTML/WorkerLocation.cpp
    HTML/WorkerNavigator.cpp
    HTML/WorkletGlobalScope.cpp
    HTML/XMLSerializer.cpp
    IndexedDB/IDBCursor.cpp
    IndexedDB/IDBDatabase.cpp
    IndexedDB/IDBFactory.cpp
    IndexedDB/IDBIndex.cpp
    IndexedDB/IDBKeyRange.cpp
    IndexedDB/IDBObjectStore.cpp
    IndexedDB/IDBOpenDBRequest.cpp
    IndexedDB/IDBRequest.cpp
    IndexedDB/IDBTransaction.cpp
    IndexedDB/IDBVersionChangeEvent.cpp
    IndexedDB/Internal/Algorithms.cpp
    IndexedDB/Internal/Database.cpp
    IndexedDB/Internal/Index.cpp
    IndexedDB/Internal/Key.cpp
    IndexedDB/Internal/ObjectStore.cpp
    IndexedDB/Internal/RequestList.cpp
    Infra/ByteSequences.cpp
    Infra/JSON.cpp
    Infra/Strings.cpp
    Internals/InternalAnimationTimeline.cpp
    Internals/Internals.cpp
    Internals/InternalsBase.cpp
    Internals/WebUI.cpp
    IntersectionObserver/IntersectionObserver.cpp
    IntersectionObserver/IntersectionObserverEntry.cpp
    Layout/AudioBox.cpp
    Layout/AvailableSpace.cpp
    Layout/BlockContainer.cpp
    Layout/BlockFormattingContext.cpp
    Layout/Box.cpp
    Layout/BreakNode.cpp
    Layout/CanvasBox.cpp
    Layout/CheckBox.cpp
    Layout/FieldSetBox.cpp
    Layout/FlexFormattingContext.cpp
    Layout/FormattingContext.cpp
    Layout/GridFormattingContext.cpp
    Layout/ImageBox.cpp
    Layout/ImageProvider.cpp
    Layout/InlineFormattingContext.cpp
    Layout/InlineLevelIterator.cpp
    Layout/InlineNode.cpp
    Layout/Label.cpp
    Layout/LabelableNode.cpp
    Layout/LayoutState.cpp
    Layout/LegendBox.cpp
    Layout/LineBox.cpp
    Layout/LineBoxFragment.cpp
    Layout/LineBuilder.cpp
    Layout/ListItemBox.cpp
    Layout/ListItemMarkerBox.cpp
    Layout/NavigableContainerViewport.cpp
    Layout/Node.cpp
    Layout/RadioButton.cpp
    Layout/ReplacedBox.cpp
    Layout/SVGBox.cpp
    Layout/SVGClipBox.cpp
    Layout/SVGForeignObjectBox.cpp
    Layout/SVGFormattingContext.cpp
    Layout/SVGGeometryBox.cpp
    Layout/SVGGraphicsBox.cpp
    Layout/SVGImageBox.cpp
    Layout/SVGMaskBox.cpp
    Layout/SVGSVGBox.cpp
    Layout/SVGTextBox.cpp
    Layout/SVGTextPathBox.cpp
    Layout/TableFormattingContext.cpp
    Layout/TableGrid.cpp
    Layout/TableWrapper.cpp
    Layout/TextNode.cpp
    Layout/TreeBuilder.cpp
    Layout/VideoBox.cpp
    Layout/Viewport.cpp
    Loader/ContentFilter.cpp
    Loader/FileRequest.cpp
    Loader/GeneratedPagesLoader.cpp
    Loader/LoadRequest.cpp
    Loader/ProxyMappings.cpp
    Loader/Resource.cpp
    Loader/ResourceLoader.cpp
    MathML/MathMLElement.cpp
    MathML/TagNames.cpp
    MediaCapabilitiesAPI/MediaCapabilities.cpp
    MediaSourceExtensions/BufferedChangeEvent.cpp
    MediaSourceExtensions/EventNames.cpp
    MediaSourceExtensions/ManagedMediaSource.cpp
    MediaSourceExtensions/ManagedSourceBuffer.cpp
    MediaSourceExtensions/MediaSource.cpp
    MediaSourceExtensions/MediaSourceHandle.cpp
    MediaSourceExtensions/SourceBuffer.cpp
    MediaSourceExtensions/SourceBufferList.cpp
    MimeSniff/MimeType.cpp
    MimeSniff/Resource.cpp
    MixedContent/AbstractOperations.cpp
    Namespace.cpp
    NavigationTiming/EntryNames.cpp
    NavigationTiming/PerformanceNavigation.cpp
    NavigationTiming/PerformanceTiming.cpp
    Page/DragAndDropEventHandler.cpp
    Page/EventHandler.cpp
    Page/InputEvent.cpp
    Page/Page.cpp
    Painting/AudioPaintable.cpp
    Painting/BackgroundPainting.cpp
    Painting/BackingStore.cpp
    Painting/BorderPainting.cpp
    Painting/BorderRadiiData.cpp
    Painting/BorderRadiusCornerClipper.cpp
    Painting/BordersData.cpp
    Painting/BoxModelMetrics.cpp
    Painting/CanvasPaintable.cpp
    Painting/CheckBoxPaintable.cpp
    Painting/ClipFrame.cpp
    Painting/ClippableAndScrollable.cpp
    Painting/Command.cpp
    Painting/DisplayList.cpp
    Painting/DisplayListPlayerSkia.cpp
    Painting/DisplayListRecorder.cpp
    Painting/FieldSetPaintable.cpp
    Painting/GradientPainting.cpp
    Painting/ImagePaintable.cpp
    Painting/LabelablePaintable.cpp
    Painting/MarkerPaintable.cpp
    Painting/MediaPaintable.cpp
    Painting/NavigableContainerViewportPaintable.cpp
    Painting/Paintable.cpp
    Painting/PaintableBox.cpp
    Painting/PaintableFragment.cpp
    Painting/PaintContext.cpp
    Painting/RadioButtonPaintable.cpp
    Painting/ScrollFrame.cpp
    Painting/ScrollState.cpp
    Painting/ShadowPainting.cpp
    Painting/StackingContext.cpp
    Painting/SVGClipPaintable.cpp
    Painting/SVGForeignObjectPaintable.cpp
    Painting/SVGGraphicsPaintable.cpp
    Painting/SVGMaskable.cpp
    Painting/SVGMaskPaintable.cpp
    Painting/SVGPaintable.cpp
    Painting/SVGPathPaintable.cpp
    Painting/SVGSVGPaintable.cpp
    Painting/TableBordersPainting.cpp
    Painting/TextPaintable.cpp
    Painting/VideoPaintable.cpp
    Painting/ViewportPaintable.cpp
    PerformanceTimeline/EntryTypes.cpp
    PerformanceTimeline/EventNames.cpp
    PerformanceTimeline/PerformanceEntry.cpp
    PerformanceTimeline/PerformanceObserver.cpp
    PerformanceTimeline/PerformanceObserverEntryList.cpp
    PermissionsPolicy/AutoplayAllowlist.cpp
    PixelUnits.cpp
    Platform/AudioCodecPlugin.cpp
    Platform/AudioCodecPluginAgnostic.cpp
    Platform/EventLoopPlugin.cpp
    Platform/EventLoopPluginSerenity.cpp
    Platform/FontPlugin.cpp
    Platform/ImageCodecPlugin.cpp
    Platform/Timer.cpp
    Platform/TimerSerenity.cpp
    ReferrerPolicy/AbstractOperations.cpp
    ReferrerPolicy/ReferrerPolicy.cpp
    RequestIdleCallback/IdleDeadline.cpp
    ResizeObserver/ResizeObservation.cpp
    ResizeObserver/ResizeObserver.cpp
    ResizeObserver/ResizeObserverEntry.cpp
    ResizeObserver/ResizeObserverSize.cpp
    ResourceTiming/PerformanceResourceTiming.cpp
    SecureContexts/AbstractOperations.cpp
    Selection/Selection.cpp
    ServiceWorker/CacheStorage.cpp
    ServiceWorker/EventNames.cpp
    ServiceWorker/Job.cpp
    ServiceWorker/Registration.cpp
    ServiceWorker/ServiceWorker.cpp
    ServiceWorker/ServiceWorkerContainer.cpp
    ServiceWorker/ServiceWorkerGlobalScope.cpp
    ServiceWorker/ServiceWorkerRecord.cpp
    ServiceWorker/ServiceWorkerRegistration.cpp
    SRI/SRI.cpp
    StorageAPI/NavigatorStorage.cpp
    StorageAPI/StorageBottle.cpp
    StorageAPI/StorageEndpoint.cpp
    StorageAPI/StorageKey.cpp
    StorageAPI/StorageManager.cpp
    StorageAPI/StorageShed.cpp
    StorageAPI/StorageShelf.cpp
    Streams/AbstractOperations.cpp
    Streams/ByteLengthQueuingStrategy.cpp
    Streams/CountQueuingStrategy.cpp
    Streams/GenericTransformStream.cpp
    Streams/ReadableByteStreamController.cpp
    Streams/ReadableStream.cpp
    Streams/ReadableStreamAsyncIterator.cpp
    Streams/ReadableStreamBYOBReader.cpp
    Streams/ReadableStreamBYOBRequest.cpp
    Streams/ReadableStreamDefaultController.cpp
    Streams/ReadableStreamDefaultReader.cpp
    Streams/ReadableStreamGenericReader.cpp
    Streams/ReadableStreamOperations.cpp
    Streams/ReadableStreamPipeTo.cpp
    Streams/ReadableStreamTee.cpp
    Streams/Transformer.cpp
    Streams/TransformStream.cpp
    Streams/TransformStreamDefaultController.cpp
    Streams/TransformStreamOperations.cpp
    Streams/UnderlyingSink.cpp
    Streams/UnderlyingSource.cpp
    Streams/WritableStream.cpp
    Streams/WritableStreamDefaultController.cpp
    Streams/WritableStreamDefaultWriter.cpp
    Streams/WritableStreamOperations.cpp
    SVG/AttributeNames.cpp
    SVG/AttributeParser.cpp
    SVG/SVGAElement.cpp
    SVG/SVGAnimatedEnumeration.cpp
    SVG/SVGAnimatedLength.cpp
    SVG/SVGAnimatedNumber.cpp
    SVG/SVGAnimatedRect.cpp
    SVG/SVGAnimatedString.cpp
    SVG/SVGAnimatedTransformList.cpp
    SVG/SVGCircleElement.cpp
    SVG/SVGClipPathElement.cpp
    SVG/SVGDecodedImageData.cpp
    SVG/SVGDefsElement.cpp
    SVG/SVGDescElement.cpp
    SVG/SVGElement.cpp
    SVG/SVGEllipseElement.cpp
    SVG/SVGFilterElement.cpp
    SVG/SVGForeignObjectElement.cpp
    SVG/SVGGElement.cpp
    SVG/SVGGeometryElement.cpp
    SVG/SVGGradientElement.cpp
    SVG/SVGGraphicsElement.cpp
    SVG/SVGImageElement.cpp
    SVG/SVGLength.cpp
    SVG/SVGLinearGradientElement.cpp
    SVG/SVGLineElement.cpp
    SVG/SVGMaskElement.cpp
    SVG/SVGMetadataElement.cpp
    SVG/SVGPathElement.cpp
    SVG/SVGPolygonElement.cpp
    SVG/SVGPolylineElement.cpp
    SVG/SVGRadialGradientElement.cpp
    SVG/SVGRectElement.cpp
    SVG/SVGScriptElement.cpp
    SVG/SVGStopElement.cpp
    SVG/SVGStyleElement.cpp
    SVG/SVGSVGElement.cpp
    SVG/SVGSymbolElement.cpp
    SVG/SVGTextContentElement.cpp
    SVG/SVGTextElement.cpp
    SVG/SVGTextPathElement.cpp
    SVG/SVGTextPositioningElement.cpp
    SVG/SVGTitleElement.cpp
    SVG/SVGTransform.cpp
    SVG/SVGTransformList.cpp
    SVG/SVGTSpanElement.cpp
    SVG/SVGUseElement.cpp
    SVG/TagNames.cpp
    SVG/ViewBox.cpp
    UIEvents/CompositionEvent.cpp
    UIEvents/EventNames.cpp
    UIEvents/FocusEvent.cpp
    UIEvents/InputEvent.cpp
    UIEvents/InputTypes.cpp
    UIEvents/KeyboardEvent.cpp
    UIEvents/MouseEvent.cpp
    UIEvents/PointerEvent.cpp
    UIEvents/TextEvent.cpp
    UIEvents/UIEvent.cpp
    UIEvents/WheelEvent.cpp
    URLPattern/URLPattern.cpp
    UserTiming/PerformanceMark.cpp
    UserTiming/PerformanceMeasure.cpp
    WebAssembly/Global.cpp
    WebAssembly/Instance.cpp
    WebAssembly/Memory.cpp
    WebAssembly/Module.cpp
    WebAssembly/Table.cpp
    WebAssembly/WebAssembly.cpp
    WebAudio/AnalyserNode.cpp
    WebAudio/AudioBuffer.cpp
    WebAudio/AudioBufferSourceNode.cpp
    WebAudio/AudioContext.cpp
    WebAudio/AudioDestinationNode.cpp
    WebAudio/AudioListener.cpp
    WebAudio/AudioNode.cpp
    WebAudio/AudioParam.cpp
    WebAudio/AudioScheduledSourceNode.cpp
    WebAudio/BaseAudioContext.cpp
    WebAudio/BiquadFilterNode.cpp
    WebAudio/ChannelMergerNode.cpp
    WebAudio/ChannelSplitterNode.cpp
    WebAudio/ConstantSourceNode.cpp
    WebAudio/DelayNode.cpp
    WebAudio/DynamicsCompressorNode.cpp
    WebAudio/GainNode.cpp
    WebAudio/MediaElementAudioSourceNode.cpp
    WebAudio/OfflineAudioContext.cpp
    WebAudio/OscillatorNode.cpp
    WebAudio/PannerNode.cpp
    WebAudio/PeriodicWave.cpp
    WebAudio/StereoPannerNode.cpp
    WebDriver/Actions.cpp
    WebDriver/Capabilities.cpp
    WebDriver/Client.cpp
    WebDriver/Contexts.cpp
    WebDriver/ElementLocationStrategies.cpp
    WebDriver/ElementReference.cpp
    WebDriver/Error.cpp
    WebDriver/ExecuteScript.cpp
    WebDriver/HeapTimer.cpp
    WebDriver/InputSource.cpp
    WebDriver/InputState.cpp
    WebDriver/JSON.cpp
    WebDriver/Proxy.cpp
    WebDriver/Response.cpp
    WebDriver/Screenshot.cpp
    WebDriver/TimeoutsConfiguration.cpp
    WebDriver/UserPrompt.cpp
    WebGL/EventNames.cpp
    WebGL/Extensions/ANGLEInstancedArrays.cpp
    WebGL/Extensions/EXTBlendMinMax.cpp
    WebGL/Extensions/EXTColorBufferFloat.cpp
    WebGL/Extensions/OESVertexArrayObject.cpp
    WebGL/Extensions/WebGLCompressedTextureS3tc.cpp
    WebGL/Extensions/WebGLDrawBuffers.cpp
    WebGL/Extensions/WebGLVertexArrayObjectOES.cpp
    WebGL/OpenGLContext.cpp
    WebGL/WebGL2RenderingContext.cpp
    WebGL/WebGLActiveInfo.cpp
    WebGL/WebGLBuffer.cpp
    WebGL/WebGLContextAttributes.cpp
    WebGL/WebGLContextEvent.cpp
    WebGL/WebGLFramebuffer.cpp
    WebGL/WebGLObject.cpp
    WebGL/WebGLProgram.cpp
    WebGL/WebGLQuery.cpp
    WebGL/WebGLRenderbuffer.cpp
    WebGL/WebGLRenderingContext.cpp
    WebGL/WebGLSampler.cpp
    WebGL/WebGLShader.cpp
    WebGL/WebGLShaderPrecisionFormat.cpp
    WebGL/WebGLSync.cpp
    WebGL/WebGLTexture.cpp
    WebGL/WebGLTransformFeedback.cpp
    WebGL/WebGLUniformLocation.cpp
    WebGL/WebGLVertexArrayObject.cpp
    WebIDL/AbstractOperations.cpp
    WebIDL/AsyncIterator.cpp
    WebIDL/Buffers.cpp
    WebIDL/CallbackType.cpp
    WebIDL/DOMException.cpp
    WebIDL/ObservableArray.cpp
    WebIDL/OverloadResolution.cpp
    WebIDL/Promise.cpp
    WebIDL/Tracing.cpp
    WebSockets/WebSocket.cpp
    WebVTT/VTTCue.cpp
    WebVTT/VTTRegion.cpp
    Worker/WebWorkerClient.cpp
    XHR/EventNames.cpp
    XHR/FormData.cpp
    XHR/FormDataIterator.cpp
    XHR/ProgressEvent.cpp
    XHR/XMLHttpRequest.cpp
    XHR/XMLHttpRequestEventTarget.cpp
    XHR/XMLHttpRequestUpload.cpp
    XLink/AttributeNames.cpp
    XML/XMLDocumentBuilder.cpp
)

compile_ipc(Worker/WebWorkerClient.ipc Worker/WebWorkerClientEndpoint.h)
compile_ipc(Worker/WebWorkerServer.ipc Worker/WebWorkerServerEndpoint.h)

invoke_generator(
    "AriaRoles.cpp"
    Lagom::GenerateAriaRoles
    "${CMAKE_CURRENT_SOURCE_DIR}/ARIA/AriaRoles.json"
    "ARIA/AriaRoles.h"
    "ARIA/AriaRoles.cpp"
    arguments -j "${CMAKE_CURRENT_SOURCE_DIR}/ARIA/AriaRoles.json"
)

generate_css_implementation()

generate_html_implementation()

invoke_generator(
    "WebGLRenderingContextImpl.cpp"
    Lagom::GenerateWebGLRenderingContext
    "${CMAKE_CURRENT_SOURCE_DIR}/WebGL/WebGLRenderingContextBase.idl"
    "WebGL/WebGLRenderingContextImpl.h"
    "WebGL/WebGLRenderingContextImpl.cpp"
    arguments -b "${CMAKE_CURRENT_SOURCE_DIR}" -b "${CMAKE_CURRENT_BINARY_DIR}" -i "${CMAKE_CURRENT_SOURCE_DIR}/WebGL/WebGLRenderingContext.idl"
    # NOTE: GeneratedCSSStyleProperties.idl is listed because it's transitively included by WebGLRenderingContextBase.idl
    #       and we need to make sure it's generated before we generate the WebGLRenderingContext implementation.
    dependencies WebGL/WebGLRenderingContextBase.idl WebGL/WebGLRenderingContextOverloads.idl CSS/GeneratedCSSStyleProperties.idl
)

invoke_generator(
    "WebGL2RenderingContextImpl.cpp"
    Lagom::GenerateWebGLRenderingContext
    "${CMAKE_CURRENT_SOURCE_DIR}/WebGL/WebGL2RenderingContextBase.idl"
    "WebGL/WebGL2RenderingContextImpl.h"
    "WebGL/WebGL2RenderingContextImpl.cpp"
    arguments -b "${CMAKE_CURRENT_SOURCE_DIR}" -b "${CMAKE_CURRENT_BINARY_DIR}" -i "${CMAKE_CURRENT_SOURCE_DIR}/WebGL/WebGL2RenderingContext.idl"
    # NOTE: GeneratedCSSStyleProperties.idl is listed because it's transitively included by WebGLRenderingContextBase.idl
    #       and we need to make sure it's generated before we generate the WebGLRenderingContext implementation.
    dependencies WebGL/WebGL2RenderingContextBase.idl WebGL/WebGL2RenderingContextOverloads.idl WebGL/WebGLRenderingContextBase.idl WebGL/WebGLRenderingContextOverloads.idl CSS/GeneratedCSSStyleProperties.idl
)

set(GENERATED_SOURCES
    ARIA/AriaRoles.cpp
    CSS/DefaultStyleSheetSource.cpp
    CSS/DescriptorID.cpp
    CSS/Enums.cpp
    CSS/GeneratedCSSStyleProperties.cpp
    CSS/GeneratedCSSStyleProperties.idl
    CSS/Keyword.cpp
    CSS/MathFunctions.cpp
    CSS/MediaFeatureID.cpp
    CSS/PropertyID.cpp
    CSS/PseudoClass.cpp
    CSS/PseudoElement.cpp
    CSS/QuirksModeStyleSheetSource.cpp
    CSS/TransformFunctions.cpp
    MathML/MathMLStyleSheetSource.cpp
    SVG/SVGStyleSheetSource.cpp
    WebGL/WebGL2RenderingContextImpl.cpp
    WebGL/WebGLRenderingContextImpl.cpp
    Worker/WebWorkerClientEndpoint.h
    Worker/WebWorkerServerEndpoint.h
    HTML/Parser/NamedCharacterReferences.cpp
)

serenity_lib(LibWeb web)

target_link_libraries(LibWeb PRIVATE LibCore LibCompress LibCrypto LibJS LibHTTP LibGfx LibIPC LibRegex LibSyntax LibTextCodec LibUnicode LibMedia LibWasm LibXML LibIDL LibURL LibTLS LibRequests LibGC LibThreading skia)

if (APPLE)
    target_link_libraries(LibWeb PRIVATE unofficial::angle::libEGL unofficial::angle::libGLESv2)
endif()

# FIXME: https://github.com/microsoft/vcpkg/issues/42324
target_include_directories(LibWeb PRIVATE ${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/include)

generate_js_bindings(LibWeb)

if (ENABLE_SWIFT)
    include(collections)

    set(generated_headers ${GENERATED_SOURCES})
    list(FILTER generated_headers INCLUDE REGEX "\\.h$")
    list(TRANSFORM generated_headers PREPEND "${CMAKE_CURRENT_BINARY_DIR}/")
    list(APPEND LIBWEB_ALL_GENERATED_HEADERS ${generated_headers})

    generate_clang_module_map(LibWeb GENERATED_FILES ${LIBWEB_ALL_GENERATED_HEADERS})

    target_sources(LibWeb PRIVATE
        HTML/Parser/HTMLToken.swift
        HTML/Parser/HTMLTokenizer.swift
        HTML/Parser/HTMLTokenizerHelpers.cpp
        HTML/Parser/SpeculativeHTMLParser.swift
    )
    target_link_libraries(LibWeb PRIVATE AK Collections)
    add_swift_target_properties(LibWeb LAGOM_LIBRARIES AK LibGfx LibGC)
endif()
