Makefile.windows builds libwdsp.dll and libwdsp.a for 64-bit Windows on Linux. FFTW 3.3.11 Windows binaries are downloaded automatically from fftw.org and import libraries are generated with dlltool. README updated with Windows build instructions and FFTW version bump. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|---|---|---|
| java/org/openhpsdr/dsp | ||
| third_party | ||
| .gitignore | ||
| amd.c | ||
| amd.h | ||
| ammod.c | ||
| ammod.h | ||
| amsq.c | ||
| amsq.h | ||
| analyzer.c | ||
| analyzer.h | ||
| anf.c | ||
| anf.h | ||
| anr.c | ||
| anr.h | ||
| apfshadow.c | ||
| apfshadow.h | ||
| bandpass.c | ||
| bandpass.h | ||
| calcc.c | ||
| calcc.h | ||
| calculus | ||
| calculus.c | ||
| calculus.h | ||
| cblock.c | ||
| cblock.h | ||
| cfcomp.c | ||
| cfcomp.h | ||
| cfir.c | ||
| cfir.h | ||
| channel.c | ||
| channel.h | ||
| cmath.c | ||
| cmath.h | ||
| comm.h | ||
| compress.c | ||
| compress.h | ||
| COPYING | ||
| delay.c | ||
| delay.h | ||
| dexp.c | ||
| dexp.h | ||
| div.c | ||
| div.h | ||
| doublepole.c | ||
| doublepole.h | ||
| eer.c | ||
| eer.h | ||
| emnr.c | ||
| emnr.h | ||
| emph.c | ||
| emph.h | ||
| eq.c | ||
| eq.h | ||
| fastmath.h | ||
| fcurve.c | ||
| fcurve.h | ||
| FDnoiseIQ.c | ||
| FDnoiseIQ.h | ||
| fir.c | ||
| fir.h | ||
| firmin.c | ||
| firmin.h | ||
| fmd.c | ||
| fmd.h | ||
| fmmod.c | ||
| fmmod.h | ||
| fmsq.c | ||
| fmsq.h | ||
| gain.c | ||
| gain.h | ||
| gaussian.c | ||
| gaussian.h | ||
| gen.c | ||
| gen.h | ||
| icfir.c | ||
| icfir.h | ||
| iir.c | ||
| iir.h | ||
| impulse_cache.c | ||
| impulse_cache.h | ||
| iobuffs.c | ||
| iobuffs.h | ||
| iqc.c | ||
| iqc.h | ||
| linux_port.c | ||
| linux_port.h | ||
| lmath.c | ||
| lmath.h | ||
| main.c | ||
| main.h | ||
| make_calculus.c | ||
| make_interface.c | ||
| make_zetahat.c | ||
| Makefile | ||
| Makefile.android | ||
| Makefile.windows | ||
| matchedCW.c | ||
| matchedCW.h | ||
| meter.c | ||
| meter.h | ||
| meterlog10.c | ||
| meterlog10.h | ||
| nbp.c | ||
| nbp.h | ||
| nob.c | ||
| nob.h | ||
| nobII.c | ||
| nobII.h | ||
| org_openhpsdr_dsp_Wdsp.c | ||
| org_openhpsdr_dsp_Wdsp.h | ||
| osctrl.c | ||
| osctrl.h | ||
| patchpanel.c | ||
| patchpanel.h | ||
| README.md | ||
| resample.c | ||
| resample.h | ||
| resource.h | ||
| rmatch.c | ||
| rmatch.h | ||
| rnnr.c | ||
| rnnr.h | ||
| RXA.c | ||
| RXA.h | ||
| sbnr.c | ||
| sbnr.h | ||
| sender.c | ||
| sender.h | ||
| shift.c | ||
| shift.h | ||
| siphon.c | ||
| siphon.h | ||
| slew.c | ||
| slew.h | ||
| snb.c | ||
| snb.h | ||
| ssql.c | ||
| ssql.h | ||
| syncbuffs.c | ||
| syncbuffs.h | ||
| TXA.c | ||
| TXA.h | ||
| utilities.c | ||
| utilities.h | ||
| varsamp.c | ||
| varsamp.h | ||
| version.c | ||
| wcpAGC.c | ||
| wcpAGC.h | ||
| wdsp.h | ||
| wisdom.c | ||
| zetaHat.bin | ||
| zetaHat.c | ||
| zetaHat.h | ||
WDSP
DSP library for SDR (Software Defined Radio) applications.
Originally written for Windows by Warren Pratt, NR0V. Ported to Linux and Android by John Melton G0ORX/N6LYT.
Project structure
wdsp/
├── *.c / *.h — WDSP library sources
├── org_openhpsdr_dsp_Wdsp.c/.h — JNI bridge
├── Makefile — host build (Linux / macOS)
├── Makefile.android — Android cross-build
├── Makefile.windows — Windows cross-build (MinGW-w64, runs on Linux)
├── java/
│ └── org/openhpsdr/dsp/Wdsp.java
├── third_party/
│ ├── fftw/ — FFTW source (download manually, Android only)
│ ├── fftw-win64/ — FFTW Windows binaries (downloaded automatically)
│ ├── rnnoise/ — RNNoise noise suppression
│ └── libspecbleach/ — spectral noise reduction
├── obj/ — object files (generated)
├── obj_win/ — Windows object files (generated)
├── lib/ — built libraries (generated)
└── lib_win/ — Windows libraries (generated)
Host build (Linux / macOS)
Dependencies
Linux:
sudo apt install build-essential libfftw3-dev pkg-config default-jdk
macOS:
brew install fftw pkg-config
Build
# Full build: static + shared + JNI library + Java classes
make
# Individual targets
make static # lib/libwdsp.a
make shared # lib/libwdsp.so (or .dylib on macOS)
make java # lib/libwdspj.so + java/build/
Install
sudo make install # installs to /usr/local/lib and /usr/local/include
sudo make PREFIX=/opt/wdsp install # custom prefix
sudo make install_java # install libwdspj alongside libwdsp
Options
| Variable | Default | Description |
|---|---|---|
PREFIX |
/usr/local |
Install prefix |
NR34LIB |
off | Set to ON to skip bundled rnnoise/libspecbleach |
CC |
gcc |
C compiler |
CFLAGS |
-pthread -O3 ... |
Compiler flags |
make NR34LIB=ON # build without NR3/NR4 noise reduction
make CC=clang
Clean
make clean
Windows build (кросс-компиляция с Linux)
Сборка выполняется на Linux с помощью MinGW-w64. FFTW скачивается автоматически.
Зависимости
# Arch
sudo pacman -S mingw-w64-gcc unzip
# Debian / Ubuntu
sudo apt install gcc-mingw-w64-x86-64 binutils-mingw-w64-x86-64 unzip
# Fedora
sudo dnf install mingw64-gcc mingw64-binutils unzip
Также нужен wget или curl.
Сборка
# DLL + статическая библиотека (рекомендуется)
make -f Makefile.windows
# Только DLL
make -f Makefile.windows dll
# Только статическая библиотека
make -f Makefile.windows static
Результат в lib_win/:
| Файл | Назначение |
|---|---|
libwdsp.dll |
DLL для Windows |
libwdsp.dll.a |
Import library для MinGW (-lwdsp) |
libwdsp.a |
Статическая библиотека |
libfftw3-3.dll |
Runtime dependency — распространять вместе с DLL |
libfftw3f-3.dll |
Runtime dependency — распространять вместе с DLL |
Линковка приложения
MinGW:
gcc myapp.c -Llib_win -lwdsp -o myapp.exe
MSVC — переименовать libwdsp.dll.a в libwdsp.lib и подключить обычным образом.
Статически (MinGW):
gcc myapp.c libwdsp.a third_party/rnnoise/librnnoise.a \
third_party/libspecbleach/libspecbleach.a \
-Lthird_party/fftw-win64 -lfftw3-3 -lfftw3f-3 -lavrt -lm -o myapp.exe
Параметры
| Переменная | По умолчанию | Описание |
|---|---|---|
MINGW_PREFIX |
x86_64-w64-mingw32 |
Префикс MinGW toolchain |
FFTW_VERSION |
3.3.11 |
Версия FFTW |
CFLAGS |
-O3 -Wno-parentheses |
Флаги компилятора |
make -f Makefile.windows MINGW_PREFIX=i686-w64-mingw32 # 32-bit Windows
Очистка
make -f Makefile.windows clean # артефакты сборки
make -f Makefile.windows distclean # + удалить скачанный FFTW
Android build
Prerequisites
- Android NDK r23 or newer
- FFTW source — download and extract into
third_party/fftw/:
wget https://www.fftw.org/fftw-3.3.11.tar.gz
tar xf fftw-3.3.11.tar.gz
mv fftw-3.3.11 third_party/fftw
- Java compiler — for building the
.classfile (Android Studio's JBR or any JDK)
Build
make android
# or directly
make -f Makefile.android
Output is placed into:
lib/android/
├── arm64-v8a/
│ ├── libfftw3.so
│ ├── libfftw3f.so
│ ├── libwdsp.so
│ └── libwdspj.so
├── armeabi-v7a/
│ └── ...
├── x86_64/
│ └── ...
└── java/
└── org/openhpsdr/dsp/Wdsp.class
libwdsp.so has FFTW linked statically — no separate FFTW dependency at runtime on the device.
Options
| Variable | Default | Description |
|---|---|---|
ANDROID_NDK |
/home/vladimir/Android/Sdk/ndk/29.0.14206865 |
Path to Android NDK |
ANDROID_API |
24 |
Minimum API level |
ANDROID_ABIS |
arm64-v8a armeabi-v7a x86_64 |
Target ABIs |
ANDROID_HOST_TAG |
auto-detected | Host platform (linux-x86_64, darwin-x86_64, etc.) |
FFTW_SRC |
third_party/fftw |
Path to FFTW source |
JAVAC |
/opt/android-studio/jbr/bin/javac |
Java compiler |
make -f Makefile.android \
ANDROID_NDK=~/Android/Sdk/ndk/26.3.11579264 \
ANDROID_API=26 \
ANDROID_ABIS=arm64-v8a
Clean
make -f Makefile.android clean
# removes obj/android/ and lib/android/
Using in an Android project
Copy lib/android/{abi}/ into your Android project's jniLibs:
app/src/main/jniLibs/
├── arm64-v8a/
│ ├── libwdsp.so
│ └── libwdspj.so
├── armeabi-v7a/
│ └── ...
└── x86_64/
└── ...
Add Wdsp.java to your source tree and load the libraries at startup:
System.loadLibrary("wdsp");
System.loadLibrary("wdspj");
Or use the singleton:
Wdsp wdsp = Wdsp.getInstance();