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
parent
92d03362ff
commit
aac3a33d1e
|
@ -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-icu-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/range-v3-build-with-gcc10.patch \
|
||||
%D%/packages/patches/rapicorn-isnan.patch \
|
||||
|
|
|
@ -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
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
|
||||
;;; Copyright © 2019 Tobias Geerinckx-Rice <me@tobias.gr>
|
||||
;;; Copyright © 2021 Simon South <simon@simonsouth.net>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
|
@ -22,7 +23,9 @@
|
|||
#:use-module (guix packages)
|
||||
#:use-module (guix download)
|
||||
#: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
|
||||
(package
|
||||
|
@ -36,6 +39,30 @@
|
|||
(base32
|
||||
"0gvcsl62gh6sg73nwaxav4a5ja23zcnyxncdcdnqa2yjcpdnw5az"))))
|
||||
(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/")
|
||||
(synopsis "State machine compiler")
|
||||
(description
|
||||
|
|
Reference in New Issue