>> George Koehler <[email protected]> writes:
>>
>>> I have a problem: if devel/capstone/main is installed, then sbcl fails
>>> to build on powerpc. This happens with sbcl-2.1.11 or sbcl-2.2.1.
>>>
>>> sbcl doesn't depend on capstone, and doesn't need capstone to build
>>> contrib/sb-capstone, but does try to test sb-capstone during the
>>> build. If libcapstone.so is missing, then sbcl skips the test. If
>>> libcapstone.so is found, then the test crashes, so the build fails.
>>> An installed capstone broke sbcl-2.1.11 in the ongoing powerpc bulk;
>>> I told the bulk to retry sbcl; it succeeded after removing capstone.
I think I've finally solved it. The problem is that contrib/sb-capstone
hardcodes some values from capstone.h so lisp can call the C functions.
This "transcription" however is not accurate and worked until now by
pure chance on 64 bit arches due to how arguments are passed and struct
padding, pure luck!
I've also discovered that sbcl compiles on i386 if built with ecl. To
be honest the sbcl build infrastructure scares me, so I haven't digged
into understanding why clisp won't do it when it works on amd64 and
powerpc. The downside is that ecl is quite slow, here it takes roughly
an hour and half to compile the port with it.
So, the following patch updates sbcl, adds a bdep on capstone^1, fixes
the issue reported and re-enables it for i386 with the ecl workaround.
The patch should definitely be upstreamed and I'll look into how to do
it tomorrow.
OK/Comments/Tests? :)
1: the build is not affected by the presence of capstone and the module
is built anyway; if it's present it just runs some extra tests that
otherwise are skipped.
Cheers,
Omar Polo
Index: Makefile
===================================================================
RCS file: /cvs/ports/lang/sbcl/Makefile,v
retrieving revision 1.47
diff -u -p -r1.47 Makefile
--- Makefile 31 Dec 2021 09:53:11 -0000 1.47
+++ Makefile 22 Feb 2022 23:07:25 -0000
@@ -1,31 +1,12 @@
# $OpenBSD: Makefile,v 1.47 2021/12/31 09:53:11 solene Exp $
-BROKEN-i386 = build fails in "Compiling file
[...]/src/compiler/generic/genesis.lisp"
-# ;; Compiling file
/pobj/sbcl-2.0.1/sbcl-2.0.1/src/compiler/generic/genesis.lisp ...
-# ;; Wrote file
/pobj/sbcl-2.0.1/sbcl-2.0.1/obj/from-host/src/compiler/generic/genesis.fas-tmp
-# 0 errors, 0 warnings
-# ;; Loading file obj/from-host/src/compiler/generic/genesis.fas ...
-# ;; Loaded file obj/from-host/src/compiler/generic/genesis.fas
-# *** - OPEN: File
-# #P"/pobj/sbcl-2.0.1/sbcl-2.0.1/obj/from-xc/tls-init.lisp-expr" does not
-# exist
-# The following restarts are available:
-# SKIP :R1 skip (GENESIS OBJECT-FILE-NAMES # ...)
-# RETRY :R2 retry (GENESIS OBJECT-FILE-NAMES # ...)
-# STOP :R3 stop loading file
/pobj/sbcl-2.0.1/sbcl-2.0.1/make-genesis-2.lisp
-# ABORT-BUILD :R4 Abort building SBCL.
-# ABORT :R5 Abort main loop
-# //testing for consistency of first and second GENESIS passes
-# diff: output/genesis-2: No such file or directory
-# error: header files do not match between first and second GENESIS
-
# not yet ported to other arches
ONLY_FOR_ARCHS = amd64 i386 powerpc
USE_WXNEEDED = Yes
COMMENT= compiler and runtime system for ANSI Common Lisp
-V = 2.1.11
+V = 2.2.1
DISTNAME= sbcl-${V}-source
PKGNAME= sbcl-${V}
WRKDIST= ${WRKDIR}/sbcl-${V}
@@ -58,10 +39,17 @@ WANTLIB+= pthread
MAKE_PARAMS += --with-sb-core-compression \
--with-sb-xref-for-internals
+# contrib/sb-capstone/test.lisp opens it at build-time if present
+BUILD_DEPENDS = devel/capstone/main
+
.if ${FLAVOR:Mnative_bootstrap}
BUILD_DEPENDS+= lang/sbcl
BOOTSTRAP_CMD= ${LOCALBASE}/bin/sbcl \
--disable-debugger --no-sysinit --no-userinit
+.elif ${MACHINE_ARCH:Mi386}
+# ecl is way slower but clips fails to build sbcl on i386
+BUILD_DEPENDS += lang/ecl
+BOOTSTRAP_CMD = ${LOCALBASE}/bin/ecl -q --norc
.else
BUILD_DEPENDS += lang/clisp
BOOTSTRAP_CMD = ${LOCALBASE}/bin/clisp -q -norc
Index: distinfo
===================================================================
RCS file: /cvs/ports/lang/sbcl/distinfo,v
retrieving revision 1.21
diff -u -p -r1.21 distinfo
--- distinfo 31 Dec 2021 09:53:11 -0000 1.21
+++ distinfo 22 Feb 2022 23:07:25 -0000
@@ -1,2 +1,2 @@
-SHA256 (sbcl-2.1.11-source.tar.bz2) =
v8FIHef9vfru8qsPDo6E79NDQz3qjSHPvqiwFGy9/v0=
-SIZE (sbcl-2.1.11-source.tar.bz2) = 6687529
+SHA256 (sbcl-2.2.1-source.tar.bz2) =
Xdbm4/CLfG7fJioOhEqfi15WLMoIFVA0wfLAFPyQh9o=
+SIZE (sbcl-2.2.1-source.tar.bz2) = 6701705
Index: patches/patch-contrib_sb-capstone_capstone_lisp
===================================================================
RCS file: patches/patch-contrib_sb-capstone_capstone_lisp
diff -N patches/patch-contrib_sb-capstone_capstone_lisp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-contrib_sb-capstone_capstone_lisp 22 Feb 2022 23:07:25
-0000
@@ -0,0 +1,26 @@
+$OpenBSD$
+
+sync a couple of size mismatches with capstone.h; fixes the build on
+32bit arches (i386, powerpc.)
+
+Index: contrib/sb-capstone/capstone.lisp
+--- contrib/sb-capstone/capstone.lisp.orig
++++ contrib/sb-capstone/capstone.lisp
+@@ -285,7 +285,7 @@
+ (define-alien-type cs-insn
+ (struct nil
+ (insn-id int)
+- (insn-addr unsigned)
++ (insn-addr (integer 64))
+ (insn-size short)
+ (insn-bytes (array char 16))
+ (insn-mnemonic (array char 32))
+@@ -310,7 +310,7 @@
+
+ ;; The handle returned by cs-open will be represented as being of type
unsigned
+
+-(define-alien-routine cs-open int (arch int) (mode (integer 64)) (handle
unsigned :out))
++(define-alien-routine cs-open int (arch int) (mode unsigned) (handle unsigned
:out))
+
+ (define-alien-routine cs-version unsigned (major int :out) (minor int :out))
+