~ruther/guix-local

ab2fed9abc74fc13df0d2c659b96915be403fd42 — Alexey Abramov 7 months ago 92c6339
gnu: re2c: Fix build on armhf-linux.

* gnu/packages/re2c.scm (re2c)[arguments]: When building for armhf-linux
add a phase to apply a patch.
* gnu/packages/patches/re2c-Use-maximum-alignment.patch: New file.
* gnu/local.mk (dist_patch_DATA): Register it.

Change-Id: I9f056de47dc993b9ad779969f1eec71436c21160
Signed-off-by: Efraim Flashner <efraim@flashner.co.il>
3 files changed, 64 insertions(+), 1 deletions(-)

M gnu/local.mk
A gnu/packages/patches/re2c-Use-maximum-alignment.patch
M gnu/packages/re2c.scm
M gnu/local.mk => gnu/local.mk +1 -0
@@ 2239,6 2239,7 @@ dist_patch_DATA =						\
  %D%/packages/patches/racket-chez-scheme-bin-sh.patch		\
  %D%/packages/patches/racket-launcher-config-dir.patch		\
  %D%/packages/patches/racket-rktio-bin-sh.patch		\
  %D%/packages/patches/re2c-Use-maximum-alignment.patch         \
  %D%/packages/patches/reduce-unbundle-libffi.patch             \
  %D%/packages/patches/remake-impure-dirs.patch			\
  %D%/packages/patches/restartd-update-robust.patch             \

A gnu/packages/patches/re2c-Use-maximum-alignment.patch => gnu/packages/patches/re2c-Use-maximum-alignment.patch +48 -0
@@ 0,0 1,48 @@
https://github.com/skvadrik/re2c/pull/555

From 44125b74628d17f0a0a6cf9b51dd1f24169cd2d5 Mon Sep 17 00:00:00 2001
From: Alexey Abramov <levenson@mmer.org>
Date: Fri, 22 Aug 2025 08:10:08 +0200
Subject: [PATCH] Use maximum alignment to ensure compatibility across all
 architectures.

---
 src/util/allocator.h | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/src/util/allocator.h b/src/util/allocator.h
index e6c85585b..56daf056f 100644
--- a/src/util/allocator.h
+++ b/src/util/allocator.h
@@ -3,6 +3,7 @@
 
 #include <stdint.h>
 #include <stdlib.h>
+#include <stddef.h>
 #include <algorithm>
 #include <vector>
 
@@ -78,11 +79,16 @@ class slab_allocator_t {
 };
 
 // Use maximum alignment.
+// Use alignment based on pointer size: 32-bit platforms need stronger alignment
+// for 64-bit types (double, long long), while 64-bit platforms are already
+// sufficiently aligned with pointer-sized alignment.
+constexpr size_t ALLOCATOR_ALIGNMENT = (sizeof(void*) == 4) ? alignof(max_align_t) : sizeof(void*);
+
 // Use different types to prevent accidentally mixing allocators for data with different life spans.
-using AstAllocator = slab_allocator_t<AllocatorKind::AST, 16 * 4096, sizeof(void*)>;
-using IrAllocator = slab_allocator_t<AllocatorKind::IR, 16 * 4096, sizeof(void*)>;
-using DfaAllocator = slab_allocator_t<AllocatorKind::DFA, 16 * 4096, sizeof(void*)>;
-using OutAllocator = slab_allocator_t<AllocatorKind::OUT, 16 * 4096, sizeof(void*)>;
+using AstAllocator = slab_allocator_t<AllocatorKind::AST, 16 * 4096, ALLOCATOR_ALIGNMENT>;
+using IrAllocator = slab_allocator_t<AllocatorKind::IR, 16 * 4096, ALLOCATOR_ALIGNMENT>;
+using DfaAllocator = slab_allocator_t<AllocatorKind::DFA, 16 * 4096, ALLOCATOR_ALIGNMENT>;
+using OutAllocator = slab_allocator_t<AllocatorKind::OUT, 16 * 4096, ALLOCATOR_ALIGNMENT>;
 
 } // namespace re2c
 
-- 
2.50.1


M gnu/packages/re2c.scm => gnu/packages/re2c.scm +15 -1
@@ 2,6 2,7 @@
;;; Copyright © 2017, 2020 Sergei Trofimovich <slyfox@inbox.ru>
;;; Copyright © 2021 Sergei Trofimovich <slyich@gmail.com>
;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2025 Alexey Abramov <levenson@mmer.org>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 20,7 21,10 @@

(define-module (gnu packages re2c)
  #:use-module (guix licenses)
  #:use-module (guix gexp)
  #:use-module (guix utils)
  #:use-module (guix packages)
  #:use-module (gnu packages)
  #:use-module (gnu packages python)
  #:use-module (guix download)
  #:use-module (guix build-system gnu))


@@ 38,9 42,19 @@
              (base32
                "07ysqgdm0h566a8lwnpdgycp93vz7zskzihsgah3bla0ycj2pp69"))))
    (build-system gnu-build-system)
    (home-page "https://re2c.org/")
    (arguments
     (if (target-arm32?)
         (list #:phases
               #~(modify-phases %standard-phases
                   (add-after 'unpack 'patch-sources
                     (lambda _
                       (invoke "patch" "-p1" "--force" "--input"
                               #$(local-file (search-patch
                                               "re2c-Use-maximum-alignment.patch")))))))
         '()))
    (native-inputs
     (list python))             ; for the test driver
    (home-page "https://re2c.org/")
    (synopsis "Lexer generator for C/C++")
    (description
     "@code{re2c} generates minimalistic hard-coded state machine (as opposed