summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Klocek <michal.klocek@qt.io>2021-08-10 10:16:44 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-08-18 05:28:03 +0000
commit4245e8c147f3bc3512352b73462774c042426e81 (patch)
treef2b506169090417036d4b26e3b45b7647e1bb0e0
parent8f7e3291c4736c22d528da4c7f8cdbe28fe2d78f (diff)
Refactor gn target
Currently we get hangs on ci, to investigate the issue go through current cmake code and: * remove all dummy ninja targets * remove implicit dependencies * build dir in form of buildDir/config/arch * separate ninja call for sandbox * separate ninja call for covert_dict * clean up universal build * change handling of rsp files, so they are generated during build and not configure time * refactor functions so universal build can be easily used by follow up qtpdf patch Change-Id: Id4a6c61b87fe76832232035fddf212b57051d0ec Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> (cherry picked from commit 58b787cbad581914367aea4604993cce30a65d06) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--cmake/Functions.cmake277
-rw-r--r--src/core/CMakeLists.txt159
-rw-r--r--src/core/configure/rsp.cmake.in5
3 files changed, 201 insertions, 240 deletions
diff --git a/cmake/Functions.cmake b/cmake/Functions.cmake
index 94d2949cf..4f342eb2d 100644
--- a/cmake/Functions.cmake
+++ b/cmake/Functions.cmake
@@ -101,12 +101,17 @@ function(make_install_only target)
endif()
endfunction()
-function(add_gn_target target)
+function(add_gn_target target config arch)
add_custom_target(${target})
list(REMOVE_ITEM ARGN ${target})
+ list(REMOVE_ITEM ARGN ${config})
+ list(REMOVE_ITEM ARGN ${arch})
set_target_properties(${target} PROPERTIES
ELEMENTS "${ARGN}"
- PREFIX "GN")
+ PREFIX "GN"
+ CONFIG ${config}
+ ARCH ${arch}
+ )
endfunction()
function(read_gn_target target filePath)
@@ -306,152 +311,115 @@ function(get_darwin_sdk_version result)
endif()
endfunction()
-function(extend_target_with_gn_objects target config cmakeFile stampFile)
-
- include(${buildDir}/${config}/${cmakeFile})
-
+function(add_gn_target_from_cmake_target gnTarget cmakeTarget ninjaTarget config arch buildDir)
+ include(${buildDir}/${config}/${arch}/${ninjaTarget}.cmake)
string(TOUPPER ${config} cfg)
- add_library(GnObjects_${target}_${config} OBJECT IMPORTED GLOBAL)
- target_link_libraries(${target} PRIVATE $<$<CONFIG:${config}>:GnObjects_${target}_${config}>)
- add_custom_target(ninja_${target}_${config} DEPENDS ${buildDir}/${config}/${stampFile})
- add_dependencies(GnObjects_${target}_${config} ninja_${target}_${config})
- #TODO: remove GnObjects_${target}_${config} with CMAKE 3.20
- set_property(TARGET GnObjects_${target}_${config}
- PROPERTY IMPORTED_OBJECTS_${cfg} ${${cfg}_NINJA_OBJECTS}
+ add_custom_target(${gnTarget})
+ set_target_properties(${gnTarget} PROPERTIES
+ CONFIG ${config}
+ ARCH ${arch}
)
- set_source_files_properties(${${cfg}_NINJA_OBJECTS} PROPERTIES GENERATED TRUE)
+ set_property(TARGET ${gnTarget} APPEND PROPERTY OBJECTS ${${cfg}_NINJA_OBJECTS})
+ set_property(TARGET ${gnTarget} APPEND PROPERTY ARCHIVES ${${cfg}_NINJA_ARCHIVES})
+ set_property(TARGET ${gnTarget} APPEND PROPERTY LIBS ${${cfg}_NINJA_LIBS})
+ set_property(TARGET ${gnTarget} APPEND PROPERTY STAMP ${${cfg}_NINJA_TARGETDEPS})
+endfunction()
+function(extend_target_with_gn_target gnTarget cmakeTarget)
+ get_target_property(config ${gnTarget} CONFIG)
+ string(TOUPPER ${cmakeTarget} tg)
+ string(TOUPPER ${config} cfg)
+ get_target_property(ninja_objects ${gnTarget} OBJECTS)
+ get_target_property(ninja_archives ${gnTarget} ARCHIVES)
+ get_target_property(ninja_libs ${gnTarget} LIBS)
+ get_target_property(ninja_stamp ${gnTarget} STAMP)
+ add_library(GnObjects_${cmakeTarget}_${config} OBJECT IMPORTED GLOBAL)
+ target_link_libraries(${cmakeTarget} PRIVATE $<$<CONFIG:${config}>:GnObjects_${cmakeTarget}_${config}>)
+ add_custom_target(ninja_${cmakeTarget}_${config} DEPENDS ${ninja_stamp})
+ add_dependencies(GnObjects_${cmakeTarget}_${config} ninja_${cmakeTarget}_${config})
+ #TODO: remove GnObjects_${cmakeTarget}_${config} with CMAKE 3.20
+ set_property(TARGET GnObjects_${cmakeTarget}_${config}
+ PROPERTY IMPORTED_OBJECTS_${cfg} ${ninja_objects}
+ )
if(LINUX)
- target_link_libraries(${target}
- PRIVATE "-Wl,--start-group" "$<$<CONFIG:${config}>:${${cfg}_NINJA_ARCHIVES}>" "-Wl,--end-group")
+ target_link_libraries(${cmakeTarget}
+ PRIVATE "-Wl,--start-group" "$<$<CONFIG:${config}>:${ninja_archives}>" "-Wl,--end-group")
else()
- target_link_libraries(${target} PRIVATE "$<$<CONFIG:${config}>:${${cfg}_NINJA_ARCHIVES}>")
+ target_link_libraries(${cmakeTarget} PRIVATE "$<$<CONFIG:${config}>:${ninja_archives}>")
endif()
+ target_link_libraries(${cmakeTarget} PUBLIC "$<$<CONFIG:${config}>:${ninja_libs}>")
+endfunction()
- target_link_libraries(${target} PUBLIC "$<$<CONFIG:${config}>:${${cfg}_NINJA_LIBS}>")
-
- # we depend on stampFile, but ninja backend generator needs more (create once)
- if(stampFile)
- add_custom_command(OUTPUT ${${cfg}_NINJA_OBJECTS} ${${cfg}_NINJA_ARCHIVES}
- DEPENDS ${buildDir}/${config}/${stampFile}
- )
- add_custom_target(generate_${target}_${cfg}
- DEPENDS ${${cfg}_NINJA_OBJECTS} ${${cfg}_NINJA_ARCHIVES}
- )
- endif()
+function(create_rsp_cmake_file rspFileIn rspFileOut cmakeFile config target)
+ set(CMAKE_FILE ${cmakeFile})
+ set(CONFIG ${config})
+ set(TARGET ${target})
+ configure_file(${rspFileIn} ${rspFileOut} @ONLY)
endfunction()
-function(extend_target_with_gn_libs target config cmakeFile stampFile)
+function(add_rsp_command gnTarget cmakeTarget ninjaTarget buildDir)
+ get_target_property(config ${gnTarget} CONFIG)
+ get_target_property(arch ${gnTarget} ARCH)
string(TOUPPER ${config} cfg)
-
- # Do a partial link of all the archives into a single archive:
- include(${buildDir}/arm64/${config}/${cmakeFile})
- set_source_files_properties(${${cfg}_NINJA_OBJECTS} PROPERTIES GENERATED TRUE)
-
- list(JOIN ${cfg}_NINJA_OBJECTS " " arm64_objects)
- list(JOIN ${cfg}_NINJA_ARCHIVES " " arm64_archives)
- file(WRITE ${buildDir}/arm64/${config}/${target}_gnobjects.rsp ${arm64_objects})
- file(WRITE ${buildDir}/arm64/${config}/${target}_gnarchives.rsp ${arm64_archives})
- add_custom_command(OUTPUT ${buildDir}/arm64/${config}/${target}_gnobjects.rsp
- ${buildDir}/arm64/${config}/${target}_gnarchives.rsp
- DEPENDS ${buildDir}/arm64/${config}/${stampFile})
- add_custom_target(generate_arm64_rsp_${target}_${config}
- DEPENDS
- ${buildDir}/arm64/${config}/${target}_gnobjects.rsp
- ${buildDir}/arm64/${config}/${target}_gnarchives.rsp)
-
- add_custom_command(
- OUTPUT ${buildDir}/${config}/arm64_${target}_${config}.a
- BYPRODUCTS ${buildDir}/${config}/arm64_${target}_${config}.o
- COMMAND clang++ -r -nostdlib -arch arm64
- -o ${buildDir}/${config}/arm64_${target}_${config}.o
- -Wl,-keep_private_externs
- @${buildDir}/arm64/${config}/${target}_gnobjects.rsp
- -Wl,-all_load
- @${buildDir}/arm64/${config}/${target}_gnarchives.rsp
- COMMAND ar -cr
- ${buildDir}/${config}/arm64_${target}_${config}.a
- ${buildDir}/${config}/arm64_${target}_${config}.o
- DEPENDS
- ${buildDir}/arm64/${config}/${stampFile}
- ${buildDir}/arm64/${config}/${target}_gnobjects.rsp
- ${buildDir}/arm64/${config}/${target}_gnarchives.rsp
- USES_TERMINAL
- VERBATIM
- COMMAND_EXPAND_LISTS
+ get_target_property(ninja_stamp ${gnTarget} STAMP)
+ create_rsp_cmake_file(
+ ${WEBENGINE_ROOT_SOURCE_DIR}/src/core/configure/rsp.cmake.in
+ ${buildDir}/${cmakeTarget}_rsp.cmake ${buildDir}/${ninjaTarget}.cmake ${cfg} ${cmakeTarget}
)
- add_custom_command(OUTPUT ${${cfg}_NINJA_OBJECTS} ${${cfg}_NINJA_ARCHIVES}
- DEPENDS ${buildDir}/arm64/${config}/${stampFile})
- add_custom_target(generate_arm64_${target}_${config}
- DEPENDS ${${cfg}_NINJA_OBJECTS} ${${cfg}_NINJA_ARCHIVES})
-
- include(${buildDir}/x86_64/${config}/${cmakeFile})
- set_source_files_properties(${${cfg}_NINJA_OBJECTS} PROPERTIES GENERATED TRUE)
-
- list(JOIN ${cfg}_NINJA_OBJECTS " " x64_objects)
- list(JOIN ${cfg}_NINJA_ARCHIVES " " x64_archives)
- file(WRITE ${buildDir}/x86_64/${config}/${target}_gnobjects.rsp ${x64_objects})
- file(WRITE ${buildDir}/x86_64/${config}/${target}_gnarchives.rsp ${x64_archives})
- add_custom_command(OUTPUT ${buildDir}/x86_64/${config}/${target}_gnobjects.rsp
- ${buildDir}/x86_64/${config}/${target}_gnarchives.rsp
- DEPENDS ${buildDir}/x86_64/${config}/${stampFile})
- add_custom_target(generate_x64_rsp_${target}_${config}
- DEPENDS
- ${buildDir}/x86_64/${config}/${target}_gnobjects.rsp
- ${buildDir}/x86_64/${config}/${target}_gnarchives.rsp)
-
add_custom_command(
- OUTPUT ${buildDir}/${config}/x64_${target}_${config}.a
- BYPRODUCTS ${buildDir}/${config}/x64_${target}_${config}.o
- COMMAND clang++ -r -nostdlib -arch x86_64
- -o ${buildDir}/${config}/x64_${target}_${config}.o
- -Wl,-keep_private_externs
- @${buildDir}/x86_64/${config}/${target}_gnobjects.rsp
- -Wl,-all_load
- @${buildDir}/x86_64/${config}/${target}_gnarchives.rsp
+ OUTPUT ${buildDir}/${cmakeTarget}.a
+ BYPRODUCTS
+ ${buildDir}/${cmakeTarget}.o
+ ${buildDir}/${cmakeTarget}_gnobjects.rsp
+ ${buildDir}/${cmakeTarget}_gnarchives.rsp
+ COMMAND ${CMAKE_COMMAND} -P ${buildDir}/${cmakeTarget}_rsp.cmake
+ COMMAND clang++ -r -nostdlib -arch ${arch}
+ -o ${buildDir}/${cmakeTarget}.o
+ -Wl,-keep_private_externs
+ @${buildDir}/${cmakeTarget}_gnobjects.rsp
+ -Wl,-all_load
+ @${buildDir}/${cmakeTarget}_gnarchives.rsp
COMMAND ar -cr
- ${buildDir}/${config}/x64_${target}_${config}.a
- ${buildDir}/${config}/x64_${target}_${config}.o
+ ${buildDir}/${cmakeTarget}.a
+ ${buildDir}/${cmakeTarget}.o
DEPENDS
- ${buildDir}/x86_64/${config}/${stampFile}
- ${buildDir}/x86_64/${config}/${target}_gnobjects.rsp
- ${buildDir}/x86_64/${config}/${target}_gnarchives.rsp
+ ${ninja_stamp}
USES_TERMINAL
VERBATIM
COMMAND_EXPAND_LISTS
)
- add_custom_command(OUTPUT ${${cfg}_NINJA_OBJECTS} ${${cfg}_NINJA_ARCHIVES}
- DEPENDS ${buildDir}/x86_64/${config}/${stampFile})
- add_custom_target(generate_x86_64_${target}_${config}
- DEPENDS ${${cfg}_NINJA_OBJECTS} ${${cfg}_NINJA_ARCHIVES})
+endfunction()
- add_custom_target(generate1_${target}_${config}
- DEPENDS ${buildDir}/${config}/arm64_${target}_${config}.a
- ${buildDir}/${config}/x64_${target}_${config}.a)
+function(add_lipo_command gnTarget cmakeTarget buildDir)
+ get_target_property(config ${gnTarget} CONFIG)
+ get_target_property(ninja_libs ${gnTarget} LIBS)
# Lipo the object files together to a single fat archive
- add_library(${target}_${config} STATIC IMPORTED GLOBAL)
+ add_library(${cmakeTarget}_${config} STATIC IMPORTED GLOBAL)
add_custom_command(
- OUTPUT ${buildDir}/${config}/lib${target}_${config}.a
+ OUTPUT ${buildDir}/lib${cmakeTarget}.a
COMMAND lipo -create
- -output ${buildDir}/${config}/lib${target}_${config}.a
+ -output ${buildDir}/lib${cmakeTarget}.a
ARGS
- ${buildDir}/${config}/arm64_${target}_${config}.a
- ${buildDir}/${config}/x64_${target}_${config}.a
+ ${buildDir}/arm64/${cmakeTarget}.a
+ ${buildDir}/x86_64/${cmakeTarget}.a
DEPENDS
- ${buildDir}/${config}/arm64_${target}_${config}.a
- ${buildDir}/${config}/x64_${target}_${config}.a
+ ${buildDir}/arm64/${cmakeTarget}.a
+ ${buildDir}/x86_64/${cmakeTarget}.a
USES_TERMINAL
VERBATIM
)
- set_property(TARGET ${target}_${config}
- PROPERTY IMPORTED_LOCATION_${cfg} ${buildDir}/${config}/lib${target}_${config}.a)
- add_custom_target(generate2_${target}_${config}
- DEPENDS ${buildDir}/${config}/lib${target}_${config}.a)
- target_link_libraries(${target} PRIVATE ${target}_${config})
+ set_property(TARGET ${cmakeTarget}_${config}
+ PROPERTY IMPORTED_LOCATION ${buildDir}/lib${cmakeTarget}.a
+ )
+ add_custom_target(lipo_${cmakeTarget}_${config} DEPENDS
+ ${buildDir}/lib${cmakeTarget}.a
+ )
+ add_dependencies(${cmakeTarget}_${config} lipo_${cmakeTarget}_${config})
+ target_link_libraries(${cmakeTarget} PRIVATE ${cmakeTarget}_${config})
# Just link with dynamic libs once
- target_link_libraries(${target} PUBLIC "$<$<CONFIG:${config}>:${${cfg}_NINJA_LIBS}>")
+ target_link_libraries(${cmakeTarget} PUBLIC "$<$<CONFIG:${config}>:${ninja_libs}>")
endfunction()
function(qt_internal_add_external_project_dependency_to_root_project name)
@@ -833,7 +801,7 @@ endmacro()
macro(execute_gn)
get_target_property(gnCmd Gn::gn IMPORTED_LOCATION)
- set(gnArg gen ${buildDir}/${config})
+ set(gnArg gen ${buildDir}/${config}/${arch})
list(APPEND gnArg
--script-executable=${Python2_EXECUTABLE}
@@ -843,7 +811,7 @@ macro(execute_gn)
list(APPEND gnArg "--args=${gnArgArg}")
list(JOIN gnArg " " printArg)
- message("-- Running ${config} Configuration for GN \n-- ${gnCmd} ${printArg}")
+ message("-- Running gn for ${config} ${arch}\n-- ${gnCmd} ${printArg}")
execute_process(
COMMAND ${gnCmd} ${gnArg}
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
@@ -860,22 +828,71 @@ macro(execute_gn)
endif()
endmacro()
-macro(execute_ninja ninjaTargets)
+function(add_ninja_command gnTarget cmakeTarget ninjaTarget ninjaOutput buildDir)
string(REPLACE " " ";" NINJAFLAGS "$ENV{NINJAFLAGS}")
- string(REPLACE " " ";" NINJATARGETS "${ninjaTargets} ${ARGN}")
+ if(gnTarget)
+ get_target_property(ninja_objects ${gnTarget} OBJECTS)
+ get_target_property(ninja_archives ${gnTarget} ARCHIVES)
+ endif()
add_custom_command(
OUTPUT
- ${buildDir}/${config}/${ninjaTargets}.stamp
- ${sandboxOutput}
- ${buildDir}/${config}/runAlways # use generator expression in CMAKE 3.20
- WORKING_DIRECTORY ${buildDir}/${config}
- COMMENT "Ninja ${arch} ${config} build"
+ ${buildDir}/${ninjaOutput}
+ ${buildDir}/${ninjaTarget} # use generator expression in CMAKE 3.20
+ BYPRODUCTS ${ninja_objects} ${ninja_archives}
+ COMMENT "Ninja ${buildDir}"
COMMAND Ninja::ninja
${NINJAFLAGS}
- -C ${buildDir}/${config}
- ${NINJATARGETS}
+ -C ${buildDir}
+ ${ninjaTarget}
USES_TERMINAL
VERBATIM
COMMAND_EXPAND_LISTS
)
-endmacro()
+endfunction()
+
+function(get_configs result)
+ if(QT_GENERATOR_IS_MULTI_CONFIG)
+ set(${result} ${CMAKE_CONFIGURATION_TYPES} PARENT_SCOPE)
+ else()
+ set(${result} ${CMAKE_BUILD_TYPE} PARENT_SCOPE)
+ endif()
+endfunction()
+
+function(get_architectures result)
+ if(NOT QT_IS_MACOS_UNIVERSAL)
+ set(${result} ${CMAKE_SYSTEM_PROCESSOR} PARENT_SCOPE)
+ else()
+ set(${result} ${CMAKE_OSX_ARCHITECTURES} PARENT_SCOPE)
+ endif()
+endfunction()
+
+function(add_gn_build_aritfacts_to_target cmakeTarget ninjaTarget trackByproducts buildDir)
+ # config loop is a workaround to be able to add_custom_command per config
+ # note this is fixed in CMAKE.3.20 and should be cleaned up when 3.20 is
+ # the minimum cmake we support
+ get_configs(config)
+ get_architectures(archs)
+ foreach(config ${configs})
+ foreach(arch ${archs})
+ set(gnTarget ${ninjaTarget}_${config}_${arch})
+ add_gn_target_from_cmake_target(${gnTarget} ${cmakeTarget} ${ninjaTarget} ${config} ${arch} ${buildDir})
+ # TODO: this is workaround to avoid mulitples generate rules for covert_dict or sandbox
+ if(trackByproducts)
+ add_ninja_command(${gnTarget} ${cmakeTarget} ${ninjaTarget} ${ninjaTarget}.stamp ${buildDir}/${config}/${arch})
+ else()
+ add_ninja_command("" ${cmakeTarget} ${ninjaTarget} ${ninjaTarget}.stamp ${buildDir}/${config}/${arch})
+ endif()
+ if(QT_IS_MACOS_UNIVERSAL)
+ add_rsp_command(${gnTarget} ${cmakeTarget} ${ninjaTarget} ${buildDir}/${config}/${arch})
+ else()
+ extend_target_with_gn_target(${gnTarget} ${cmakeTarget})
+ endif()
+ endforeach()
+ if(QT_IS_MACOS_UNIVERSAL)
+ set(arch ${CMAKE_SYSTEM_PROCESSOR})
+ set(gnTarget ${ninjaTarget}_${config}_${arch})
+ add_lipo_command(${gnTarget} ${cmakeTarget} ${buildDir}/${config})
+ endif()
+ endforeach()
+endfunction()
+
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index 783a3b03a..398e8412c 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -39,32 +39,19 @@ endif()
# MULTICONFIG SETUP
##
-if(QT_GENERATOR_IS_MULTI_CONFIG)
- set(configs ${CMAKE_CONFIGURATION_TYPES})
-else()
- set(configs ${CMAKE_BUILD_TYPE})
-endif()
-
-if(NOT QT_IS_MACOS_UNIVERSAL)
- set(GN_ARCHITECTURES ${CMAKE_SYSTEM_PROCESSOR})
-else()
- set(GN_ARCHITECTURES ${CMAKE_OSX_ARCHITECTURES})
-endif()
-
-foreach(arch ${GN_ARCHITECTURES})
- if(QT_IS_MACOS_UNIVERSAL)
- set(buildDir "${CMAKE_CURRENT_BINARY_DIR}/${arch}")
- endif()
+get_configs(configs)
+get_architectures(archs)
+foreach(arch ${archs})
foreach(config ${configs})
- ##
- # BUILD.gn SETUP
- ##
- unset(buildGn)
- set(buildGn buildGnWebEngineCore_${config}_${arch})
+ ##
+ # BUILD.gn SETUP
+ ##
- add_gn_target(${buildGn} SOURCES DEFINES CXX_COMPILE_OPTIONS C_COMPILE_OPTIONS INCLUDES)
+ unset(buildGn)
+ set(buildGn core_${config}_${arch})
+ add_gn_target(${buildGn} ${config} ${arch} SOURCES DEFINES CXX_COMPILE_OPTIONS C_COMPILE_OPTIONS INCLUDES)
resolve_target_includes(gnIncludes WebEngineCore)
get_forward_declaration_macro(forwardDeclarationMacro)
@@ -283,12 +270,12 @@ foreach(arch ${GN_ARCHITECTURES})
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}/BUILD.gn)
+ ${WEBENGINE_ROOT_SOURCE_DIR}/src/core/configure/BUILD.root.gn.in ${buildDir}/${config}/${arch}/BUILD.gn)
- ##
- # GN PARAMETERS SETUP
- ##
+ ##
+ # GN PARAMETERS SETUP
+ ##
unset(gnArgArg)
@@ -299,7 +286,7 @@ foreach(arch ${GN_ARCHITECTURES})
append_pkg_config_setup(gnArgArg)
list(APPEND gnArgArg
- qtwebengine_target="${buildDir}/${config}:QtWebEngineCore"
+ qtwebengine_target="${buildDir}/${config}/${arch}:QtWebEngineCore"
enable_media_remoting=false
enable_message_center=false
enable_nacl=false
@@ -461,85 +448,47 @@ foreach(arch ${GN_ARCHITECTURES})
)
endif()
-
- ##
- # GN CALL
- ##
+ ##
+ # GN CALL
+ ##
execute_gn(gnArgArg)
- ##
- # NINJA CALL
- ##
-
- # config loop is a workaround to be able to add_custom_command per config
- # note this is fixed in CMAKE.3.20 and should be cleaned up when 3.20 is
- # the minimum cmake we support
-
- if(WIN32)
- set(sandboxOutput ${buildDir}/${config}/QtWebEngineCoreSandbox.lib)
- set(sandboxTarget QtWebEngineCoreSandbox)
- else()
- unset(sandboxOutput)
- unset(sandboxTarget)
- endif()
-
- execute_ninja(QtWebEngineCore ${sandboxTarget})
-
endforeach()
endforeach()
##
-# WEBENGINECORE SETUP
+# WEBENGINECORE
##
-if (QT_IS_MACOS_UNIVERSAL)
- target_include_directories(WebEngineCore PRIVATE
- ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_SYSTEM_PROCESSOR}/$<CONFIG>/gen
- ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_SYSTEM_PROCESSOR}/$<CONFIG>/gen/third_party/perfetto
- ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_SYSTEM_PROCESSOR}/$<CONFIG>/gen/third_party/perfetto/build_config
- )
-else()
- target_include_directories(WebEngineCore PRIVATE
- ${buildDir}/$<CONFIG>/gen
- ${buildDir}/$<CONFIG>/gen/third_party/perfetto
- ${buildDir}/$<CONFIG>/gen/third_party/perfetto/build_config
- )
-endif()
-
-if (QT_IS_MACOS_UNIVERSAL)
-
- set(buildDir "${CMAKE_CURRENT_BINARY_DIR}")
- foreach(config ${configs})
-
- extend_target_with_gn_libs(WebEngineCore ${config} QtWebEngineCore.cmake QtWebEngineCore.stamp)
- endforeach()
- # in the end, set the build dir back to one of the archs, to make sure the resources get copied alright
- set(buildDir "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_SYSTEM_PROCESSOR}")
+set(arch ${CMAKE_SYSTEM_PROCESSOR})
+target_include_directories(WebEngineCore PRIVATE
+ ${buildDir}/$<CONFIG>/${arch}/gen
+ ${buildDir}/$<CONFIG>/${arch}/gen/third_party/perfetto
+ ${buildDir}/$<CONFIG>/${arch}/gen/third_party/perfetto/build_config
+)
-else()
+add_gn_build_aritfacts_to_target(WebEngineCore QtWebEngineCore ON ${buildDir})
- if(WIN32)
- add_library(WebEngineCoreSandbox STATIC IMPORTED GLOBAL)
- add_dependencies(WebEngineCoreSandbox ninja)
- endif()
+##
+# SANDBOX
+##
+if(WIN32)
+ add_library(WebEngineCoreSandbox STATIC IMPORTED GLOBAL)
foreach(config ${configs})
-
- extend_target_with_gn_objects(WebEngineCore ${config} QtWebEngineCore.cmake QtWebEngineCore.stamp)
-
- if(WIN32)
- string(TOUPPER ${config} cfg)
- set(sandboxLibraryPath ${buildDir}/${config}/QtWebEngineCoreSandbox.lib)
- set_property(TARGET WebEngineCoreSandbox
- PROPERTY IMPORTED_LOCATION_${cfg} ${sandboxLibraryPath})
- set_source_files_properties(${sandboxLibraryPath} PROPERTIES GENERATED TRUE)
- add_custom_command(OUTPUT ${sandboxLibraryPath} DEPENDS ${sandboxOutput})
- add_custom_target(generate_sandbox_${cfg} DEPENDS ${sandboxLibraryPath})
- endif()
-
+ string(TOUPPER ${config} cfg)
+ add_ninja_command("" WebEngineCoreSandbox QtWebEngineCoreSandbox
+ QtWebEngineCoreSandbox.lib ${buildDir}/${config}/${arch}
+ )
+ set(sandboxLibraryPath ${buildDir}/${config}/${arch}/QtWebEngineCoreSandbox.lib)
+ set_property(TARGET WebEngineCoreSandbox
+ PROPERTY IMPORTED_LOCATION_${cfg} ${sandboxLibraryPath}
+ )
+ add_custom_target(sandboxLibrary_${config}
+ DEPENDS ${buildDir}/${config}/${arch}/QtWebEngineCoreSandbox.lib)
+ add_dependencies(WebEngineCoreSandbox sandboxLibrary_${config})
endforeach()
-
endif()
##
@@ -559,17 +508,17 @@ set(resourceList qtwebengine_resources.pak
get_install_config(config)
foreach(loc ${localeList})
- get_filename_component(locSourcePath ${buildDir}/${config}/qtwebengine_locales/${loc}.pak REALPATH)
+ 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}/${res} REALPATH)
+ 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}/icudtl.dat REALPATH)
+ get_filename_component(icuFile ${buildDir}/${config}/${arch}/icudtl.dat REALPATH)
list(APPEND resourceFiles ${icuFile})
endif()
@@ -588,7 +537,7 @@ if(QT_FEATURE_framework)
GENERATED TRUE
)
- add_custom_command(OUTPUT ${allResourceFiles} DEPENDS ${buildDir}/${config}/QtWebEngineCore.stamp)
+ add_custom_command(OUTPUT ${allResourceFiles} DEPENDS ${buildDir}/${config}/${arch}/QtWebEngineCore.stamp)
add_custom_target(generate_resources_${config} DEPENDS ${allResourceFiles})
else()
install(FILES ${localeFiles}
@@ -613,7 +562,7 @@ else()
add_custom_target(
install_resources_${config}
ALL
- DEPENDS ${buildDir}/${config}/QtWebEngineCore.stamp
+ DEPENDS ${buildDir}/${config}/${arch}/QtWebEngineCore.stamp
COMMAND ${CMAKE_COMMAND} -E make_directory
${CMAKE_INSTALL_PREFIX}/resources
COMMAND ${CMAKE_COMMAND} -E copy
@@ -622,7 +571,7 @@ else()
add_custom_target(
install_locales_${config}
ALL
- DEPENDS ${buildDir}/${config}/QtWebEngineCore.stamp
+ DEPENDS ${buildDir}/${config}/${arch}/QtWebEngineCore.stamp
COMMAND ${CMAKE_COMMAND} -E make_directory
${CMAKE_INSTALL_PREFIX}/translations/qtwebengine_locales
COMMAND ${CMAKE_COMMAND} -E copy
@@ -640,18 +589,8 @@ if(QT_FEATURE_webengine_spellchecker)
target_include_directories(${dict_target_name} PRIVATE
../3rdparty/chromium
../3rdparty/chromium/third_party/boringssl/src/include
- ${buildDir}/${config}/gen
+ ${buildDir}/${config}/${arch}/gen
)
- if(QT_IS_MACOS_UNIVERSAL)
- set(buildDir "${CMAKE_CURRENT_BINARY_DIR}")
- foreach(config ${configs})
- extend_target_with_gn_libs(${dict_target_name} ${config} convert_dict.cmake QtWebEngineCore.stamp)
- endforeach()
-
- else()
- foreach(config ${configs})
- extend_target_with_gn_objects(${dict_target_name} ${config} convert_dict.cmake "")
- endforeach()
- endif()
+ add_gn_build_aritfacts_to_target(${dict_target_name} convert_dict OFF ${buildDir})
endif()
diff --git a/src/core/configure/rsp.cmake.in b/src/core/configure/rsp.cmake.in
new file mode 100644
index 000000000..d24299007
--- /dev/null
+++ b/src/core/configure/rsp.cmake.in
@@ -0,0 +1,5 @@
+include(@CMAKE_FILE@)
+list(JOIN @CONFIG@_NINJA_OBJECTS " " objects)
+list(JOIN @CONFIG@_NINJA_ARCHIVES " " archives)
+file(WRITE ${CMAKE_CURRENT_LIST_DIR}/@TARGET@_gnobjects.rsp ${objects})
+file(WRITE ${CMAKE_CURRENT_LIST_DIR}/@TARGET@_gnarchives.rsp ${archives})