commit:     ba4514f5b434a0a974c6d5ad759f4f6bde11eaaf
Author:     WANG Xuerui <xen0n <AT> gentoo <DOT> org>
AuthorDate: Wed May 25 14:32:30 2022 +0000
Commit:     WANG Xuerui <xen0n <AT> gentoo <DOT> org>
CommitDate: Thu May 26 00:55:36 2022 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=ba4514f5

dev-lang/spidermonkey: fix build on loong for 68.12.0-r1

Patch applied here has been running on real loong hardware since late
2021, simple and no problems so far.

See: https://github.com/gentoo/gentoo/pull/25632
Acked-by: Joonas Niilola <juippis <AT> gentoo.org>
Signed-off-by: WANG Xuerui <xen0n <AT> gentoo.org>

 .../files/spidermonkey-68.0-loong-support.patch    | 103 +++++++++++++++++++++
 .../spidermonkey/spidermonkey-68.12.0-r1.ebuild    |   1 +
 2 files changed, 104 insertions(+)

diff --git a/dev-lang/spidermonkey/files/spidermonkey-68.0-loong-support.patch 
b/dev-lang/spidermonkey/files/spidermonkey-68.0-loong-support.patch
new file mode 100644
index 000000000000..f7010d5ebf32
--- /dev/null
+++ b/dev-lang/spidermonkey/files/spidermonkey-68.0-loong-support.patch
@@ -0,0 +1,103 @@
+https://raw.githubusercontent.com/xen0n/loongson-overlay/00901fd4c599ec320c7852cbd30b40d3f6aa8971/dev-lang/spidermonkey/files/spidermonkey-68.0-add-loongarch64-support.patch
+
+--- a/build/moz.configure/init.configure
++++ b/build/moz.configure/init.configure
+@@ -734,6 +734,9 @@ def split_triplet(triplet, allow_unknown
+     elif cpu == 'sh4':
+         canonical_cpu = 'sh4'
+         endianness = 'little'
++    elif cpu == 'loongarch64':
++        canonical_cpu = 'loongarch64'
++        endianness = 'little'
+     elif allow_unknown:
+         canonical_cpu = cpu
+         endianness = 'unknown'
+--- a/js/src/jit/AtomicOperations.h
++++ b/js/src/jit/AtomicOperations.h
+@@ -382,6 +382,9 @@ inline bool AtomicOperations::isLockfree
+ #  else
+ #    include "jit/shared/AtomicOperations-feeling-lucky.h"
+ #  endif
++#elif defined(__loongarch64)
++// This is only here to avoid merge conflict with 
spidermonkey-68.0-add-riscv-support.patch.
++#  include "jit/shared/AtomicOperations-feeling-lucky.h"
+ #elif defined(__mips__)
+ #  if defined(__clang__) || defined(__GNUC__)
+ #    include "jit/mips-shared/AtomicOperations-mips-shared.h"
+--- a/js/src/jit/shared/AtomicOperations-feeling-lucky-gcc.h
++++ b/js/src/jit/shared/AtomicOperations-feeling-lucky-gcc.h
+@@ -57,6 +57,11 @@
+ #  define HAS_64BIT_LOCKFREE
+ #endif
+ 
++#ifdef __loongarch64
++#  define HAS_64BIT_ATOMICS
++#  define HAS_64BIT_LOCKFREE
++#endif
++
+ #if defined(__ppc64__) || defined(__PPC64__) || defined(__ppc64le__) || \
+     defined(__PPC64LE__)
+ #  define HAS_64BIT_ATOMICS
+--- a/mfbt/tests/TestPoisonArea.cpp
++++ b/mfbt/tests/TestPoisonArea.cpp
+@@ -127,6 +127,9 @@
+ #elif defined __arm__ || defined _M_ARM
+ #  define RETURN_INSTR 0xE12FFF1E /* bx lr */
+ 
++#elif defined __loongarch__
++#  define RETURN_INSTR 0x4c000020 /* jirl zero, ra, 0 */
++
+ // PPC has its own style of CPU-id #defines.  There is no Windows for
+ // PPC as far as I know, so no _M_ variant.
+ #elif defined _ARCH_PPC || defined _ARCH_PWR || defined _ARCH_PWR2
+--- a/python/mozbuild/mozbuild/configure/constants.py
++++ b/python/mozbuild/mozbuild/configure/constants.py
+@@ -46,6 +46,7 @@ CPU_bitness = {
+     'arm': 32,
+     'hppa': 32,
+     'ia64': 64,
++    'loongarch64': 64,
+     'mips32': 32,
+     'mips64': 64,
+     'ppc': 32,
+@@ -78,6 +79,7 @@ CPU_preprocessor_checks = OrderedDict((
+     ('arm', '__arm__ || _M_ARM'),
+     ('aarch64', '__aarch64__ || _M_ARM64'),
+     ('ia64', '__ia64__'),
++    ('loongarch64', '__loongarch64'),
+     ('s390x', '__s390x__'),
+     ('s390', '__s390__'),
+     ('ppc64', '__powerpc64__'),
+--- a/python/mozbuild/mozbuild/test/configure/test_toolchain_configure.py
++++ b/python/mozbuild/mozbuild/test/configure/test_toolchain_configure.py
+@@ -1068,6 +1068,10 @@ class LinuxCrossCompileToolchainTest(Bas
+         'ia64-unknown-linux-gnu': little_endian + {
+             '__ia64__': 1,
+         },
++        'loongarch64-unknown-linux-gnu': little_endian + {
++            '__loongarch__': 1,
++            '__loongarch64': 1,
++        },
+         's390x-unknown-linux-gnu': big_endian + {
+             '__s390x__': 1,
+             '__s390__': 1,
+--- a/intl/icu/source/i18n/double-conversion-utils.h
++++ b/intl/icu/source/i18n/double-conversion-utils.h
+@@ -117,6 +117,7 @@ int main(int argc, char** argv) {
+ #if defined(_M_X64) || defined(__x86_64__) || \
+     defined(__ARMEL__) || defined(__avr32__) || defined(_M_ARM) || 
defined(_M_ARM64) || \
+     defined(__hppa__) || defined(__ia64__) || \
++    defined(__loongarch__) || \
+     defined(__mips__) || \
+     defined(__nios2__) || defined(__ghs) || \
+     defined(__powerpc__) || defined(__ppc__) || defined(__ppc64__) || \
+--- a/mfbt/double-conversion/double-conversion/utils.h
++++ b/mfbt/double-conversion/double-conversion/utils.h
+@@ -117,6 +117,7 @@ int main(int argc, char** argv) {
+ #if defined(_M_X64) || defined(__x86_64__) || \
+     defined(__ARMEL__) || defined(__avr32__) || defined(_M_ARM) || 
defined(_M_ARM64) || \
+     defined(__hppa__) || defined(__ia64__) || \
++    defined(__loongarch__) || \
+     defined(__mips__) || \
+     defined(__nios2__) || defined(__ghs) || \
+     defined(__powerpc__) || defined(__ppc__) || defined(__ppc64__) || \

diff --git a/dev-lang/spidermonkey/spidermonkey-68.12.0-r1.ebuild 
b/dev-lang/spidermonkey/spidermonkey-68.12.0-r1.ebuild
index a836814ad075..46cc4b1b3634 100644
--- a/dev-lang/spidermonkey/spidermonkey-68.12.0-r1.ebuild
+++ b/dev-lang/spidermonkey/spidermonkey-68.12.0-r1.ebuild
@@ -101,6 +101,7 @@ src_prepare() {
        eapply "${WORKDIR}"/firefox
        eapply "${WORKDIR}"/spidermonkey-patches
        eapply "${FILESDIR}"/spidermonkey-68.0-add-riscv-support.patch
+       eapply "${FILESDIR}"/spidermonkey-68.0-loong-support.patch
 
        default
 

Reply via email to