diff options
-rw-r--r-- | CMakeLists.txt | 1 | ||||
-rw-r--r-- | cmake/Functions.cmake | 63 | ||||
-rw-r--r-- | cmake/Gn.cmake | 1 | ||||
-rw-r--r-- | configure.cmake | 45 | ||||
-rw-r--r-- | src/pdf/CMakeLists.txt | 26 | ||||
-rw-r--r-- | src/pdf/configure.cmake | 1 | ||||
-rw-r--r-- | src/pdf/configure/BUILD.root.gn.in | 22 |
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@, |