On Mon, Jan 13 2020, Charlene Wendling <juliana...@posteo.jp> wrote:
> Hi!
>
>> http://build-failures.rhaalovely.net/powerpc/last/lang/quickjs.log
> (not the same issue on sparc64 and mips64)

The issue there is pointer truncation because only amd64 and arm64 are
recognized as 64 bits archs.

> As mentioned by the COMPILER comment, it requires stdatomic so we need
> to link it on powerpc and probably hppa.
>
> Later, i've found out that on big endian archs an extra define seems
> needed, because none of our includes define WORDS_BIGENDIAN, and it
> is not defined by the upstream Makefile.

#undef WORDS_BIGENDIAN is hardcoded in cutils.h, we should just adjust
the header to our needs.  Setting -DWORDS_BIGENDIAN on the command-line
isn't enough because of the #undef.

> If you wonder why i searched
> for it, it's because tests are successfully failing:
>
> --8<--
> ===>  Regression tests for quickjs-2019.10.27
> cc -O2 -pipe -DWORDS_BIGENDIAN -Wall -MMD -MF .obj/bjson.pic.o.d 
> -Wno-array-bounds -D_GNU_SOURCE -DCONFIG_VERSION=\"2019-10-27\" -fPIC 
> -DJS_SHARED_LIBRARY -c -o .obj/tests/bjson.pic.o tests/bjson.c
> cc -latomic -shared -o tests/bjson.so .obj/tests/bjson.pic.o -lm 
> ./qjs tests/test_closure.js
> ./qjs tests/test_op.js
> ./qjs tests/test_builtin.js
> Error: assertion failed: got 
> |0,0,255,255,0,0,0,0,63,128,0,0,255,255,255,255|, expected 
> |0,0,255,255,0,0,0,0,0,0,128,63,255,255,255,255|
>     at assert (tests/test_builtin.js:17)
>     at test_typed_array (tests/test_builtin.js:410)
>     at <eval> (tests/test_builtin.js:637)
> -->8--
>
> Tests are using javascript TypedArrays in many places, and it appears
> that these arrays are byte-order dependent [0]. It would require a
> lot of patching, so i think we should pass it, as far as ports are
> concerned. The latest version has no changes that would solve the
> issue.

Yep.  I'm not sure how to disable those tests on BE archs so we can get
useful test results.  For now I just disabled the whole typed array test
function using sed -i.

> It indeed builds [1] on macppc. No REVISION bump is needed, we have
> no quickjs package built on all ${BE_ARCHS}.
>
> Comments/feedback are welcome,
>
> Charlène.
>
>
> [0] 
> https://hacks.mozilla.org/2017/01/typedarray-or-dataview-understanding-byte-order/
> [1] https://bin.charlenew.xyz/quickjs.log
>
>
> Index: Makefile
> ===================================================================
> RCS file: /cvs/ports/lang/quickjs/Makefile,v
> retrieving revision 1.1.1.1
> diff -u -p -u -p -r1.1.1.1 Makefile
> --- Makefile  21 Dec 2019 14:24:03 -0000      1.1.1.1
> +++ Makefile  13 Jan 2020 16:37:11 -0000
> @@ -23,4 +23,15 @@ COMPILER = base-clang ports-gcc
>  USE_GMAKE =  Yes
>  MAKE_FLAGS = CC="${CC}"
>  
> +# Fix "undefined reference to `__atomic_store_8'"
> +.if ${MACHINE_ARCH:Mpowerpc} || ${MACHINE_ARCH:Mhppa}
> +WANTLIB +=   atomic
> +MAKE_FLAGS +=        LDFLAGS="${LDFLAGS} -latomic"
> +.endif

This part is ok jca@ if you want to commit it right away.

> +
> +.include <bsd.port.arch.mk>
> +.if ${PROPERTIES:Mbe}
> +CFLAGS +=    -DWORDS_BIGENDIAN
> +.endif
> +
>  .include <bsd.port.mk>

This part isn't effective because of the #undef in cutils.h.  It doesn't
seem to affect tests much, though.  :)

Here's a diff with a bunch of fixes and tweaks along with your -latomic
fix:
- tweak Makefile to make it look more like Makefile.template
- set COMPILER_LANGS since c++ support isn't needed
- use endian.h to detect endianness
- use __LP64__ to detect 64 bits archs and avoid pointer truncation that
  breaks sparc64 and mips64
