drowe67 / LPCNet

Experimental Neural Net speech coding for FreeDV
BSD 3-Clause "New" or "Revised" License
68 stars 25 forks source link

Build breakage on Raspberry Pi #52

Open dslotter opened 1 year ago

dslotter commented 1 year ago

I'm attaching a build log from the Raspberry Pi which shows the master branch is unable to complete build. Hoping you can fix this issue with the missing symbol:

pi@hampi:~/hamradio/LPCNet $ git checkout master
Previous HEAD position was 7ee18d4 Disable AVX2 by default even on supported machines.
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
pi@hampi:~/hamradio/LPCNet $ git log
pi@hampi:~/hamradio/LPCNet $ git log -1
commit 101d925fcf8929575ee53755db16dcaac8f08daf (HEAD -> master, origin/master, origin/HEAD)
Merge: ae7b359 855b0a6
Author: drowe67 <45574645+drowe67@users.noreply.github.com>
Date:   Sat Dec 17 09:16:33 2022 +1030

    Merge pull request #51 from drowe67/ms-integrate-from-xiph

    Integrate latest vec_*.h from xiph/LPCNet
pi@hampi:~/hamradio/LPCNet $ cd build
pi@hampi:~/hamradio/LPCNet/build $ cmake ..
-- The C compiler identification is GNU 10.2.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- LPCNet version: 0.4
-- freedv-gui current git hash: 101d925
-- Host system arch is: aarch64
-- Looking for available CPU optimizations on Linux/BSD system...
-- Compilation date = XX20221230XX
-- Configuring done
-- Generating done
-- Build files have been written to: /home/pi/hamradio/LPCNet/build
pi@hampi:~/hamradio/LPCNet/build $ make -j1
[  1%] Building C object src/CMakeFiles/lpcnetfreedv.dir/freq.c.o
[  3%] Building C object src/CMakeFiles/lpcnetfreedv.dir/kiss_fft.c.o
[  4%] Building C object src/CMakeFiles/lpcnetfreedv.dir/celt_lpc.c.o
[  6%] Building C object src/CMakeFiles/lpcnetfreedv.dir/pitch.c.o
[  8%] Building C object src/CMakeFiles/lpcnetfreedv.dir/codec2_pitch.c.o
[  9%] Building C object src/CMakeFiles/lpcnetfreedv.dir/mbest.c.o
[ 11%] Building C object src/CMakeFiles/lpcnetfreedv.dir/lpcnet_quant.c.o
[ 12%] Building C object src/CMakeFiles/lpcnetfreedv.dir/lpcnet_dump.c.o
[ 14%] Building C object src/CMakeFiles/lpcnetfreedv.dir/4stage_pred_vq.c.o
[ 16%] Building C object src/CMakeFiles/lpcnetfreedv.dir/4stage_direct_split_vq.c.o
[ 17%] Building C object src/CMakeFiles/lpcnetfreedv.dir/4stage_direct_split_indopt_vq.c.o
[ 19%] Building C object src/CMakeFiles/lpcnetfreedv.dir/lpcnet.c.o
[ 20%] Building C object src/CMakeFiles/lpcnetfreedv.dir/lpcnet_freedv.c.o
[ 22%] Building C object src/CMakeFiles/lpcnetfreedv.dir/nnet.c.o
/home/pi/hamradio/LPCNet/src/nnet.c:51:2: warning: #warning Compiling without any vectorization. This code will be very slow [-Wcpp]
   51 | #warning Compiling without any vectorization. This code will be very slow
      |  ^~~~~~~
[ 24%] Building C object src/CMakeFiles/lpcnetfreedv.dir/__/_deps/lpcnet-src/nnet_data.c.o
[ 25%] Building C object src/CMakeFiles/lpcnetfreedv.dir/from_codec2/sine.c.o
/home/pi/hamradio/LPCNet/src/from_codec2/sine.c: In function ‘__codec2__estimate_amplitudes’:
/home/pi/hamradio/LPCNet/src/from_codec2/sine.c:406:57: warning: unused parameter ‘W’ [-Wunused-parameter]
  406 | void estimate_amplitudes(MODEL *model, COMP Sw[], float W[], int est_phase)
      |                                                   ~~~~~~^~~
