guix_mirror_bot pushed a commit to branch next-master
in repository guix.

commit 1dfc8373cf2d44017acc064481cf2dc2b79d250a
Author: Andy Tai <[email protected]>
AuthorDate: Sun Nov 23 00:43:45 2025 -0800

    gnu: Add kissfft-for-tflite-micro.
    
    * gnu/packages/algebra.scm (kissfft-for-tflite-micro): New variable.
    * gnu/packages/patches/kissfft-tflite-micro.patch: New file.
    * gnu/local.mk: (dist_patch_DATA): Reference new patch file.
    
    Change-Id: I4d7119fca95033d6b1a5b0f84cfd0446a4f54afb
    Signed-off-by: Andreas Enge <[email protected]>
---
 gnu/local.mk                                    |   1 +
 gnu/packages/algebra.scm                        | 111 ++++++++----
 gnu/packages/patches/kissfft-tflite-micro.patch | 229 ++++++++++++++++++++++++
 3 files changed, 306 insertions(+), 35 deletions(-)

diff --git a/gnu/local.mk b/gnu/local.mk
index 34726b8b1b..42146d8ec4 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1699,6 +1699,7 @@ dist_patch_DATA =                                         
\
   %D%/packages/patches/kinit-kdeinit-extra_libs.patch          \
   %D%/packages/patches/kio-search-smbd-on-PATH.patch           \
   %D%/packages/patches/kismet-unbundle-boost.patch             \
+  %D%/packages/patches/kissfft-tflite-micro.patch               \
   %D%/packages/patches/kitty-fix-wayland-protocols.patch       \
   %D%/packages/patches/kmod-module-directory.patch             \
   %D%/packages/patches/kmscon-runtime-keymap-switch.patch      \
diff --git a/gnu/packages/algebra.scm b/gnu/packages/algebra.scm
index fc412ad5ea..2a2d840b9c 100644
--- a/gnu/packages/algebra.scm
+++ b/gnu/packages/algebra.scm
@@ -21,6 +21,7 @@
 ;;; Copyright © 2025 Nigko Yerden <[email protected]>
 ;;; Copyright © 2025 Skylar Hill <[email protected]>
 ;;; Copyright © 2025 Janneke Nieuwenhuizen <[email protected]>
+;;; Copyright © 2025 Andy Tai <[email protected]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -60,6 +61,7 @@
   #:use-module (gnu packages image)
   #:use-module (gnu packages java)
   #:use-module (gnu packages libffi)
+  #:use-module (gnu packages linux)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages mpi)
   #:use-module (gnu packages multiprecision)
@@ -808,6 +810,80 @@ a C program.")
 principle, 'Keep It Simple, Stupid.'")
     (license license:bsd-3)))
 