- use __LP64__ to detect 64 bits archs and properly size bignums
- bump REVISION because arm64 is affected by the latter


ok?


Index: Makefile
===================================================================
RCS file: /cvs/ports/lang/quickjs/Makefile,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 Makefile
--- Makefile    21 Dec 2019 14:24:03 -0000      1.1.1.1
+++ Makefile    14 Jan 2020 15:10:29 -0000
@@ -1,10 +1,12 @@
 # $OpenBSD: Makefile,v 1.1.1.1 2019/12/21 14:24:03 bcallah Exp $
 
-V =            2019.10.27
 COMMENT =      small, embeddable JavaScript engine in C
+
+V =            2019.10.27
+REVISION =     0
 DISTNAME =     quickjs-${V:S/./-/g}
 PKGNAME =      quickjs-${V}
-EXTRACT_SUFX = .tar.xz
+
 CATEGORIES =   lang
 
 HOMEPAGE =     https://bellard.org/quickjs/
@@ -16,11 +18,19 @@ PERMIT_PACKAGE =    Yes
 WANTLIB += c m
 
 MASTER_SITES = https://bellard.org/quickjs/
+EXTRACT_SUFX = .tar.xz
 
 # Requires stdatomic
 COMPILER =     base-clang ports-gcc
+COMPILER_LANGS = c
 
 USE_GMAKE =    Yes
 MAKE_FLAGS =   CC="${CC}"
+
+# Fix "undefined reference to `__atomic_store_8'"
+.if ${MACHINE_ARCH:Mpowerpc} || ${MACHINE_ARCH:Mhppa}
+WANTLIB +=     atomic
+MAKE_FLAGS +=  LDFLAGS="${LDFLAGS} -latomic"
+.endif
 
 .include <bsd.port.mk>
Index: patches/patch-cutils_h
===================================================================
RCS file: patches/patch-cutils_h
diff -N patches/patch-cutils_h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-cutils_h      14 Jan 2020 15:10:29 -0000
@@ -0,0 +1,21 @@
+$OpenBSD$
+
+Properly detect endianness.
+
+Index: cutils.h
+--- cutils.h.orig
++++ cutils.h
+@@ -28,8 +28,11 @@
+ #include <stdlib.h>
+ #include <inttypes.h>
+ 
+-/* set if CPU is big endian */
+-#undef WORDS_BIGENDIAN
++#include <endian.h>
++
++#if BYTE_ORDER == BIG_ENDIAN
++#define WORDS_BIGENDIAN
++#endif
+ 
+ #define likely(x)       __builtin_expect(!!(x), 1)
+ #define unlikely(x)     __builtin_expect(!!(x), 0)
Index: patches/patch-libbf_h
===================================================================
RCS file: patches/patch-libbf_h
diff -N patches/patch-libbf_h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-libbf_h       14 Jan 2020 15:10:29 -0000
@@ -0,0 +1,16 @@
+$OpenBSD$
+
+Use more generic test for 64 bits platform.
+
+Index: libbf.h
+--- libbf.h.orig
++++ libbf.h
+@@ -27,7 +27,7 @@
+ #include <stddef.h>
+ #include <stdint.h>
+ 
+-#if defined(__x86_64__)
++#if defined(__LP64__)
+ #define LIMB_LOG2_BITS 6
+ #else
+ #define LIMB_LOG2_BITS 5
Index: patches/patch-quickjs_h
===================================================================
RCS file: patches/patch-quickjs_h
diff -N patches/patch-quickjs_h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-quickjs_h     14 Jan 2020 15:10:29 -0000
@@ -0,0 +1,16 @@
+$OpenBSD$
+
+Use more generic test for 64 bits platform.
+
+Index: quickjs.h
+--- quickjs.h.orig
++++ quickjs.h
+@@ -53,7 +53,7 @@ typedef struct JSClass JSClass;
+ typedef uint32_t JSClassID;
+ typedef uint32_t JSAtom;
+ 
+-#if defined(__x86_64__) || defined(__aarch64__)
++#if defined(__LP64__)
+ #define JS_PTR64
+ #define JS_PTR64_DEF(a) a
+ #else


-- 
jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF  DDCC 0DFA 74AE 1524 E7EE

Reply via email to