Add support for riscv64

Signed-off-by: David Abdurachmanov <davidlt@rivosinc.com>
This commit is contained in:
David Abdurachmanov 2022-11-14 09:59:23 +02:00
parent 0f5655bdd5
commit 0ec8b2c9ad
Signed by: davidlt
GPG Key ID: 8B7F1DA0E2C9FDBB
2 changed files with 107 additions and 2 deletions

View File

@ -10,7 +10,7 @@ Name: qtwebkit
Summary: Qt WebKit bindings
Version: 2.3.4
Release: 37%{?dist}
Release: 37.0.riscv64%{?dist}
License: LGPLv2 with exceptions or GPLv3 with exceptions
URL: http://trac.webkit.org/wiki/QtWebKit
@ -37,6 +37,9 @@ Patch11: qtwebkit-23-LLInt-C-Loop-backend-ppc.patch
# truly madly deeply no rpath please, kthxbye
Patch14: webkit-qtwebkit-23-no_rpath.patch
# add RISC-V (riscv64) support
Patch20: webkit-qtwebkit-23-riscv64.patch
## upstream patches
# backport from qt5-qtwebkit
# qtwebkit: undefined symbol: g_type_class_adjust_private_offset
@ -133,6 +136,7 @@ Provides: qt4-webkit-devel%{?_isa} = 2:%{version}-%{release}
%patch11 -p1 -b .Double2Ints
%endif
%patch14 -p1 -b .no_rpath
%patch20 -p1 -b .riscv64
%patch100 -p1 -b .gcc5
%patch101 -p1 -b .private_browsing
@ -161,10 +165,15 @@ PATH=`pwd`/python2-unversioned-command:`pwd`/bin:%{_qt4_bindir}:$PATH; export PA
QMAKEPATH=`pwd`/Tools/qmake; export QMAKEPATH
QTDIR=%{_qt4_prefix}; export QTDIR
%ifarch aarch64 %{mips}
%ifarch aarch64 %{mips} riscv64
%global qtdefines DEFINES+=ENABLE_JIT=0 DEFINES+=ENABLE_YARR_JIT=0 DEFINES+=ENABLE_ASSEMBLER=0
%endif
%ifarch riscv64
export CFLAGS="$CFLAGS -fpermissive"
export CXXFLAGS="$CXXFLAGS -fpermissive"
%endif
mkdir -p %{_target_platform}
pushd %{_target_platform}
WEBKITOUTPUTDIR=`pwd`; export WEBKITOUTPUTDIR
@ -207,6 +216,9 @@ popd
%changelog
* Mon Oct 14 2022 David Abdurachmanov <davidlt@rivosinc.com> - 2.3.4-37.0.riscv64
- Add support for riscv64
* Sat Jul 23 2022 Fedora Release Engineering <releng@fedoraproject.org> - 2.3.4-37
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild

View File

