libb2 fails to build during cross-compilation

  • Open
  • quality assurance status badge
Details
2 participants
  • Christoph Buck
  • Christoph Buck
Owner
unassigned
Submitted by
Christoph Buck
Severity
normal
C
C
Christoph Buck wrote on 24 May 17:24 +0200
(address . bug-guix@gnu.org)
874jantepp.fsf@icepic.de
Hi!

The package libb2 in `(gnu packages crypto)` fails during
cross-compilation from `x86_64-linux-gn` to `aarch64-linux-gnu`, but
possible more combinations are broken.

Steps to reproduce:

Toggle quote (35 lines)
> git log --oneline HEAD^..HEAD

> 9901416233 (origin/master, origin/HEAD) gnu: ctl: Update to 1.5.3.

> ./pre-inst-env guix build libb2 --system=x86_64-linux > --target=aarch64-linux-gnu --no-substitutes --no-grafts

> [...]
> checking for objdir... .libs
> checking if aarch64-linux-gnu-gcc supports -fno-rtti -fno-exceptions... no
> checking for aarch64-linux-gnu-gcc option to produce PIC... -fPIC -DPIC
> checking if aarch64-linux-gnu-gcc PIC flag -fPIC -DPIC works... yes
> checking if aarch64-linux-gnu-gcc static flag -static works... yes
> checking if aarch64-linux-gnu-gcc supports -c -o file.o... yes
> checking if aarch64-linux-gnu-gcc supports -c -o file.o... (cached) yes
> checking whether the aarch64-linux-gnu-gcc linker (/gnu/store/kh7kl57h5i3vzx9hbbairnkkgnx7kf61-gcc-cross-aarch64-linux-gnu-11.3.0/libexec/gcc/aarch64-linux-gnu/ld) supports shared libraries... yes
> checking whether -lc should be explicitly linked in... no
> checking dynamic linker characteristics... GNU/Linux ld.so
> checking how to hardcode library paths into programs... immediate
> checking whether stripping libraries is possible... yes
> checking if libtool supports shared libraries... yes
> checking whether to build shared libraries... yes
> checking whether to build static libraries... yes
> checking whether C compiler accepts -O3... yes
> checking whether C compiler accepts -msse2... no
> configure: error: Compiler does not know -msse2.
> error: in phase 'configure': uncaught exception:
> %exception #<&invoke-error program: "/gnu/store/rib9g2ig1xf3kclyl076w28parmncg4k-bash-minimal-5.1.16/bin/bash" arguments: ("./configure" "CC_FOR_BUILD=gcc" "CONFIG_SHELL=/gnu/store/rib9g2ig1xf3kclyl076w28parmncg4k-bash-minimal-5.1.16/bin/bash" "SHELL=/gnu/store/rib9g2ig1xf3kclyl076w28parmncg4k-bash-minimal-5.1.16/bin/bash" "--prefix=/gnu/store/5cy4lw70ilgwbrmav12xli0lyqzwvmk5-libb2-0.98.1" "--enable-fast-install" "--build=x86_64-unknown-linux-gnu" "--host=aarch64-linux-gnu" "--enable-fat" "--disable-native") exit-status: 1 term-signal: #f stop-signal: #f>
> phase `configure' failed after 1.2 seconds
> command "/gnu/store/rib9g2ig1xf3kclyl076w28parmncg4k-bash-minimal-5.1.16/bin/bash" "./configure" "CC_FOR_BUILD=gcc" "CONFIG_SHELL=/gnu/store/rib9g2ig1xf3kclyl076w28parmncg4k-bash-minimal-5.1.16/bin/bash" "SHELL=/gnu/store/rib9g2ig1xf3kclyl076w28parmncg4k-bash-minimal-5.1.16/bin/bash" "--prefix=/gnu/store/5cy4lw70ilgwbrmav12xli0lyqzwvmk5-libb2-0.98.1" "--enable-fast-install" "--build=x86_64-unknown-linux-gnu" "--host=aarch64-linux-gnu" "--enable-fat" "--disable-native" failed with status 1
> builder for `/gnu/store/rlhm80fld1h2xszn3yh7x5fvr295x6qh-libb2-0.98.1.drv' failed with exit code 1
> build of /gnu/store/rlhm80fld1h2xszn3yh7x5fvr295x6qh-libb2-0.98.1.drv failed
> Could not find build log for '/gnu/store/rlhm80fld1h2xszn3yh7x5fvr295x6qh-libb2-0.98.1.drv'.
> guix build: error: build of > `/gnu/store/rlhm80fld1h2xszn3yh7x5fvr295x6qh-libb2-0.98.1.drv' failed


Root-cause:

The `configure-flags` in the package definition of libb2 are broken for
cross-compilation.

Toggle quote (10 lines)
> `(#:configure-flags
> (list
> ,@(if (any (cute string-prefix? <> (or (%current-system)
> (%current-target-system)))
> '("x86_64" "i686"))
> ;; fat only checks for Intel optimisations
> '("--enable-fat")
> '())
> "--disable-native"))

Shot-circuit evaluation of the `or` operator leads to enabling of `fat`
as long as `%current-system` is set to `x86_64/i686` regardless of the
value of `%current-target-system`. If `%current-target-system` is set
for example to the `aarch64-linux-gnu` triplet, `--enable-fat` is added
to the configure flags which in turn will break compilation. I am not
entirley sure, what `enable-fat` does. From my understanding this flag
enables fat binaries (or multiarchitecture binaries), which seems to
require the `sse2` instruction set. The cross compile toolchain for
aarch64-linux-gnu (and mostlikey other toolchains as well) does not
support this instruction set.

As a quick workaround, i came up with the following patch:

Toggle quote (12 lines)
> `(#:configure-flags
> (list
> ,@(let ((check-x86 (lambda (triplet) (any (cute string-prefix? <> triplet) '("x86_64" "i868")))))
> (if (%current-target-system)
> (if (check-x86 (%current-target-system))
> '("--enable-fat")
> '())
> (if (check-x86 (%current-system))
> '("--enable-fat")
> '())))
> "--disable-native"))

This enables fat binaries if the target system is set to `x86_64/i868`
regardless of the value of `%current-system`. If the target system is
not set, fat binaries are only enabled if the `%current-system` is set
to `x86_64/i868`. Most likely there is a cleaner way to write this, but
i am a total scheme newbee. If required, i can submit a real patch.

Best regards

Christoph
C
C
Christoph Buck wrote on 28 Jun 14:33 +0200
[PATCH] gnu: libb2: Fix cross-compilation for non x86_64 systems
(address . 71174@debbugs.gnu.org)(name . Christoph Buck)(address . dev@icepic.org)
49709079427ebd67560089df240d7aeb1bab9b1c.1719577991.git.dev@icepic.org
* gnu/packages/crypto.scm (libb2): Disable fat-binary compile time option for
non x86_64 target systems.

Change-Id: Ibdf009960fecae4ffc033a36b3abf28c2f8935aa
---
gnu/packages/crypto.scm | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)

Toggle diff (29 lines)
diff --git a/gnu/packages/crypto.scm b/gnu/packages/crypto.scm
index 9c62689d18..1d376fb43c 100644
--- a/gnu/packages/crypto.scm
+++ b/gnu/packages/crypto.scm
@@ -809,12 +809,14 @@ (define-public libb2
(arguments
`(#:configure-flags
(list
- ,@(if (any (cute string-prefix? <> (or (%current-system)
- (%current-target-system)))
- '("x86_64" "i686"))
- ;; fat only checks for Intel optimisations
- '("--enable-fat")
- '())
+ ,@(let ((check-x86 (lambda (triplet) (any (cute string-prefix? <> triplet) '("x86_64" "i868")))))
+ (if (%current-target-system)
+ (if (check-x86 (%current-target-system))
+ '("--enable-fat")
+ '())
+ (if (check-x86 (%current-system))
+ '("--enable-fat")
+ '())))
"--disable-native"))) ;don't optimise at build time
(home-page "https://blake2.net/")
(synopsis "Library implementing the BLAKE2 family of hash functions")

base-commit: 6a7d5cda17fd9d4bd99c58f7a5dbdd2d021354f9
--
2.45.1
C
C
Christoph Buck wrote on 28 Jun 14:56 +0200
(address . 71174@debbugs.gnu.org)(name . Christoph Buck)(address . dev@icepic.de)
d2396e9207bc8ba656f0f6204dd2317c61fade85.1719579411.git.dev@icepic.de
* gnu/packages/crypto.scm (libb2): Disable fat-binary compile time option for
non x86_64 target systems.

Change-Id: Ibdf009960fecae4ffc033a36b3abf28c2f8935aa
---
gnu/packages/crypto.scm | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)

Toggle diff (29 lines)
diff --git a/gnu/packages/crypto.scm b/gnu/packages/crypto.scm
index 9c62689d18..1d376fb43c 100644
--- a/gnu/packages/crypto.scm
+++ b/gnu/packages/crypto.scm
@@ -809,12 +809,14 @@ (define-public libb2
(arguments
`(#:configure-flags
(list
- ,@(if (any (cute string-prefix? <> (or (%current-system)
- (%current-target-system)))
- '("x86_64" "i686"))
- ;; fat only checks for Intel optimisations
- '("--enable-fat")
- '())
+ ,@(let ((check-x86 (lambda (triplet) (any (cute string-prefix? <> triplet) '("x86_64" "i868")))))
+ (if (%current-target-system)
+ (if (check-x86 (%current-target-system))
+ '("--enable-fat")
+ '())
+ (if (check-x86 (%current-system))
+ '("--enable-fat")
+ '())))
"--disable-native"))) ;don't optimise at build time
(home-page "https://blake2.net/")
(synopsis "Library implementing the BLAKE2 family of hash functions")

base-commit: 6a7d5cda17fd9d4bd99c58f7a5dbdd2d021354f9
--
2.45.1
?
Your comment

Commenting via the web interface is currently disabled.

To comment on this conversation send an email to 71174@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 71174
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch