diff options
-rw-r--r-- | CMakeLists.txt | 28 | ||||
-rw-r--r-- | cmake/Functions.cmake | 39 | ||||
-rw-r--r-- | src/CMakeLists.txt | 27 | ||||
-rw-r--r-- | src/core/CMakeLists.txt | 181 | ||||
-rw-r--r-- | src/core/api/CMakeLists.txt | 74 | ||||
-rw-r--r-- | src/core/generator.cmake | 10 | ||||
-rw-r--r-- | src/process/CMakeLists.txt | 20 |
7 files changed, 353 insertions, 26 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index fd00f06e9..fd16c061d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,7 @@ include(.cmake.conf) include(ExternalProject) include(cmake/Functions.cmake) -project(QtWebEngineSuperBuild +project(QtWebEngineRepoSuperBuild VERSION "${QT_REPO_MODULE_VERSION}" DESCRIPTION "Qt WebEngine Libraries" HOMEPAGE_URL "https://qt.io/" @@ -25,7 +25,6 @@ set(__QtFeature_only_evaluate_features OFF) include(configure.cmake) include(src/core/api/configure.cmake) qt_feature_module_end(ONLY_EVALUATE_FEATURES) -qt_build_repo_end() if(NOT ${webEngineSupport}) add_custom_target(WebEngineErrorMessage ALL @@ -47,6 +46,10 @@ if(NOT QT_FEATURE_qtwebengine_build AND NOT QT_FEATURE_qtpdf_build) return() endif() +add_subdirectory(src/core/api) +add_subdirectory(src/process) +qt_build_repo_end() + ### NINJA if(NOT Ninja_FOUND) @@ -87,20 +90,22 @@ get_qt_features(featureList webengine) get_qt_features(featureList qtwebengine) list(TRANSFORM featureList PREPEND "-D") -list(APPEND webenginecoreCmakeArgs +list(APPEND libsCmakeArgs "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}" "-DWEBENGINE_ROOT_BUILD_PATH=${CMAKE_CURRENT_BINARY_DIR}" "-DWEBENGINE_ROOT_SOURCE_DIR=${WEBENGINE_ROOT_SOURCE_DIR}" - "${featureList}") + "-DWEBENGINE_REPO_BUILD=TRUE" + "${featureList}" +) externalproject_add(libs - SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/src/core - BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/src/core - INSTALL_DIR ${installDir} + SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/src + BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/src PREFIX libs USES_TERMINAL_CONFIGURE ON USES_TERMINAL_BUILD ON - CMAKE_ARGS ${webenginecoreCmakeArgs} + BUILD_ALWAYS TRUE + CMAKE_ARGS ${libsCmakeArgs} ) if(NOT Gn_FOUND) @@ -111,3 +116,10 @@ if(NOT Ninja_FOUND) externalproject_add_stepdependencies(gn install ninja) endif() +# install resources (again), coin calls install with DESTDIR +install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/translations/qtwebengine_locales + DESTINATION ${CMAKE_INSTALL_PREFIX}/translations +) +install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/resources + DESTINATION ${CMAKE_INSTALL_PREFIX} +) diff --git a/cmake/Functions.cmake b/cmake/Functions.cmake index 89dff400f..6f69bb792 100644 --- a/cmake/Functions.cmake +++ b/cmake/Functions.cmake @@ -56,3 +56,42 @@ function(get_qt_features outList module) set(${outList} "${${outList}}" "${_featureList}" PARENT_SCOPE) endif() endfunction() + +function(get_configure_mode configureMode) + if (NOT DEFINED WEBENGINE_REPO_BUILD) + set(${configureMode} NO_CONFIG_HEADER_FILE NO_SYNC_QT PARENT_SCOPE) + endif() +endfunction() + +function(make_config_for_gn target configFileName) + if(NOT DEFINED WEBENGINE_REPO_BUILD) + file(GENERATE + OUTPUT ${configFileName}.cxx.cmake + CONTENT [[ + set(GN_INCLUDES_IN $<TARGET_PROPERTY:INCLUDE_DIRECTORIES>) + set(GN_DEFINES_IN $<TARGET_PROPERTY:COMPILE_DEFINITIONS>) + set(GN_LIBS_IN $<TARGET_PROPERTY:LINK_LIBRARIES>) + set(GN_LINK_OPTIONS_IN $<TARGET_PROPERTY:LINK_OPTIONS>) + set(GN_CXX_COMPILE_OPTIONS_IN $<TARGET_PROPERTY:COMPILE_OPTIONS>)]] + CONDITION $<COMPILE_LANGUAGE:CXX> + TARGET ${target}) + file(GENERATE + OUTPUT ${configFileName}.c.cmake + CONTENT [[ set(GN_C_COMPILE_OPTIONS_IN $<TARGET_PROPERTY:COMPILE_OPTIONS>)]] + CONDITION $<COMPILE_LANGUAGE:C> + TARGET ${target}) + endif() +endfunction() + +function(make_install_only target) + if(NOT DEFINED WEBENGINE_REPO_BUILD) + set_target_properties(${target} PROPERTIES EXCLUDE_FROM_ALL TRUE) + endif() +endfunction() + +macro(assertRunAsTopLevelBuild condition) + if (NOT DEFINED WEBENGINE_REPO_BUILD AND ${condition}) + message(FATAL_ERROR "This cmake file should run as top level build.") + return() + endif() +endmacro() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 000000000..4f3858ef6 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,27 @@ +cmake_minimum_required(VERSION 3.18.0) + +if(NOT DEFINED WEBENGINE_ROOT_SOURCE_DIR) + get_filename_component(WEBENGINE_ROOT_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/.." ABSOLUTE) +endif() + +include(${WEBENGINE_ROOT_SOURCE_DIR}/.cmake.conf) +include(${WEBENGINE_ROOT_SOURCE_DIR}/cmake/Functions.cmake) + +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${WEBENGINE_ROOT_SOURCE_DIR}/cmake") + +assertRunAsTopLevelBuild(TRUE) + +project(QtWebEngineRepo + VERSION "${QT_REPO_MODULE_VERSION}" + DESCRIPTION "QtWebEngineRepo for QtWebEngineCore, QtWebEngine, QtWebEngineWidgets, QtPdf modules" + HOMEPAGE_URL "https://qt.io" + LANGUAGES CXX C) + +find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS BuildInternals Core) +find_package(Qt6 ${PROJECT_VERSION} CONFIG OPTIONAL_COMPONENTS Gui Widgets Network OpenGL OpenGLWidgets Quick Qml QuickTest Test) + +qt_build_repo_begin() +add_subdirectory(core) +add_subdirectory(process) +qt_build_repo_end() + diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index bdb937e19..77aab9364 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -1,19 +1,20 @@ cmake_minimum_required(VERSION 3.18.0) -project(QtWebEngineCore - VERSION "6.0.0" - DESCRIPTION "QtWebEngineCore" - HOMEPAGE_URL "https://doc.qt.io/qt-5/qtwebenginecore-module.html" - LANGUAGES CXX C) - -if (NOT DEFINED CMAKE_WEBENGINE_ROOT_BUILD_PATH) - get_filename_component(CMAKE_WEBENGINE_ROOT_BUILD_PATH ${CMAKE_CURRENT_BINARY_DIR}/../.. ABSOLUTE) +if(NOT DEFINED WEBENGINE_ROOT_SOURCE_DIR) + get_filename_component(WEBENGINE_ROOT_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../.." ABSOLUTE) +endif() +if (NOT DEFINED WEBENGINE_ROOT_BUILD_DIR) + get_filename_component(WEBENGINE_ROOT_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/../.." ABSOLUTE) endif() -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/../../cmake") +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${WEBENGINE_ROOT_SOURCE_DIR}/cmake") set(buildDir "${CMAKE_CURRENT_BINARY_DIR}/debug") -include(${PROJECT_SOURCE_DIR}/../../cmake/Functions.cmake) +include(${WEBENGINE_ROOT_SOURCE_DIR}/cmake/Functions.cmake) + +assertRunAsTopLevelBuild(TRUE) + +add_subdirectory(api) get_qt_features(featureList webengine) message(${featureList}) @@ -24,15 +25,119 @@ find_package(Gn REQUIRED) find_package(Ninja REQUIRED) find_package(Python2 REQUIRED) -qt_build_repo_begin() +get_target_property(qtWebEngineProcessName Qt6::WebEngineCore QTWEBENGINEPROCESS_NAME) include(generator.cmake) -configure_file(${PROJECT_SOURCE_DIR}/configure/BUILD.toolchain.gn.in ${buildDir}/toolchain/BUILD.gn @ONLY) -configure_file(${PROJECT_SOURCE_DIR}/configure/BUILD.root.gn.in ${buildDir}/BUILD.gn @ONLY) +configure_file(${WEBENGINE_ROOT_SOURCE_DIR}/src/core/configure/BUILD.toolchain.gn.in ${buildDir}/toolchain/BUILD.gn @ONLY) +configure_file(${WEBENGINE_ROOT_SOURCE_DIR}/src/core/configure/BUILD.root.gn.in ${buildDir}/BUILD.gn @ONLY) get_target_property(gnCmd Gn::gn IMPORTED_LOCATION) -set(gnArg help) +set(gnArg gen ${buildDir}) + +list(APPEND gnArg + --script-executable=${Python2_EXECUTABLE} + --root=${WEBENGINE_ROOT_SOURCE_DIR}/src/3rdparty/chromium) + +list(APPEND gnArgArg + use_qt=true + init_stack_vars=false + is_component_build=false + is_shared=true + enable_debugallocation=false + enable_media_remoting=false + enable_message_center=false + enable_nacl=false + enable_remoting=false + enable_reporting=false + enable_resource_allowlist_generation=false + enable_swiftshader=false + enable_swiftshader_vulkan=false + angle_enable_swiftshader=false + enable_web_speech=false + enable_widevine=true + forbid_non_component_debug_builds=false + has_native_accessibility=false + safe_browsing_mode=0 + skia_use_dawn=false + toolkit_views=false + treat_warnings_as_errors=false + use_allocator_shim=false + use_allocator="none" + use_custom_libcxx=false + chrome_pgo_phase=0 + enable_hangout_services_extension=false + optimize_webui=false + enable_js_type_check=false + v8_use_external_startup_data=false + strip_absolute_paths_from_debug_symbols=false + use_jumbo_build=true + jumbo_file_merge_limit=8 + jumbo_build_excluded=["browser"] + enable_precompiled_headers=false + is_official_build=false + is_unsafe_developer_build=false + from_here_uses_location_builtins=false + is_debug=true use_debug_fission=false + blink_symbol_level=0 + remove_v8base_debug_symbols=true + use_cups=false + use_gio=false + use_gnome_keyring=false + use_udev=true + use_bundled_fontconfig=false + use_sysroot=false + enable_session_service=false + is_cfi=false + use_ozone=true + use_x11=false + ozone_auto_platforms=false + ozone_platform_headless=false + ozone_platform_external=true + ozone_platform="qt" + ozone_extra_path="${CMAKE_CURRENT_LIST_DIR}/ozone/ozone_extra.gni" + use_gold=false + use_lld=true + is_clang=false + custom_toolchain="${buildDir}/toolchain:target" + host_toolchain="${buildDir}/toolchain:host" + host_cpu="x64" + pkg_config="pkg-config" + host_pkg_config="/usr/bin/pkg-config" + use_system_zlib=true + use_system_minizip=true + pdfium_use_system_zlib=true + use_system_libpng=true + pdfium_use_system_libpng=true + use_system_libjpeg=true + use_system_freetype=true + use_system_harfbuzz=false + use_glib=false + enable_basic_printing=false + enable_print_preview=false + enable_pdf=false + enable_plugins=false + enable_spellcheck=false + enable_webrtc=false + proprietary_codecs=false + enable_extensions=false + use_kerberos=false + use_pulseaudio=true + use_alsa=true + ozone_platform_x11=true + use_xkbcommon=true + use_xscrnsaver=true + rtc_use_x11=true + use_system_libevent=true + use_system_libwebp=true + use_system_opus=true + use_system_snappy=true + use_system_libvpx=true + use_system_re2=true + use_system_lcms2=true + qtwebengine_target="${buildDir}:QtWebEngineCore") +list(JOIN gnArgArg " " gnArgArg) +list(APPEND gnArg "--args=${gnArgArg}") message("configure with gn") execute_process( @@ -48,19 +153,61 @@ if(NOT gnResult EQUAL 0) message(FATAL_ERROR "Calling gn - FAILED ! \n${gnOutput}\n${gnError}") endif() +message("CMD: ${gnCmd}\nARGS: ${gnArg}\nOUTPUT: ${gnOutput}") + +include(${buildDir}/QtWebEngineCore.cmake) + add_custom_command( OUTPUT QtWebEngineCore.stamp WORKING_DIRECTORY ${buildDir} COMMAND Ninja::ninja $ENV{NINJAFLAGS} -C ${buildDir} - ${CMAKE_PROJECT_NAME} + QtWebEngineCore USES_TERMINAL VERBATIM ) add_custom_target(ninja ALL DEPENDS QtWebEngineCore.stamp) -message("CMD: ${gn_cmd}\nARGS: ${gnArg}\nOUTPUT: ${gnOutput}") +add_dependencies(WebEngineCore ninja) +target_include_directories(WebEngineCore PRIVATE ${buildDir}/gen) + +# there is no syncqt on this module so use includes provided for gn, which should be identical +target_include_directories(WebEngineCore PRIVATE ${GN_INCLUDES_IN}) +add_library(chromiumObjects OBJECT IMPORTED GLOBAL) +set_property(TARGET chromiumObjects PROPERTY IMPORTED_OBJECTS ${NINJA_OBJECTS}) +target_link_libraries(WebEngineCore PRIVATE chromiumObjects) +target_link_libraries(WebEngineCore PRIVATE ${NINJA_ARCHIVES}) +target_link_libraries(WebEngineCore PUBLIC ${NINJA_LIBS}) + +# +# RESOURCES +# + +#TODO: use simply filter / globbing-expressions +set(localeList am ar bg bn ca cs da de el en-GB en-US es-419 es et fa fi fil fr + gu he hi hr hu id it ja kn ko lt lv ml mr ms nb nl pl pt-BR pt-PT ro ru sk + sl sr sv sw ta te th tr uk vi zh-CN zh-TW) + +foreach(loc ${localeList}) + get_filename_component(locSourcePath ${buildDir}/qtwebengine_locales/${loc}.pak ABSOLUTE) + LIST(APPEND localeFiles ${locSourcePath}) +endforeach() + +set(resourceList qtwebengine_resources.pak + qtwebengine_resources_100p.pak + qtwebengine_resources_200p.pak + qtwebengine_devtools_resources.pak) + +foreach(res ${resourceList}) + get_filename_component(resSourcePath ${buildDir}/${res} ABSOLUTE) + LIST(APPEND resourceFiles ${resSourcePath}) +endforeach() + + +get_filename_component(icuFiles ${buildDir}/icudtl.dat ABSOLUTE) -qt_build_repo_end() +install(FILES ${localeFiles} DESTINATION ${INSTALL_DATADIR}/translations/qtwebengine_locales) +install(FILES ${resourceFiles} DESTINATION ${INSTALL_DATADIR}/resources) +install(FILES ${icuFiles} DESTINATION ${INSTALL_DATADIR}/resources) diff --git a/src/core/api/CMakeLists.txt b/src/core/api/CMakeLists.txt new file mode 100644 index 000000000..cca5150ee --- /dev/null +++ b/src/core/api/CMakeLists.txt @@ -0,0 +1,74 @@ +if(NOT DEFINED WEBENGINE_ROOT_SOURCE_DIR) + get_filename_component(WEBENGINE_ROOT_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../.." ABSOLUTE) +endif() +find_package(Qt6 ${PROJECT_VERSION} REQUIRED COMPONENTS Gui Network OpenGL Quick) +find_package(Qt6 ${PROJECT_VERSION} QUIET OPTIONAL_COMPONENTS PrintSupport WebChannel) +include(${WEBENGINE_ROOT_SOURCE_DIR}/cmake/Functions.cmake) + +get_configure_mode(configureMode) + +set(qtWebEngineProcessName QtWebEngineProcess) + +qt_internal_add_module(WebEngineCore + ${configureMode} + SOURCES + qtwebenginecoreglobal.cpp qtwebenginecoreglobal.h qtwebenginecoreglobal_p.h + qwebenginecallback.h qwebenginecallback_p.h + qwebenginecertificateerror.cpp qwebenginecertificateerror.h + qwebengineclientcertificateselection.cpp qwebengineclientcertificateselection.h + qwebengineclientcertificatestore.cpp qwebengineclientcertificatestore.h + qwebenginecontextmenurequest.cpp qwebenginecontextmenurequest.h qwebenginecontextmenurequest_p.h + qwebenginecookiestore.cpp qwebenginecookiestore.h qwebenginecookiestore_p.h + qwebenginedownloadrequest.cpp qwebenginedownloadrequest.h qwebenginedownloadrequest_p.h + qwebenginefindtextresult.cpp qwebenginefindtextresult.h + qwebenginefullscreenrequest.cpp qwebenginefullscreenrequest.h + qwebenginehistory.cpp qwebenginehistory.h qwebenginehistory_p.h + qwebenginehttprequest.cpp qwebenginehttprequest.h + qwebengineloadrequest.cpp qwebengineloadrequest.h + qwebenginemessagepumpscheduler.cpp qwebenginemessagepumpscheduler_p.h + qwebenginenotification.cpp qwebenginenotification.h + qwebenginepage.cpp qwebenginepage.h qwebenginepage_p.h + qwebengineprofile.cpp qwebengineprofile.h qwebengineprofile_p.h + qwebenginequotarequest.cpp qwebenginequotarequest.h + qwebengineregisterprotocolhandlerrequest.cpp qwebengineregisterprotocolhandlerrequest.h + qwebenginescript.cpp qwebenginescript.h + qwebenginescriptcollection.cpp qwebenginescriptcollection.h qwebenginescriptcollection_p.h + qwebenginesettings.cpp qwebenginesettings.h + qwebengineurlrequestinfo.cpp qwebengineurlrequestinfo.h qwebengineurlrequestinfo_p.h + qwebengineurlrequestinterceptor.h + qwebengineurlrequestjob.cpp qwebengineurlrequestjob.h + qwebengineurlscheme.cpp qwebengineurlscheme.h + qwebengineurlschemehandler.cpp qwebengineurlschemehandler.h + DEFINES + BUILDING_CHROMIUM + NOMINMAX + INCLUDE_DIRECTORIES + ../ + ../../3rdparty/chromium + ../../3rdparty/chromium/third_party/abseil-cpp + LIBRARIES + Qt::CorePrivate + Qt::GuiPrivate + Qt::QuickPrivate + PUBLIC_LIBRARIES + Qt::Core + Qt::Gui + Qt::Network + Qt::Quick +) + +set_target_properties(WebEngineCore PROPERTIES QTWEBENGINEPROCESS_NAME ${qtWebEngineProcessName}) + +# Chromium included headers are not clean +qt_skip_warnings_are_errors(WebEngineCore) +make_install_only(WebEngineCore) +make_config_for_gn(WebEngineCore gn_config) + +qt_internal_extend_target(WebEngineCore CONDITION QT_FEATURE_webengine_printing_and_pdf + PUBLIC_LIBRARIES + Qt::PrintSupport +) +qt_internal_extend_target(WebEngineCore CONDITION QT_FEATURE_webengine_webchannel + PUBLIC_LIBRARIES + Qt::WebChannel +) diff --git a/src/core/generator.cmake b/src/core/generator.cmake index 60042fb97..160275fc7 100644 --- a/src/core/generator.cmake +++ b/src/core/generator.cmake @@ -1,7 +1,7 @@ set(GN_DEFINES QT_NO_KEYWORDS QT_USE_QSTRINGBUILDER QTWEBENGINECORE_VERSION_STR=\\\"${QT_REPO_MODULE_VERSION}\\\" - QTWEBENGINEPROCESS_NAME=\\\"${QTWEBENGINEPROCESS_NAME}\\\" + QTWEBENGINEPROCESS_NAME=\\\"${qtWebEngineProcessName}\\\" BUILDING_CHROMIUM) set(GN_SOURCES_IN @@ -242,6 +242,13 @@ foreach(GN_DEFINE ${GN_DEFINES_IN}) endforeach() string(REPLACE ";" ",\n " GN_ARGS_DEFINES "${GN_ARGS_DEFINES}") string(REPLACE ";" ",\n " GN_DEFINES "${GN_DEFINES}") +# we had no qtsync on headers during configure, so take current interface from expression generator +get_target_property(moduleIncludes WebEngineCore INCLUDE_DIRECTORIES) +foreach(moduleInclude ${moduleIncludes}) + if (moduleInclude MATCHES "\\$<BUILD_INTERFACE:([^,>]+)>") + list(APPEND GN_INCLUDES_IN ${CMAKE_MATCH_1}) + endif() +endforeach() list(REMOVE_DUPLICATES GN_INCLUDES_IN) foreach(GN_INCLUDE ${GN_INCLUDES_IN}) list(APPEND GN_ARGS_INCLUDES \"-I${GN_INCLUDE}\") @@ -261,3 +268,4 @@ foreach(GN_C_COMPILE_OPTION ${GN_C_COMPILE_OPTIONS_IN}) endforeach() list(REMOVE_DUPLICATES GN_CFLAGS_C) string(REPLACE ";" ",\n " GN_CFLAGS_C "${GN_CFLAGS_C}") + diff --git a/src/process/CMakeLists.txt b/src/process/CMakeLists.txt new file mode 100644 index 000000000..a59901432 --- /dev/null +++ b/src/process/CMakeLists.txt @@ -0,0 +1,20 @@ +find_package(Qt6 COMPONENTS Gui) + +get_target_property(qtWebEngineProcessName WebEngineCore QTWEBENGINEPROCESS_NAME) + +qt_internal_add_executable(${qtWebEngineProcessName} SOURCES main.cpp) + +target_link_libraries(${qtWebEngineProcessName} + PUBLIC + Qt::Gui + Qt::WebEngineCore + PRIVATE + Qt::CorePrivate + Qt::WebEngineCorePrivate +) + +target_include_directories(${qtWebEngineProcessName} PRIVATE ../core) + +install(TARGETS ${qtWebEngineProcessName} RUNTIME DESTINATION "${INSTALL_LIBEXECDIR}") + +make_install_only(${qtWebEngineProcessName}) |