From 06fc47309609b9be735817da4f3bdf2e30e0b99c Mon Sep 17 00:00:00 2001 From: Michal Klocek Date: Tue, 26 Apr 2022 21:18:44 +0200 Subject: Add support for universal builds for qtwebengine and qtpdf As 5.15 is in maintenance mode add basic support for universal build without doing major refactors. The popper implementation should unify build layout instead of adding "isUniversal()" hacks. Add intermediate build files per architecture for Chromium build part and lipo them before final module linking. Task-number: QTBUG-85279 Change-Id: Iebfd7a277b23c1b10c8719041c5959fd9d5e2f06 Reviewed-by: Qt CI Bot Reviewed-by: Allan Sandfeld Jensen --- examples/webenginewidgets/webenginewidgets.pro | 4 +- mkspecs/features/functions.prf | 5 ++ mkspecs/features/gn_generator.prf | 9 +-- src/buildtools/config/lipo.pri | 85 ++++++++++++++++++++++++++ src/buildtools/config/lipo_linking.pri | 15 +++++ src/core/api/core_api.pro | 7 ++- src/core/core.pro | 6 ++ src/core/core_chromium.pri | 10 ++- src/core/core_gn_config.pri | 10 ++- src/core/core_lipo.pro | 9 +++ src/core/core_module.pro | 14 ++++- src/core/gn_run.pro | 41 +++++++++---- src/pdf/gn_run.pro | 44 ++++++++----- src/pdf/pdf.pro | 18 +++++- src/pdf/pdfcore.pro | 8 ++- src/pdf/pdfcore_generator.pro | 8 ++- src/pdf/pdfcore_lipo.pro | 5 ++ src/src.pro | 2 +- tests/auto/widgets/widgets.pro | 4 +- 19 files changed, 256 insertions(+), 48 deletions(-) create mode 100644 src/buildtools/config/lipo.pri create mode 100644 src/buildtools/config/lipo_linking.pri create mode 100644 src/core/core_lipo.pro create mode 100644 src/pdf/pdfcore_lipo.pro diff --git a/examples/webenginewidgets/webenginewidgets.pro b/examples/webenginewidgets/webenginewidgets.pro index deb42a8cd..31a214ceb 100644 --- a/examples/webenginewidgets/webenginewidgets.pro +++ b/examples/webenginewidgets/webenginewidgets.pro @@ -1,3 +1,5 @@ +load(functions) + include($$QTWEBENGINE_OUT_ROOT/src/core/qtwebenginecore-config.pri) # workaround for QTBUG-68093 QT_FOR_CONFIG += webenginecore webenginecore-private @@ -20,7 +22,7 @@ qtConfig(webengine-printing-and-pdf) { SUBDIRS += printme html2pdf } -qtConfig(webengine-spellchecker):!qtConfig(webengine-native-spellchecker):!cross_compile { +qtConfig(webengine-spellchecker):!qtConfig(webengine-native-spellchecker):!cross_compile:!isUniversal() { SUBDIRS += spellchecker } else { message("Spellcheck example will not be built because it depends on usage of Hunspell dictionaries.") diff --git a/mkspecs/features/functions.prf b/mkspecs/features/functions.prf index 2750d7071..7f630588a 100644 --- a/mkspecs/features/functions.prf +++ b/mkspecs/features/functions.prf @@ -5,6 +5,11 @@ defineReplace(getConfigDir) { return("debug") } +defineTest(isUniversal) { + macos:count(QT_ARCHS, 1, >):return(true) + return(false) +} + defineReplace(getChromiumSrcDir) { exists($$QTWEBENGINE_ROOT/.git): git_chromium_src_dir = $$system("git config qtwebengine.chromiumsrcdir") # Fall back to the snapshot path if git does not know about chromium sources (i.e. init-repository.py has not been used) diff --git a/mkspecs/features/gn_generator.prf b/mkspecs/features/gn_generator.prf index a83b59847..306e58db1 100644 --- a/mkspecs/features/gn_generator.prf +++ b/mkspecs/features/gn_generator.prf @@ -27,7 +27,7 @@ defineReplace(filter_flag_values) { return($$value_to_check) } -isEmpty(GN_FILE): GN_FILE = $$system_path($$_PRO_FILE_PWD_/BUILD.gn) +isEmpty(GN_FILES): GN_FILES = $$system_path($$_PRO_FILE_PWD_/BUILD.gn) isEmpty(GN_RUN_BINARY_SCRIPT): GN_RUN_BINARY_SCRIPT = "//build/gn_run_binary.py" isEmpty(GN_FIND_MOCABLES_SCRIPT): GN_FIND_MOCABLES_SCRIPT = "//build/gn_find_mocables.py" @@ -260,12 +260,13 @@ GN_CONTENTS += "}" for (inc, GN_INCLUDES): GN_CONTENTS += $$cat($$inc,lines) } -build_pass|!debug_and_release: write_file($$GN_FILE, GN_CONTENTS) - +build_pass|!debug_and_release { + for(gnFile, GN_FILES): write_file($$gnFile, GN_CONTENTS) +} # The generated Makefile shouldn't build anything by itself, just re-run qmake if necessary TEMPLATE = aux SOURCES = HEADERS = RESOURCES = -QMAKE_DISTCLEAN += $$GN_FILE +QMAKE_DISTCLEAN += $$GN_FILES diff --git a/src/buildtools/config/lipo.pri b/src/buildtools/config/lipo.pri new file mode 100644 index 000000000..f065c8ee9 --- /dev/null +++ b/src/buildtools/config/lipo.pri @@ -0,0 +1,85 @@ +for(arch, QT_ARCHS) { + + linking_pri = $$OUT_PWD/$$arch/$$getConfigDir()/$${TARGET}.pri + + !include($$linking_pri) { + message("Could not find the linking information that gn should have generated.") + } + + # Do not precompile any headers. We are only interested in the linker step. + PRECOMPILED_HEADER = + + isEmpty(NINJA_OBJECTS): error("Missing object files from linking pri.") + isEmpty(NINJA_LFLAGS): error("Missing linker flags from linking pri") + isEmpty(NINJA_ARCHIVES): error("Missing archive files from linking pri") + isEmpty(NINJA_LIBS): error("Missing library files from linking pri") + NINJA_OBJECTS = $$eval($$list($$NINJA_OBJECTS)) + # Do manual response files + + + RSP_OBJECT_FILE = $$OUT_PWD/$$arch/$$getConfigDir()/$${TARGET}_objects.rsp + for(object, NINJA_OBJECTS): RSP_OBJECTS_CONTENT += $$object + write_file($$RSP_OBJECT_FILE, RSP_OBJECTS_CONTENT) + RSP_ARCHIVE_FILE = $$OUT_PWD/$$arch/$$getConfigDir()/$${TARGET}_archives.rsp + for(archive, NINJA_ARCHIVES): RSP_ARCHIVES_CONTENT += $$archive + write_file($$RSP_ARCHIVE_FILE, RSP_ARCHIVES_CONTENT) + RSP_LIBS_FILE = $$OUT_PWD/$$arch/$$getConfigDir()/$${TARGET}_libs.rsp + for(lib, NINJA_LIBS): RSP_LIBS_CONTENT += $$lib + write_file($$RSP_LIBS_FILE, RSP_LIBS_CONTENT) + + unset(RSP_OBJECTS_CONTENT) + unset(RSP_ARCHIVES_CONTENT) + unset(RSP_LIBS_CONTENT) + unset(NINJA_OBJECTS) + unset(NINJA_LFLAGS) + unset(NINJA_ARCHIVES) + unset(NINJA_LIBS) +} + +LIPO_OUT_FILE = $$OUT_PWD/$$getConfigDir()/$${TARGET}.a +INPUT_FILE = . +lipo.name = lipo +lipo.output = $$LIPO_OUT_FILE +lipo.input = INPUT_FILE +lipo.CONFIG += target_predeps no_link +lipo.commands = lipo -create -output $$LIPO_OUT_FILE +QMAKE_EXTRA_COMPILERS += lipo + +include($$QTWEBENGINE_ROOT/src/buildtools/config/mac_osx.pri) + +for(arch, QT_ARCHS) { + + RSP_OBJECT_FILE = $$OUT_PWD/$$arch/$$getConfigDir()/$${TARGET}_objects.rsp + OBJECT_FILE = $$OUT_PWD/$$arch/$$getConfigDir()/$${TARGET}_objects.o + RSP_ARCHIVE_FILE = $$OUT_PWD/$$arch/$$getConfigDir()/$${TARGET}_archives.rsp + ARCHIVE_FILE = $$OUT_PWD/$$arch/$$getConfigDir()/$${TARGET}_archives.o + OUT_FILE = $$OUT_PWD/$$arch/$$getConfigDir()/$${TARGET}.a + + intermediate_archive_$${arch}.name = build_intermediate_archive_$${arch} + intermediate_archive_$${arch}.output= $$OUT_FILE + intermediate_archive_$${arch}.input = INPUT_FILE + intermediate_archive_$${arch}.depends = $$RSP_OBJECT_FILE $$RSP_ARCHIVE_FILE $$NINJA_TARGETDEPS + intermediate_archive_$${arch}.CONFIG += target_predeps no_link + intermediate_archive_$${arch}.commands = \ + clang++ -r -nostdlib -arch $$arch \ + -mmacosx-version-min=$${QMAKE_MACOSX_DEPLOYMENT_TARGET} \ + -o $$OBJECT_FILE \ + -Wl,-keep_private_externs \ + @$$RSP_OBJECT_FILE ;\ + $$QMAKE_CC -r -nostdlib -arch $$arch \ + -mmacosx-version-min=$${QMAKE_MACOSX_DEPLOYMENT_TARGET} \ + -o $$ARCHIVE_FILE \ + -Wl,-keep_private_externs \ + -Wl,-all_load \ + @$$RSP_ARCHIVE_FILE ;\ + ar -crs $$OUT_FILE $$OBJECT_FILE $$ARCHIVE_FILE + lipo.depends += $$OUT_FILE + lipo.commands += $$OUT_FILE + QMAKE_EXTRA_COMPILERS += intermediate_archive_$$arch + + unset(RSP_OBJECT_FILE) + unset(OBJECT_FILE) + unset(RSP_ARCHVIE_FILE) + unset(OUT_FILE) +} + diff --git a/src/buildtools/config/lipo_linking.pri b/src/buildtools/config/lipo_linking.pri new file mode 100644 index 000000000..c65fef059 --- /dev/null +++ b/src/buildtools/config/lipo_linking.pri @@ -0,0 +1,15 @@ +include($$QTWEBENGINE_OUT_ROOT/src/buildtools/qtbuildtools-config.pri) +QT_FOR_CONFIG += buildtools-private + +LIPO_OUT_FILE = $$OUT_PWD/$$getConfigDir()/$${TARGET}.a +!static { + QMAKE_LFLAGS += $${LIPO_OUT_FILE} +} else { + LIBS_PRIVATE += $${LIPO_OUT_FILE} +} + +LIBS_PRIVATE += @$$OUT_PWD/$$QT_ARCH/$$getConfigDir()/$${TARGET}_libs.rsp + +qtConfig(webengine-noexecstack): QMAKE_LFLAGS += -Wl,-z,noexecstack + +POST_TARGETDEPS += $$LIPO_OUT_FILE diff --git a/src/core/api/core_api.pro b/src/core/api/core_api.pro index 2ddd0d69f..28d5586ba 100644 --- a/src/core/api/core_api.pro +++ b/src/core/api/core_api.pro @@ -23,7 +23,12 @@ DEFINES += \ NOMINMAX CHROMIUM_SRC_DIR = $$QTWEBENGINE_ROOT/$$getChromiumSrcDir() -CHROMIUM_GEN_DIR = $$OUT_PWD/../$$getConfigDir()/gen + +isUniversal() { + CHROMIUM_GEN_DIR = $$OUT_PWD/../$$QT_ARCH/$$getConfigDir()/gen +} else { + CHROMIUM_GEN_DIR = $$OUT_PWD/../$$getConfigDir()/gen +} INCLUDEPATH += $$QTWEBENGINE_ROOT/src/core \ $$CHROMIUM_GEN_DIR \ $$CHROMIUM_SRC_DIR/third_party/abseil-cpp \ diff --git a/src/core/core.pro b/src/core/core.pro index f2d3fd307..fa1d7f6a7 100644 --- a/src/core/core.pro +++ b/src/core/core.pro @@ -7,9 +7,13 @@ TEMPLATE = subdirs core_headers.file = core_headers.pro core_api.file = api/core_api.pro +core_lipo.file = core_lipo.pro +core_lipo.depends = gn_run + # This will take the compile output of ninja, and link+deploy the final binary. core_module.file = core_module.pro core_module.depends = core_api +isUniversal(): core_module.depends += core_lipo core_generator.file = core_generator.pro core_generator.depends = core_headers @@ -44,5 +48,7 @@ core_project.depends = gn_run core_api \ core_module + isUniversal(): SUBDIRS += core_lipo + false: SUBDIRS += core_project } diff --git a/src/core/core_chromium.pri b/src/core/core_chromium.pri index e978d20a1..a846f2fbc 100644 --- a/src/core/core_chromium.pri +++ b/src/core/core_chromium.pri @@ -21,9 +21,13 @@ DEFINES += QT_NO_KEYWORDS \ BUILDING_CHROMIUM # Ensure that response files, generated by qtbase/mkspecs/features/moc.prf, are found by moc. -MOC_DIR = $$OUT_PWD/$$getConfigDir()/.moc -RCC_DIR = $$OUT_PWD/$$getConfigDir()/.rcc - +isUniversal() { + MOC_DIR = $$OUT_PWD/$$QT_ARCH/$$getConfigDir()/.moc + RCC_DIR = $$OUT_PWD/$$QT_ARCH/$$getConfigDir()/.rcc +} else { + MOC_DIR = $$OUT_PWD/$$getConfigDir()/.moc + RCC_DIR = $$OUT_PWD/$$getConfigDir()/.rcc +} # Assume that we want mobile touch and low-end hardware behaviors # whenever we are cross compiling. qtConfig(webengine-embedded-build): DEFINES += QTWEBENGINE_EMBEDDED_SWITCHES diff --git a/src/core/core_gn_config.pri b/src/core/core_gn_config.pri index 2b8f2e18f..379bbac94 100644 --- a/src/core/core_gn_config.pri +++ b/src/core/core_gn_config.pri @@ -1,10 +1,16 @@ CONFIG = gn_generator $$CONFIG GN_SRC_DIR = $$PWD -GN_FILE = $$OUT_PWD/$$getConfigDir()/BUILD.gn +isUniversal() { + for(arch, QT_ARCHS) { + GN_FILES += $$OUT_PWD/$$arch/$$getConfigDir()/BUILD.gn + } +} else { + GN_FILES = $$OUT_PWD/$$getConfigDir()/BUILD.gn +} GN_FIND_MOCABLES_SCRIPT = $$shell_path($$QTWEBENGINE_ROOT/tools/scripts/gn_find_mocables.py) GN_RUN_BINARY_SCRIPT = $$shell_path($$QTWEBENGINE_ROOT/tools/scripts/gn_run_binary.py) GN_IMPORTS = $$PWD/qtwebengine.gni -qtConfig (webengine-extensions) { +qtConfig(webengine-extensions) { GN_INCLUDES += $$PWD/qtwebengine_sources.gni $$PWD/qtwebengine_resources.gni $$PWD/common/extensions/api/qtwebengine_extensions_features.gni } else { GN_INCLUDES = $$PWD/qtwebengine_sources.gni $$PWD/qtwebengine_resources.gni diff --git a/src/core/core_lipo.pro b/src/core/core_lipo.pro new file mode 100644 index 000000000..41846b7f2 --- /dev/null +++ b/src/core/core_lipo.pro @@ -0,0 +1,9 @@ +TEMPLATE = aux + +qtConfig(debug_and_release): CONFIG += debug_and_release +qtConfig(build_all): CONFIG += build_all + +TARGET= QtWebEngineCore +include($${QTWEBENGINE_ROOT}/src/buildtools/config/lipo.pri) + + diff --git a/src/core/core_module.pro b/src/core/core_module.pro index 520b452f7..9e087c815 100644 --- a/src/core/core_module.pro +++ b/src/core/core_module.pro @@ -1,7 +1,11 @@ MODULE = webenginecore include(core_common.pri) -include($${QTWEBENGINE_ROOT}/src/buildtools/config/linking.pri) +isUniversal() { + include($${QTWEBENGINE_ROOT}/src/buildtools/config/lipo_linking.pri) +} else { + include($${QTWEBENGINE_ROOT}/src/buildtools/config/linking.pri) +} api_library_name = qtwebenginecoreapi$$qtPlatformTargetSuffix() api_library_path = $$OUT_PWD/api/$$getConfigDir() @@ -49,7 +53,11 @@ linux { qtConfig(separate_debug_info): QMAKE_POST_LINK="cd $(DESTDIR) && $(STRIP) --strip-unneeded $(TARGET)" } -REPACK_DIR = $$OUT_PWD/$$getConfigDir() +isUniversal() { + REPACK_DIR = $$OUT_PWD/$$QT_ARCH/$$getConfigDir() +} else { + REPACK_DIR = $$OUT_PWD/$$getConfigDir() +} # Duplicated from resources/resources.gyp LOCALE_LIST = am ar bg bn ca cs da de el en-GB en-US es-419 es et fa fi fil fr gu he hi hr hu id it ja kn ko lt lv ml mr ms nb nl pl pt-BR pt-PT ro ru sk sl sr sv sw ta te th tr uk vi zh-CN zh-TW @@ -61,7 +69,7 @@ resources.files = $$REPACK_DIR/qtwebengine_resources.pak \ $$REPACK_DIR/qtwebengine_resources_200p.pak \ $$REPACK_DIR/qtwebengine_devtools_resources.pak -icu.files = $$OUT_PWD/$$getConfigDir()/icudtl.dat +icu.files = $$REPACK_DIR/icudtl.dat !qtConfig(debug_and_release)|!qtConfig(build_all)|CONFIG(release, debug|release) { qtConfig(framework) { diff --git a/src/core/gn_run.pro b/src/core/gn_run.pro index 3d6fda80e..9072f2847 100644 --- a/src/core/gn_run.pro +++ b/src/core/gn_run.pro @@ -28,36 +28,51 @@ build_pass|!debug_and_release { gn_binary = gn runninja.target = run_ninja + QMAKE_EXTRA_TARGETS += runninja gn_args = $$gnWebEngineArgs() - gn_args += "qtwebengine_target=\"$$system_path($$OUT_PWD/$$getConfigDir()):QtWebEngineCore\"" !qtConfig(webengine-system-gn) { gn_binary = $$system_quote($$system_path($$gnPath())) } - gn_args = $$system_quote($$gn_args) gn_src_root = $$system_quote($$system_path($$QTWEBENGINE_ROOT/$$getChromiumSrcDir())) - gn_build_root = $$system_quote($$system_path($$OUT_PWD/$$getConfigDir())) gn_python = "--script-executable=$$pythonPathForSystem()" - gn_run = $$gn_binary gen $$gn_build_root $$gn_python --args=$$gn_args --root=$$gn_src_root - - message("Running: $$gn_run ") - !system($$gn_run) { - error("GN run error!") - } ninjaflags = $$(NINJAFLAGS) isEmpty(ninjaflags):!silent: ninjaflags = "-v" - - runninja.commands = $$NINJA $$ninjaflags \$\(NINJAJOBS\) -C $$gn_build_root QtWebEngineCore - QMAKE_EXTRA_TARGETS += runninja - build_pass:build_all: default_target.target = all else: default_target.target = first default_target.depends = runninja QMAKE_EXTRA_TARGETS += default_target + + isUniversal(){ + for(arch, QT_ARCHS) { + gn_target = "qtwebengine_target=\"$$system_path($$OUT_PWD/$$arch/$$getConfigDir()):QtWebEngineCore\"" + gn_args_per_arch = $$system_quote($$gn_args $$gn_target target_cpu=\"$$gnArch($$arch)\") + gn_build_root = $$system_quote($$system_path($$OUT_PWD/$$arch/$$getConfigDir())) + gn_run = $$gn_binary gen $$gn_build_root $$gn_python --args=$$gn_args_per_arch --root=$$gn_src_root + message("Running for $$arch: $$gn_run") + !system($$gn_run) { + error("GN run error for $$arch!") + } + runninja_$${arch}.target = run_ninja_$${arch} + runninja_$${arch}.commands = $$NINJA $$ninjaflags \$\(NINJAJOBS\) -C $$gn_build_root QtWebEngineCore + QMAKE_EXTRA_TARGETS += runninja_$${arch} + runninja.depends += runninja_$${arch} + } + } else { + gn_args+= "qtwebengine_target=\"$$system_path($$OUT_PWD/$$getConfigDir()):QtWebEngineCore\"" + gn_args = $$system_quote($$gn_args) + gn_build_root = $$system_quote($$system_path($$OUT_PWD/$$getConfigDir())) + gn_run = $$gn_binary gen $$gn_build_root $$gn_python --args=$$gn_args --root=$$gn_src_root + message("Running: $$gn_run for $$arch") + !system($$gn_run) { + error("GN run error!") + } + runninja.commands = $$NINJA $$ninjaflags \$\(NINJAJOBS\) -C $$gn_build_root QtWebEngineCore + } } !build_pass:debug_and_release { diff --git a/src/pdf/gn_run.pro b/src/pdf/gn_run.pro index 70ee582a9..d00406193 100644 --- a/src/pdf/gn_run.pro +++ b/src/pdf/gn_run.pro @@ -27,39 +27,55 @@ build_pass|!debug_and_release { gn_binary = gn runninja.target = run_ninja + QMAKE_EXTRA_TARGETS += runninja # fixme: refine args gn_args = $$gnPdfArgs() - # fixme: qtwebengine_target - gn_args += "qtwebengine_target=\"$$system_path($$OUT_PWD/$$getConfigDir()):QtPdf\"" - # fixme: !qtConfig(webengine-system-gn) { gn_binary = $$system_quote($$system_path($$gnPath())) } - gn_args = $$system_quote($$gn_args) gn_src_root = $$system_quote($$system_path($$QTWEBENGINE_ROOT/$$getChromiumSrcDir())) - gn_build_root = $$system_quote($$system_path($$OUT_PWD/$$getConfigDir())) gn_python = "--script-executable=$$pythonPathForSystem()" - gn_run = $$gn_binary gen $$gn_build_root $$gn_python --args=$$gn_args --root=$$gn_src_root - - message("Running: $$gn_run ") - !system($$gn_run) { - error("GN run error!") - } ninjaflags = $$(NINJAFLAGS) isEmpty(ninjaflags):!silent: ninjaflags = "-v" - runninja.commands = $$NINJA $$ninjaflags -C $$gn_build_root QtPdf - QMAKE_EXTRA_TARGETS += runninja - build_pass:build_all: default_target.target = all else: default_target.target = first default_target.depends = runninja QMAKE_EXTRA_TARGETS += default_target + + isUniversal(){ + for(arch, QT_ARCHS) { + # fixme: qtwebengine_target + gn_target = "qtwebengine_target=\"$$system_path($$OUT_PWD/$$arch/$$getConfigDir()):QtPdf\"" + gn_args_per_arch = $$system_quote($$gn_args $$gn_target target_cpu=\"$$gnArch($$arch)\") + gn_build_root = $$system_quote($$system_path($$OUT_PWD/$$arch/$$getConfigDir())) + gn_run = $$gn_binary gen $$gn_build_root $$gn_python --args=$$gn_args_per_arch --root=$$gn_src_root + message("Running for $$arch: $$gn_run") + !system($$gn_run) { + error("GN run error for $$arch!") + } + runninja_$${arch}.target = run_ninja_$${arch} + runninja_$${arch}.commands = $$NINJA $$ninjaflags -C $$gn_build_root QtPdf + QMAKE_EXTRA_TARGETS += runninja_$${arch} + runninja.depends += runninja_$${arch} + } + } else { + gn_args+= "qtwebengine_target=\"$$system_path($$OUT_PWD/$$getConfigDir()):QtPdf\"" + gn_args = $$system_quote($$gn_args) + gn_build_root = $$system_quote($$system_path($$OUT_PWD/$$getConfigDir())) + gn_run = $$gn_binary gen $$gn_build_root $$gn_python --args=$$gn_args --root=$$gn_src_root + message("Running: $$gn_run for $$arch") + !system($$gn_run) { + error("GN run error!") + } + runninja.commands = $$NINJA $$ninjaflags -C $$gn_build_root QtPdf + } + } !build_pass:debug_and_release { diff --git a/src/pdf/pdf.pro b/src/pdf/pdf.pro index 9f98c32b0..fedcc9bde 100644 --- a/src/pdf/pdf.pro +++ b/src/pdf/pdf.pro @@ -3,13 +3,22 @@ QT_FOR_CONFIG += buildtools-private TEMPLATE = subdirs pdfcore.file = pdfcore.pro pdfcore_generator.file = pdfcore_generator.pro + +pdfcore_lipo.file = pdfcore_lipo.pro +pdfcore_lipo.depends = gn_run + gn_run.file = gn_run.pro pdfcore_prl_generator.file = pdfcore_prl_generator.pro gn_run.depends = pdfcore_generator pdfcore_prl_generator.depends = gn_run -pdfcore.depends = pdfcore_prl_generator quick.depends = pdfcore +isUniversal() { + pdfcore.depends += pdfcore_lipo +} else { + pdfcore.depends += pdfcore_prl_generator +} + !qtConfig(webengine-qtpdf-support):qtConfig(build-qtpdf)::!build_pass { !qtwebengine_makeCheckPdfError() { errorbuild.commands = @echo $$shell_quote("QtPdf will not be built. $${skipBuildReason}") @@ -24,8 +33,13 @@ quick.depends = pdfcore SUBDIRS += \ pdfcore_generator \ gn_run \ - pdfcore_prl_generator \ pdfcore \ quick + + isUniversal() { + SUBDIRS += pdfcore_lipo + } else { + SUBDIRS += pdfcore_prl_generator + } } diff --git a/src/pdf/pdfcore.pro b/src/pdf/pdfcore.pro index 23e0cec79..c2626a48a 100644 --- a/src/pdf/pdfcore.pro +++ b/src/pdf/pdfcore.pro @@ -27,11 +27,15 @@ msvc { QMAKE_CXXFLAGS_WARN_ON += -wd"4100" } -include($${QTWEBENGINE_ROOT}/src/buildtools/config/linking.pri) +isUniversal() { + include($${QTWEBENGINE_ROOT}/src/buildtools/config/lipo_linking.pri) +} else { + include($${QTWEBENGINE_ROOT}/src/buildtools/config/linking.pri) +} # install static dependencies and handle prl files for static builds -static:!isEmpty(NINJA_ARCHIVES) { +static:!isEmpty(NINJA_ARCHIVES):!isUniversal() { static_dep_pri = $$OUT_PWD/$$getConfigDir()/$${TARGET}_static_dep.pri !include($${static_dep_pri}) { error("Could not find the prl information.") diff --git a/src/pdf/pdfcore_generator.pro b/src/pdf/pdfcore_generator.pro index e5c7258b7..0930256ca 100644 --- a/src/pdf/pdfcore_generator.pro +++ b/src/pdf/pdfcore_generator.pro @@ -5,7 +5,13 @@ TEMPLATE = lib CONFIG = gn_generator $$CONFIG CONFIG -=static # note we still do static when linking GN_SRC_DIR = $$PWD -GN_FILE = $$OUT_PWD/$$getConfigDir()/BUILD.gn +isUniversal() { + for(arch, QT_ARCHS) { + GN_FILES += $$OUT_PWD/$$arch/$$getConfigDir()/BUILD.gn + } +} else { + GN_FILES = $$OUT_PWD/$$getConfigDir()/BUILD.gn +} GN_FIND_MOCABLES_SCRIPT = $$shell_path($$QTWEBENGINE_ROOT/tools/scripts/gn_find_mocables.py) GN_RUN_BINARY_SCRIPT = $$shell_path($$QTWEBENGINE_ROOT/tools/scripts/gn_run_binary.py) GN_IMPORTS = $$PWD/qtpdf.gni diff --git a/src/pdf/pdfcore_lipo.pro b/src/pdf/pdfcore_lipo.pro new file mode 100644 index 000000000..6caf2ac75 --- /dev/null +++ b/src/pdf/pdfcore_lipo.pro @@ -0,0 +1,5 @@ +TEMPLATE = aux + +TARGET= QtPdf +include($${QTWEBENGINE_ROOT}/src/buildtools/config/lipo.pri) + diff --git a/src/src.pro b/src/src.pro index 6f8bc2fe4..c99904309 100644 --- a/src/src.pro +++ b/src/src.pro @@ -29,7 +29,7 @@ qtConfig(build-qtwebengine-core):qtConfig(webengine-core-support) { SUBDIRS += buildtools core process - qtConfig(webengine-spellchecker):!qtConfig(webengine-native-spellchecker):!cross_compile { + qtConfig(webengine-spellchecker):!qtConfig(webengine-native-spellchecker):!cross_compile:!isUniversal() { SUBDIRS += qwebengine_convert_dict qwebengine_convert_dict.subdir = tools/qwebengine_convert_dict qwebengine_convert_dict.depends = core diff --git a/tests/auto/widgets/widgets.pro b/tests/auto/widgets/widgets.pro index 2dc1eefcd..d35f875c1 100644 --- a/tests/auto/widgets/widgets.pro +++ b/tests/auto/widgets/widgets.pro @@ -1,3 +1,5 @@ +load(functions) + include($$QTWEBENGINE_OUT_ROOT/src/core/qtwebenginecore-config.pri) # workaround for QTBUG-68093 QT_FOR_CONFIG += webenginecore webenginecore-private @@ -37,7 +39,7 @@ qtConfig(ssl) { SUBDIRS += certificateerror } -qtConfig(webengine-spellchecker):!cross_compile { +qtConfig(webengine-spellchecker):!cross_compile:!isUniversal() { !qtConfig(webengine-native-spellchecker) { SUBDIRS += spellchecking } else { -- cgit v1.2.1