@ -0,0 +1,93 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a91f2559..94cb34fd 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -76,6 +76,8 @@ ELSEIF (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "(x86_64|amd64)")
SET(WTF_CPU_X86_64 1)
ELSEIF (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "(i[3-6]86|x86)")
SET(WTF_CPU_X86 1)
+ELSEIF (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "^riscv64")
+ SET(WTF_CPU_RISCV64 1)
ELSE ()
MESSAGE(FATAL_ERROR "Unknown CPU '${CMAKE_SYSTEM_PROCESSOR}'")
ENDIF ()
diff --git a/Source/JavaScriptCore/CMakeLists.txt b/Source/JavaScriptCore/CMakeLists.txt
index 0a7a8bd3..14fbcdbf 100644
--- a/Source/JavaScriptCore/CMakeLists.txt
+++ b/Source/JavaScriptCore/CMakeLists.txt
@@ -471,6 +471,7 @@ IF (WTF_CPU_ARM)
ELSEIF (WTF_CPU_MIPS)
ELSEIF (WTF_CPU_X86)
ELSEIF (WTF_CPU_X86_64)
+ELSEIF (WTF_CPU_RISCV64)
ELSE ()
MESSAGE(FATAL_ERROR "Unknown CPU")
ENDIF ()
diff --git a/Source/JavaScriptCore/JavaScriptCore.pri b/Source/JavaScriptCore/JavaScriptCore.pri
index e5f4362c..f175d09e 100644
--- a/Source/JavaScriptCore/JavaScriptCore.pri
+++ b/Source/JavaScriptCore/JavaScriptCore.pri
@@ -37,6 +37,14 @@ macx: INCLUDEPATH += $$JAVASCRIPTCORE_GENERATED_SOURCES_DIR/$$activeBuildConfig(
win32-*: LIBS += -lwinmm
+# Hack around RISCV64 fail wrt JSValue.h
+# SValue.h unconditionally casts pointer to int32_t.
+# add -fpermissive locally as a workaround
+equals(QT_ARCH, riscv64) {
+ message("JavaScriptCore riscv64 hack: -fpermissive")
+ QMAKE_CXXFLAGS += -fpermissive
+}
+
wince* {
INCLUDEPATH += $$QT.core.sources/../3rdparty/ce-compat
INCLUDEPATH += $$SOURCE_DIR/os-win32
diff --git a/Source/WTF/wtf/Platform.h b/Source/WTF/wtf/Platform.h
index 56c6f256..639063bb 100644
--- a/Source/WTF/wtf/Platform.h
+++ b/Source/WTF/wtf/Platform.h
@@ -164,6 +164,11 @@
#define WTF_CPU_BIG_ENDIAN 1
#endif
+/* CPU(RISCV64) - RISCV64 */
+#if defined(__riscv) && defined(__riscv_xlen) && __riscv_xlen == 64
+#define WTF_CPU_RISCV64 1
+#endif
+
/* CPU(X86) - i386 / x86 32-bit */
#if defined(__i386__) \
|| defined(i386) \
@@ -906,7 +911,8 @@
|| CPU(S390X) \
|| CPU(AARCH64) \
|| CPU(MIPS64) \
- || CPU(PPC64)
+ || CPU(PPC64) \
+ || CPU(RISCV64)
#define WTF_USE_JSVALUE64 1
#else
#define WTF_USE_JSVALUE32_64 1
@@ -932,7 +938,8 @@
&& (CPU(X86) || CPU(X86_64) || CPU(ARM) || CPU(MIPS)) \
&& (OS(DARWIN) || !COMPILER(GCC) || GCC_VERSION_AT_LEAST(4, 1, 0)) \
&& !OS(WINCE) \
- && !OS(QNX)
+ && !OS(QNX) \
+ && !CPU(RISCV64)
#define ENABLE_JIT 1
#endif
diff --git a/Source/WTF/wtf/dtoa/utils.h b/Source/WTF/wtf/dtoa/utils.h
index bc17f043..91493297 100644
--- a/Source/WTF/wtf/dtoa/utils.h
+++ b/Source/WTF/wtf/dtoa/utils.h
@@ -49,7 +49,7 @@
defined(__ARMEL__) || \
defined(_MIPS_ARCH_MIPS32R2)
#define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1
-#elif CPU(MIPS) || CPU(PPC) || CPU(PPC64) || OS(WINCE) || CPU(SH4) || CPU(S390) || CPU(S390X) || CPU(IA64) || CPU(SPARC) || CPU(ALPHA) || CPU(MIPS64) || CPU(AARCH64) || CPU(HPPA)
+#elif CPU(MIPS) || CPU(PPC) || CPU(PPC64) || OS(WINCE) || CPU(SH4) || CPU(S390) || CPU(S390X) || CPU(IA64) || CPU(SPARC) || CPU(ALPHA) || CPU(MIPS64) || CPU(AARCH64) || CPU(HPPA) || CPU(RISCV64)
#define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1
#elif defined(_M_IX86) || defined(__i386__)
#if defined(_WIN32)