[ 27%] Building C object src/CMakeFiles/lpcnetfreedv.dir/from_codec2/nlp.c.o
/home/pi/hamradio/LPCNet/src/from_codec2/nlp.c: In function ‘__codec2__nlp’:
/home/pi/hamradio/LPCNet/src/from_codec2/nlp.c:255:10: warning: unused parameter ‘Sw’ [-Wunused-parameter]
  255 |   COMP   Sw[],                  /* Freq domain version of Sn[]                        */
      |   ~~~~~~~^~~~
/home/pi/hamradio/LPCNet/src/from_codec2/nlp.c:256:10: warning: unused parameter ‘W’ [-Wunused-parameter]
  256 |   float  W[],                   /* Freq domain window                                 */
      |   ~~~~~~~^~~
/home/pi/hamradio/LPCNet/src/from_codec2/nlp.c: In function ‘__codec2__post_process_sub_multiples’:
/home/pi/hamradio/LPCNet/src/from_codec2/nlp.c:431:10: warning: unused parameter ‘pmin’ [-Wunused-parameter]
  431 |      int pmin, int pmax, float gmax, int gmax_bin,
      |      ~~~~^~~~
[ 29%] Building C object src/CMakeFiles/lpcnetfreedv.dir/from_codec2/codec2_fft.c.o
[ 30%] Building C object src/CMakeFiles/lpcnetfreedv.dir/from_codec2/kiss_fft.c.o
[ 32%] Building C object src/CMakeFiles/lpcnetfreedv.dir/from_codec2/kiss_fftr.c.o
[ 33%] Linking C shared library liblpcnetfreedv.so
[ 33%] Built target lpcnetfreedv
[ 35%] Building C object src/CMakeFiles/dump_data.dir/dump_data.c.o
[ 37%] Linking C executable dump_data
[ 37%] Built target dump_data
[ 38%] Building C object src/CMakeFiles/test_lpcnet.dir/test_lpcnet.c.o
[ 40%] Building C object src/CMakeFiles/test_lpcnet.dir/nnet_rw.c.o
[ 41%] Linking C executable test_lpcnet
[ 41%] Built target test_lpcnet
[ 43%] Building C object src/CMakeFiles/test_vec.dir/test_vec.c.o
/home/pi/hamradio/LPCNet/src/test_vec.c: In function ‘test_sgemv_accum16’:
/home/pi/hamradio/LPCNet/src/test_vec.c:81:5: warning: implicit declaration of function ‘sgemv_accum16_fast’; did you mean ‘sgemv_accum16’? [-Wimplicit-function-declaration]
   81 |     sgemv_accum16_fast(out_fast, weights, ROWS, COLS, 1, x);
      |     ^~~~~~~~~~~~~~~~~~
      |     sgemv_accum16
/home/pi/hamradio/LPCNet/src/test_vec.c: In function ‘test_sparse_sgemv_accum16’:
/home/pi/hamradio/LPCNet/src/test_vec.c:115:5: warning: implicit declaration of function ‘sparse_sgemv_accum16_fast’; did you mean ‘sparse_sgemv_accum16’? [-Wimplicit-function-declaration]
  115 |     sparse_sgemv_accum16_fast(out_fast, w, rows, indx, x);
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~
      |     sparse_sgemv_accum16
