diff options
Diffstat (limited to 'cmake')
-rw-r--r-- | cmake/FindGPerf.cmake | 3 | ||||
-rw-r--r-- | cmake/FindGn.cmake | 3 | ||||
-rw-r--r-- | cmake/FindNinja.cmake | 3 | ||||
-rw-r--r-- | cmake/FindNodejs.cmake | 3 | ||||
-rw-r--r-- | cmake/FindPkgConfigHost.cmake | 3 | ||||
-rw-r--r-- | cmake/FindSnappy.cmake | 3 | ||||
-rw-r--r-- | cmake/Functions.cmake | 133 | ||||
-rw-r--r-- | cmake/Gn.cmake | 3 | ||||
-rw-r--r-- | cmake/License.cmake | 42 | ||||
-rw-r--r-- | cmake/SubmoduleUpdate.cmake | 70 |
10 files changed, 247 insertions, 19 deletions
diff --git a/cmake/FindGPerf.cmake b/cmake/FindGPerf.cmake index 85b55f1b8..e42b8a372 100644 --- a/cmake/FindGPerf.cmake +++ b/cmake/FindGPerf.cmake @@ -1,3 +1,6 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + find_program(GPerf_EXECUTABLE NAMES gperf) include(FindPackageHandleStandardArgs) diff --git a/cmake/FindGn.cmake b/cmake/FindGn.cmake index 6bef6009e..3f25bb585 100644 --- a/cmake/FindGn.cmake +++ b/cmake/FindGn.cmake @@ -1,3 +1,6 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + if(NOT DEFINED WEBENGINE_ROOT_BUILD_DIR) set(WEBENGINE_ROOT_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}) endif() diff --git a/cmake/FindNinja.cmake b/cmake/FindNinja.cmake index 720e73266..9b1e718c0 100644 --- a/cmake/FindNinja.cmake +++ b/cmake/FindNinja.cmake @@ -1,3 +1,6 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + if (NOT DEFINED WEBENGINE_ROOT_BUILD_DIR) set(WEBENGINE_ROOT_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}) endif() diff --git a/cmake/FindNodejs.cmake b/cmake/FindNodejs.cmake index 0e5efe4a3..0aeef5ab3 100644 --- a/cmake/FindNodejs.cmake +++ b/cmake/FindNodejs.cmake @@ -1,3 +1,6 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + find_program(Nodejs_EXECUTABLE NAMES node nodejs) if(Nodejs_EXECUTABLE) diff --git a/cmake/FindPkgConfigHost.cmake b/cmake/FindPkgConfigHost.cmake index de0216384..a7f9ab0ae 100644 --- a/cmake/FindPkgConfigHost.cmake +++ b/cmake/FindPkgConfigHost.cmake @@ -1,3 +1,6 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + # this is just simply pkg config wrapper to pass executable path to gn if(CMAKE_CROSSCOMPILING) diff --git a/cmake/FindSnappy.cmake b/cmake/FindSnappy.cmake index 1470c55a9..e1c7d231b 100644 --- a/cmake/FindSnappy.cmake +++ b/cmake/FindSnappy.cmake @@ -1,3 +1,6 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + if(TARGET Snappy::Snappy) set(Snappy_FOUND TRUE) diff --git a/cmake/Functions.cmake b/cmake/Functions.cmake index 370ea082c..f3c836432 100644 --- a/cmake/Functions.cmake +++ b/cmake/Functions.cmake @@ -1,7 +1,21 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +# this macro is missing in 6.2 +if(NOT COMMAND _qt_internal_validate_all_args_are_parsed) + macro(_qt_internal_validate_all_args_are_parsed result) + if(DEFINED ${result}_UNPARSED_ARGUMENTS) + message(FATAL_ERROR "Unknown arguments (${${result}_UNPARSED_ARGUMENTS}).") + endif() + endmacro() +endif() + function(assertTargets) - qt_parse_all_arguments(arg "add_check_for_support" - "" "" "MODULES;TARGETS" "${ARGN}" + cmake_parse_arguments(PARSE_ARGV 0 arg + "" "" "MODULES;TARGETS" ) + _qt_internal_validate_all_args_are_parsed(arg) + foreach(module ${arg_MODULES}) if(NOT DEFINED ${module}_SUPPORT) set(${module}_SUPPORT ON PARENT_SCOPE) @@ -33,9 +47,11 @@ endfunction() # TODO: this should be idealy in qtbase function(add_check_for_support) - qt_parse_all_arguments(arg "add_check_for_support" - "" "" "MODULES;MESSAGE;CONDITION" "${ARGN}" + cmake_parse_arguments(PARSE_ARGV 0 arg + "" "" "MODULES;MESSAGE;CONDITION" ) + _qt_internal_validate_all_args_are_parsed(arg) + foreach(module ${arg_MODULES}) if(NOT DEFINED ${module}_SUPPORT) set(${module}_SUPPORT ON PARENT_SCOPE) @@ -178,7 +194,9 @@ endmacro() function(extend_gn_target target) get_target_property(elements ${target} ELEMENTS) - qt_parse_all_arguments(GN "extend_gn_target" "" "" "CONDITION;${elements}" "${ARGN}") + cmake_parse_arguments(PARSE_ARGV 1 GN "" "" "CONDITION;${elements}") + _qt_internal_validate_all_args_are_parsed(GN) + if("x${GN_CONDITION}" STREQUAL x) set(GN_CONDITION ON) endif() @@ -190,7 +208,9 @@ function(extend_gn_target target) endfunction() function(extend_gn_list outList) - qt_parse_all_arguments(GN "extend_gn_list" "" "" "ARGS;CONDITION" "${ARGN}") + cmake_parse_arguments(PARSE_ARGV 1 GN "" "" "ARGS;CONDITION") + _qt_internal_validate_all_args_are_parsed(GN) + if("x${GN_CONDITION}" STREQUAL x) set(GN_CONDITION ON) endif() @@ -429,7 +449,7 @@ function(add_linker_options target buildDir completeStatic) set(archives_rsp "${buildDir}/${ninjaTarget}_archives.rsp") set(libs_rsp "${buildDir}/${ninjaTarget}_libs.rsp") set_target_properties(${cmakeTarget} PROPERTIES STATIC_LIBRARY_OPTIONS "@${objects_rsp}") - if(LINUX) + if(LINUX OR ANDROID) get_gn_arch(cpu ${TEST_architecture_arch}) if(CMAKE_CROSSCOMPILING AND cpu STREQUAL "arm" AND ${config} STREQUAL "Debug") target_link_options(${cmakeTarget} PRIVATE "LINKER:--long-plt") @@ -442,9 +462,31 @@ function(add_linker_options target buildDir completeStatic) "$<1:-Wl,--start-group $<$<CONFIG:${config}>:@${archives_rsp}> -Wl,--end-group>" ) endif() + + # we need only the '-L' flags from lflags.rsp, filter them + set(lflags_rsp "${buildDir}/${ninjaTarget}_lflags.rsp") + set(lflags_filtered_rsp "${buildDir}/${ninjaTarget}_lflags_filtered.rsp") + set(lflags_filter_script "${buildDir}/${ninjaTarget}_lflags_filter.cmake") + file(GENERATE OUTPUT ${lflags_filter_script} + CONTENT "file(STRINGS ${lflags_rsp} lflags) + string(REGEX MATCHALL \"-L.*\" lflags_filtered \${lflags}) + file(WRITE ${lflags_filtered_rsp} \${lflags_filtered})" + FILE_PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ + ) + add_custom_command( + OUTPUT ${lflags_filtered_rsp} + COMMAND ${CMAKE_COMMAND} -P ${lflags_filter_script} + DEPENDS ${lflags_filter_script} ${lflags_rsp} + ) + add_custom_target( + run_${cmakeTarget}_${config}_lflags_filter + DEPENDS ${lflags_filtered_rsp} + ) + add_dependencies(${cmakeTarget} run_${cmakeTarget}_${config}_lflags_filter) + # linker here options are just to prevent processing it by cmake target_link_libraries(${cmakeTarget} PRIVATE - "$<1:-Wl,--no-fatal-warnings $<$<CONFIG:${config}>:@${libs_rsp}> -Wl,--no-fatal-warnings>" + "$<1:-Wl,--no-fatal-warnings $<$<CONFIG:${config}>:@${lflags_filtered_rsp}> $<$<CONFIG:${config}>:@${libs_rsp}> -Wl,--no-fatal-warnings>" ) endif() if(MACOS) @@ -456,7 +498,7 @@ function(add_linker_options target buildDir completeStatic) endif() if(WIN32) get_copy_of_response_file(objects_rsp ${target} objects) - target_link_options(${cmakeTarget} PRIVATE /DELAYLOAD:mf.dll /DELAYLOAD:mfplat.dll /DELAYLOAD:mfreadwrite.dll) + target_link_options(${cmakeTarget} PRIVATE /DELAYLOAD:mf.dll /DELAYLOAD:mfplat.dll /DELAYLOAD:mfreadwrite.dll /DELAYLOAD:winmm.dll) target_link_options(${cmakeTarget} PRIVATE "$<$<CONFIG:${config}>:@${objects_rsp}>") if(NOT completeStatic) get_copy_of_response_file(archives_rsp ${target} archives) @@ -464,6 +506,8 @@ function(add_linker_options target buildDir completeStatic) endif() get_copy_of_response_file(libs_rsp ${target} libs) target_link_options(${cmakeTarget} PRIVATE "$<$<CONFIG:${config}>:@${libs_rsp}>") + # enable larger PDBs + target_link_options(${cmakeTarget} PRIVATE "/pdbpagesize:8192") # we need libs rsp also when linking process with sandbox lib set_property(TARGET ${cmakeTarget} PROPERTY LIBS_RSP ${libs_rsp}) endif() @@ -628,6 +672,8 @@ function(get_gn_arch result arch) set(${result} "mipsel" PARENT_SCOPE) elseif(arch STREQUAL "mipsel64") set(${result} "mips64el" PARENT_SCOPE) + elseif(arch STREQUAL "riscv64") + set(${result} "riscv64" PARENT_SCOPE) else() message(DEBUG "Unsupported architecture: ${arch}") endif() @@ -647,6 +693,8 @@ function(get_v8_arch result targetArch hostArch) set(${result} "mipsel" PARENT_SCOPE) elseif(hostArch STREQUAL "mipsel64") set(${result} "mipsel" PARENT_SCOPE) + elseif(hostArch STREQUAL "riscv64") + set(${result} "riscv64" PARENT_SCOPE) elseif(hostArch IN_LIST list32) set(${result} "${hostArch}" PARENT_SCOPE) else() @@ -734,7 +782,9 @@ function(extract_cflag result cflag) endfunction() function(extend_gn_list_cflag outList) - qt_parse_all_arguments(GN "extend_gn_list_cflag" "" "" "ARG;CFLAG" "${ARGN}") + cmake_parse_arguments(PARSE_ARGV 1 GN "" "" "ARG;CFLAG") + _qt_internal_validate_all_args_are_parsed(GN) + extract_cflag(cflag "${GN_CFLAG}") if(cflag) set(${outList} "${${outList}}" "${GN_ARG}=\"${cflag}\"" PARENT_SCOPE) @@ -793,7 +843,7 @@ endmacro() macro(append_build_type_setup) list(APPEND gnArgArg - use_qt=true + is_qtwebengine=true init_stack_vars=false is_component_build=false is_shared=true @@ -807,7 +857,7 @@ macro(append_build_type_setup) if(${config} STREQUAL "Debug") list(APPEND gnArgArg is_debug=true symbol_level=2) if(WIN32) - list(APPEND gnArgArg enable_iterator_debugging=true v8_optimized_debug=false) + list(APPEND gnArgArg enable_iterator_debugging=true) endif() elseif(${config} STREQUAL "Release") list(APPEND gnArgArg is_debug=false symbol_level=0) @@ -907,6 +957,14 @@ macro(append_compiler_linker_sdk_setup) CONDITION QT_FEATURE_stdlib_libcpp ) endif() + if(ANDROID) + list(APPEND gnArgArg + android_ndk_root="${CMAKE_ANDROID_NDK}" + android_ndk_version="${CMAKE_ANDROID_NDK_VERSION}" + clang_use_default_sample_profile=false + #android_ndk_major_version=22 + ) + endif() else() if(QT_FEATURE_use_lld_linker) get_filename_component(clangBasePath ${CMAKE_LINKER} DIRECTORY) @@ -1001,11 +1059,13 @@ macro(append_toolchain_setup) list(APPEND gnArgArg custom_toolchain="${buildDir}/target_toolchain:target" host_toolchain="${buildDir}/host_toolchain:host" - v8_snapshot_toolchain="${buildDir}/v8_toolchain:v8" ) get_gn_arch(cpu ${TEST_architecture_arch}) if(CMAKE_CROSSCOMPILING) - list(APPEND gnArgArg target_cpu="${cpu}") + list(APPEND gnArgArg + v8_snapshot_toolchain="${buildDir}/v8_toolchain:v8" + target_cpu="${cpu}" + ) else() list(APPEND gnArgArg host_cpu="${cpu}") endif() @@ -1020,6 +1080,9 @@ macro(append_toolchain_setup) list(APPEND gnArgArg target_sysroot="${sysroot}" target_os="ios") endif() endif() + if(ANDROID) + list(APPEND gnArgArg target_os="android") + endif() endmacro() @@ -1033,9 +1096,11 @@ macro(append_pkg_config_setup) endmacro() function(add_ninja_command) - qt_parse_all_arguments(arg "add_ninja_command" - "" "TARGET;OUTPUT;BUILDDIR;MODULE" "BYPRODUCTS" "${ARGN}" + cmake_parse_arguments(PARSE_ARGV 0 arg + "" "TARGET;OUTPUT;BUILDDIR;MODULE" "BYPRODUCTS" ) + _qt_internal_validate_all_args_are_parsed(arg) + string(REPLACE " " ";" NINJAFLAGS "$ENV{NINJAFLAGS}") list(TRANSFORM arg_BYPRODUCTS PREPEND "${arg_BUILDDIR}/") add_custom_command( @@ -1134,9 +1199,10 @@ function(get_config_filenames c_config cxx_config static_config target_config) endfunction() function(add_gn_command) - qt_parse_all_arguments(arg "add_gn_command" - "" "CMAKE_TARGET;GN_TARGET;MODULE;BUILDDIR" "NINJA_TARGETS;GN_ARGS" "${ARGN}" + cmake_parse_arguments(PARSE_ARGV 0 arg + "" "CMAKE_TARGET;GN_TARGET;MODULE;BUILDDIR" "NINJA_TARGETS;GN_ARGS" ) + _qt_internal_validate_all_args_are_parsed(arg) get_config_filenames(cConfigFileName cxxConfigFileName staticConfigFileName targetConfigFileName) set(gnArgArgFile ${arg_BUILDDIR}/args.gn) @@ -1145,7 +1211,7 @@ function(add_gn_command) file(WRITE ${gnArgArgFile} ${arg_GN_ARGS}) foreach(ninjaTarget ${arg_NINJA_TARGETS}) - list(APPEND output ${ninjaTarget}_objects.rsp ${ninjaTarget}_archives.rsp ${ninjaTarget}_libs.rsp) + list(APPEND output ${ninjaTarget}_objects.rsp ${ninjaTarget}_archives.rsp ${ninjaTarget}_libs.rsp ${ninjaTarget}_lflags.rsp) endforeach() list(TRANSFORM output PREPEND "${arg_BUILDDIR}/") @@ -1272,3 +1338,32 @@ function(add_build feature value) set(depTracker "${depTracker}" ${feature}) set_property(GLOBAL PROPERTY MATRIX_DEPENDENCY_TRACKER "${depTracker}") endfunction() + +function(add_code_attributions_target) + cmake_parse_arguments(PARSE_ARGV 0 arg "" + "TARGET;OUTPUT;GN_TARGET;FILE_TEMPLATE;ENTRY_TEMPLATE;BUILDDIR" "" + ) + _qt_internal_validate_all_args_are_parsed(arg) + get_filename_component(fileTemplate ${arg_FILE_TEMPLATE} ABSOLUTE) + get_filename_component(entryTemplate ${arg_ENTRY_TEMPLATE} ABSOLUTE) + add_custom_command( + OUTPUT ${arg_OUTPUT} + COMMAND ${CMAKE_COMMAND} + -DLICENSE_SCRIPT=${WEBENGINE_ROOT_SOURCE_DIR}/src/3rdparty/chromium/tools/licenses.py + -DFILE_TEMPLATE=${fileTemplate} + -DENTRY_TEMPLATE=${entryTemplate} + -DGN_TARGET=${arg_GN_TARGET} + -DBUILDDIR=${arg_BUILDDIR} + -DOUTPUT=${arg_OUTPUT} + -DPython3_EXECUTABLE=${Python3_EXECUTABLE} + -P ${WEBENGINE_ROOT_SOURCE_DIR}/cmake/License.cmake + WORKING_DIRECTORY ${WEBENGINE_ROOT_BUILD_DIR} + DEPENDS + ${WEBENGINE_ROOT_SOURCE_DIR}/src/3rdparty/chromium/tools/licenses.py + ${arg_FILE_TEMPLATE} + ${arg_ENTRY_TEMPLATE} + ${WEBENGINE_ROOT_SOURCE_DIR}/cmake/License.cmake + USES_TERMINAL + ) + add_custom_target(${arg_TARGET} DEPENDS ${arg_OUTPUT}) +endfunction() diff --git a/cmake/Gn.cmake b/cmake/Gn.cmake index 38556443b..41dccc11b 100644 --- a/cmake/Gn.cmake +++ b/cmake/Gn.cmake @@ -1,3 +1,6 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + # This is gn wrapper script and it assables final BUILD.gn based on: # gn_config_target.cmake gn_config_c.cmake gn_config_cxx.cmake diff --git a/cmake/License.cmake b/cmake/License.cmake new file mode 100644 index 000000000..dc1e286f1 --- /dev/null +++ b/cmake/License.cmake @@ -0,0 +1,42 @@ +# Copyright (C) 2023 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +if(NOT CMAKE_SCRIPT_MODE_FILE) + message("This files should run only in script mode") + return() +endif() + +get_filename_component(WEBENGINE_ROOT_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/.." REALPATH) +get_filename_component(WEBENGINE_ROOT_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}" REALPATH) + +include(${WEBENGINE_ROOT_SOURCE_DIR}/.cmake.conf) +include(${WEBENGINE_ROOT_SOURCE_DIR}/cmake/Functions.cmake) + +set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}) + +find_package(Gn ${QT_REPO_MODULE_VERSION} EXACT) +if(NOT Python3_EXECUTABLE) + find_package(Python3 3.6 REQUIRED) +endif() + +execute_process( + COMMAND ${Python3_EXECUTABLE} ${LICENSE_SCRIPT} + --file-template ${FILE_TEMPLATE} + --entry-template ${ENTRY_TEMPLATE} + --gn-binary ${Gn_EXECUTABLE} + --gn-target ${GN_TARGET} + --gn-out-dir ${BUILDDIR} + credits ${OUTPUT} + WORKING_DIRECTORY ${BUILDDIR} + RESULT_VARIABLE gnResult + OUTPUT_VARIABLE gnOutput + ERROR_VARIABLE gnError + TIMEOUT 600 +) + +if(NOT gnResult EQUAL 0) + message(FATAL_ERROR "\n-- License FAILED\n${gnOutput}\n${gnError}\n${gnResult}\n") +else() + string(REGEX REPLACE "\n$" "" gnOutput "${gnOutput}") + message("-- License ${gnOutput}") +endif() diff --git a/cmake/SubmoduleUpdate.cmake b/cmake/SubmoduleUpdate.cmake new file mode 100644 index 000000000..123db55bf --- /dev/null +++ b/cmake/SubmoduleUpdate.cmake @@ -0,0 +1,70 @@ +# Copyright (C) 2023 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +if(NOT CMAKE_SCRIPT_MODE_FILE) + message("This file should run only in script mode") + return() +endif() + +get_filename_component(WEBENGINE_ROOT_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/.." REALPATH) +get_filename_component(WEBENGINE_ROOT_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}" REALPATH) + +include(${WEBENGINE_ROOT_SOURCE_DIR}/.cmake.conf) +include(${WEBENGINE_ROOT_SOURCE_DIR}/cmake/Functions.cmake) + +find_program(GIT_EXECUTABLE NAMES git REQUIRED) + +execute_process( + COMMAND ${GIT_EXECUTABLE} rev-parse --short=8 HEAD + WORKING_DIRECTORY ${WEBENGINE_ROOT_SOURCE_DIR}/src/3rdparty + OUTPUT_VARIABLE SUBMODULE_NEW_SHA + OUTPUT_STRIP_TRAILING_WHITESPACE +) +execute_process( + COMMAND ${GIT_EXECUTABLE} rev-parse --short=8 HEAD:src/3rdparty + WORKING_DIRECTORY ${WEBENGINE_ROOT_SOURCE_DIR} + OUTPUT_VARIABLE SUBMODULE_OLD_SHA + OUTPUT_STRIP_TRAILING_WHITESPACE +) +set(shas "${SUBMODULE_OLD_SHA}..${SUBMODULE_NEW_SHA}") +set(format "* %s") +execute_process( + COMMAND ${GIT_EXECUTABLE} log + --pretty=format:${format} + --abbrev-commit ${shas} + WORKING_DIRECTORY ${WEBENGINE_ROOT_SOURCE_DIR}/src/3rdparty + OUTPUT_VARIABLE SUBMODULE_COMMITS + OUTPUT_STRIP_TRAILING_WHITESPACE +) + +if(SUBMODULE_COMMITS) + message("commits found for ${shas}") + execute_process( + COMMAND ${GIT_EXECUTABLE} add src/3rdparty + WORKING_DIRECTORY ${WEBENGINE_ROOT_SOURCE_DIR} + ) + set(commits ${SUBMODULE_COMMITS}) + execute_process( + COMMAND ${GIT_EXECUTABLE} commit + --allow-empty + -m "Update Chromium" + -m "Submodule src/3rdparty ${shas}:\n${commits}" + WORKING_DIRECTORY ${WEBENGINE_ROOT_SOURCE_DIR} + RESULT_VARIABLE gitResult + OUTPUT_VARIABLE gitOutput + ERROR_VARIABLE gitError + ) + + if(NOT gitResult EQUAL 0) + message(FATAL_ERROR "\n-- Git Commit FAILED\n${gitOutput}\n${gitError}\n${gitResult}\n") + else() + string(REGEX REPLACE "\n$" "" gnOutput "${gitOutput}") + message("-- Git Commit ${gitOutput}") + execute_process( + COMMAND ${GIT_EXECUTABLE} show HEAD + WORKING_DIRECTORY ${WEBENGINE_ROOT_SOURCE_DIR} + ) + endif() +else() + message(FATAL_ERROR "-- Git Commit found no commits for ${shas}") +endif() |