diff options
author | Michal Klocek <michal.klocek@qt.io> | 2021-08-20 10:33:57 +0200 |
---|---|---|
committer | Michal Klocek <michal.klocek@qt.io> | 2021-08-30 19:47:56 +0200 |
commit | 68e724bf48eab90aca310d700b4aad0127b61d35 (patch) | |
tree | 7ac33f0adf9d38fd4b639ee75192cf8748f9ee8b /src | |
parent | add4dd7c1f50e09677f968a47c75309351e16743 (diff) |
Rewrite gn-cmake integration
The previous gn-cmake integration was driven towards having the
complete cmake build tree which included gn build artifacts.
These were marked as IMPORTED in cmake build files, this way
cmake "knew" all object files and static libs coming from gn.
To achieve that we needed to run the cmake configure twice.
First to feed gn with the build information from cmake and
then the second run to import all the build information to
cmake based on gn run.
As a side effect of this the first run cmake was creating incomplete
targets, so we could use generator expressions to gather all the data
needed for gn run. The second run of cmake was able to create fully
initialized targets. We used 'external project' to run cmake the second
time.
This approach worked well when doing "module" builds and having two
targets, one in the main project and one in external was not an issue.
Moreover, this approach could be integrated nicely since CI does only
"module" builds.
Unfortunately "top level" builds are implemented to import all qt
targets into one build tree. This created issue for qtwebengine since
fully initialized targets were 'hidden' by 'external project' and
including half baked (dummy) targets from the main project resulted
in bunch of issues related to the dependency tracking and build race
conditions. Also using 'external project' complicated installation
rules and in the end installation worked differently than in other
modules.
With current approach we use response files, so we hide all build
artifacts coming from gn and feed cmake with those response files.
This way we run the cmake configure once and we create all the targets
once. Using rsp files hacks linker options in cmake, so this approach
is sub-optimal, however allows to have working "top level" builds.
It is worth mentioning here that the final module linking has to take
place with cmake's part of build since doing one static lib in gn is
not possible due to the toolchain limitation (msvc is not able to
process static libs over 4Gb and has no support for thin archives,
so only a shared lib is doable at time of writing)
Following changes are made:
* remove 'external project' for qtwebengine target, we keep it however
for ninja ,gn and a host project
* call gn from cmake in a scripting mode during build and not configure
run, this way BUILD.gn is assembled as a build step so after
generator expressions are executed
* BUILD.gn is assembled now from 4 files:
- root template BUILD.root.gn.in
- compiler data gn_config_c.cmake, gn_config_cxx.cmake
- sources data gn_cofnig_target.cmake
* since we use gn wrapper script use gn.args file to pass arguments
instead of a command line, so this file can be now easily modified
when running gn and ninja 'manually'
* since a script mode does not support handling of properties with
TARGET as such, use the DIRECTORY scope in some of our functions
which handle GN_TARGET
* use qt_build_repo() in main CMakeFile and remove all coin and top
level build hacks
* remove 'external project' for examples and tests, this is no longer
required as all qt targets are not hidden by external project
* remove leftovers from gn feedback call used for GN_TARGET
* improve installation rules, WebEgineCore target is not by default
installed during build, therefore we need to copy resources and
translations to root so tests and examples still can be built without
a module being installed first
* adjust GN lookup paths, we look for gn in main configure and during
scripting mode when gn is executed
Fixes: QTBUG-94349
Fixes: QTBUG-94709
Fixes: QTBUG-94922
Fixes: QTBUG-94997
Fixes: QTBUG-95051
Fixes: QTBUG-95152
Fixes: QTBUG-95158
Fixes: QTBUG-95972
Task-number: QTBUG-95231
Task-number: QTBUG-95590
Change-Id: I5e7a34287ee59d904103fe310fc7c6a36a8dfbc9
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
(cherry picked from commit bd75c51f2a7f7384d3303e86764211cb3e32f03d)
Diffstat (limited to 'src')
-rw-r--r-- | src/CMakeLists.txt | 163 | ||||
-rw-r--r-- | src/core/CMakeLists.txt | 171 | ||||
-rw-r--r-- | src/core/api/CMakeLists.txt | 80 | ||||
-rw-r--r-- | src/core/tools/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/pdf/CMakeLists.txt | 260 | ||||
-rw-r--r-- | src/pdf/plugins/imageformats/pdf/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/pdfquick/CMakeLists.txt | 5 | ||||
-rw-r--r-- | src/pdfwidgets/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/process/CMakeLists.txt | 3 | ||||
-rw-r--r-- | src/webenginequick/CMakeLists.txt | 9 | ||||
-rw-r--r-- | src/webenginequick/ui/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/webenginewidgets/CMakeLists.txt | 6 |
12 files changed, 393 insertions, 309 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2db5f81e7..a8c331738 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,28 +1,55 @@ cmake_minimum_required(VERSION 3.19) +## +# MAIN CONFIGURE +## -if(NOT DEFINED WEBENGINE_ROOT_SOURCE_DIR) - get_filename_component(WEBENGINE_ROOT_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/.." REALPATH) -endif() +get_filename_component(WEBENGINE_ROOT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/.." REALPATH) +get_filename_component(WEBENGINE_ROOT_BUILD_DIR "${PROJECT_BINARY_DIR}" REALPATH) -include(${WEBENGINE_ROOT_SOURCE_DIR}/.cmake.conf) -include(${WEBENGINE_ROOT_SOURCE_DIR}/cmake/Functions.cmake) +# Note this is configure that does not belong to any module +qt_feature_module_begin(ONLY_EVALUATE_FEATURES) +# Enable printing of feature summary by forcing qt_configure_record_command +# to work in spite of ONLY_EVALUATE_FEATURES. +set(__QtFeature_only_evaluate_features OFF) +include(../configure.cmake) +qt_feature_module_end(ONLY_EVALUATE_FEATURES) -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${WEBENGINE_ROOT_SOURCE_DIR}/cmake") +## +# SUPPORT CHECK +## -assertRunAsTopLevelBuild(TRUE) +if(NOT ${QtWebEngine_SUPPORT}) + add_custom_target(WebEngineErrorMessage ALL + ${CMAKE_COMMAND} -E cmake_echo_color --red "QtWebEngine will not be built: ${QtWebEngine_ERROR}" + COMMENT "Check QtWebEngine support" + VERBATIM + ) + message("-- Support check for QtWebEngine failed: ${QtWebEngine_ERROR}") + set(QT_FEATURE_qtwebengine_build OFF CACHE BOOL "Build QtWebEngine" FORCE) + set(QT_FEATURE_qtwebengine_widgets_build OFF CACHE BOOL "Build QtWebEngineWidgets" FORCE) + set(QT_FEATURE_qtwebengine_quick_build OFF CACHE BOOL "Build QtWebEngineQuick" FORCE) +endif() -project(QtWebEngineRepo - VERSION "${QT_REPO_MODULE_VERSION}" - DESCRIPTION "QtWebEngineRepo for QtWebEngineCore, QtWebEngine, QtWebEngineWidgets, QtPdf modules" - HOMEPAGE_URL "https://qt.io" - LANGUAGES CXX C) +if(NOT ${QtPdf_SUPPORT}) + add_custom_target(PdfErrorMessage ALL + ${CMAKE_COMMAND} -E cmake_echo_color --red "QtPdf will not be built: ${QtPdf_ERROR}" + COMMENT "Check QtPdf support" + VERBATIM + ) + message("-- Support check for QtPdf failed: ${QtPdf_ERROR}") + set(QT_FEATURE_qtpdf_build OFF CACHE BOOL "Build QtPdf" FORCE) + set(QT_FEATURE_qtpdf_widgets_build OFF CACHE BOOL "Build QtPdfWidgets" FORCE) + set(QT_FEATURE_qtpdf_quick_build OFF CACHE BOOL "Build QtPdfQuick" FORCE) +endif() -# Make sure we use the fixed BASE argument of qt_add_resource. -set(QT_USE_FIXED_QT_ADD_RESOURCE_BASE TRUE) +if(NOT QT_FEATURE_qtwebengine_build AND NOT QT_FEATURE_qtpdf_build) + return() +endif() -find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS BuildInternals Core) +## +# MODULES +## -qt_build_repo_begin() if(QT_FEATURE_qtwebengine_build) add_subdirectory(core) add_subdirectory(process) @@ -35,6 +62,16 @@ if(QT_FEATURE_qtwebengine_build) endif() if(QT_FEATURE_qtpdf_build) add_subdirectory(pdf) + # keep log order, pdf build after webengine + if(QT_FEATURE_qtwebengine_build) + add_dependencies(run_pdf_GnReady WebEngineCore) + endif() + if(QT_FEATURE_qtwebengine_widgets_build) + add_dependencies(run_pdf_GnReady WebEngineWidgets) + endif() + if(QT_FEATURE_qtwebengine_quick_build) + add_dependencies(run_pdf_GnReady WebEngineQuick) + endif() if(QT_FEATURE_qtpdf_widgets_build) add_subdirectory(pdfwidgets) endif() @@ -42,5 +79,97 @@ if(QT_FEATURE_qtpdf_build) add_subdirectory(pdfquick) endif() endif() -qt_build_repo_end() + +## +# NINJA PROJECT +## + +set(installDir ${PROJECT_BINARY_DIR}/install) + +if(NOT Ninja_FOUND) + externalproject_add(ninja + SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/ninja + BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/ninja + INSTALL_DIR ${installDir} + PREFIX ninja + USES_TERMINAL_BUILD TRUE + EXCLUDE_FROM_ALL TRUE + CMAKE_ARGS -DCMAKE_BUILD_TYPE=Release + -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> + -DCMAKE_PREFIX_PATH:PATH=<INSTALL_DIR> + ) + if(QT_FEATURE_qtwebengine_build) + add_dependencies(run_core_NinjaReady ninja) + endif() + if(QT_FEATURE_qtpdf_build) + add_dependencies(run_pdf_NinjaReady ninja) + endif() +endif() + +## +# GN PROJECT +## + +if(NOT Gn_FOUND) + externalproject_add(gn + SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/gn + BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/gn + INSTALL_DIR ${installDir} + PREFIX gn + USES_TERMINAL_BUILD TRUE + EXCLUDE_FROM_ALL TRUE + CMAKE_ARGS -DCMAKE_BUILD_TYPE=Release + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} + -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> + -DCMAKE_PREFIX_PATH:PATH=<INSTALL_DIR> + -DWEBENGINE_ROOT_BUILD_DIR=${PROJECT_BINARY_DIR} + ) + if(QT_FEATURE_qtwebengine_build) + add_dependencies(run_core_GnReady gn) + endif() + if(QT_FEATURE_qtpdf_build) + add_dependencies(run_pdf_GnReady gn) + endif() + set(INSTALL_GN 1 CACHE INTERNAL "") +endif() + +## +# HOST PROJECT +## + +if(CMAKE_CROSSCOMPILING) + + if(NOT Gn_FOUND) + message(FATAL_ERROR "\nHost gn not found - cross compilation not possible") + endif() + + externalproject_add(hostBuild + SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/host + BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/host + PREFIX host + USES_TERMINAL_BUILD TRUE + EXCLUDE_FROM_ALL TRUE + CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${QT_HOST_PATH}/lib/cmake/Qt6/qt.toolchain.cmake + -DWEBENGINE_ROOT_BUILD_DIR=${PROJECT_BINARY_DIR} + -DWEBENGINE_ROOT_SOURCE_DIR=${WEBENGINE_ROOT_SOURCE_DIR} + -DGN_TARGET_CPU=${TEST_architecture_arch} + -DCMAKE_C_FLAGS= + -DCMAKE_CXX_FLAGS= + -DQT_FEATURE_qtwebengine_build=${QT_FEATURE_qtwebengine_build} + -DQT_FEATURE_qtpdf_build=${QT_FEATURE_qtpdf_build} + ) + add_dependencies(run_core_GnReady hostBuild) +endif() + +# install gn for cross build +if(LINUX AND INSTALL_GN) + get_install_config(installConfig) + message(${installConfig}) + install( + PROGRAMS ${installDir}/bin/gn + CONFIGURATIONS ${installConfig} + RUNTIME DESTINATION "${INSTALL_LIBEXECDIR}" + ) +endif() diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index ffb327c2e..74ae345dc 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -1,32 +1,19 @@ cmake_minimum_required(VERSION 3.19) -if(NOT DEFINED WEBENGINE_ROOT_SOURCE_DIR) - get_filename_component(WEBENGINE_ROOT_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../.." REALPATH) -endif() -if (NOT DEFINED WEBENGINE_ROOT_BUILD_DIR) - get_filename_component(WEBENGINE_ROOT_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/../.." REALPATH) -endif() - -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${WEBENGINE_ROOT_SOURCE_DIR}/cmake") -set(buildDir "${CMAKE_CURRENT_BINARY_DIR}") - -include(${WEBENGINE_ROOT_SOURCE_DIR}/cmake/Functions.cmake) -assertRunAsTopLevelBuild(TRUE) - -add_subdirectory(api) -add_subdirectory(tools) - -find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS BuildInternals Core) -find_package(Gn ${QT_REPO_MODULE_VERSION} EXACT REQUIRED) find_package(Ninja 1.7.2 REQUIRED) find_package(Python2 2.7.5 REQUIRED) find_package(Nodejs 10.19 REQUIRED) find_package(PkgConfig) if(PkgConfig_FOUND) pkg_check_modules(XSCRNSAVER xscrnsaver) - create_pkg_config_host_wrapper() + create_pkg_config_host_wrapper(${CMAKE_CURRENT_BINARY_DIR}) endif() +set(buildDir "${CMAKE_CURRENT_BINARY_DIR}") + +add_subdirectory(api) +add_subdirectory(tools) + ## # TOOLCHAIN SETUP ## @@ -36,9 +23,11 @@ if(LINUX) endif() ## -# MULTICONFIG SETUP +# GN BUILD SETUP ## +addSyncTargets(core) + get_configs(configs) get_architectures(archs) @@ -49,13 +38,14 @@ foreach(arch ${archs}) # BUILD.gn SETUP ## - unset(buildGn) set(buildGn core_${config}_${arch}) - add_gn_target(${buildGn} ${config} ${arch} SOURCES DEFINES CXX_COMPILE_OPTIONS C_COMPILE_OPTIONS INCLUDES) - + add_gn_target(${buildGn} ${config} ${arch} + SOURCES DEFINES CXX_COMPILE_OPTIONS C_COMPILE_OPTIONS INCLUDES MOC_PATH RSP_PREFIX + ) resolve_target_includes(gnIncludes WebEngineCore) get_forward_declaration_macro(forwardDeclarationMacro) get_target_property(qtWebEngineProcessName WebEngineCore QTWEBENGINEPROCESS_NAME) + get_target_property(mocFilePath Qt6::moc IMPORTED_LOCATION) if(QT_FEATURE_debug_and_release AND ("${config}" STREQUAL "Debug")) set(qtWebEngineProcessName "${qtWebEngineProcessName}${CMAKE_DEBUG_POSTFIX}") @@ -74,15 +64,19 @@ foreach(arch ${archs}) endif() extend_gn_target(${buildGn} + MOC_PATH + ${mocFilePath} + RSP_PREFIX + src/core/${config}/${arch} INCLUDES ${gnIncludes} DEFINES QT_NO_KEYWORDS QT_USE_QSTRINGBUILDER - QTWEBENGINECORE_VERSION_STR=\\\\\"${QT_REPO_MODULE_VERSION}\\\\\" - QTWEBENGINEPROCESS_NAME=\\\\\"${qtWebEngineProcessName}\\\\\" + QTWEBENGINECORE_VERSION_STR=\\\\\\\\\"${QT_REPO_MODULE_VERSION}\\\\\\\\\" + QTWEBENGINEPROCESS_NAME=\\\\\\\\\"${qtWebEngineProcessName}\\\\\\\\\" BUILDING_CHROMIUM - ${forwardDeclarationMacro} + "${forwardDeclarationMacro}" CXX_COMPILE_OPTIONS ${gnCxxCompileOptions} SOURCES @@ -267,13 +261,6 @@ foreach(arch ${archs}) renderer/extensions/resource_request_policy_qt.cpp renderer/extensions/resource_request_policy_qt.h ) - read_gn_target(${buildGn} ${WEBENGINE_ROOT_BUILD_DIR}/src/core/api/${config}/gn_config.cxx.cmake) - read_gn_target(${buildGn} ${WEBENGINE_ROOT_BUILD_DIR}/src/core/api/${config}/gn_config.c.cmake) - configure_gn_target(${buildGn} ${config} - ${WEBENGINE_ROOT_SOURCE_DIR}/src/core/configure/BUILD.root.gn.in "${buildDir}/${config}/${arch}/BUILD.gn" - core/${config}/${arch} - ) - ## # GN PARAMETERS SETUP ## @@ -449,17 +436,22 @@ foreach(arch ${archs}) ) endif() - ## - # GN CALL - ## - - execute_gn(gnArgArg) + add_gn_command( + CMAKE_TARGET WebEngineCore + NINJA_TARGETS QtWebEngineCore convert_dict + GN_TARGET ${buildGn} + GN_ARGS "${gnArgArg}" + BUILDDIR ${buildDir}/${config}/${arch} + MODULE core + ) endforeach() + create_cxx_configs(WebEngineCore ${arch}) endforeach() + ## -# WEBENGINECORE +# WEBENGINECORE SETUP ## set(arch ${CMAKE_SYSTEM_PROCESSOR}) @@ -469,7 +461,8 @@ target_include_directories(WebEngineCore PRIVATE ${buildDir}/$<CONFIG>/${arch}/gen/third_party/perfetto/build_config ) -add_gn_build_aritfacts_to_target(WebEngineCore QtWebEngineCore ${buildDir}) +add_gn_build_aritfacts_to_target(WebEngineCore QtWebEngineCore core ${buildDir}) +add_dependencies(WebEngineCore run_core_NinjaDone) ## # SANDBOX @@ -483,6 +476,7 @@ if(WIN32) TARGET QtWebEngineCoreSandbox OUTPUT QtWebEngineCoreSandbox.lib BUILDDIR ${buildDir}/${config}/${arch} + MODULE core ) set(sandboxLibraryPath ${buildDir}/${config}/${arch}/QtWebEngineCoreSandbox.lib) set_property(TARGET WebEngineCoreSandbox @@ -490,101 +484,12 @@ if(WIN32) ) add_custom_target(sandboxLibrary_${config} DEPENDS ${buildDir}/${config}/${arch}/QtWebEngineCoreSandbox.lib) - add_dependencies(WebEngineCoreSandbox sandboxLibrary_${config}) + add_dependencies(run_core_NinjaDone sandboxLibrary_${config}) add_dependencies(WebEngineCoreSandbox WebEngineCore) endforeach() endif() ## -# WEBENGINECORE 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) - -set(resourceList qtwebengine_resources.pak - qtwebengine_resources_100p.pak - qtwebengine_resources_200p.pak - qtwebengine_devtools_resources.pak) - -get_install_config(config) - -foreach(loc ${localeList}) - get_filename_component(locSourcePath ${buildDir}/${config}/${arch}/qtwebengine_locales/${loc}.pak REALPATH) - list(APPEND localeFiles ${locSourcePath}) -endforeach() - -foreach(res ${resourceList}) - get_filename_component(resSourcePath ${buildDir}/${config}/${arch}/${res} REALPATH) - list(APPEND resourceFiles ${resSourcePath}) -endforeach() - -if (NOT QT_FEATURE_webengine_system_icu) - get_filename_component(icuFile ${buildDir}/${config}/${arch}/icudtl.dat REALPATH) - list(APPEND resourceFiles ${icuFile}) -endif() - -if(QT_FEATURE_framework) - set(allResourceFiles ${localeFiles} ${resourceFiles}) - target_sources(WebEngineCore PRIVATE ${allResourceFiles}) - - set_source_files_properties(${localeFiles} - TARGET_DIRECTORY WebEngineCore - PROPERTIES MACOSX_PACKAGE_LOCATION Resources/qtwebengine_locales - GENERATED TRUE - ) - set_source_files_properties(${resourceFiles} - TARGET_DIRECTORY WebEngineCore - PROPERTIES MACOSX_PACKAGE_LOCATION Resources - GENERATED TRUE - ) - - add_custom_command(OUTPUT ${allResourceFiles} DEPENDS ${buildDir}/${config}/${arch}/QtWebEngineCore.stamp) - add_custom_target(generate_resources_${config} DEPENDS ${allResourceFiles}) -else() - install(FILES ${localeFiles} - DESTINATION translations/qtwebengine_locales - CONFIGURATIONS ${config} - ) - install(FILES ${resourceFiles} - DESTINATION resources - CONFIGURATIONS ${config} - ) -# install (again) for superbuild - install(FILES ${localeFiles} - DESTINATION ${WEBENGINE_ROOT_BUILD_DIR}/translations/qtwebengine_locales - CONFIGURATIONS ${config} - ) - install(FILES ${resourceFiles} - DESTINATION ${WEBENGINE_ROOT_BUILD_DIR}/resources - CONFIGURATIONS ${config} - ) - if(NOT QT_WILL_INSTALL) - # TODO: Could we get rid of ALL? - add_custom_target( - install_resources_${config} - ALL - DEPENDS ${buildDir}/${config}/${arch}/QtWebEngineCore.stamp - COMMAND ${CMAKE_COMMAND} -E make_directory - ${CMAKE_INSTALL_PREFIX}/resources - COMMAND ${CMAKE_COMMAND} -E copy - ${resourceFiles} - ${CMAKE_INSTALL_PREFIX}/resources) - add_custom_target( - install_locales_${config} - ALL - DEPENDS ${buildDir}/${config}/${arch}/QtWebEngineCore.stamp - COMMAND ${CMAKE_COMMAND} -E make_directory - ${CMAKE_INSTALL_PREFIX}/translations/qtwebengine_locales - COMMAND ${CMAKE_COMMAND} -E copy - ${localeFiles} - ${CMAKE_INSTALL_PREFIX}/translations/qtwebengine_locales) - endif() -endif() - -## # WEBENGINECORE DICT TOOL SETUP ## @@ -593,8 +498,10 @@ if(QT_FEATURE_webengine_spellchecker) target_include_directories(${dict_target_name} PRIVATE ../3rdparty/chromium ../3rdparty/chromium/third_party/boringssl/src/include - ${buildDir}/${config}/${arch}/gen + ${buildDir}/$<CONFIG>/${arch}/gen ) - add_gn_build_aritfacts_to_target(${dict_target_name} convert_dict ${buildDir}) + add_gn_build_aritfacts_to_target(${dict_target_name} convert_dict core ${buildDir}) + add_dependencies(${dict_target_name} run_core_NinjaDone) + add_dependencies(${dict_target_name} WebEngineCore) endif() diff --git a/src/core/api/CMakeLists.txt b/src/core/api/CMakeLists.txt index cee72966d..192afd01b 100644 --- a/src/core/api/CMakeLists.txt +++ b/src/core/api/CMakeLists.txt @@ -1,16 +1,9 @@ -if(NOT DEFINED WEBENGINE_ROOT_SOURCE_DIR) - get_filename_component(WEBENGINE_ROOT_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../.." REALPATH) -endif() find_package(Qt6 ${PROJECT_VERSION} REQUIRED COMPONENTS Gui Network OpenGL Quick) find_package(Qt6 ${PROJECT_VERSION} QUIET OPTIONAL_COMPONENTS WebChannel Positioning) -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 qwebenginecertificateerror.cpp qwebenginecertificateerror.h @@ -63,8 +56,6 @@ set_target_properties(WebEngineCore PROPERTIES QTWEBENGINEPROCESS_NAME ${qtWebEn # Chromium included headers are not clean qt_skip_warnings_are_errors(WebEngineCore) -make_install_only(WebEngineCore) -make_config_for_gn(WebEngineCore gn_config) if(CLANG OR GCC) target_compile_options(WebEngineCore PRIVATE "-Wno-unused-parameter") @@ -79,6 +70,77 @@ qt_internal_extend_target(WebEngineCore CONDITION QT_FEATURE_webengine_geolocati Qt::Positioning ) +## +# DOCS +## + qt_internal_add_docs(WebEngineCore ../doc/qtwebengine.qdocconf ) + +## +# WEBENGINECORE RESOURCES +## + +set(arch ${CMAKE_SYSTEM_PROCESSOR}) +#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) + +set(resourceList qtwebengine_resources.pak + qtwebengine_resources_100p.pak + qtwebengine_resources_200p.pak + qtwebengine_devtools_resources.pak) + +get_install_config(config) + +foreach(loc ${localeList}) + get_filename_component(locSourcePath ${buildDir}/${config}/${arch}/qtwebengine_locales/${loc}.pak REALPATH) + list(APPEND localeFiles ${locSourcePath}) +endforeach() + +foreach(res ${resourceList}) + get_filename_component(resSourcePath ${buildDir}/${config}/${arch}/${res} REALPATH) + list(APPEND resourceFiles ${resSourcePath}) +endforeach() + +if (NOT QT_FEATURE_webengine_system_icu) + get_filename_component(icuFile ${buildDir}/${config}/${arch}/icudtl.dat REALPATH) + list(APPEND resourceFiles ${icuFile}) +endif() + +if(QT_FEATURE_framework) + set(allResourceFiles ${localeFiles} ${resourceFiles}) + target_sources(WebEngineCore PRIVATE ${allResourceFiles}) + + set_source_files_properties(${localeFiles} + TARGET_DIRECTORY WebEngineCore + PROPERTIES MACOSX_PACKAGE_LOCATION Resources/qtwebengine_locales + GENERATED TRUE + ) + set_source_files_properties(${resourceFiles} + TARGET_DIRECTORY WebEngineCore + PROPERTIES MACOSX_PACKAGE_LOCATION Resources + GENERATED TRUE + ) + + add_custom_command(OUTPUT ${allResourceFiles} DEPENDS ${buildDir}/${config}/${arch}/QtWebEngineCore.stamp) + add_custom_target(generate_resources_${config} DEPENDS ${allResourceFiles}) +else() + install(FILES ${localeFiles} + DESTINATION translations/qtwebengine_locales + CONFIGURATIONS ${config} + ) + install(FILES ${resourceFiles} + DESTINATION resources + CONFIGURATIONS ${config} + ) + if(NOT QT_WILL_INSTALL) + set(rootPath ${CMAKE_INSTALL_PREFIX}) + else() + set(rootPath ${PROJECT_BINARY_DIR}) + endif() + addCopyCommand(WebEngineCore "${localeFiles}" ${rootPath}/translations/qtwebengine_locales) + addCopyCommand(WebEngineCore "${resourceFiles}" ${rootPath}/resources) +endif() diff --git a/src/core/tools/CMakeLists.txt b/src/core/tools/CMakeLists.txt index 9d778bb08..e16bfb926 100644 --- a/src/core/tools/CMakeLists.txt +++ b/src/core/tools/CMakeLists.txt @@ -12,7 +12,6 @@ if(QT_FEATURE_webengine_spellchecker) SOURCES main.cpp ) qt_skip_warnings_are_errors(${dict_target_name}) - make_install_only(${dict_target_name}) add_dependencies(${dict_target_name} WebEngineCore) qt_internal_extend_target(${dict_target_name} CONDITION WIN32 DEFINES WIN32_LEAN_AND_MEAN NOMINMAX diff --git a/src/pdf/CMakeLists.txt b/src/pdf/CMakeLists.txt index 12f01a73f..da1aa93ff 100644 --- a/src/pdf/CMakeLists.txt +++ b/src/pdf/CMakeLists.txt @@ -1,14 +1,19 @@ -if(NOT DEFINED WEBENGINE_ROOT_SOURCE_DIR) - get_filename_component(WEBENGINE_ROOT_SOURCE_DIR - "${CMAKE_CURRENT_LIST_DIR}/../.." REALPATH - ) +cmake_minimum_required(VERSION 3.19) +find_package(Ninja 1.7.2 REQUIRED) +find_package(Python2 2.7.5 REQUIRED) +find_package(Nodejs 10.19 REQUIRED) +find_package(PkgConfig) +if(PkgConfig_FOUND) + create_pkg_config_host_wrapper(${CMAKE_CURRENT_BINARY_DIR}) endif() -find_package(Qt6 ${PROJECT_VERSION} REQUIRED COMPONENTS Gui Network OpenGL Quick) -include(${WEBENGINE_ROOT_SOURCE_DIR}/cmake/Functions.cmake) -set(buildDir "${CMAKE_CURRENT_BINARY_DIR}") +set(buildDir "${CMAKE_CURRENT_BINARY_DIR}") add_subdirectory(plugins/imageformats/pdf) +## +# PDF MODULE +## + qt_internal_add_module(Pdf SOURCES qpdfbookmarkmodel.cpp qpdfbookmarkmodel.h @@ -36,128 +41,135 @@ qt_internal_add_module(Pdf Qt::Gui ) -make_config_for_gn(Pdf gn_config) -make_install_only(Pdf) +## +# PDF DOCS +## + qt_internal_add_docs(Pdf doc/qtpdf.qdocconf ) + ## -# REPO BUILD +# TOOLCHAIN SETUP ## -if(WEBENGINE_REPO_BUILD) - find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS BuildInternals Core) - find_package(Gn ${QT_REPO_MODULE_VERSION} EXACT REQUIRED) - find_package(Ninja 1.7.2 REQUIRED) - find_package(Python2 2.7.5 REQUIRED) - find_package(Nodejs 10.19 REQUIRED) - find_package(PkgConfig) - if(PkgConfig_FOUND) - create_pkg_config_host_wrapper() - endif() - - ## - # TOOLCHAIN SETUP - ## - - if(LINUX) - setup_toolchains() - endif() - - ## - # MULTICONFIG SETUP - ## - - get_configs(configs) - get_architectures(archs) - - foreach(arch ${archs}) - foreach(config ${configs}) - - ## - # BULID.gn SETUP - ## - - set(buildGn pdf_${config}_${arch}) - add_gn_target(${buildGn} ${config} ${arch} SOURCES DEFINES CXX_COMPILE_OPTIONS C_COMPILE_OPTIONS INCLUDES) - resolve_target_includes(gnIncludes Pdf) - get_forward_declaration_macro(forwardDeclarationMacro) - read_gn_target(${buildGn} ${WEBENGINE_ROOT_BUILD_DIR}/src/pdf/${config}/gn_config.cxx.cmake) - read_gn_target(${buildGn} ${WEBENGINE_ROOT_BUILD_DIR}/src/pdf/${config}/gn_config.c.cmake) - configure_gn_target(${buildGn} ${config} - ${WEBENGINE_ROOT_SOURCE_DIR}/src/pdf/configure/BUILD.root.gn.in "${buildDir}/${config}/${arch}/BUILD.gn" - pdf/${config}/${arch} - ) - - ## - # GN PARAMETERS - ## - - unset(gnArgArg) - append_build_type_setup(gnArgArg) - append_compiler_linker_sdk_setup(gnArgArg) - append_sanitizer_setup(gnArgArg) - append_toolchain_setup(gnArgArg) - append_pkg_config_setup(gnArgArg) - - list(APPEND gnArgArg - qtwebengine_target="${buildDir}/${config}/${arch}:QtPdf" - enable_remoting=false - enable_web_speech=false - chrome_pgo_phase=0 - ) - - if(LINUX) - list(APPEND gnArgArg - use_x11=false - is_cfi=false - ozone_auto_platforms=false - use_gnome_keyring=false) - endif() - if(MACOS) - list(APPEND gnArgArg angle_enable_vulkan=false) - endif() - if(WIN32) - list(APPEND gnArgArg - ninja_use_custom_environment_files=false - safe_browsing_mode=0 - ) - endif() - - extend_gn_list(gnArgArg - ARGS pdf_enable_v8 - CONDITION QT_FEATURE_pdf_v8 - ) - extend_gn_list(gnArgArg - ARGS pdf_enable_xfa - CONDITION QT_FEATURE_pdf_xfa - ) - extend_gn_list(gnArgArg - ARGS pdf_enable_xfa_bmp - CONDITION QT_FEATURE_pdf_xfa_bmp - ) - extend_gn_list(gnArgArg - ARGS pdf_enable_xfa_gif - CONDITION QT_FEATURE_pdf_xfa_gif - ) - extend_gn_list(gnArgArg - ARGS pdf_enable_xfa_png - CONDITION QT_FEATURE_pdf_xfa_png - ) - extend_gn_list(gnArgArg - ARGS pdf_enable_xfa_tiff - CONDITION QT_FEATURE_pdf_xfa_tiff - ) - - ## - # GN CALL - ## - - execute_gn(gnArgArg) - endforeach() - endforeach() - set(arch ${CMAKE_SYSTEM_PROCESSOR}) - target_include_directories(Pdf PRIVATE ${buildDir}/$<CONFIG>/${arch}/gen) - add_gn_build_aritfacts_to_target(Pdf QtPdf ${buildDir}) +if(LINUX) + setup_toolchains() endif() + +## +# GN BUILD SETUP +## + +addSyncTargets(pdf) + +get_configs(configs) +get_architectures(archs) + +foreach(arch ${archs}) + foreach(config ${configs}) + + ## + # BULID.gn SETUP + ## + + set(buildGn pdf_${config}_${arch}) + add_gn_target(${buildGn} ${config} ${arch} + SOURCES DEFINES CXX_COMPILE_OPTIONS C_COMPILE_OPTIONS INCLUDES MOC_PATH RSP_PREFIX + ) + resolve_target_includes(gnIncludes Pdf) + get_forward_declaration_macro(forwardDeclarationMacro) + + extend_gn_target(${buildGn} + MOC_PATH + ${mocFilePath} + RSP_PREFIX + src/pdf/${config}/${arch} + INCLUDES + ${gnIncludes} + ) + + ## + # GN PARAMETERS + ## + + unset(gnArgArg) + append_build_type_setup(gnArgArg) + append_compiler_linker_sdk_setup(gnArgArg) + append_sanitizer_setup(gnArgArg) + append_toolchain_setup(gnArgArg) + append_pkg_config_setup(gnArgArg) + + list(APPEND gnArgArg + qtwebengine_target="${buildDir}/${config}/${arch}:QtPdf" + enable_remoting=false + enable_web_speech=false + chrome_pgo_phase=0 + ) + + if(LINUX) + list(APPEND gnArgArg + use_x11=false + is_cfi=false + ozone_auto_platforms=false + use_gnome_keyring=false) + endif() + if(MACOS) + list(APPEND gnArgArg angle_enable_vulkan=false) + endif() + if(WIN32) + list(APPEND gnArgArg + ninja_use_custom_environment_files=false + safe_browsing_mode=0 + ) + endif() + + extend_gn_list(gnArgArg + ARGS pdf_enable_v8 + CONDITION QT_FEATURE_pdf_v8 + ) + extend_gn_list(gnArgArg + ARGS pdf_enable_xfa + CONDITION QT_FEATURE_pdf_xfa + ) + extend_gn_list(gnArgArg + ARGS pdf_enable_xfa_bmp + CONDITION QT_FEATURE_pdf_xfa_bmp + ) + extend_gn_list(gnArgArg + ARGS pdf_enable_xfa_gif + CONDITION QT_FEATURE_pdf_xfa_gif + ) + extend_gn_list(gnArgArg + ARGS pdf_enable_xfa_png + CONDITION QT_FEATURE_pdf_xfa_png + ) + extend_gn_list(gnArgArg + ARGS pdf_enable_xfa_tiff + CONDITION QT_FEATURE_pdf_xfa_tiff + ) + + add_gn_command( + CMAKE_TARGET Pdf + NINJA_TARGETS QtPdf + GN_TARGET ${buildGn} + GN_ARGS "${gnArgArg}" + BUILDDIR ${buildDir}/${config}/${arch} + MODULE pdf + ) + + endforeach() + create_cxx_configs(Pdf ${arch}) +endforeach() + + +## +# PDF SETUP +## + +set(arch ${CMAKE_SYSTEM_PROCESSOR}) +target_include_directories(Pdf PRIVATE ${buildDir}/$<CONFIG>/${arch}/gen) +add_gn_build_aritfacts_to_target(Pdf QtPdf pdf ${buildDir}) +add_dependencies(Pdf run_pdf_NinjaDone) + diff --git a/src/pdf/plugins/imageformats/pdf/CMakeLists.txt b/src/pdf/plugins/imageformats/pdf/CMakeLists.txt index 8a33e590b..ee290782b 100644 --- a/src/pdf/plugins/imageformats/pdf/CMakeLists.txt +++ b/src/pdf/plugins/imageformats/pdf/CMakeLists.txt @@ -8,4 +8,3 @@ qt_internal_add_plugin(QPdfPlugin Qt::PdfPrivate ) -make_install_only(QPdfPlugin) diff --git a/src/pdfquick/CMakeLists.txt b/src/pdfquick/CMakeLists.txt index 12cb393ff..5bbe66959 100644 --- a/src/pdfquick/CMakeLists.txt +++ b/src/pdfquick/CMakeLists.txt @@ -1,7 +1,5 @@ find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS Core Gui Qml Quick) -get_configure_mode(configureMode) - set(qml_files # TODO: # "qml/+material/PdfStyle.qml" @@ -48,8 +46,5 @@ qt_internal_extend_target(qtpdfquickplugin Qt::PdfQuickPrivate ) -make_install_only(PdfQuick) -make_install_only(qtpdfquickplugin) - diff --git a/src/pdfwidgets/CMakeLists.txt b/src/pdfwidgets/CMakeLists.txt index 04ca1387e..2d2616556 100644 --- a/src/pdfwidgets/CMakeLists.txt +++ b/src/pdfwidgets/CMakeLists.txt @@ -12,4 +12,3 @@ qt_internal_add_module(PdfWidgets Qt::Widgets Qt::Pdf ) -make_install_only(PdfWidgets) diff --git a/src/process/CMakeLists.txt b/src/process/CMakeLists.txt index 9b515f1d9..5e7c1130b 100644 --- a/src/process/CMakeLists.txt +++ b/src/process/CMakeLists.txt @@ -56,6 +56,7 @@ if(isFramework) "$<TARGET_BUNDLE_DIR:WebEngineCore>/Versions/A/Helpers/${qtWebEngineProcessName}.app" COMMAND ${CMAKE_COMMAND} -E create_symlink "Versions/Current/Helpers" "$<TARGET_BUNDLE_DIR:WebEngineCore>/Helpers" + USES_TERMINAL ) install(TARGETS ${qtWebEngineProcessName} BUNDLE DESTINATION ./lib/QtWebEngineCore.framework/Versions/A/Helpers @@ -73,5 +74,3 @@ if(MSVC) DESTINATION "${INSTALL_LIBEXECDIR}" ) endif() - -make_install_only(${qtWebEngineProcessName}) diff --git a/src/webenginequick/CMakeLists.txt b/src/webenginequick/CMakeLists.txt index ac9c905e2..30b0fa2cf 100644 --- a/src/webenginequick/CMakeLists.txt +++ b/src/webenginequick/CMakeLists.txt @@ -1,12 +1,6 @@ -find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS Gui Qml Quick) -find_package(Qt6 ${PROJECT_VERSION} CONFIG QUIET OPTIONAL_COMPONENTS PrintSupport WebChannel Positioning Test) - -get_configure_mode(configureMode) - add_subdirectory(ui) qt_internal_add_qml_module(WebEngineQuick - ${configureMode} URI "QtWebEngine" VERSION "${PROJECT_VERSION}" CLASS_NAME QtWebEnginePlugin @@ -61,6 +55,3 @@ qt_internal_extend_target(qtwebenginequickplugin Qt::CorePrivate Qt::WebEngineQuickPrivate ) - -make_install_only(WebEngineQuick) -make_install_only(qtwebenginequickplugin) diff --git a/src/webenginequick/ui/CMakeLists.txt b/src/webenginequick/ui/CMakeLists.txt index 2de01a210..aa5832ba6 100644 --- a/src/webenginequick/ui/CMakeLists.txt +++ b/src/webenginequick/ui/CMakeLists.txt @@ -35,6 +35,4 @@ qt_internal_add_resource(qtwebenginequickdelegatesplugin "qtwebenginequickdelega ${resource_files} ) -make_install_only(WebEngineQuickDelegatesQml) -make_install_only(qtwebenginequickdelegatesplugin) diff --git a/src/webenginewidgets/CMakeLists.txt b/src/webenginewidgets/CMakeLists.txt index 425eb1d73..6dedf2187 100644 --- a/src/webenginewidgets/CMakeLists.txt +++ b/src/webenginewidgets/CMakeLists.txt @@ -1,10 +1,5 @@ -find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS Gui Widgets Quick QuickWidgets) -find_package(Qt6 ${PROJECT_VERSION} CONFIG QUIET OPTIONAL_COMPONENTS PrintSupport WebChannel Positioning) - -get_configure_mode(configureMode) qt_internal_add_module(WebEngineWidgets - ${configureMode} SOURCES api/qtwebenginewidgetsglobal.h api/qwebenginenotificationpresenter.cpp api/qwebenginenotificationpresenter_p.h @@ -28,7 +23,6 @@ qt_internal_add_module(WebEngineWidgets Qt::Widgets Qt::WebEngineCore ) -make_install_only(WebEngineWidgets) qt_internal_extend_target(WebEngineWidgets CONDITION QT_FEATURE_webengine_printing_and_pdf PUBLIC_LIBRARIES |