[ 45%] Linking C executable test_vec
/usr/bin/ld: CMakeFiles/test_vec.dir/test_vec.c.o: in function `test_sgemv_accum16':
/home/pi/hamradio/LPCNet/src/test_vec.c:81: undefined reference to `sgemv_accum16_fast'
/usr/bin/ld: CMakeFiles/test_vec.dir/test_vec.c.o: in function `test_sparse_sgemv_accum16':
/home/pi/hamradio/LPCNet/src/test_vec.c:115: undefined reference to `sparse_sgemv_accum16_fast'
collect2: error: ld returned 1 exit status
make[2]: *** [src/CMakeFiles/test_vec.dir/build.make:97: src/test_vec] Error 1
make[1]: *** [CMakeFiles/Makefile2:970: src/CMakeFiles/test_vec.dir/all] Error 2
make: *** [Makefile:166: all] Error 2
pi@hampi:~/hamradio/LPCNet/build $ uname -a
Linux hampi 5.15.76-v8+ #1597 SMP PREEMPT Fri Nov 4 12:16:41 GMT 2022 aarch64 GNU/Linux
pi@hampi:~/hamradio/LPCNet/build $ cat /etc/os-release 
PRETTY_NAME="Raspbian GNU/Linux 11 (bullseye)"
NAME="Raspbian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"
tmiw commented 1 year ago

I just tried on a Pi 3 (armv7) and a CM4 (aarch64) and had no issues compiling. See below for build logs from the latter:

mooneer@raspberrypi:~ $ git clone https://github.com/drowe67/LPCNet.git
Cloning into 'LPCNet'...
remote: Enumerating objects: 2503, done.
remote: Counting objects: 100% (325/325), done.
remote: Compressing objects: 100% (162/162), done.
remote: Total 2503 (delta 173), reused 278 (delta 141), pack-reused 2178
Receiving objects: 100% (2503/2503), 57.59 MiB | 8.44 MiB/s, done.
Resolving deltas: 100% (1684/1684), done.
mooneer@raspberrypi:~ $ cd LPCNet/
mooneer@raspberrypi:~/LPCNet $ mkdir build
mooneer@raspberrypi:~/LPCNet $ cd build/
mooneer@raspberrypi:~/LPCNet/build $ cmake ..
-- The C compiler identification is GNU 10.2.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- LPCNet version: 0.4
-- freedv-gui current git hash: 101d925
-- Host system arch is: aarch64
-- Looking for available CPU optimizations on Linux/BSD system...
-- Compilation date = XX20221230XX
-- Configuring done
-- Generating done
-- Build files have been written to: /home/mooneer/LPCNet/build
mooneer@raspberrypi:~/LPCNet/build $ make
Scanning dependencies of target lpcnetfreedv
[  1%] Building C object src/CMakeFiles/lpcnetfreedv.dir/freq.c.o
[  3%] Building C object src/CMakeFiles/lpcnetfreedv.dir/kiss_fft.c.o
[  4%] Building C object src/CMakeFiles/lpcnetfreedv.dir/celt_lpc.c.o
[  6%] Building C object src/CMakeFiles/lpcnetfreedv.dir/pitch.c.o
[  8%] Building C object src/CMakeFiles/lpcnetfreedv.dir/codec2_pitch.c.o
[  9%] Building C object src/CMakeFiles/lpcnetfreedv.dir/mbest.c.o
[ 11%] Building C object src/CMakeFiles/lpcnetfreedv.dir/lpcnet_quant.c.o
[ 12%] Building C object src/CMakeFiles/lpcnetfreedv.dir/lpcnet_dump.c.o
[ 14%] Building C object src/CMakeFiles/lpcnetfreedv.dir/4stage_pred_vq.c.o
[ 16%] Building C object src/CMakeFiles/lpcnetfreedv.dir/4stage_direct_split_vq.c.o
[ 17%] Building C object src/CMakeFiles/lpcnetfreedv.dir/4stage_direct_split_indopt_vq.c.o
[ 19%] Building C object src/CMakeFiles/lpcnetfreedv.dir/lpcnet.c.o
[ 20%] Building C object src/CMakeFiles/lpcnetfreedv.dir/lpcnet_freedv.c.o
[ 22%] Building C object src/CMakeFiles/lpcnetfreedv.dir/nnet.c.o
[ 24%] Building C object src/CMakeFiles/lpcnetfreedv.dir/__/_deps/lpcnet-src/nnet_data.c.o
[ 25%] Building C object src/CMakeFiles/lpcnetfreedv.dir/from_codec2/sine.c.o
/home/mooneer/LPCNet/src/from_codec2/sine.c: In function ‘__codec2__estimate_amplitudes’:
/home/mooneer/LPCNet/src/from_codec2/sine.c:406:57: warning: unused parameter ‘W’ [-Wunused-parameter]
  406 | void estimate_amplitudes(MODEL *model, COMP Sw[], float W[], int est_phase)
      |                                                   ~~~~~~^~~
