diff options
Diffstat (limited to 'src/CMakeLists.txt')
-rw-r--r-- | src/CMakeLists.txt | 163 |
1 files changed, 146 insertions, 17 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() |