~ruther/guix-local

b68c3e66e23c08bcf9794d3a5a0313b3a714d13d — Andy Tai 5 months ago b84618b
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 <andreas@enge.fr>
3 files changed, 306 insertions(+), 35 deletions(-)

M gnu/local.mk
M gnu/packages/algebra.scm
A gnu/packages/patches/kissfft-tflite-micro.patch
M gnu/local.mk => gnu/local.mk +1 -0
@@ 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	\

M gnu/packages/algebra.scm => gnu/packages/algebra.scm +76 -35
@@ 21,6 21,7 @@
;;; Copyright © 2025 Nigko Yerden <nigko.yerden@gmail.com>
;;; Copyright © 2025 Skylar Hill <stellarskylark@posteo.net>
;;; Copyright © 2025 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2025 Andy Tai <atai@atai.org>
;;;
;;; 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)))

A gnu/packages/patches/kissfft-tflite-micro.patch => gnu/packages/patches/kissfft-tflite-micro.patch +229 -0
@@ 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