[ 27%] Building C object src/CMakeFiles/lpcnetfreedv.dir/from_codec2/nlp.c.o
/home/mooneer/LPCNet/src/from_codec2/nlp.c: In function ‘__codec2__nlp’:
/home/mooneer/LPCNet/src/from_codec2/nlp.c:255:10: warning: unused parameter ‘Sw’ [-Wunused-parameter]
  255 |   COMP   Sw[],                  /* Freq domain version of Sn[]                        */
      |   ~~~~~~~^~~~
/home/mooneer/LPCNet/src/from_codec2/nlp.c:256:10: warning: unused parameter ‘W’ [-Wunused-parameter]
  256 |   float  W[],                   /* Freq domain window                                 */
      |   ~~~~~~~^~~
/home/mooneer/LPCNet/src/from_codec2/nlp.c: In function ‘__codec2__post_process_sub_multiples’:
/home/mooneer/LPCNet/src/from_codec2/nlp.c:431:10: warning: unused parameter ‘pmin’ [-Wunused-parameter]
  431 |      int pmin, int pmax, float gmax, int gmax_bin,
      |      ~~~~^~~~
[ 29%] Building C object src/CMakeFiles/lpcnetfreedv.dir/from_codec2/codec2_fft.c.o
[ 30%] Building C object src/CMakeFiles/lpcnetfreedv.dir/from_codec2/kiss_fft.c.o
[ 32%] Building C object src/CMakeFiles/lpcnetfreedv.dir/from_codec2/kiss_fftr.c.o
[ 33%] Linking C shared library liblpcnetfreedv.so
[ 33%] Built target lpcnetfreedv
Scanning dependencies of target idct
[ 35%] Building C object src/CMakeFiles/idct.dir/idct.c.o
[ 37%] Linking C executable idct
[ 37%] Built target idct
Scanning dependencies of target quant_dec
[ 38%] Building C object src/CMakeFiles/quant_dec.dir/quant_dec.c.o
[ 40%] Linking C executable quant_dec
[ 40%] Built target quant_dec
Scanning dependencies of target dump_data
[ 41%] Building C object src/CMakeFiles/dump_data.dir/dump_data.c.o
[ 43%] Linking C executable dump_data
[ 43%] Built target dump_data
Scanning dependencies of target ramp
[ 45%] Building C object src/CMakeFiles/ramp.dir/ramp.c.o
[ 46%] Linking C executable ramp
[ 46%] Built target ramp
Scanning dependencies of target lpcnet_enc
[ 48%] Building C object src/CMakeFiles/lpcnet_enc.dir/lpcnet_enc.c.o
[ 50%] Linking C executable lpcnet_enc
[ 50%] Built target lpcnet_enc
Scanning dependencies of target tdump
[ 51%] Building C object src/CMakeFiles/tdump.dir/tdump.c.o
[ 53%] Linking C executable tdump
[ 53%] Built target tdump
Scanning dependencies of target test_vec
[ 54%] Building C object src/CMakeFiles/test_vec.dir/test_vec.c.o
In file included from /home/mooneer/LPCNet/src/test_vec.c:54:
/home/mooneer/LPCNet/src/vec.h:44: warning: "MAX_INPUTS" redefined
   44 | #define MAX_INPUTS (2048)
      | 
