Message ID | 20220309132835.7251-1-abrodkin@synopsys.com |
---|---|
State | Accepted |
Headers | show |
Series | qt5: enable JS and WebKit for ARC | expand |
On 09/03/2022 14:28, Alexey Brodkin via buildroot wrote: > This patch adds support of ARC architecture in Qt's JS core and Webkit. > The change itself is quite straight-forward: > > 1. Enable JS core for ARC > 2. Make sure so-called "large memory model" is used, > i.e. relocations with long jumps are being generated for global > symbols, as otherwise insanely huge libqt5webkit.so fails to link > because some symbols might be more than 32 MiB away from each other. > 3. Make the original WebKit build system aware of yet another CPU > architecture with explicitly disabled JIT in JS core for ARC. > > Obviously, this one depends on [1]. > > [1] https://patchwork.ozlabs.org/project/buildroot/patch/20220221140628.2295-1-abrodkin@synopsys.com/ > > Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com> > Cc: Thomas Petazzoni <thomas.petazzoni@bootlin.com> > Cc: Peter Seiderer <ps.report@gmx.net> > --- > package/qt5/Config.in | 2 +- > package/qt5/qt5base/qt5base.mk | 13 +++ > .../0005-Add-support-for-ARC-processors.patch | 93 +++++++++++++++++++ > 3 files changed, 107 insertions(+), 1 deletion(-) > create mode 100644 package/qt5/qt5webkit/0005-Add-support-for-ARC-processors.patch > > diff --git a/package/qt5/Config.in b/package/qt5/Config.in > index f2b1ff4a19..cbb2e06a21 100644 > --- a/package/qt5/Config.in > +++ b/package/qt5/Config.in > @@ -7,7 +7,7 @@ config BR2_PACKAGE_QT5_JSCORE_AVAILABLE > bool > default y > # Javascript engine is only available on certain architectures > - depends on BR2_arm || BR2_aarch64 || BR2_i386 || BR2_x86_64 || BR2_mipsel > + depends on BR2_arm || BR2_aarch64 || BR2_i386 || BR2_x86_64 || BR2_mipsel || BR2_arc > # ARM needs BLX, so v5t+ > depends on !BR2_ARM_CPU_ARMV4 > > diff --git a/package/qt5/qt5base/qt5base.mk b/package/qt5/qt5base/qt5base.mk > index ef38d03253..b25e0f44b6 100644 > --- a/package/qt5/qt5base/qt5base.mk > +++ b/package/qt5/qt5base/qt5base.mk > @@ -201,6 +201,19 @@ endif > QT5BASE_DEFAULT_QPA = $(call qstrip,$(BR2_PACKAGE_QT5BASE_DEFAULT_QPA)) > QT5BASE_CONFIGURE_OPTS += $(if $(QT5BASE_DEFAULT_QPA),-qpa $(QT5BASE_DEFAULT_QPA)) > > +ifeq ($(BR2_arc),y) > +# In case of -Os (which is default in BR) gcc will use millicode implementation > +# from libgcc. That along with performance degradation may lead to issues during > +# linkage stage. In case of QtWebkit exactly that happens - millicode functions > +# get put way too far from caller functions and so linker fails. > +# To solve that problem we explicitly disable millicode call generation for Qt. > +# Also due to some Qt5 libs being really huge (the best example is QtWebKit) > +# it's good to firce compiler to not assume short or even medium-length calls > +# could be used. I.e. always use long jump instaructions. > +# Otherwise there's a high risk of hitting link-time failures. > +QT5BASE_CFLAGS += -mno-millicode -mlong-calls > +endif > + > ifeq ($(BR2_PACKAGE_QT5BASE_EGLFS),y) > QT5BASE_CONFIGURE_OPTS += -eglfs > QT5BASE_DEPENDENCIES += libegl > diff --git a/package/qt5/qt5webkit/0005-Add-support-for-ARC-processors.patch b/package/qt5/qt5webkit/0005-Add-support-for-ARC-processors.patch > new file mode 100644 > index 0000000000..92f023eab6 > --- /dev/null > +++ b/package/qt5/qt5webkit/0005-Add-support-for-ARC-processors.patch > @@ -0,0 +1,93 @@ > +From 8da574cf8f30f69e47f76705aa2eb07000540aeb Mon Sep 17 00:00:00 2001 > +From: Alexey Brodkin <abrodkin@synopsys.com> > +Date: Mon, 21 Feb 2022 18:28:00 +0300 > +Subject: [PATCH] Add support for ARC processors > + > +Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com> Upstream status of this patch? Anyway, applied to master, thanks. Regards, Arnout > +--- > + CMakeLists.txt | 4 +++- > + Source/JavaScriptCore/CMakeLists.txt | 3 ++- > + Source/WTF/wtf/Platform.h | 8 ++++++++ > + Source/WTF/wtf/dtoa/utils.h | 2 +- > + Source/cmake/OptionsQt.cmake | 4 ++++ > + 5 files changed, 18 insertions(+), 3 deletions(-) > + > +diff --git a/CMakeLists.txt b/CMakeLists.txt > +index 31a2ea1fd..f0dfbda5b 100644 > +--- a/CMakeLists.txt > ++++ b/CMakeLists.txt > +@@ -57,7 +57,9 @@ if (MSVC_CXX_ARCHITECTURE_ID) > + else () > + string(TOLOWER ${CMAKE_SYSTEM_PROCESSOR} LOWERCASE_CMAKE_SYSTEM_PROCESSOR) > + endif () > +-if (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "^arm") > ++if (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "^arc") > ++ set(WTF_CPU_ARC 1) > ++elseif (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "^arm") > + set(WTF_CPU_ARM 1) > + elseif (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "^aarch64") > + set(WTF_CPU_ARM64 1) > +diff --git a/Source/JavaScriptCore/CMakeLists.txt b/Source/JavaScriptCore/CMakeLists.txt > +index 937b3ed00..205dde288 100644 > +--- a/Source/JavaScriptCore/CMakeLists.txt > ++++ b/Source/JavaScriptCore/CMakeLists.txt > +@@ -1275,7 +1275,8 @@ if (ENABLE_WEB_REPLAY) > + list(APPEND JavaScriptCore_HEADERS ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/JSReplayInputs.h) > + endif () > + > +-if (WTF_CPU_ARM) > ++if (WTF_CPU_ARC) > ++elseif (WTF_CPU_ARM) > + elseif (WTF_CPU_ARM64) > + elseif (WTF_CPU_ALPHA) > + elseif (WTF_CPU_HPPA) > +diff --git a/Source/WTF/wtf/Platform.h b/Source/WTF/wtf/Platform.h > +index 5717f3ea1..b327ed693 100644 > +--- a/Source/WTF/wtf/Platform.h > ++++ b/Source/WTF/wtf/Platform.h > +@@ -349,6 +349,14 @@ > + > + #endif /* ARM */ > + > ++/* CPU(ARC) - ARC */ > ++#if defined(__arc__) > ++#define WTF_CPU_ARC 1 > ++#if defined(__BIG_ENDIAN__) > ++#define WTF_CPU_BIG_ENDIAN 1 > ++#endif > ++#endif > ++ > + #if CPU(ARM) || CPU(MIPS) || CPU(SH4) || CPU(ALPHA) || CPU(HPPA) > + #define WTF_CPU_NEEDS_ALIGNED_ACCESS 1 > + #endif > +diff --git a/Source/WTF/wtf/dtoa/utils.h b/Source/WTF/wtf/dtoa/utils.h > +index 889642cee..8f1e9933e 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(MIPS64) || CPU(PPC) || CPU(PPC64) || CPU(PPC64LE) || CPU(SH4) || CPU(S390) || CPU(S390X) || CPU(IA64) || CPU(ALPHA) || CPU(ARM64) || CPU(HPPA) > ++#elif CPU(MIPS) || CPU(MIPS64) || CPU(PPC) || CPU(PPC64) || CPU(PPC64LE) || CPU(SH4) || CPU(S390) || CPU(S390X) || CPU(IA64) || CPU(ALPHA) || CPU(ARM64) || CPU(HPPA) || CPU(ARC) > + #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1 > + #elif defined(_M_IX86) || defined(__i386__) > + #if defined(_WIN32) > +diff --git a/Source/cmake/OptionsQt.cmake b/Source/cmake/OptionsQt.cmake > +index ec6081de0..e1a5efc1e 100644 > +--- a/Source/cmake/OptionsQt.cmake > ++++ b/Source/cmake/OptionsQt.cmake > +@@ -365,6 +365,10 @@ if (MINGW AND CMAKE_SIZEOF_VOID_P EQUAL 8) > + WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_JIT PRIVATE OFF) > + endif () > + > ++if (WTF_CPU_ARC) > ++ WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_JIT PRIVATE OFF) > ++endif () > ++ > + WEBKIT_OPTION_CONFLICT(USE_GSTREAMER USE_QT_MULTIMEDIA) > + WEBKIT_OPTION_CONFLICT(USE_GSTREAMER USE_MEDIA_FOUNDATION) > + WEBKIT_OPTION_CONFLICT(USE_QT_MULTIMEDIA USE_MEDIA_FOUNDATION) > +-- > +2.25.1 > +
Hi Alexey, Arnout, On Tue, 15 Mar 2022 22:47:10 +0100 Arnout Vandecappelle <arnout@mind.be> wrote: > > > On 09/03/2022 14:28, Alexey Brodkin via buildroot wrote: > > This patch adds support of ARC architecture in Qt's JS core and Webkit. > > The change itself is quite straight-forward: > > > > 1. Enable JS core for ARC > > 2. Make sure so-called "large memory model" is used, > > i.e. relocations with long jumps are being generated for global > > symbols, as otherwise insanely huge libqt5webkit.so fails to link > > because some symbols might be more than 32 MiB away from each other. > > 3. Make the original WebKit build system aware of yet another CPU > > architecture with explicitly disabled JIT in JS core for ARC. > > > > Obviously, this one depends on [1]. > > > > [1] https://patchwork.ozlabs.org/project/buildroot/patch/20220221140628.2295-1-abrodkin@synopsys.com/ > > > > Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com> > > Cc: Thomas Petazzoni <thomas.petazzoni@bootlin.com> > > Cc: Peter Seiderer <ps.report@gmx.net> > > --- > > package/qt5/Config.in | 2 +- > > package/qt5/qt5base/qt5base.mk | 13 +++ > > .../0005-Add-support-for-ARC-processors.patch | 93 +++++++++++++++++++ > > 3 files changed, 107 insertions(+), 1 deletion(-) > > create mode 100644 package/qt5/qt5webkit/0005-Add-support-for-ARC-processors.patch > > > > diff --git a/package/qt5/Config.in b/package/qt5/Config.in > > index f2b1ff4a19..cbb2e06a21 100644 > > --- a/package/qt5/Config.in > > +++ b/package/qt5/Config.in > > @@ -7,7 +7,7 @@ config BR2_PACKAGE_QT5_JSCORE_AVAILABLE > > bool > > default y > > # Javascript engine is only available on certain architectures > > - depends on BR2_arm || BR2_aarch64 || BR2_i386 || BR2_x86_64 || BR2_mipsel > > + depends on BR2_arm || BR2_aarch64 || BR2_i386 || BR2_x86_64 || BR2_mipsel || BR2_arc > > # ARM needs BLX, so v5t+ > > depends on !BR2_ARM_CPU_ARMV4 > > > > diff --git a/package/qt5/qt5base/qt5base.mk b/package/qt5/qt5base/qt5base.mk > > index ef38d03253..b25e0f44b6 100644 > > --- a/package/qt5/qt5base/qt5base.mk > > +++ b/package/qt5/qt5base/qt5base.mk > > @@ -201,6 +201,19 @@ endif > > QT5BASE_DEFAULT_QPA = $(call qstrip,$(BR2_PACKAGE_QT5BASE_DEFAULT_QPA)) > > QT5BASE_CONFIGURE_OPTS += $(if $(QT5BASE_DEFAULT_QPA),-qpa $(QT5BASE_DEFAULT_QPA)) > > > > +ifeq ($(BR2_arc),y) > > +# In case of -Os (which is default in BR) gcc will use millicode implementation > > +# from libgcc. That along with performance degradation may lead to issues during > > +# linkage stage. In case of QtWebkit exactly that happens - millicode functions > > +# get put way too far from caller functions and so linker fails. > > +# To solve that problem we explicitly disable millicode call generation for Qt. > > +# Also due to some Qt5 libs being really huge (the best example is QtWebKit) > > +# it's good to firce compiler to not assume short or even medium-length calls > > +# could be used. I.e. always use long jump instaructions. > > +# Otherwise there's a high risk of hitting link-time failures. > > +QT5BASE_CFLAGS += -mno-millicode -mlong-calls > > +endif > > + > > ifeq ($(BR2_PACKAGE_QT5BASE_EGLFS),y) > > QT5BASE_CONFIGURE_OPTS += -eglfs > > QT5BASE_DEPENDENCIES += libegl > > diff --git a/package/qt5/qt5webkit/0005-Add-support-for-ARC-processors.patch b/package/qt5/qt5webkit/0005-Add-support-for-ARC-processors.patch > > new file mode 100644 > > index 0000000000..92f023eab6 > > --- /dev/null > > +++ b/package/qt5/qt5webkit/0005-Add-support-for-ARC-processors.patch > > @@ -0,0 +1,93 @@ > > +From 8da574cf8f30f69e47f76705aa2eb07000540aeb Mon Sep 17 00:00:00 2001 > > +From: Alexey Brodkin <abrodkin@synopsys.com> > > +Date: Mon, 21 Feb 2022 18:28:00 +0300 > > +Subject: [PATCH] Add support for ARC processors > > + > > +Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com> > > Upstream status of this patch? I may have missed it, but as far as I know there has not been any activity in WebKit's Bugzilla regarding ARC support. While I am do now much about ARC, the changes do not look particularly low-level, so feel free to add me in CC in the relevant Bugzilla issues and I can try to help get them reviewed -- make sure to take a look at the contribution guide if you haven't already: https://webkit.org/contributing-code/ Cheers, -Adrian > > +--- > > + CMakeLists.txt | 4 +++- > > + Source/JavaScriptCore/CMakeLists.txt | 3 ++- > > + Source/WTF/wtf/Platform.h | 8 ++++++++ > > + Source/WTF/wtf/dtoa/utils.h | 2 +- > > + Source/cmake/OptionsQt.cmake | 4 ++++ > > + 5 files changed, 18 insertions(+), 3 deletions(-) > > + > > +diff --git a/CMakeLists.txt b/CMakeLists.txt > > +index 31a2ea1fd..f0dfbda5b 100644 > > +--- a/CMakeLists.txt > > ++++ b/CMakeLists.txt > > +@@ -57,7 +57,9 @@ if (MSVC_CXX_ARCHITECTURE_ID) > > + else () > > + string(TOLOWER ${CMAKE_SYSTEM_PROCESSOR} LOWERCASE_CMAKE_SYSTEM_PROCESSOR) > > + endif () > > +-if (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "^arm") > > ++if (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "^arc") > > ++ set(WTF_CPU_ARC 1) > > ++elseif (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "^arm") > > + set(WTF_CPU_ARM 1) > > + elseif (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "^aarch64") > > + set(WTF_CPU_ARM64 1) > > +diff --git a/Source/JavaScriptCore/CMakeLists.txt b/Source/JavaScriptCore/CMakeLists.txt > > +index 937b3ed00..205dde288 100644 > > +--- a/Source/JavaScriptCore/CMakeLists.txt > > ++++ b/Source/JavaScriptCore/CMakeLists.txt > > +@@ -1275,7 +1275,8 @@ if (ENABLE_WEB_REPLAY) > > + list(APPEND JavaScriptCore_HEADERS ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/JSReplayInputs.h) > > + endif () > > + > > +-if (WTF_CPU_ARM) > > ++if (WTF_CPU_ARC) > > ++elseif (WTF_CPU_ARM) > > + elseif (WTF_CPU_ARM64) > > + elseif (WTF_CPU_ALPHA) > > + elseif (WTF_CPU_HPPA) > > +diff --git a/Source/WTF/wtf/Platform.h b/Source/WTF/wtf/Platform.h > > +index 5717f3ea1..b327ed693 100644 > > +--- a/Source/WTF/wtf/Platform.h > > ++++ b/Source/WTF/wtf/Platform.h > > +@@ -349,6 +349,14 @@ > > + > > + #endif /* ARM */ > > + > > ++/* CPU(ARC) - ARC */ > > ++#if defined(__arc__) > > ++#define WTF_CPU_ARC 1 > > ++#if defined(__BIG_ENDIAN__) > > ++#define WTF_CPU_BIG_ENDIAN 1 > > ++#endif > > ++#endif > > ++ > > + #if CPU(ARM) || CPU(MIPS) || CPU(SH4) || CPU(ALPHA) || CPU(HPPA) > > + #define WTF_CPU_NEEDS_ALIGNED_ACCESS 1 > > + #endif > > +diff --git a/Source/WTF/wtf/dtoa/utils.h b/Source/WTF/wtf/dtoa/utils.h > > +index 889642cee..8f1e9933e 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(MIPS64) || CPU(PPC) || CPU(PPC64) || CPU(PPC64LE) || CPU(SH4) || CPU(S390) || CPU(S390X) || CPU(IA64) || CPU(ALPHA) || CPU(ARM64) || CPU(HPPA) > > ++#elif CPU(MIPS) || CPU(MIPS64) || CPU(PPC) || CPU(PPC64) || CPU(PPC64LE) || CPU(SH4) || CPU(S390) || CPU(S390X) || CPU(IA64) || CPU(ALPHA) || CPU(ARM64) || CPU(HPPA) || CPU(ARC) > > + #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1 > > + #elif defined(_M_IX86) || defined(__i386__) > > + #if defined(_WIN32) > > +diff --git a/Source/cmake/OptionsQt.cmake b/Source/cmake/OptionsQt.cmake > > +index ec6081de0..e1a5efc1e 100644 > > +--- a/Source/cmake/OptionsQt.cmake > > ++++ b/Source/cmake/OptionsQt.cmake > > +@@ -365,6 +365,10 @@ if (MINGW AND CMAKE_SIZEOF_VOID_P EQUAL 8) > > + WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_JIT PRIVATE OFF) > > + endif () > > + > > ++if (WTF_CPU_ARC) > > ++ WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_JIT PRIVATE OFF) > > ++endif () > > ++ > > + WEBKIT_OPTION_CONFLICT(USE_GSTREAMER USE_QT_MULTIMEDIA) > > + WEBKIT_OPTION_CONFLICT(USE_GSTREAMER USE_MEDIA_FOUNDATION) > > + WEBKIT_OPTION_CONFLICT(USE_QT_MULTIMEDIA USE_MEDIA_FOUNDATION) > > +-- > > +2.25.1 > > +
diff --git a/package/qt5/Config.in b/package/qt5/Config.in index f2b1ff4a19..cbb2e06a21 100644 --- a/package/qt5/Config.in +++ b/package/qt5/Config.in @@ -7,7 +7,7 @@ config BR2_PACKAGE_QT5_JSCORE_AVAILABLE bool default y # Javascript engine is only available on certain architectures - depends on BR2_arm || BR2_aarch64 || BR2_i386 || BR2_x86_64 || BR2_mipsel + depends on BR2_arm || BR2_aarch64 || BR2_i386 || BR2_x86_64 || BR2_mipsel || BR2_arc # ARM needs BLX, so v5t+ depends on !BR2_ARM_CPU_ARMV4 diff --git a/package/qt5/qt5base/qt5base.mk b/package/qt5/qt5base/qt5base.mk index ef38d03253..b25e0f44b6 100644 --- a/package/qt5/qt5base/qt5base.mk +++ b/package/qt5/qt5base/qt5base.mk @@ -201,6 +201,19 @@ endif QT5BASE_DEFAULT_QPA = $(call qstrip,$(BR2_PACKAGE_QT5BASE_DEFAULT_QPA)) QT5BASE_CONFIGURE_OPTS += $(if $(QT5BASE_DEFAULT_QPA),-qpa $(QT5BASE_DEFAULT_QPA)) +ifeq ($(BR2_arc),y) +# In case of -Os (which is default in BR) gcc will use millicode implementation +# from libgcc. That along with performance degradation may lead to issues during +# linkage stage. In case of QtWebkit exactly that happens - millicode functions +# get put way too far from caller functions and so linker fails. +# To solve that problem we explicitly disable millicode call generation for Qt. +# Also due to some Qt5 libs being really huge (the best example is QtWebKit) +# it's good to firce compiler to not assume short or even medium-length calls +# could be used. I.e. always use long jump instaructions. +# Otherwise there's a high risk of hitting link-time failures. +QT5BASE_CFLAGS += -mno-millicode -mlong-calls +endif + ifeq ($(BR2_PACKAGE_QT5BASE_EGLFS),y) QT5BASE_CONFIGURE_OPTS += -eglfs QT5BASE_DEPENDENCIES += libegl diff --git a/package/qt5/qt5webkit/0005-Add-support-for-ARC-processors.patch b/package/qt5/qt5webkit/0005-Add-support-for-ARC-processors.patch new file mode 100644 index 0000000000..92f023eab6 --- /dev/null +++ b/package/qt5/qt5webkit/0005-Add-support-for-ARC-processors.patch @@ -0,0 +1,93 @@ +From 8da574cf8f30f69e47f76705aa2eb07000540aeb Mon Sep 17 00:00:00 2001 +From: Alexey Brodkin <abrodkin@synopsys.com> +Date: Mon, 21 Feb 2022 18:28:00 +0300 +Subject: [PATCH] Add support for ARC processors + +Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com> +--- + CMakeLists.txt | 4 +++- + Source/JavaScriptCore/CMakeLists.txt | 3 ++- + Source/WTF/wtf/Platform.h | 8 ++++++++ + Source/WTF/wtf/dtoa/utils.h | 2 +- + Source/cmake/OptionsQt.cmake | 4 ++++ + 5 files changed, 18 insertions(+), 3 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 31a2ea1fd..f0dfbda5b 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -57,7 +57,9 @@ if (MSVC_CXX_ARCHITECTURE_ID) + else () + string(TOLOWER ${CMAKE_SYSTEM_PROCESSOR} LOWERCASE_CMAKE_SYSTEM_PROCESSOR) + endif () +-if (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "^arm") ++if (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "^arc") ++ set(WTF_CPU_ARC 1) ++elseif (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "^arm") + set(WTF_CPU_ARM 1) + elseif (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "^aarch64") + set(WTF_CPU_ARM64 1) +diff --git a/Source/JavaScriptCore/CMakeLists.txt b/Source/JavaScriptCore/CMakeLists.txt +index 937b3ed00..205dde288 100644 +--- a/Source/JavaScriptCore/CMakeLists.txt ++++ b/Source/JavaScriptCore/CMakeLists.txt +@@ -1275,7 +1275,8 @@ if (ENABLE_WEB_REPLAY) + list(APPEND JavaScriptCore_HEADERS ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/JSReplayInputs.h) + endif () + +-if (WTF_CPU_ARM) ++if (WTF_CPU_ARC) ++elseif (WTF_CPU_ARM) + elseif (WTF_CPU_ARM64) + elseif (WTF_CPU_ALPHA) + elseif (WTF_CPU_HPPA) +diff --git a/Source/WTF/wtf/Platform.h b/Source/WTF/wtf/Platform.h +index 5717f3ea1..b327ed693 100644 +--- a/Source/WTF/wtf/Platform.h ++++ b/Source/WTF/wtf/Platform.h +@@ -349,6 +349,14 @@ + + #endif /* ARM */ + ++/* CPU(ARC) - ARC */ ++#if defined(__arc__) ++#define WTF_CPU_ARC 1 ++#if defined(__BIG_ENDIAN__) ++#define WTF_CPU_BIG_ENDIAN 1 ++#endif ++#endif ++ + #if CPU(ARM) || CPU(MIPS) || CPU(SH4) || CPU(ALPHA) || CPU(HPPA) + #define WTF_CPU_NEEDS_ALIGNED_ACCESS 1 + #endif +diff --git a/Source/WTF/wtf/dtoa/utils.h b/Source/WTF/wtf/dtoa/utils.h +index 889642cee..8f1e9933e 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(MIPS64) || CPU(PPC) || CPU(PPC64) || CPU(PPC64LE) || CPU(SH4) || CPU(S390) || CPU(S390X) || CPU(IA64) || CPU(ALPHA) || CPU(ARM64) || CPU(HPPA) ++#elif CPU(MIPS) || CPU(MIPS64) || CPU(PPC) || CPU(PPC64) || CPU(PPC64LE) || CPU(SH4) || CPU(S390) || CPU(S390X) || CPU(IA64) || CPU(ALPHA) || CPU(ARM64) || CPU(HPPA) || CPU(ARC) + #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1 + #elif defined(_M_IX86) || defined(__i386__) + #if defined(_WIN32) +diff --git a/Source/cmake/OptionsQt.cmake b/Source/cmake/OptionsQt.cmake +index ec6081de0..e1a5efc1e 100644 +--- a/Source/cmake/OptionsQt.cmake ++++ b/Source/cmake/OptionsQt.cmake +@@ -365,6 +365,10 @@ if (MINGW AND CMAKE_SIZEOF_VOID_P EQUAL 8) + WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_JIT PRIVATE OFF) + endif () + ++if (WTF_CPU_ARC) ++ WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_JIT PRIVATE OFF) ++endif () ++ + WEBKIT_OPTION_CONFLICT(USE_GSTREAMER USE_QT_MULTIMEDIA) + WEBKIT_OPTION_CONFLICT(USE_GSTREAMER USE_MEDIA_FOUNDATION) + WEBKIT_OPTION_CONFLICT(USE_QT_MULTIMEDIA USE_MEDIA_FOUNDATION) +-- +2.25.1 +
This patch adds support of ARC architecture in Qt's JS core and Webkit. The change itself is quite straight-forward: 1. Enable JS core for ARC 2. Make sure so-called "large memory model" is used, i.e. relocations with long jumps are being generated for global symbols, as otherwise insanely huge libqt5webkit.so fails to link because some symbols might be more than 32 MiB away from each other. 3. Make the original WebKit build system aware of yet another CPU architecture with explicitly disabled JIT in JS core for ARC. Obviously, this one depends on [1]. [1] https://patchwork.ozlabs.org/project/buildroot/patch/20220221140628.2295-1-abrodkin@synopsys.com/ Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com> Cc: Thomas Petazzoni <thomas.petazzoni@bootlin.com> Cc: Peter Seiderer <ps.report@gmx.net> --- package/qt5/Config.in | 2 +- package/qt5/qt5base/qt5base.mk | 13 +++ .../0005-Add-support-for-ARC-processors.patch | 93 +++++++++++++++++++ 3 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 package/qt5/qt5webkit/0005-Add-support-for-ARC-processors.patch