summaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
authorMichal Klocek <michal.klocek@qt.io>2022-01-31 15:11:22 +0100
committerMichal Klocek <michal.klocek@qt.io>2022-02-04 18:28:07 +0100
commit8e549e6e0ccd6078b3bd2e38b87337fd367dec55 (patch)
tree654ae91c1aac94b6b19e6834e1dd27e92ddd0ec4 /cmake
parent0f2103ef375c6fbae65b53877055951a03000a4a (diff)
downloadqtwebengine-8e549e6e0ccd6078b3bd2e38b87337fd367dec55.tar.gz
Introduce gn complete static lib target for qtpdf
With 6.x we have gn-cmake integration which allows now in case of static builds to switch gn target output to static_library with 'complete static' option instead of shared_library. This way we can avoid installing dependencies in form of internal static Chromium archives as it was done in 5.15 in case of static builds. Unfortunately 'complete static' option can not be used with QtWebEngineCore build as it will exceed 4Gb static archive limitation on Windows, however it will work fine with QtPdf. Note the qtbase 3rdparty static libs have to be still installed in case of qt static build, this patch only eliminates need for Chromium specific ones. Task-number: QTBUG-88614 Pick-to: 6.3 6.2 Change-Id: I6fc4ce48c79a1631b013d0b29c190c62280f7304 Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu>
Diffstat (limited to 'cmake')
-rw-r--r--cmake/Functions.cmake119
1 files changed, 63 insertions, 56 deletions
diff --git a/cmake/Functions.cmake b/cmake/Functions.cmake
index 9f5344ad3..7d3dd493c 100644
--- a/cmake/Functions.cmake
+++ b/cmake/Functions.cmake
@@ -356,34 +356,31 @@ function(add_ninja_target target cmakeTarget ninjaTarget config arch buildDir)
)
endfunction()
-function(copy_response_files target)
+function(get_copy_of_response_file result target rsp)
get_target_property(config ${target} CONFIG)
get_target_property(ninjaTarget ${target} NINJA_TARGET)
get_target_property(cmakeTarget ${target} CMAKE_TARGET)
- list(REMOVE_ITEM ARGN ${target})
- foreach(rsp IN ITEMS ${ARGN})
- set(rsp_dst "CMakeFiles_${ninjaTarget}_${config}_${rsp}.rsp")
- set(rsp_src "${${rsp}_rsp}")
- if(NOT QT_SUPERBUILD)
- set(rsp_output ${PROJECT_BINARY_DIR}/${rsp_dst})
- else()
- set(rsp_output ${PROJECT_BINARY_DIR}/../${rsp_dst})
- endif()
- add_custom_command(
- OUTPUT ${rsp_output}
- COMMAND ${CMAKE_COMMAND} -E copy ${rsp_src} ${rsp_output}
- DEPENDS ${rsp_src}
- USES_TERMINAL
- )
- set(${rsp}_rsp ${rsp_dst} PARENT_SCOPE)
- add_custom_target(${cmakeTarget}_${rsp}_copy_${config}
- DEPENDS ${rsp_output}
- )
- add_dependencies(${cmakeTarget} ${cmakeTarget}_${rsp}_copy_${config})
- endforeach()
+ set(rsp_dst "CMakeFiles_${ninjaTarget}_${config}_${rsp}.rsp")
+ set(rsp_src "${${result}}")
+ if(NOT QT_SUPERBUILD)
+ set(rsp_output ${PROJECT_BINARY_DIR}/${rsp_dst})
+ else()
+ set(rsp_output ${PROJECT_BINARY_DIR}/../${rsp_dst})
+ endif()
+ add_custom_command(
+ OUTPUT ${rsp_output}
+ COMMAND ${CMAKE_COMMAND} -E copy ${rsp_src} ${rsp_output}
+ DEPENDS ${rsp_src}
+ USES_TERMINAL
+ )
+ set(${result} ${rsp_dst} PARENT_SCOPE)
+ add_custom_target(${cmakeTarget}_${rsp}_copy_${config}
+ DEPENDS ${rsp_output}
+ )
+ add_dependencies(${cmakeTarget} ${cmakeTarget}_${rsp}_copy_${config})
endfunction()
-function(extend_cmake_target target buildDir)
+function(extend_cmake_target target buildDir completeStatic)
get_target_property(config ${target} CONFIG)
get_target_property(ninjaTarget ${target} NINJA_TARGET)
get_target_property(cmakeTarget ${target} CMAKE_TARGET)
@@ -393,12 +390,12 @@ function(extend_cmake_target target buildDir)
set(archives_rsp "${buildDir}/${ninjaTarget}_archives.rsp")
set(libs_rsp "${buildDir}/${ninjaTarget}_libs.rsp")
if(LINUX)
- target_link_options(${cmakeTarget} PRIVATE
- "$<$<CONFIG:${config}>:@${objects_rsp}>"
- )
- target_link_libraries(${cmakeTarget} PRIVATE
- "-Wl,--start-group $<$<CONFIG:${config}>:@${archives_rsp}> -Wl,--end-group"
- )
+ target_link_options(${cmakeTarget} PRIVATE "$<$<CONFIG:${config}>:@${objects_rsp}>")
+ if(NOT completeStatic)
+ target_link_libraries(${cmakeTarget} PRIVATE
+ "-Wl,--start-group $<$<CONFIG:${config}>:@${archives_rsp}> -Wl,--end-group"
+ )
+ endif()
# linker here options are just to prevent processing it by cmake
target_link_libraries(${cmakeTarget} PRIVATE
"-Wl,--no-fatal-warnings $<$<CONFIG:${config}>:@${libs_rsp}> -Wl,--no-fatal-warnings"
@@ -406,51 +403,61 @@ function(extend_cmake_target target buildDir)
endif()
if(MACOS)
- target_link_options(${cmakeTarget} PRIVATE
- "$<$<CONFIG:${config}>:@${objects_rsp}>"
- "$<$<CONFIG:${config}>:@${archives_rsp}>"
- "$<$<CONFIG:${config}>:@${libs_rsp}>"
- )
+ target_link_options(${cmakeTarget} PRIVATE "$<$<CONFIG:${config}>:@${objects_rsp}>")
+ if(NOT completeStatic)
+ target_link_options(${cmakeTarget} PRIVATE "$<$<CONFIG:${config}>:@${archives_rsp}>")
+ endif()
+ target_link_options(${cmakeTarget} PRIVATE "$<$<CONFIG:${config}>:@${libs_rsp}>")
endif()
if(WIN32)
- copy_response_files(${target} objects archives libs)
- target_link_options(${cmakeTarget} PRIVATE
- "$<$<CONFIG:${config}>:@${objects_rsp}>"
- "$<$<CONFIG:${config}>:@${archives_rsp}>"
- "$<$<CONFIG:${config}>:@${libs_rsp}>"
- )
+ get_copy_of_response_file(objects_rsp ${target} objects)
+ target_link_options(${cmakeTarget} PRIVATE "$<$<CONFIG:${config}>:@${objects_rsp}>")
+ if(NOT completeStatic)
+ get_copy_of_response_file(archives_rsp ${target} archives)
+ target_link_options(${cmakeTarget} PRIVATE "$<$<CONFIG:${config}>:@${archives_rsp}>")
+ endif()
+ get_copy_of_response_file(libs_rsp ${target} libs)
+ target_link_options(${cmakeTarget} PRIVATE "$<$<CONFIG:${config}>:@${libs_rsp}>")
# we need libs rsp also when linking process with sandbox lib
set_property(TARGET ${cmakeTarget} PROPERTY LIBS_RSP ${libs_rsp})
endif()
endfunction()
-function(add_rsp_command target buildDir)
+function(add_rsp_command target buildDir completeStatic)
get_target_property(config ${target} CONFIG)
get_target_property(arch ${target} ARCH)
get_target_property(ninjaTarget ${target} NINJA_TARGET)
get_target_property(cmakeTarget ${target} CMAKE_TARGET)
string(TOUPPER ${config} cfg)
+ set(objects_rsp "${buildDir}/${ninjaTarget}_objects.rsp")
+ set(objects_out "${buildDir}/${cmakeTarget}_objects.o")
+ if(NOT completeStatic)
+ set(archives_rsp "${buildDir}/${ninjaTarget}_archives.rsp")
+ set(archives_out "${buildDir}/${cmakeTarget}_archives.o")
+ set(archives_command
+ COMMAND clang++ -r -nostdlib -arch ${arch}
+ -o ${archives_out}
+ -Wl,-keep_private_externs
+ -Wl,-all_load
+ @${archives_rsp}
+ )
+ endif()
add_custom_command(
OUTPUT ${buildDir}/${cmakeTarget}.a
- BYPRODUCTS
- ${buildDir}/${cmakeTarget}_objs.o
- ${buildDir}/${cmakeTarget}_arcs.o
+ BYPRODUCTS ${objects_out} ${archives_out}
COMMAND clang++ -r -nostdlib -arch ${arch}
- -o ${buildDir}/${cmakeTarget}_objs.o
+ -o ${objects_out}
-Wl,-keep_private_externs
- @${buildDir}/${ninjaTarget}_objects.rsp
- COMMAND clang++ -r -nostdlib -arch ${arch}
- -o ${buildDir}/${cmakeTarget}_arcs.o
- -Wl,-keep_private_externs
- -Wl,-all_load
- @${buildDir}/${ninjaTarget}_archives.rsp
+ @${objects_rsp}
+ ${archives_command}
COMMAND ar -crs
${buildDir}/${cmakeTarget}.a
- ${buildDir}/${cmakeTarget}_objs.o
- ${buildDir}/${cmakeTarget}_arcs.o
+ ${objects_out}
+ ${archives_out}
DEPENDS
${buildDir}/${ninjaTarget}.stamp
WORKING_DIRECTORY "${buildDir}/../../.."
+ COMMENT "Creating intermediate archives for ${cmakeTarget}/${config}/${arch}"
USES_TERMINAL
VERBATIM
COMMAND_EXPAND_LISTS
@@ -932,7 +939,7 @@ function(get_architectures result)
endif()
endfunction()
-function(add_gn_build_aritfacts_to_target cmakeTarget ninjaTarget module buildDir)
+function(add_gn_build_aritfacts_to_target cmakeTarget ninjaTarget module buildDir completeStatic)
# 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
@@ -959,9 +966,9 @@ function(add_gn_build_aritfacts_to_target cmakeTarget ninjaTarget module buildDi
LINK_DEPENDS ${buildDir}/${config}/${arch}/${ninjaTarget}.stamp
)
if(QT_IS_MACOS_UNIVERSAL)
- add_rsp_command(${target} ${buildDir}/${config}/${arch})
+ add_rsp_command(${target} ${buildDir}/${config}/${arch} ${completeStatic})
else()
- extend_cmake_target(${target} ${buildDir}/${config}/${arch})
+ extend_cmake_target(${target} ${buildDir}/${config}/${arch} ${completeStatic})
endif()
endforeach()
if(QT_IS_MACOS_UNIVERSAL)