In file included from /home/mooneer/LPCNet/src/test_vec.c:35:
/home/mooneer/LPCNet/src/vec_neon.h:276: note: this is the location of the previous definition
  276 | #define MAX_INPUTS 2048
      | 
[ 56%] Linking C executable test_vec
[ 56%] Built target test_vec
Scanning dependencies of target lpcnet_dec
[ 58%] Building C object src/CMakeFiles/lpcnet_dec.dir/lpcnet_dec.c.o
[ 59%] Building C object src/CMakeFiles/lpcnet_dec.dir/nnet_rw.c.o
[ 61%] Linking C executable lpcnet_dec
[ 61%] Built target lpcnet_dec
Scanning dependencies of target quant_feat
[ 62%] Building C object src/CMakeFiles/quant_feat.dir/quant_feat.c.o
[ 64%] Linking C executable quant_feat
[ 64%] Built target quant_feat
Scanning dependencies of target thash
[ 66%] Building C object src/CMakeFiles/thash.dir/thash.c.o
[ 67%] Linking C executable thash
[ 67%] Built target thash
Scanning dependencies of target test_lpcnet
[ 69%] Building C object src/CMakeFiles/test_lpcnet.dir/test_lpcnet.c.o
[ 70%] Building C object src/CMakeFiles/test_lpcnet.dir/nnet_rw.c.o
[ 72%] Linking C executable test_lpcnet
[ 72%] Built target test_lpcnet
Scanning dependencies of target quant_test
[ 74%] Building C object src/CMakeFiles/quant_test.dir/quant_test.c.o
[ 75%] Linking C executable quant_test
[ 75%] Built target quant_test
Scanning dependencies of target quant_enc
[ 77%] Building C object src/CMakeFiles/quant_enc.dir/quant_enc.c.o
[ 79%] Linking C executable quant_enc
[ 79%] Built target quant_enc
Scanning dependencies of target sw2packedulaw
[ 80%] Building C object src/CMakeFiles/sw2packedulaw.dir/sw2packedulaw.c.o
[ 82%] Linking C executable sw2packedulaw
[ 82%] Built target sw2packedulaw
Scanning dependencies of target tcodec2_pitch
[ 83%] Building C object src/CMakeFiles/tcodec2_pitch.dir/tcodec2_pitch.c.o
[ 85%] Linking C executable tcodec2_pitch
[ 85%] Built target tcodec2_pitch
Scanning dependencies of target weight
[ 87%] Building C object src/CMakeFiles/weight.dir/weight.c.o
[ 88%] Linking C executable weight
[ 88%] Built target weight
Scanning dependencies of target quant2c
[ 90%] Building C object src/CMakeFiles/quant2c.dir/quant2c.c.o
[ 91%] Linking C executable quant2c
[ 91%] Built target quant2c
Scanning dependencies of target nnet2f32
[ 93%] Building C object src/CMakeFiles/nnet2f32.dir/nnet2f32.c.o
[ 95%] Building C object src/CMakeFiles/nnet2f32.dir/nnet_rw.c.o
[ 96%] Linking C executable nnet2f32
[ 96%] Built target nnet2f32
Scanning dependencies of target diff32
[ 98%] Building C object src/CMakeFiles/diff32.dir/diff32.c.o
[100%] Linking C executable diff32
[100%] Built target diff32
mooneer@raspberrypi:~/LPCNet/build $ cat /etc/os-release 
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
mooneer@raspberrypi:~/LPCNet/build $ uname -a
Linux raspberrypi 5.15.32-v8+ #1538 SMP PREEMPT Thu Mar 31 19:40:39 BST 2022 aarch64 GNU/Linux
mooneer@raspberrypi:~/LPCNet/build $

