drop remants of sse2 hack support
add bootstrap support (examples)
This commit is contained in:
Rex Dieter 2019-02-15 08:48:25 -06:00
parent a559b62e4a
commit 9ea54560a9
5 changed files with 22 additions and 162 deletions

1
.gitignore vendored
View File

@ -1 +1,2 @@
/qtdeclarative-everywhere-src-5.11.3.tar.xz
/qtdeclarative-everywhere-src-5.12.1.tar.xz

View File

@ -1,75 +0,0 @@
From 4950c366b12265f1ea390a6feb8dbbd0d850d206 Mon Sep 17 00:00:00 2001
From: Guillem Jover <guillem@hadrons.org>
Date: Mon, 12 Oct 2015 01:45:37 +0200
Subject: [PATCH v2] Do not make lack of SSE2 support on x86-32 fatal
When an x86-32 CPU does not have SSE2 support (which is the case for
all AMD CPUs, and older Intel CPUs), fallback to use the interpreter,
otherwise use the JIT engine.
Even then, make the lack of SSE2 support on x86-32 fatal when trying
to instantiate a JIT engine, which does require it.
Refactor the required CPU support check into a new pair of privately
exported functions to avoid duplicating the logic, and do so in
functions instead of class members to avoid changing the class
signatures.
Version: 5.7.x
Bug-Debian: https://bugs.debian.org/792594
---
src/qml/jsruntime/qv4engine.cpp | 1 +
src/qml/qml/v8/qv8engine.cpp | 7 -------
tools/qmljs/qmljs.cpp | 7 +++----
5 files changed, 24 insertions(+), 11 deletions(-)
--- a/src/qml/jsruntime/qv4engine.cpp
+++ b/src/qml/jsruntime/qv4engine.cpp
@@ -160,6 +160,7 @@
#ifdef V4_ENABLE_JIT
static const bool forceMoth = !qEnvironmentVariableIsEmpty("QV4_FORCE_INTERPRETER") ||
+ !JIT::hasRequiredCpuSupport() ||
!OSAllocator::canAllocateExecutableMemory();
if (forceMoth) {
factory = new Moth::ISelFactory;
--- a/src/qml/qml/v8/qv8engine.cpp
+++ b/src/qml/qml/v8/qv8engine.cpp
@@ -64,7 +64,6 @@
#include <QtCore/qjsonvalue.h>
#include <QtCore/qdatetime.h>
#include <QtCore/qdatastream.h>
-#include <private/qsimd_p.h>
#include <private/qv4value_p.h>
#include <private/qv4dateobject_p.h>
@@ -129,12 +128,6 @@
, m_xmlHttpRequestData(0)
, m_listModelData(0)
{
-#ifdef Q_PROCESSOR_X86_32
- if (!qCpuHasFeature(SSE2)) {
- qFatal("This program requires an X86 processor that supports SSE2 extension, at least a Pentium 4 or newer");
- }
-#endif
-
QML_MEMORY_SCOPE_STRING("QV8Engine::QV8Engine");
qMetaTypeId<QJSValue>();
qMetaTypeId<QList<int> >();
--- a/tools/qmljs/qmljs.cpp
+++ b/tools/qmljs/qmljs.cpp
@@ -90,11 +90,10 @@
enum {
use_masm,
use_moth
- } mode;
+ } mode = use_moth;
#ifdef V4_ENABLE_JIT
- mode = use_masm;
-#else
- mode = use_moth;
+ if (QV4::JIT::hasRequiredCpuSupport())
+ mode = use_masm;
#endif
bool runAsQml = false;

View File

@ -1,21 +1,14 @@
%global qt_module qtdeclarative
%if 0%{?fedora} < 29
%ifarch %{ix86}
%global nosse2_hack 1
## TODO:
# * consider debian's approach of runtime detection instead,
# w hen/if their patch is rebased for 5.11.x
%endif
%endif
# definition borrowed from qtbase
%global multilib_archs x86_64 %{ix86} %{?mips} ppc64 ppc s390x s390 sparc64 sparcv9
%global bootstrap 1
Summary: Qt5 - QtDeclarative component
Name: qt5-%{qt_module}
Version: 5.11.3
Release: 2%{?dist}
Version: 5.12.1
Release: 1%{?dist}
# See LICENSE.GPL LICENSE.LGPL LGPL_EXCEPTION.txt, for details
License: LGPLv2 with exceptions or GPLv3 with exceptions
@ -27,19 +20,10 @@ Source0: https://download.qt.io/official_releases/qt/%{majmin}/%{version}/submod
# https://bugzilla.redhat.com/show_bug.cgi?id=1441343
Source5: qv4global_p-multilib.h
# support no_sse2 CONFIG (fedora i686 builds cannot assume -march=pentium4 -msse2 -mfpmath=sse flags, or the JIT that needs them)
# https://codereview.qt-project.org/#change,73710
# inspired by https://build.opensuse.org/package/view_file/KDE:Unstable:Qt/libqt5-qtdeclarative/sse2_nojit.patch
Patch1: qtdeclarative-opensource-src-5.11.0-no_sse2.patch
## upstream patches
## upstreamable patches
# https://codereview.qt-project.org/#/c/127354/
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=792594
#Patch202: https://sources.debian.org/data/main/q/qtdeclarative-opensource-src/5.10.1-4/debian/patches/Do-not-make-lack-of-SSE2-support-on-x86-32-fatal.patch
# filter qml provides
%global __provides_exclude_from ^%{_qt5_archdatadir}/qml/.*\\.so$
@ -51,11 +35,17 @@ BuildRequires: qt5-rpm-macros >= %{version}
BuildRequires: qt5-qtbase-devel >= %{version}
BuildRequires: qt5-qtbase-private-devel
%{?_qt5:Requires: %{_qt5}%{?_isa} = %{_qt5_version}}
BuildRequires: qt5-qtxmlpatterns-devel >= %{version}
# recommended workaround from:
# https://fedoraproject.org/wiki/Changes/Move_usr_bin_python_into_separate_package
# TODO: fixme to explicitly use python2 instead -- rex
BuildRequires: /usr/bin/python
%if 0%{?bootstrap}
Obsoletes: %{name}-examples < %{version}-%{release}
%else
%global no_examples CONFIG-=compile_examples
%endif
%if 0%{?tests}
BuildRequires: dbus-x11
BuildRequires: mesa-dri-drivers
@ -90,26 +80,10 @@ Requires: %{name}%{?_isa} = %{version}-%{release}
%prep
%setup -q -n %{qt_module}-everywhere-src-%{version}
%if 0%{?nosse2_hack}
%patch1 -p1 -b .no_sse2
%endif
## FIXME/REBASE
#patch202 -p1 -b .no_sse2_non_fatal
%autosetup -n %{qt_module}-everywhere-src-%{version}
%build
%if 0%{?nosse2_hack}
# build libQt5Qml with no_sse2
mkdir -p %{_target_platform}-no_sse2
pushd %{_target_platform}-no_sse2
%{qmake_qt5} -config no_sse2 ..
make sub-src-clean
%make_build -C src/qml
popd
%endif
# no shadow builds until fixed: https://bugreports.qt.io/browse/QTBUG-37417
%qmake_qt5
@ -119,12 +93,6 @@ popd
%install
%make_install INSTALL_ROOT=%{buildroot}
%if 0%{?nosse2_hack}
mkdir -p %{buildroot}%{_qt5_libdir}/sse2
mv %{buildroot}%{_qt5_libdir}/libQt5Qml.so.5* %{buildroot}%{_qt5_libdir}/sse2/
make install INSTALL_ROOT=%{buildroot} -C %{_target_platform}-no_sse2/src/qml
%endif
%ifarch %{multilib_archs}
# multilib: qv4global_p.h
mv %{buildroot}%{_qt5_headerdir}/QtQml/%{version}/QtQml/private/qv4global_p.h \
@ -184,12 +152,10 @@ make check -k -C tests ||:
%files
%license LICENSE.LGPL*
%{_qt5_libdir}/libQt5Qml.so.5*
%if 0%{?nosse2_hack}
%{_qt5_libdir}/sse2/libQt5Qml.so.5*
%endif
%{_qt5_libdir}/libQt5Quick.so.5*
%{_qt5_libdir}/libQt5QuickWidgets.so.5*
%{_qt5_libdir}/libQt5QuickParticles.so.5*
%{_qt5_libdir}/libQt5QuickShapes.so.5*
%{_qt5_libdir}/libQt5QuickTest.so.5*
%{_qt5_plugindir}/qmltooling/
%{_qt5_archdatadir}/qml/
@ -218,11 +184,18 @@ make check -k -C tests ||:
%{_qt5_libdir}/libQt5QmlDebug.a
%{_qt5_libdir}/libQt5QmlDebug.prl
%if ! 0%{?no_examples:1}
%files examples
%{_qt5_examplesdir}/
%endif
%changelog
* Mon Feb 04 2019 Rex Dieter <rdieter@fedoraproject.org> - 5.12.1-1
- 5.12.1
- drop remants of sse2 hack support
- add bootstrap support (examples)
* Sat Feb 02 2019 Fedora Release Engineering <releng@fedoraproject.org> - 5.11.3-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild

View File

@ -1,39 +0,0 @@
diff -up qtdeclarative-everywhere-src-5.11.0/src/qml/jsruntime/jsruntime.pri.no_sse2 qtdeclarative-everywhere-src-5.11.0/src/qml/jsruntime/jsruntime.pri
--- qtdeclarative-everywhere-src-5.11.0/src/qml/jsruntime/jsruntime.pri.no_sse2 2018-04-30 06:54:03.000000000 -0500
+++ qtdeclarative-everywhere-src-5.11.0/src/qml/jsruntime/jsruntime.pri 2018-05-24 16:15:51.151738531 -0500
@@ -115,6 +115,11 @@ SOURCES += \
$$PWD/qv4value.cpp \
$$PWD/qv4executableallocator.cpp
+linux-g++*:isEqual(QT_ARCH,i386):!no_sse2 {
+ QMAKE_CFLAGS += -msse2 -mfpmath=sse
+ QMAKE_CXXFLAGS += -msse2 -mfpmath=sse
+}
+
valgrind {
DEFINES += V4_USE_VALGRIND
}
diff -up qtdeclarative-everywhere-src-5.11.0/src/qml/jsruntime/qv4global_p.h.no_sse2 qtdeclarative-everywhere-src-5.11.0/src/qml/jsruntime/qv4global_p.h
--- qtdeclarative-everywhere-src-5.11.0/src/qml/jsruntime/qv4global_p.h.no_sse2 2018-04-30 06:54:03.000000000 -0500
+++ qtdeclarative-everywhere-src-5.11.0/src/qml/jsruntime/qv4global_p.h 2018-05-24 20:23:38.642642420 -0500
@@ -88,7 +88,7 @@ inline double trunc(double d) { return d
//
// NOTE: This should match the logic in qv4targetplatform_p.h!
-#if defined(Q_PROCESSOR_X86) && (QT_POINTER_SIZE == 4) \
+#if defined(Q_PROCESSOR_X86) && (QT_POINTER_SIZE == 4) && defined(__SSE2__) \
&& (defined(Q_OS_WIN) || defined(Q_OS_LINUX) || defined(Q_OS_QNX) || defined(Q_OS_FREEBSD))
# define V4_ENABLE_JIT
#elif defined(Q_PROCESSOR_X86_64) && (QT_POINTER_SIZE == 8) \
diff -up qtdeclarative-everywhere-src-5.11.0/src/qml/qml/v8/qv8engine.cpp.no_sse2 qtdeclarative-everywhere-src-5.11.0/src/qml/qml/v8/qv8engine.cpp
--- qtdeclarative-everywhere-src-5.11.0/src/qml/qml/v8/qv8engine.cpp.no_sse2 2018-05-24 16:15:51.152738550 -0500
+++ qtdeclarative-everywhere-src-5.11.0/src/qml/qml/v8/qv8engine.cpp 2018-05-24 20:21:01.273574503 -0500
@@ -131,7 +131,7 @@ QV8Engine::QV8Engine(QJSEngine *qq, QV4:
{
#ifdef Q_PROCESSOR_X86_32
if (!qCpuHasFeature(SSE2)) {
- qFatal("This program requires an X86 processor that supports SSE2 extension, at least a Pentium 4 or newer");
+ qDebug("This program requires an X86 processor that supports SSE2 extension, at least a Pentium 4 or newer, processors missing the extension are NOT supported to run QML2 code!");
}
#endif

View File

@ -1 +1 @@
SHA512 (qtdeclarative-everywhere-src-5.11.3.tar.xz) = 07d440b10ba2fbd700a191791cb6991fb9ce72c78787340e7f564bdb2bef24b035e15fe2aecd36d58f8794e56bd0aa35d28b350a73707e27748e54d46609e1a0
SHA512 (qtdeclarative-everywhere-src-5.12.1.tar.xz) = e06032da5c1c151200215f55728b9ce0fac299076f0ca3150143525a56bcce15eb72f6aa982b439e3920d1cd7a30468b3f0913f135d644ecda277d763fb5e1b5