summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Klocek <michal.klocek@qt.io>2022-04-26 21:18:44 +0200
committerMichal Klocek <michal.klocek@qt.io>2022-05-05 10:03:34 +0200
commit06fc47309609b9be735817da4f3bdf2e30e0b99c (patch)
treec5b798ff3bc07a3c631b7aa66bea9d088cb73c5b
parent8a52dee5ab480eef88b95361cf4db2ce36374c69 (diff)
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 <qt_ci_bot@qt-project.org> Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
-rw-r--r--examples/webenginewidgets/webenginewidgets.pro4
-rw-r--r--mkspecs/features/functions.prf5
-rw-r--r--mkspecs/features/gn_generator.prf9
-rw-r--r--src/buildtools/config/lipo.pri85
-rw-r--r--src/buildtools/config/lipo_linking.pri15
-rw-r--r--src/core/api/core_api.pro7
-rw-r--r--src/core/core.pro6
-rw-r--r--src/core/core_chromium.pri10
-rw-r--r--src/core/core_gn_config.pri10
-rw-r--r--src/core/core_lipo.pro9
-rw-r--r--src/core/core_module.pro14
-rw-r--r--src/core/gn_run.pro41
-rw-r--r--src/pdf/gn_run.pro44
-rw-r--r--src/pdf/pdf.pro18
-rw-r--r--src/pdf/pdfcore.pro8
-rw-r--r--src/pdf/pdfcore_generator.pro8
-rw-r--r--src/pdf/pdfcore_lipo.pro5
-rw-r--r--src/src.pro2
-rw-r--r--tests/auto/widgets/widgets.pro4
19 files changed, 256 insertions, 48 deletions
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 {