I also just ran apt dist-upgrade and didn't see anything compiler/CMake related, so I'm fairly confident I'm running the latest gcc, etc. Do you see the same issue if you rm -rf * inside your build folder and then run cmake/make again? It might also be worth running git pull after switching to master just to be sure.

tmiw commented 5 months ago

Bringing this back up again since I saw an announcement from the HamPi project that FreeDV is temporarily excluded from their latest version. Looks like I'm now seeing the same issue on 32-bit bookworm and the Pi 5:

+ cmake ..
-- The C compiler identification is GNU 12.2.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- LPCNet version: 0.5
-- freedv-gui current git hash: 00890a6
-- Host system arch is: aarch64
-- Looking for available CPU optimizations on Linux/BSD system...
-- Compilation date = XX20240408XX
-- Configuring done
-- Generating done
-- Build files have been written to: /home/mooneer/freedv-gui/LPCNet/build_linux
+ make
[  1%] Building C object src/CMakeFiles/lpcnetfreedv.dir/freq.c.o
[  3%] Building C object src/CMakeFiles/lpcnetfreedv.dir/kiss_fft.c.o
[  4%] Building C object src/CMakeFiles/lpcnetfreedv.dir/celt_lpc.c.o
[  6%] Building C object src/CMakeFiles/lpcnetfreedv.dir/pitch.c.o
[  8%] Building C object src/CMakeFiles/lpcnetfreedv.dir/codec2_pitch.c.o
[  9%] Building C object src/CMakeFiles/lpcnetfreedv.dir/mbest.c.o
[ 11%] Building C object src/CMakeFiles/lpcnetfreedv.dir/lpcnet_quant.c.o
[ 12%] Building C object src/CMakeFiles/lpcnetfreedv.dir/lpcnet_dump.c.o
[ 14%] Building C object src/CMakeFiles/lpcnetfreedv.dir/4stage_pred_vq.c.o
[ 16%] Building C object src/CMakeFiles/lpcnetfreedv.dir/4stage_direct_split_vq.c.o
[ 17%] Building C object src/CMakeFiles/lpcnetfreedv.dir/4stage_direct_split_indopt_vq.c.o
[ 19%] Building C object src/CMakeFiles/lpcnetfreedv.dir/lpcnet.c.o
[ 20%] Building C object src/CMakeFiles/lpcnetfreedv.dir/lpcnet_freedv.c.o
[ 22%] Building C object src/CMakeFiles/lpcnetfreedv.dir/nnet.c.o
/home/mooneer/freedv-gui/LPCNet/src/nnet.c:51:2: warning: #warning Compiling without any vectorization. This code will be very slow [-Wcpp]
   51 | #warning Compiling without any vectorization. This code will be very slow
      |  ^~~~~~~
[ 24%] Building C object src/CMakeFiles/lpcnetfreedv.dir/__/_deps/lpcnet-src/nnet_data.c.o
[ 25%] Building C object src/CMakeFiles/lpcnetfreedv.dir/from_codec2/sine.c.o
/home/mooneer/freedv-gui/LPCNet/src/from_codec2/sine.c: In function ‘__codec2__estimate_amplitudes’:
/home/mooneer/freedv-gui/LPCNet/src/from_codec2/sine.c:406:57: warning: unused parameter ‘W’ [-Wunused-parameter]
  406 | void estimate_amplitudes(MODEL *model, COMP Sw[], float W[], int est_phase)
      |                                                   ~~~~~~^~~
[ 27%] Building C object src/CMakeFiles/lpcnetfreedv.dir/from_codec2/nlp.c.o
/home/mooneer/freedv-gui/LPCNet/src/from_codec2/nlp.c: In function ‘__codec2__nlp’:
/home/mooneer/freedv-gui/LPCNet/src/from_codec2/nlp.c:255:10: warning: unused parameter ‘Sw’ [-Wunused-parameter]
  255 |   COMP   Sw[],                  /* Freq domain version of Sn[]                        */
      |   ~~~~~~~^~~~
