diff options
Diffstat (limited to 'src/CMakeLists.txt')
-rw-r--r-- | src/CMakeLists.txt | 223 |
1 files changed, 223 insertions, 0 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 000000000..0084697f2 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,223 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +## +# MAIN CONFIGURE +## + +qt_internal_get_filename_path_mode(path_mode) + +get_filename_component(WEBENGINE_ROOT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/.." ${path_mode}) +get_filename_component(WEBENGINE_ROOT_BUILD_DIR "${PROJECT_BINARY_DIR}" ${path_mode}) + +# 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) + +## +# SUPPORT CHECK +## + +# TODO: here we should return FATAL_ERROR and ask user to define +# FEATURE_qtwebenignebuild=OFF if one wants to only build qtpdf, +# however our ci setup is not flexible enough and configure step must succeed + +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 Modules" FORCE) + set(QT_FEATURE_qtwebengine_core_build OFF CACHE BOOL "Build QtWebEngineCore" 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() + +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() + +if(NOT QT_FEATURE_qtwebengine_build AND NOT QT_FEATURE_qtpdf_build) + return() +endif() + +# Upgrade CMake policies to the minimum supported version. +cmake_minimum_required(VERSION ${QT_SUPPORTED_MIN_CMAKE_VERSION_FOR_BUILDING_WEBENGINE}) + +## +# MODULES +## + +if(QT_FEATURE_qtwebengine_core_build) + add_subdirectory(core) + add_subdirectory(process) +endif() +if(QT_FEATURE_qtwebengine_widgets_build) + add_subdirectory(webenginewidgets) +endif() +if(QT_FEATURE_qtwebengine_quick_build) + add_subdirectory(webenginequick) +endif() + +if(QT_FEATURE_qtpdf_build) + add_subdirectory(pdf) + # keep log order, pdf build after webengine + if(QT_FEATURE_qtwebengine_core_build) + add_dependencies(run_pdf_NinjaReady WebEngineCore) + endif() + if(QT_FEATURE_qtwebengine_widgets_build) + add_dependencies(run_pdf_NinjaReady WebEngineWidgets) + endif() + if(QT_FEATURE_qtwebengine_quick_build) + add_dependencies(run_pdf_NinjaReady WebEngineQuick) + endif() + if(QT_FEATURE_qtpdf_widgets_build) + add_subdirectory(pdfwidgets) + endif() + if(QT_FEATURE_qtpdf_quick_build) + add_subdirectory(pdfquick) + endif() +endif() + +## +# 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_core_build) + add_dependencies(run_core_NinjaReady ninja) + endif() + if(QT_FEATURE_qtpdf_build) + add_dependencies(run_pdf_NinjaReady ninja) + endif() +endif() + +## +# GN PROJECT +## + +if(CMAKE_CROSSCOMPILING AND NOT Gn_FOUND) + message(FATAL_ERROR "No gn found for cross-compilation") +endif() + +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} + -DQT_ALLOW_SYMLINK_IN_PATHS=${QT_ALLOW_SYMLINK_IN_PATHS} + ) + if(QT_FEATURE_qtwebengine_core_build) + add_dependencies(run_core_GnReady gn) + endif() + if(QT_FEATURE_qtpdf_build) + add_dependencies(run_pdf_GnReady gn) + endif() +endif() + +string(REGEX REPLACE "(.)" "\\\\\\1" path_to_match "${installDir}") +if(NOT Gn_FOUND OR Gn_EXECUTABLE MATCHES "^${path_to_match}") + set(INSTALL_GN 1 CACHE INTERNAL "") +endif() + +## +# HOST PROJECT +## + +if(CMAKE_CROSSCOMPILING AND NOT IOS AND NOT MACOS) + + 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_CMAKE_DIR}/Qt6/qt.toolchain.cmake + -DQT_USE_ORIGINAL_COMPILER=ON + -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} + ) + if(QT_FEATURE_qtwebengine_build) + add_dependencies(run_core_GnReady hostBuild) + endif() + if(QT_FEATURE_qtpdf_build) + add_dependencies(run_pdf_GnReady hostBuild) + endif() +endif() + +# install gn for cross build +if((LINUX OR MACOS OR WIN32) AND INSTALL_GN) + if(NOT QT_WILL_INSTALL) + set(copyOutput + ${QT_BUILD_DIR}/${INSTALL_LIBEXECDIR}/gn${CMAKE_EXECUTABLE_SUFFIX} + ) + if(Gn_FOUND) + set(copyInput ${Gn_EXECUTABLE}) + set(copyDep ${Gn_EXECUTABLE}) + else() + set(copyInput ${installDir}/bin/gn${CMAKE_EXECUTABLE_SUFFIX}) + set(copyDep gn) + endif() + add_custom_target(copy-gn ALL DEPENDS ${copyOutput}) + add_custom_command( + OUTPUT ${copyOutput} + COMMAND ${CMAKE_COMMAND} -E copy ${copyInput} ${QT_BUILD_DIR}/${INSTALL_LIBEXECDIR} + DEPENDS ${copyDep} + USES_TERMINAL + ) + else() + get_install_config(installConfig) + install( + PROGRAMS "${installDir}/bin/gn${CMAKE_EXECUTABLE_SUFFIX}" + CONFIGURATIONS ${installConfig} + RUNTIME DESTINATION "${INSTALL_LIBEXECDIR}" + ) + endif() +endif() + |