summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Klocek <michal.klocek@qt.io>2021-12-14 16:42:50 +0100
committerMichal Klocek <michal.klocek@qt.io>2022-04-04 17:29:27 +0000
commita5ecc6826225e1dde4dcd39b265c2de85372d4a6 (patch)
tree34c1450537b02b2228d2c542fc329dc7cf9a9ebf
parente34a05ecf0b1e158130f8d4e2d6fcf2aa432cc4b (diff)
Add static builds for qtpdf
Add 3rdparty installed headers so static builds can use bundled qt libs. Fix static gn and archiver/librarian setup. Task-number: QTBUG-87154 Task-number: QTBUG-88614 Change-Id: Iad7682da92b558b500140f415acc0bc9c9a1c22e Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> (cherry picked from commit 99d77b9f1eed817cb3eae68d9e7224a01d55d656)
-rw-r--r--CMakeLists.txt1
-rw-r--r--cmake/Functions.cmake63
-rw-r--r--cmake/Gn.cmake1
-rw-r--r--configure.cmake45
-rw-r--r--src/pdf/CMakeLists.txt26
-rw-r--r--src/pdf/configure.cmake1
-rw-r--r--src/pdf/configure/BUILD.root.gn.in22
7 files changed, 136 insertions, 23 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a2ef9d65c..1ff51c868 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -24,6 +24,7 @@ find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS BuildInternals Co
find_package(Qt6 ${PROJECT_VERSION} CONFIG QUIET OPTIONAL_COMPONENTS
Gui Widgets Network OpenGL Quick Qml PrintSupport
WebChannel Positioning QuickControls2 Test QuickWidgets QuickTest WebSockets Designer
+ JpegPrivate PngPrivate HarfbuzzPrivate FreetypePrivate ZlibPrivate
)
if(MATRIX_BUILD AND NOT MATRIX_SUBBUILD AND NOT QT_SUPERBUILD)
diff --git a/cmake/Functions.cmake b/cmake/Functions.cmake
index 5da96d2f1..12e5ea03a 100644
--- a/cmake/Functions.cmake
+++ b/cmake/Functions.cmake
@@ -86,17 +86,31 @@ function(create_cxx_config cmakeTarget arch configFileName)
endif()
endif()
file(GENERATE
- OUTPUT $<CONFIG>/${arch}/${configFileName}
- CONTENT "\
- set(GN_INCLUDES \"$<TARGET_PROPERTY:INCLUDE_DIRECTORIES>\")\n\
- set(GN_DEFINES \"$<TARGET_PROPERTY:COMPILE_DEFINITIONS>\")\n\
- set(GN_LINK_OPTIONS \"$<TARGET_PROPERTY:LINK_OPTIONS>\")\n\
- set(GN_CXX_COMPILE_OPTIONS \"$<TARGET_PROPERTY:COMPILE_OPTIONS>\")\n\
- set(GN_MOC_PATH \"${mocFilePath}\")"
-# set(GN_LIBS $<TARGET_PROPERTY:LINK_LIBRARIES>)
- CONDITION $<COMPILE_LANGUAGE:CXX>
- TARGET ${cmakeTarget}
- )
+ OUTPUT $<CONFIG>/${arch}/${configFileName}
+ CONTENT "\
+ set(GN_INCLUDES \"$<TARGET_PROPERTY:INCLUDE_DIRECTORIES>\")\n\
+ set(GN_DEFINES \"$<TARGET_PROPERTY:COMPILE_DEFINITIONS>\")\n\
+ set(GN_LINK_OPTIONS \"$<TARGET_PROPERTY:LINK_OPTIONS>\")\n\
+ set(GN_CXX_COMPILE_OPTIONS \"$<TARGET_PROPERTY:COMPILE_OPTIONS>\")\n\
+ set(GN_MOC_PATH \"${mocFilePath}\")"
+# set(GN_LIBS $<TARGET_PROPERTY:LINK_LIBRARIES>)
+ CONDITION $<COMPILE_LANGUAGE:CXX>
+ TARGET ${cmakeTarget}
+ )
+endfunction()
+
+function(create_static_config cmakeTarget arch configFileName)
+ list(APPEND libs Png Jpeg Harfbuzz Freetype Zlib)
+ foreach(lib IN LISTS libs)
+ string(TOUPPER ${lib} out)
+ set(lib Qt::${lib}Private)
+ list(APPEND contents "set(GN_${out}_INCLUDES \"$<$<STREQUAL:$<TARGET_NAME_IF_EXISTS:${lib}>,${lib}>:$<TARGET_PROPERTY:${lib},INTERFACE_INCLUDE_DIRECTORIES>>\")")
+ endforeach()
+ list(JOIN contents "\n" contents)
+ file(GENERATE
+ OUTPUT $<CONFIG>/${arch}/${configFileName}
+ CONTENT "${contents}"
+ )
endfunction()
function(create_c_config cmakeTarget arch configFileName)
@@ -246,15 +260,21 @@ function(configure_gn_target sourceDir inFilePath outFilePath)
# GN_SOURCE_ROOT
get_filename_component(GN_SOURCE_ROOT "${sourceDir}" REALPATH)
- # GN_RSP_PREFIX
- get_property(GN_RSP_PREFIX DIRECTORY PROPERTY GN_RSP_PREFIX)
-
if(APPLE) # this runs in scrpit mode without qt-cmake so on MACOS here
recoverFrameworkBuild(GN_INCLUDE_DIRS GN_CFLAGS_C)
endif()
+ # Static setup
+ set(libs PNG JPEG FREETYPE HARFBUZZ ZLIB)
+ foreach(lib ${libs})
+ get_property(staticIncludes DIRECTORY PROPERTY GN_${lib}_INCLUDES)
+ foreach(is ${staticIncludes})
+ list(APPEND GN_${lib}_INCLUDES \"${is}\")
+ endforeach()
+ endforeach()
foreach(item GN_HEADERS GN_SOURCES GN_ARGS_DEFINES GN_DEFINES GN_ARGS_INCLUDES
- GN_INCLUDE_DIRS GN_CFLAGS_CC GN_CFLAGS_C)
+ GN_INCLUDE_DIRS GN_CFLAGS_CC GN_CFLAGS_C GN_PNG_INCLUDES GN_JPEG_INCLUDES
+ GN_FREETYPE_INCLUDES GN_HARFBUZZ_INCLUDES GN_ZLIB_INCLUDES)
string(REPLACE ";" ",\n " ${item} "${${item}}")
endforeach()
configure_file(${inFilePath} ${outFilePath} @ONLY)
@@ -397,16 +417,17 @@ function(extend_cmake_target target buildDir completeStatic)
set(objects_rsp "${buildDir}/${ninjaTarget}_objects.rsp")
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)
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"
+ "$<1:-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"
+ "$<1:-Wl,--no-fatal-warnings $<$<CONFIG:${config}>:@${libs_rsp}> -Wl,--no-fatal-warnings>"
)
endif()
@@ -1070,10 +1091,11 @@ function(add_gn_build_aritfacts_to_target cmakeTarget ninjaTarget module buildDi
endforeach()
endfunction()
-function(get_config_filenames c_config cxx_config target_config)
+function(get_config_filenames c_config cxx_config static_config target_config)
set(${target_config} gn_config_target.cmake PARENT_SCOPE)
set(${cxx_config} gn_config_cxx.cmake PARENT_SCOPE)
set(${c_config} gn_config_c.cmake PARENT_SCOPE)
+ set(${static_config} gn_static.cmake PARENT_SCOPE)
endfunction()
function(add_gn_command)
@@ -1081,7 +1103,7 @@ function(add_gn_command)
"" "CMAKE_TARGET;GN_TARGET;MODULE;BUILDDIR" "NINJA_TARGETS;GN_ARGS" "${ARGN}"
)
- get_config_filenames(cConfigFileName cxxConfigFileName targetConfigFileName)
+ get_config_filenames(cConfigFileName cxxConfigFileName staticConfigFileName targetConfigFileName)
set(gnArgArgFile ${arg_BUILDDIR}/args.gn)
list(JOIN arg_GN_ARGS "\n" arg_GN_ARGS)
@@ -1123,9 +1145,10 @@ function(add_gn_command)
endfunction()
function(create_cxx_configs cmakeTarget arch)
- get_config_filenames(cConfigFileName cxxConfigFileName targetConfigFileName)
+ get_config_filenames(cConfigFileName cxxConfigFileName staticConfigFileName targetConfigFileName)
create_c_config(${cmakeTarget} ${arch} ${cConfigFileName})
create_cxx_config(${cmakeTarget} ${arch} ${cxxConfigFileName})
+ create_static_config(${cmakeTarget} ${arch} ${staticConfigFileName})
endfunction()
# targets to gather per config / architecture targets
diff --git a/cmake/Gn.cmake b/cmake/Gn.cmake
index 399115611..7e40640e6 100644
--- a/cmake/Gn.cmake
+++ b/cmake/Gn.cmake
@@ -30,6 +30,7 @@ endif()
init_gn_config(${buildDir}/gn_config_target.cmake)
read_gn_config(${buildDir}/gn_config_cxx.cmake)
read_gn_config(${buildDir}/gn_config_c.cmake)
+read_gn_config(${buildDir}/gn_static.cmake)
configure_gn_target(
"${sourceDir}"
diff --git a/configure.cmake b/configure.cmake
index eca387cec..12832c1c2 100644
--- a/configure.cmake
+++ b/configure.cmake
@@ -295,6 +295,12 @@ qt_feature("webengine-system-zlib" PRIVATE
LABEL "zlib"
CONDITION UNIX AND QT_FEATURE_system_zlib AND ZLIB_FOUND
)
+qt_feature("webengine-qt-zlib" PRIVATE
+ LABEL "qtzlib"
+ CONDITION QT_FEATURE_static
+ AND TARGET Qt::Gui
+ AND NOT QT_FEATURE_system_zlib
+)
qt_feature("webengine-system-minizip" PRIVATE
LABEL "minizip"
CONDITION UNIX AND MINIZIP_FOUND
@@ -316,18 +322,47 @@ qt_feature("webengine-system-libpng" PRIVATE
LABEL "png"
CONDITION UNIX AND TARGET Qt::Gui AND PNG_FOUND AND QT_FEATURE_system_png
)
+qt_feature("webengine-qt-libpng" PRIVATE
+ LABEL "qtpng"
+ CONDITION QT_FEATURE_static
+ AND TARGET Qt::Gui
+ AND QT_FEATURE_png
+ AND NOT QT_FEATURE_system_png
+)
qt_feature("webengine-system-libjpeg" PRIVATE
LABEL "jpeg"
CONDITION UNIX AND TARGET Qt::Gui AND TEST_jpeg AND QT_FEATURE_system_jpeg
)
+qt_feature("webengine-qt-libjpeg" PRIVATE
+ LABEL "qtjpeg"
+ CONDITION QT_FEATURE_static
+ AND TARGET Qt::Gui
+ AND QT_FEATURE_jpeg
+ AND NOT QT_FEATURE_system_jpeg
+ AND FALSE # FIXME requires qtbase dep update
+)
qt_feature("webengine-system-harfbuzz" PRIVATE
LABEL "harfbuzz"
CONDITION UNIX AND TARGET Qt::Gui AND HARFBUZZ_FOUND AND QT_FEATURE_system_harfbuzz
)
+qt_feature("webengine-qt-harfbuzz" PRIVATE
+ LABEL "qtpng"
+ CONDITION QT_FEATURE_static
+ AND TARGET Qt::Gui
+ AND QT_FEATURE_harfbuzz
+ AND NOT QT_FEATURE_system_harfbuzz
+)
qt_feature("webengine-system-freetype" PRIVATE
LABEL "freetype"
CONDITION UNIX AND TARGET Qt::Gui AND TEST_freetype AND QT_FEATURE_system_freetype
)
+qt_feature("webengine-qt-freetype" PRIVATE
+ LABEL "qtfreetype"
+ CONDITION QT_FEATURE_static
+ AND TARGET Qt::Gui
+ AND QT_FEATURE_freetype
+ AND NOT QT_FEATURE_system_freetype
+)
qt_feature("webengine-system-libpci" PRIVATE
LABEL "libpci"
CONDITION UNIX AND LIBPCI_FOUND
@@ -533,6 +568,16 @@ if(UNIX)
qt_configure_add_summary_entry(ARGS "webengine-system-libpci")
qt_configure_end_summary_section()
endif()
+
+if(QT_FEATURE_static)
+ qt_configure_add_summary_section(NAME "Qt 3rdparty libs")
+ qt_configure_add_summary_entry(ARGS "webengine-qt-freetype")
+ qt_configure_add_summary_entry(ARGS "webengine-qt-harfbuzz")
+ qt_configure_add_summary_entry(ARGS "webengine-qt-libpng")
+ qt_configure_add_summary_entry(ARGS "webengine-qt-libjpeg")
+ qt_configure_add_summary_entry(ARGS "webengine-qt-zlib")
+endif()
+
# << Optional system libraries
qt_configure_end_summary_section()
# < Qt WebEngine Build Features
diff --git a/src/pdf/CMakeLists.txt b/src/pdf/CMakeLists.txt
index 794865137..fe8688648 100644
--- a/src/pdf/CMakeLists.txt
+++ b/src/pdf/CMakeLists.txt
@@ -67,7 +67,6 @@ addSyncTargets(pdf)
get_configs(configs)
get_architectures(archs)
-
foreach(arch ${archs})
foreach(config ${configs})
@@ -77,7 +76,9 @@ foreach(arch ${archs})
set(buildGn pdf_${config}_${arch})
add_gn_target(${buildGn} ${config} ${arch}
- SOURCES DEFINES CXX_COMPILE_OPTIONS C_COMPILE_OPTIONS INCLUDES MOC_PATH
+ SOURCES DEFINES CXX_COMPILE_OPTIONS C_COMPILE_OPTIONS
+ INCLUDES MOC_PATH PNG_INCLUDES JPEG_INCLUDES HARFBUZZ_INCLUDES
+ FREETYPE_INCLUDES ZLIB_INCLUDES
)
resolve_target_includes(gnIncludes Pdf)
get_forward_declaration_macro(forwardDeclarationMacro)
@@ -100,6 +101,11 @@ foreach(arch ${archs})
list(APPEND gnArgArg
qtwebengine_target="${buildDir}/${config}/${arch}:QtPdf"
+ qt_libpng_config="${buildDir}/${config}/${arch}:qt_libpng_config"
+ qt_libjpeg_config="${buildDir}/${config}/${arch}:qt_libjpeg_config"
+ qt_harfbuzz_config="${buildDir}/${config}/${arch}:qt_harfbuzz_config"
+ qt_freetype_config="${buildDir}/${config}/${arch}:qt_freetype_config"
+ enable_ipc_fuzzer=false
enable_remoting=false
enable_resource_allowlist_generation=false
enable_web_speech=false
@@ -147,6 +153,22 @@ foreach(arch ${archs})
ARGS pdf_enable_xfa_tiff
CONDITION QT_FEATURE_pdf_xfa_tiff
)
+ extend_gn_list(gnArgArg
+ ARGS pdfium_use_qt_libpng
+ CONDITION QT_FEATURE_webengine_qt_libpng
+ )
+ extend_gn_list(gnArgArg
+ ARGS use_qt_libjpeg
+ CONDITION QT_FEATURE_webengine_qt_libjpeg
+ )
+ extend_gn_list(gnArgArg
+ ARGS use_qt_harfbuzz
+ CONDITION QT_FEATURE_webengine_qt_harfbuzz
+ )
+ extend_gn_list(gnArgArg
+ ARGS use_qt_freetype
+ CONDITION QT_FEATURE_webengine_qt_freetype
+ )
add_gn_command(
CMAKE_TARGET Pdf
diff --git a/src/pdf/configure.cmake b/src/pdf/configure.cmake
index ce1203205..223d860f3 100644
--- a/src/pdf/configure.cmake
+++ b/src/pdf/configure.cmake
@@ -1,7 +1,6 @@
qt_feature("pdf-v8" PRIVATE
LABEL "Support V8"
PURPOSE "Enables javascript support."
- AUTODETECT false
CONDITION NOT IOS
)
qt_feature("pdf-xfa" PRIVATE
diff --git a/src/pdf/configure/BUILD.root.gn.in b/src/pdf/configure/BUILD.root.gn.in
index a3cd32a23..68089f8cf 100644
--- a/src/pdf/configure/BUILD.root.gn.in
+++ b/src/pdf/configure/BUILD.root.gn.in
@@ -1,5 +1,27 @@
import("//build/config/features.gni")
+config("qt_libpng_config") {
+ include_dirs = [ @GN_PNG_INCLUDES@ ]
+ defines = [ "USE_SYSTEM_LIBPNG" ]
+}
+config ("qt_libjpeg_config") {
+ include_dirs = [ @GN_JPEG_INCLUDES@ ]
+}
+config("qt_harfbuzz_config") {
+ visibility = [
+ "//third_party:freetype_harfbuzz",
+ "//third_party/freetype:freetype_source",
+ ]
+ include_dirs = [ @GN_HARFBUZZ_INCLUDES@ ]
+}
+config("qt_freetype_config") {
+ visibility = [
+ "//third_party:freetype_harfbuzz",
+ "//third_party/harfbuzz-ng:harfbuzz_source",
+ ]
+ include_dirs = [ @GN_FREETYPE_INCLUDES@ ]
+}
+
config("QtPdf_config") {
cflags = [
@GN_CFLAGS_C@,