/home/mooneer/freedv-gui/LPCNet/src/from_codec2/nlp.c:256:10: warning: unused parameter ‘W’ [-Wunused-parameter]
  256 |   float  W[],                   /* Freq domain window                                 */
      |   ~~~~~~~^~~
/home/mooneer/freedv-gui/LPCNet/src/from_codec2/nlp.c: In function ‘__codec2__post_process_sub_multiples’:
/home/mooneer/freedv-gui/LPCNet/src/from_codec2/nlp.c:431:38: warning: unused parameter ‘pmin’ [-Wunused-parameter]
  431 |                                  int pmin, int pmax, float gmax, int gmax_bin,
      |                                  ~~~~^~~~
[ 29%] Building C object src/CMakeFiles/lpcnetfreedv.dir/from_codec2/codec2_fft.c.o
[ 30%] Building C object src/CMakeFiles/lpcnetfreedv.dir/from_codec2/kiss_fft.c.o
[ 32%] Building C object src/CMakeFiles/lpcnetfreedv.dir/from_codec2/kiss_fftr.c.o
[ 33%] Linking C shared library liblpcnetfreedv.so
[ 33%] Built target lpcnetfreedv
[ 35%] Building C object src/CMakeFiles/dump_data.dir/dump_data.c.o
[ 37%] Linking C executable dump_data
[ 37%] Built target dump_data
[ 38%] Building C object src/CMakeFiles/test_lpcnet.dir/test_lpcnet.c.o
[ 40%] Building C object src/CMakeFiles/test_lpcnet.dir/nnet_rw.c.o
[ 41%] Linking C executable test_lpcnet
[ 41%] Built target test_lpcnet
[ 43%] Building C object src/CMakeFiles/test_vec.dir/test_vec.c.o
/home/mooneer/freedv-gui/LPCNet/src/test_vec.c: In function ‘test_sgemv_accum16’:
/home/mooneer/freedv-gui/LPCNet/src/test_vec.c:81:5: warning: implicit declaration of function ‘sgemv_accum16_fast’; did you mean ‘sgemv_accum16’? [-Wimplicit-function-declaration]
   81 |     sgemv_accum16_fast(out_fast, weights, ROWS, COLS, 1, x);
      |     ^~~~~~~~~~~~~~~~~~
      |     sgemv_accum16
/home/mooneer/freedv-gui/LPCNet/src/test_vec.c: In function ‘test_sparse_sgemv_accum16’:
/home/mooneer/freedv-gui/LPCNet/src/test_vec.c:115:5: warning: implicit declaration of function ‘sparse_sgemv_accum16_fast’; did you mean ‘sparse_sgemv_accum16’? [-Wimplicit-function-declaration]
  115 |     sparse_sgemv_accum16_fast(out_fast, w, rows, indx, x);
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~
      |     sparse_sgemv_accum16
[ 45%] Linking C executable test_vec
/usr/bin/ld: CMakeFiles/test_vec.dir/test_vec.c.o: in function `test_sgemv_accum16':
/home/mooneer/freedv-gui/LPCNet/src/test_vec.c:81: undefined reference to `sgemv_accum16_fast'
/usr/bin/ld: CMakeFiles/test_vec.dir/test_vec.c.o: in function `test_sparse_sgemv_accum16':
/home/mooneer/freedv-gui/LPCNet/src/test_vec.c:115: undefined reference to `sparse_sgemv_accum16_fast'
collect2: error: ld returned 1 exit status
make[2]: *** [src/CMakeFiles/test_vec.dir/build.make:97: src/test_vec] Error 1
make[1]: *** [CMakeFiles/Makefile2:970: src/CMakeFiles/test_vec.dir/all] Error 2
make: *** [Makefile:166: all] Error 2

The issue seems to be primarily that on the 32 bit version, the kernel is still aarch64 while the rest of userspace is armhf. Not sure how we can detect that in the build process.