if (MSVC) include(OptionsMSVC) endif () # Define minimum supported Windows version # https://msdn.microsoft.com/en-us/library/6sehtctf.aspx # # Windows 10 1809 "Redstone 5" NTDDI_WIN10_RS5 (0x0A000006) # https://learn.microsoft.com/en-us/windows/win32/winprog/using-the-windows-headers?redirectedfrom=MSDN#macros-for-conditional-declarations # # Supported versions of Windows client # https://learn.microsoft.com/en-us/windows/release-health/supported-versions-windows-client add_definitions(-D_WINDOWS -DNTDDI_VERSION=0x0A000006 -D_WIN32_WINNT=0x0A00) add_definitions(-DNOMINMAX) add_definitions(-DUNICODE -D_UNICODE) add_definitions(-DNOCRYPT) # For fileno, wcsicmp, getpid and strdup. # https://learn.microsoft.com/en-us/previous-versions/ms235384(v=vs.100) add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE) # FIXME: warning STL4042: std::float_denorm_style, std::numeric_limits::has_denorm, and std::numeric_limits::has_denorm_loss are deprecated in C++23. add_definitions(-D_SILENCE_CXX23_DENORM_DEPRECATION_WARNING) # If is not included before redefinition errors occur # unless _WINSOCKAPI_ is defined before is included add_definitions(-D_WINSOCKAPI_=) set(ENABLE_WEBKIT ON) set(ENABLE_WEBKIT_LEGACY OFF) if (DEFINED ENV{WEBKIT_IGNORE_PATH}) list(APPEND CMAKE_IGNORE_PATH $ENV{WEBKIT_IGNORE_PATH}) endif () set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}") set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}") set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}") set(CMAKE_DISABLE_PRECOMPILE_HEADERS OFF) find_package(CURL 7.87.0 REQUIRED) find_package(HarfBuzz 1.4.2 REQUIRED COMPONENTS ICU) find_package(ICU 70.1 REQUIRED COMPONENTS data i18n uc) find_package(JPEG 1.5.2 REQUIRED) find_package(LibXml2 2.9.7 REQUIRED) find_package(OpenSSL REQUIRED) find_package(PNG 1.6.34 REQUIRED) find_package(SQLite3 3.23.1 REQUIRED) find_package(ZLIB 1.2.11 REQUIRED) find_package(LibPSL 0.20.2 REQUIRED) find_package(WebP REQUIRED COMPONENTS demux) WEBKIT_OPTION_BEGIN() # FIXME: Most of these options should not be public. # TODO: Audit the features list WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_OVERFLOW_SCROLLING_TOUCH PUBLIC OFF) WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_API_TESTS PUBLIC ON) WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ATTACHMENT_ELEMENT PUBLIC ON) WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_CURSOR_VISIBILITY PUBLIC ON) WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_DEVICE_ORIENTATION PUBLIC OFF) WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_DRAG_SUPPORT PUBLIC ON) WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_FTL_JIT PUBLIC ON) WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_FULLSCREEN_API PUBLIC ON) WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_GAMEPAD PUBLIC OFF) WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_GEOLOCATION PUBLIC ON) WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_LAYOUT_TESTS PUBLIC ON) WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MATHML PUBLIC ON) WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MEDIA_SOURCE PUBLIC OFF) WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MEDIA_STATISTICS PUBLIC ON) WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MINIBROWSER PUBLIC ON) WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MOUSE_CURSOR_SCALE PUBLIC ON) WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_VIDEO PUBLIC ON) WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_WEBASSEMBLY PRIVATE ON) WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_WEBASSEMBLY_BBQJIT PRIVATE ON) WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_WEBASSEMBLY_OMGJIT PRIVATE ON) WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_WEB_AUDIO PUBLIC OFF) WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_XSLT PUBLIC ON) WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_SMOOTH_SCROLLING PRIVATE OFF) WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_WEBGL PRIVATE OFF) WEBKIT_OPTION_DEFAULT_PORT_VALUE(USE_AVIF PRIVATE OFF) WEBKIT_OPTION_DEFAULT_PORT_VALUE(USE_SKIA PRIVATE ON) WEBKIT_OPTION_DEFAULT_PORT_VALUE(USE_WOFF2 PRIVATE ON) WEBKIT_OPTION_DEFAULT_PORT_VALUE(USE_SYSTEM_MALLOC PRIVATE OFF) # Enabled features WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_DARK_MODE_CSS PRIVATE ON) WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_LEGACY_ENCRYPTED_MEDIA PUBLIC OFF) WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_SHAREABLE_RESOURCE PRIVATE ON) WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_USER_MESSAGE_HANDLERS PRIVATE ON) WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_WEBGL PUBLIC ON) # Experimental features WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_APPLICATION_MANIFEST PRIVATE ${ENABLE_EXPERIMENTAL_FEATURES}) WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_GPU_PROCESS PRIVATE ${ENABLE_EXPERIMENTAL_FEATURES}) WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_REMOTE_INSPECTOR PRIVATE ${ENABLE_EXPERIMENTAL_FEATURES}) WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_RESOURCE_USAGE PRIVATE ${ENABLE_EXPERIMENTAL_FEATURES}) WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_VARIATION_FONTS PRIVATE ${ENABLE_EXPERIMENTAL_FEATURES}) WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_WEBDRIVER PRIVATE ${ENABLE_EXPERIMENTAL_FEATURES}) # No support planned WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_FTPDIR PRIVATE OFF) # WebDriver options SET_AND_EXPOSE_TO_BUILD(ENABLE_WEBDRIVER_KEYBOARD_INTERACTIONS ON) SET_AND_EXPOSE_TO_BUILD(ENABLE_WEBDRIVER_MOUSE_INTERACTIONS ON) WEBKIT_OPTION_END() set(USE_ANGLE_EGL ON) SET_AND_EXPOSE_TO_BUILD(USE_ANGLE ON) SET_AND_EXPOSE_TO_BUILD(USE_CURL ON) SET_AND_EXPOSE_TO_BUILD(USE_GRAPHICS_LAYER_TEXTURE_MAPPER ON) SET_AND_EXPOSE_TO_BUILD(USE_GRAPHICS_LAYER_WC ON) SET_AND_EXPOSE_TO_BUILD(USE_HARFBUZZ ON) SET_AND_EXPOSE_TO_BUILD(USE_OPENSSL ON) SET_AND_EXPOSE_TO_BUILD(USE_TEXTURE_MAPPER ON) SET_AND_EXPOSE_TO_BUILD(USE_THEME_ADWAITA ON) SET_AND_EXPOSE_TO_BUILD(USE_MEDIA_FOUNDATION ${ENABLE_VIDEO}) SET_AND_EXPOSE_TO_BUILD(USE_INSPECTOR_SOCKET_SERVER ${ENABLE_REMOTE_INSPECTOR}) SET_AND_EXPOSE_TO_BUILD(HAVE_GL_FENCE ON) SET_AND_EXPOSE_TO_BUILD(ENABLE_DEVELOPER_MODE ${DEVELOPER_MODE}) # See if OpenSSL implementation is BoringSSL cmake_push_check_state() set(CMAKE_REQUIRED_INCLUDES "${OPENSSL_INCLUDE_DIR}") set(CMAKE_REQUIRED_LIBRARIES "${OPENSSL_LIBRARIES}") WEBKIT_CHECK_HAVE_SYMBOL(USE_BORINGSSL OPENSSL_IS_BORINGSSL openssl/ssl.h) cmake_pop_check_state() if (ENABLE_XSLT) find_package(LibXslt 1.1.32 REQUIRED) endif () if (USE_AVIF) find_package(AVIF 0.9.0) if (NOT AVIF_FOUND) message(FATAL_ERROR "libavif 0.9.0 is required for USE_AVIF.") endif () endif () if (USE_LCMS) find_package(LCMS2) if (NOT LCMS2_FOUND) message(FATAL_ERROR "libcms2 is required for USE_LCMS.") endif () endif () if (USE_JPEGXL) find_package(JPEGXL 0.7.0) if (NOT JPEGXL_FOUND) message(FATAL_ERROR "libjxl is required for USE_JPEGXL") endif () endif () if (USE_SKIA) find_package(HarfBuzz 1.4.2 REQUIRED COMPONENTS ICU) find_library(SHARPYUV_LIBS libsharpyuv) SET_AND_EXPOSE_TO_BUILD(USE_HARFBUZZ ON) else () find_package(Cairo 1.18.0 REQUIRED) SET_AND_EXPOSE_TO_BUILD(USE_CAIRO ON) endif () if (USE_WOFF2) find_package(WOFF2 1.0.2 COMPONENTS dec) if (NOT WOFF2_FOUND) message(FATAL_ERROR "libwoff2dec is required for USE_WOFF2") endif () find_package(Brotli REQUIRED COMPONENTS dec) endif () set(bmalloc_LIBRARY_TYPE OBJECT) set(WTF_LIBRARY_TYPE OBJECT) set(JavaScriptCore_LIBRARY_TYPE SHARED) set(PAL_LIBRARY_TYPE OBJECT) set(WebCore_LIBRARY_TYPE SHARED) set(WebCoreTestSupport_LIBRARY_TYPE OBJECT)