+(define-public kissfft-for-tflite-micro
+  (package
+    (inherit kissfft)
+    (name "kissfft-for-tflite-micro")
+    (version "130")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/mborgerding/kissfft";)
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        "137h3pkn6jmc3pcgnqsq481f6jjblx7ygw9gyipgcdysmnhrwiv2")
+       (patches (search-patches "kissfft-tflite-micro.patch"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (delete 'configure)
+          (delete 'build)
+          (replace 'install
+            (lambda _
+              (for-each (lambda (f)
+                          (install-file f
+                                        (string-append #$output "/include")))
+                        '("kiss_fft.h" "kissfft.hh"))
+              (for-each (lambda (f)
+                          (install-file f
+                                        (string-append #$output
+                                                       "/include/tools")))
+                        (find-files "tools"))))
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (invoke "make" "CC=gcc" "testall")))))))
+    (native-inputs (list procps))
+    (inputs (list fftw))))
+
+(define-public clac
+  (package
+    (name "clac")
+    (version "0.3.4")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/soveran/clac";)
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        "0crpm5rxxipiz6kqs5ip900d77vvnslyjn5f6nj0lrc86bkbgi8d")))
+    (build-system gnu-build-system)
+    (arguments
+     (list
+      #:test-target "test"
+      #:phases
+      #~(modify-phases %standard-phases
+          (delete 'configure)
+          (add-before 'build 'set-env
+            (lambda _
+              (setenv "CC" "gcc")
+              (setenv "PREFIX" #$output))))))
+    (home-page "https://github.com/soveran/clac";)
+    (synopsis "Command-line, stack-based calculator with postfix notation")
+    (description
+     "Clac is a command line, stack-based calculator with postfix notation
+that displays the stack contents at all times.  As you type, the stack
+changes are reflected immediately.")
+    ;; Bundles two dependencies, both also BSD-2. SDS is not yet packaged.
+    ;; linenoise is packaged, but the package doesn't provide shared
+    ;; object files so we have to build it anyway.
+    (license license:bsd-2)))
 (define-public fftw
   (package
     (name "fftw")
@@ -2215,38 +2291,3 @@ systems.  This encompasses:
 @item the computation of the dimension and the degree of the solution set.
 @end itemize")
     (license license:gpl2+)))
-
-(define-public clac
-  (package
-    (name "clac")
-    (version "0.3.4")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/soveran/clac";)
-             (commit version)))
-       (file-name (git-file-name name version))
-       (sha256
-        "0crpm5rxxipiz6kqs5ip900d77vvnslyjn5f6nj0lrc86bkbgi8d")))
-    (build-system gnu-build-system)
-    (arguments
-     (list
-      #:test-target "test"
-      #:phases
-      #~(modify-phases %standard-phases
-          (delete 'configure)
-          (add-before 'build 'set-env
-            (lambda _
-              (setenv "CC" "gcc")
-              (setenv "PREFIX" #$output))))))
-    (home-page "https://github.com/soveran/clac";)
-    (synopsis "Command-line, stack-based calculator with postfix notation")
-    (description
-     "Clac is a command line, stack-based calculator with postfix notation
-that displays the stack contents at all times.  As you type, the stack
-changes are reflected immediately.")
-    ;; Bundles two dependencies, both also BSD-2. SDS is not yet packaged.
-    ;; linenoise is packaged, but the package doesn't provide shared
-    ;; object files so we have to build it anyway.
-    (license license:bsd-2)))
diff --git a/gnu/packages/patches/kissfft-tflite-micro.patch 
b/gnu/packages/patches/kissfft-tflite-micro.patch
new file mode 100644
index 0000000000..4dfdfeb935
--- /dev/null
+++ b/gnu/packages/patches/kissfft-tflite-micro.patch
@@ -0,0 +1,229 @@
+diff --git a/Makefile b/Makefile
+index 96f43d3..d8e9be2 100644
+--- a/Makefile
++++ b/Makefile
+@@ -8,11 +8,11 @@ doc:
+ 
+ testall:
+       # The simd and int32_t types may or may not work on your machine 
+-      make -C test DATATYPE=simd CFLAGADD="$(CFLAGADD)" test
+-      make -C test DATATYPE=int32_t CFLAGADD="$(CFLAGADD)" test
+-      make -C test DATATYPE=int16_t CFLAGADD="$(CFLAGADD)" test
+-      make -C test DATATYPE=float CFLAGADD="$(CFLAGADD)" test
+-      make -C test DATATYPE=double CFLAGADD="$(CFLAGADD)" test
++      #make -C test DATATYPE=simd CFLAGADD="$(CFLAGADD)" test
++      #make -C test DATATYPE=int32_t CFLAGADD="$(CFLAGADD)" test
++      #make -C test DATATYPE=int16_t CFLAGADD="$(CFLAGADD)" test
++      #make -C test DATATYPE=float CFLAGADD="$(CFLAGADD)" test
++      #make -C test DATATYPE=double CFLAGADD="$(CFLAGADD)" test
+       echo "all tests passed"
+ 
+ tarball: clean
+diff --git a/_kiss_fft_guts.h b/_kiss_fft_guts.h
+index ba66144..1a0f4c2 100644
+--- a/_kiss_fft_guts.h
++++ b/_kiss_fft_guts.h
+@@ -1,3 +1,6 @@
++#ifndef _KISS_FFT_GUTS_H
++#define _KISS_FFT_GUTS_H
++
+ /*
+ Copyright (c) 2003-2010, Mark Borgerding
+ 
+@@ -135,7 +138,7 @@ struct kiss_fft_state{
+ #else
+ #  define KISS_FFT_COS(phase) (kiss_fft_scalar) cos(phase)
+ #  define KISS_FFT_SIN(phase) (kiss_fft_scalar) sin(phase)
+-#  define HALF_OF(x) ((x)*.5)
++#  define HALF_OF(x) ((x)*(kiss_fft_scalar).5)
+ #endif
+ 
+ #define  kf_cexp(x,phase) \
+@@ -162,3 +165,4 @@ struct kiss_fft_state{
+ #define  KISS_FFT_TMP_ALLOC(nbytes) KISS_FFT_MALLOC(nbytes)
+ #define  KISS_FFT_TMP_FREE(ptr) KISS_FFT_FREE(ptr)
+ #endif
++#endif // _KISS_FFT_GUTS_H
+diff --git a/kiss_fft.c b/kiss_fft.c
+index 465d6c9..9133a01 100644
+--- a/kiss_fft.c
++++ b/kiss_fft.c
+@@ -375,7 +375,7 @@ void kiss_fft_stride(kiss_fft_cfg st,const kiss_fft_cpx 
*fin,kiss_fft_cpx *fout,
+         //It just performs an out-of-place FFT into a temp buffer
+         kiss_fft_cpx * tmpbuf = (kiss_fft_cpx*)KISS_FFT_TMP_ALLOC( 
sizeof(kiss_fft_cpx)*st->nfft);
+         kf_work(tmpbuf,fin,1,in_stride, st->factors,st);
+-        memcpy(fout,tmpbuf,sizeof(kiss_fft_cpx)*st->nfft);
++        /* memcpy(fout,tmpbuf,sizeof(kiss_fft_cpx)*st->nfft); */
+         KISS_FFT_TMP_FREE(tmpbuf);
+     }else{
+         kf_work( fout, fin, 1,in_stride, st->factors,st );
+diff --git a/kiss_fft.h b/kiss_fft.h
+index 64c50f4..24e4d0c 100644
+--- a/kiss_fft.h
++++ b/kiss_fft.h
+@@ -7,7 +7,7 @@
+ #include <string.h>
+ 
+ #ifdef __cplusplus
+-extern "C" {
++extern "C++" {
+ #endif
+ 
+ /*
+@@ -29,13 +29,13 @@ extern "C" {
+ #define KISS_FFT_MALLOC(nbytes) _mm_malloc(nbytes,16)
+ #define KISS_FFT_FREE _mm_free
+ #else 
+-#define KISS_FFT_MALLOC malloc
+-#define KISS_FFT_FREE free
++#define KISS_FFT_MALLOC(X) (void*)(0x0) /* Patched. */
++#define KISS_FFT_FREE(X) /* Patched. */
+ #endif        
+ 
+ 
+ #ifdef FIXED_POINT
+-#include <sys/types.h>        
++#include <stdint.h> /* Patched. */
+ # if (FIXED_POINT == 32)
+ #  define kiss_fft_scalar int32_t
+ # else        
+diff --git a/test/Makefile b/test/Makefile
+index c204511..d2fe0ea 100644
+--- a/test/Makefile
++++ b/test/Makefile
+@@ -3,7 +3,7 @@ WARNINGS=-W -Wall -Wstrict-prototypes -Wmissing-prototypes 
-Waggregate-return \
+     -Wcast-align -Wcast-qual -Wnested-externs -Wshadow -Wbad-function-cast \
+     -Wwrite-strings
+ 
+-CFLAGS=-O3 -I.. -I../tools $(WARNINGS)
++CFLAGS=-O3 -I.. -I../tools $(WARNINGS) -ggdb -O0
+ CFLAGS+=-ffast-math -fomit-frame-pointer 
+ #CFLAGS+=-funroll-loops
+ #CFLAGS+=-march=prescott 
+diff --git a/test/testkiss.py b/test/testkiss.py
+index af75065..cae8494 100755
+--- a/test/testkiss.py
++++ b/test/testkiss.py
+@@ -5,7 +5,7 @@ import sys
+ import os
+ import random
+ import struct
+-import popen2
++import subprocess
+ import getopt
+ import numpy
+ 
+@@ -35,11 +35,11 @@ elif datatype=='float':
+ else:
+     sys.stderr.write('unrecognized datatype %s\n' % datatype)
+     sys.exit(1)
+- 
++
+ 
+ def dopack(x,cpx=1):
+     x = numpy.reshape( x, ( numpy.size(x),) )
+-    
++
+     if cpx:
+         s = ''.join( [ struct.pack(fmt*2,c.real,c.imag) for c in x ] )
+     else:
+@@ -89,7 +89,7 @@ def test_fft(ndims):
+         xver = numpy.fft.rfftn(x)
+     else:
+         xver = numpy.fft.fftn(x)
+-    
++
+     open('/tmp/fftexp.dat','w').write(dopack( flatten(xver) , True ) )
+ 
+     x2=dofft(x,doreal)
+@@ -99,14 +99,14 @@ def test_fft(ndims):
+     errpow = numpy.vdot(errf,errf)+1e-10
+     sigpow = numpy.vdot(xverf,xverf)+1e-10
+     snr = 10*math.log10(abs(sigpow/errpow) )
+-    print 'SNR (compared to NumPy) : %.1fdB' % float(snr)
++    print( 'SNR (compared to NumPy) : %.1fdB' % float(snr))
+ 
+     if snr<minsnr:
+-        print 'xver=',xver
+-        print 'x2=',x2
+-        print 'err',err
++        print ('xver=',xver)
++        print ('x2=',x2)
++        print ('err',err)
+         sys.exit(1)
+- 
++
+ def dofft(x,isreal):
+     dims=list( numpy.shape(x) )
+     x = flatten(x)
+@@ -124,8 +124,8 @@ def dofft(x,isreal):
+     if doreal:
+         cmd += ' -R '
+ 
+-    print cmd
+-    p = popen2.Popen3(cmd )
++    print(cmd)
++    p = subprocess.Popen([cmd],stdin=subprocess.PIPE,stdout=subprocess.PIPE)
+ 
+     open('/tmp/fftin.dat','w').write(dopack( x , isreal==False ) )
+ 
+@@ -150,9 +150,9 @@ def main():
+     doreal = opts.has_key('-r')
+ 
+     if doreal:
+-        print 'Testing multi-dimensional real FFTs'
++        print('Testing multi-dimensional real FFTs')
+     else:
+-        print 'Testing multi-dimensional FFTs'
++        print('Testing multi-dimensional FFTs')
+ 
+     for dim in range(1,4):
+         test_fft( dim )
+diff --git a/tools/kiss_fftr.c b/tools/kiss_fftr.c
+index b8e238b..0d22a04 100644
+--- a/tools/kiss_fftr.c
++++ b/tools/kiss_fftr.c
+@@ -31,7 +31,7 @@ kiss_fftr_cfg kiss_fftr_alloc(int nfft,int inverse_fft,void 
* mem,size_t * lenme
+     size_t subsize, memneeded;
+ 
+     if (nfft & 1) {
+-        fprintf(stderr,"Real FFT optimization must be even.\n");
++        /* fprintf(stderr,"Real FFT optimization must be even.\n"); */
+         return NULL;
+     }
+     nfft >>= 1;
+@@ -71,8 +71,8 @@ void kiss_fftr(kiss_fftr_cfg st,const kiss_fft_scalar 
*timedata,kiss_fft_cpx *fr
+     kiss_fft_cpx fpnk,fpk,f1k,f2k,tw,tdc;
+ 
+     if ( st->substate->inverse) {
+-        fprintf(stderr,"kiss fft usage error: improper alloc\n");
+-        exit(1);
++        /* fprintf(stderr,"kiss fft usage error: improper alloc\n"); */
++        return; /* exit(1); */
+     }
+ 
+     ncfft = st->substate->nfft;
+@@ -126,8 +126,8 @@ void kiss_fftri(kiss_fftr_cfg st,const kiss_fft_cpx 
*freqdata,kiss_fft_scalar *t
+     int k, ncfft;
+ 
+     if (st->substate->inverse == 0) {
+-        fprintf (stderr, "kiss fft usage error: improper alloc\n");
+-        exit (1);
++        /* fprintf (stderr, "kiss fft usage error: improper alloc\n"); */
++        return; /* exit (1); */
+     }
+ 
+     ncfft = st->substate->nfft;
+diff --git a/tools/kiss_fftr.h b/tools/kiss_fftr.h
+index 72e5a57..b888a28 100644
+--- a/tools/kiss_fftr.h
++++ b/tools/kiss_fftr.h
+@@ -3,7 +3,7 @@
+ 
+ #include "kiss_fft.h"
+ #ifdef __cplusplus
+-extern "C" {
++extern "C++" {
+ #endif
+ 
+     

Reply via email to