me
/
guix
Archived
1
0
Fork 0

gnu: ragel: Fix build of knot on aarch64-linux.

Apply a patch backported from Ragel's "ragel-6" branch that allows it to
reliably generate usable code on aarch64-linux where the C/C++ "char" type is
unsigned by default, fixing the build of Knot on this platform.

* gnu/packages/patches/ragel-char-signedness.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.
* gnu/packages/ragel.scm (ragel)[arguments]: Add custom phase for AArch64 that
applies the patch.
[native-inputs]: Add "patch" and patch file on AArch64.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
master
Simon South 2021-12-29 12:46:07 -05:00 committed by Ludovic Courtès
parent 92d03362ff
commit aac3a33d1e
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
3 changed files with 71 additions and 1 deletions

View File

@ -1727,6 +1727,7 @@ dist_patch_DATA = \
%D%/packages/patches/qtwebkit-fix-building-with-python-3.9.patch \ %D%/packages/patches/qtwebkit-fix-building-with-python-3.9.patch \
%D%/packages/patches/qtwebkit-fix-building-with-icu-68.patch \ %D%/packages/patches/qtwebkit-fix-building-with-icu-68.patch \
%D%/packages/patches/qtwebkit-fix-building-with-glib-2.68.patch \ %D%/packages/patches/qtwebkit-fix-building-with-glib-2.68.patch \
%D%/packages/patches/ragel-char-signedness.patch \
%D%/packages/patches/randomjungle-disable-static-build.patch \ %D%/packages/patches/randomjungle-disable-static-build.patch \
%D%/packages/patches/range-v3-build-with-gcc10.patch \ %D%/packages/patches/range-v3-build-with-gcc10.patch \
%D%/packages/patches/rapicorn-isnan.patch \ %D%/packages/patches/rapicorn-isnan.patch \

View File

@ -0,0 +1,42 @@
From 2e638fccd81e96ce09841adc4b295b5ce694ea73 Mon Sep 17 00:00:00 2001
From: Adrian Thurston <thurston@colm.net>
Date: Sat, 6 Nov 2021 12:20:05 -0700
Subject: [PATCH] C char type: decide signedness of char based on CHAR_MIN
Previously had char fixed to signed char, this is not useful on ARM as it does
not align with the host type. Instead, decide at runtime (or probably compile
time) if char is signed or not.
---
ragel/common.cpp | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/ragel/common.cpp b/ragel/common.cpp
index 8e9f8ed0..55875c06 100644
--- a/ragel/common.cpp
+++ b/ragel/common.cpp
@@ -27,14 +27,14 @@
HostType hostTypesC[] =
{
- { "char", 0, "char", true, true, false, CHAR_MIN, CHAR_MAX, 0, 0, sizeof(char) },
- { "unsigned", "char", "uchar", false, true, false, 0, 0, 0, UCHAR_MAX, sizeof(unsigned char) },
- { "short", 0, "short", true, true, false, SHRT_MIN, SHRT_MAX, 0, 0, sizeof(short) },
- { "unsigned", "short", "ushort", false, true, false, 0, 0, 0, USHRT_MAX, sizeof(unsigned short) },
- { "int", 0, "int", true, true, false, INT_MIN, INT_MAX, 0, 0, sizeof(int) },
- { "unsigned", "int", "uint", false, true, false, 0, 0, 0, UINT_MAX, sizeof(unsigned int) },
- { "long", 0, "long", true, true, false, LONG_MIN, LONG_MAX, 0, 0, sizeof(long) },
- { "unsigned", "long", "ulong", false, true, false, 0, 0, 0, ULONG_MAX, sizeof(unsigned long) }
+ { "char", 0, "char", (CHAR_MIN != 0), true, false, SCHAR_MIN, SCHAR_MAX, 0, UCHAR_MAX, sizeof(char) },
+ { "unsigned", "char", "uchar", false, true, false, 0, 0, 0, UCHAR_MAX, sizeof(unsigned char) },
+ { "short", 0, "short", true, true, false, SHRT_MIN, SHRT_MAX, 0, 0, sizeof(short) },
+ { "unsigned", "short", "ushort", false, true, false, 0, 0, 0, USHRT_MAX, sizeof(unsigned short) },
+ { "int", 0, "int", true, true, false, INT_MIN, INT_MAX, 0, 0, sizeof(int) },
+ { "unsigned", "int", "uint", false, true, false, 0, 0, 0, UINT_MAX, sizeof(unsigned int) },
+ { "long", 0, "long", true, true, false, LONG_MIN, LONG_MAX, 0, 0, sizeof(long) },
+ { "unsigned", "long", "ulong", false, true, false, 0, 0, 0, ULONG_MAX, sizeof(unsigned long) }
};
#define S8BIT_MIN -128
--
2.33.1

View File

@ -1,6 +1,7 @@
;;; GNU Guix --- Functional package management for GNU ;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net> ;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2019 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2019 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2021 Simon South <simon@simonsouth.net>
;;; ;;;
;;; This file is part of GNU Guix. ;;; This file is part of GNU Guix.
;;; ;;;
@ -22,7 +23,9 @@
#:use-module (guix packages) #:use-module (guix packages)
#:use-module (guix download) #:use-module (guix download)
#:use-module (guix build-system gnu) #:use-module (guix build-system gnu)
#:use-module (gnu packages)) #:use-module (guix utils)
#:use-module (gnu packages)
#:use-module (gnu packages base))
(define-public ragel (define-public ragel
(package (package
@ -36,6 +39,30 @@
(base32 (base32
"0gvcsl62gh6sg73nwaxav4a5ja23zcnyxncdcdnqa2yjcpdnw5az")))) "0gvcsl62gh6sg73nwaxav4a5ja23zcnyxncdcdnqa2yjcpdnw5az"))))
(build-system gnu-build-system) (build-system gnu-build-system)
(arguments
(if (target-aarch64?)
'(#:phases
(modify-phases %standard-phases
(add-after 'unpack 'apply-char-signedness-fix
;; Apply a backported fix for aarch64-linux, where the C/C++
;; "char" type is unsigned by default.
;;
;; The patch is applied in this custom phase and not via the
;; "origin" object above to avoid rebuilding a large number of
;; packages on other platforms.
(lambda _
(let ((patch
(search-input-file %build-inputs "/bin/patch"))
(char-signedness-patch
(assoc-ref %build-inputs "char-signedness-patch")))
(invoke patch "-p1" "-i" char-signedness-patch))))))
'()))
(native-inputs
(if (target-aarch64?)
`(("char-signedness-patch"
,(search-patch "ragel-char-signedness.patch"))
("patch" ,patch))
'()))
(home-page "https://www.colm.net/open-source/ragel/") (home-page "https://www.colm.net/open-source/ragel/")
(synopsis "State machine compiler") (synopsis "State machine compiler")
(description (description