Auto-download FFTW source for Android build
Makefile.android now downloads fftw-3.3.11.tar.gz automatically instead of requiring the user to place sources in third_party/fftw/ manually. The FFTW_SRC variable can still be overridden to use an existing copy. Added distclean target. Updated README accordingly. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
5bbf9698a8
commit
02926b36ce
@ -5,9 +5,8 @@
|
|||||||
# Optional overrides:
|
# Optional overrides:
|
||||||
# ANDROID_NDK=/path/to/ndk ANDROID_API=24 ANDROID_ABIS="arm64-v8a x86_64"
|
# ANDROID_NDK=/path/to/ndk ANDROID_API=24 ANDROID_ABIS="arm64-v8a x86_64"
|
||||||
#
|
#
|
||||||
# Requires FFTW source in third_party/fftw/
|
# FFTW source is downloaded and extracted automatically.
|
||||||
# Download from https://www.fftw.org/download.html and extract so that
|
# Override FFTW_SRC to use an existing directory.
|
||||||
# third_party/fftw/configure exists.
|
|
||||||
|
|
||||||
ANDROID_NDK ?= /home/vladimir/Android/Sdk/ndk/29.0.14206865
|
ANDROID_NDK ?= /home/vladimir/Android/Sdk/ndk/29.0.14206865
|
||||||
ANDROID_API ?= 24
|
ANDROID_API ?= 24
|
||||||
@ -24,7 +23,10 @@ COMMON_CPPFLAGS ?= -I. -I third_party/rnnoise/include -I third_party/libspecblea
|
|||||||
ANDROID_JNI_CFLAGS ?= -std=gnu89 -Wno-implicit-function-declaration -Wno-int-conversion \
|
ANDROID_JNI_CFLAGS ?= -std=gnu89 -Wno-implicit-function-declaration -Wno-int-conversion \
|
||||||
-Wno-incompatible-pointer-types -Wno-incompatible-pointer-types-discards-qualifiers
|
-Wno-incompatible-pointer-types -Wno-incompatible-pointer-types-discards-qualifiers
|
||||||
|
|
||||||
FFTW_SRC ?= third_party/fftw
|
FFTW_VERSION := 3.3.11
|
||||||
|
FFTW_TAR := fftw-$(FFTW_VERSION).tar.gz
|
||||||
|
FFTW_URL := https://fftw.org/pub/fftw/$(FFTW_TAR)
|
||||||
|
FFTW_SRC ?= third_party/fftw-$(FFTW_VERSION)
|
||||||
FFTW_MAKEJOBS ?= $(shell nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 4)
|
FFTW_MAKEJOBS ?= $(shell nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 4)
|
||||||
|
|
||||||
WDSP_SOURCES = amd.c \
|
WDSP_SOURCES = amd.c \
|
||||||
@ -148,9 +150,9 @@ ANDROID_OBJ_ROOT := obj/android
|
|||||||
ANDROID_LIB_ROOT := lib/android
|
ANDROID_LIB_ROOT := lib/android
|
||||||
ANDROID_JAVA_OUT := lib/android/java
|
ANDROID_JAVA_OUT := lib/android/java
|
||||||
|
|
||||||
.PHONY: all clean java-classes check-fftw-src
|
.PHONY: all clean distclean java-classes
|
||||||
|
|
||||||
all: check-fftw-src \
|
all: $(FFTW_SRC)/configure \
|
||||||
$(foreach abi,$(ANDROID_ABIS),\
|
$(foreach abi,$(ANDROID_ABIS),\
|
||||||
$(ANDROID_LIB_ROOT)/$(abi)/libfftw3.so \
|
$(ANDROID_LIB_ROOT)/$(abi)/libfftw3.so \
|
||||||
$(ANDROID_LIB_ROOT)/$(abi)/libfftw3f.so \
|
$(ANDROID_LIB_ROOT)/$(abi)/libfftw3f.so \
|
||||||
@ -158,15 +160,21 @@ all: check-fftw-src \
|
|||||||
$(ANDROID_LIB_ROOT)/$(abi)/libwdspj.so) \
|
$(ANDROID_LIB_ROOT)/$(abi)/libwdspj.so) \
|
||||||
java-classes
|
java-classes
|
||||||
|
|
||||||
check-fftw-src:
|
# ── Автоматическое получение FFTW ────────────────────────────────────────────
|
||||||
@test -f $(FFTW_SRC)/configure || { \
|
|
||||||
echo ""; \
|
third_party/$(FFTW_TAR):
|
||||||
echo "ERROR: FFTW source not found at $(FFTW_SRC)/configure"; \
|
mkdir -p third_party
|
||||||
echo "Download and extract FFTW from https://www.fftw.org/download.html"; \
|
@echo ">>> Скачиваем FFTW $(FFTW_VERSION)..."
|
||||||
echo "so that $(FFTW_SRC)/configure exists."; \
|
@if command -v wget >/dev/null 2>&1; then \
|
||||||
echo ""; \
|
wget -q --show-progress -O $@ "$(FFTW_URL)"; \
|
||||||
exit 1; \
|
else \
|
||||||
}
|
curl -L --progress-bar -o $@ "$(FFTW_URL)"; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
$(FFTW_SRC)/configure: third_party/$(FFTW_TAR)
|
||||||
|
@echo ">>> Распаковываем FFTW..."
|
||||||
|
tar xf $< -C third_party/
|
||||||
|
@touch $@
|
||||||
|
|
||||||
# abi_target: compiler triple for NDK clang wrapper
|
# abi_target: compiler triple for NDK clang wrapper
|
||||||
define abi_target
|
define abi_target
|
||||||
@ -226,7 +234,7 @@ ABI_$(1)_WDSP_OBJS := $$(patsubst %.c,$$(ABI_$(1)_OBJDIR)/%.o,$$(ALL_C_SOURCES))
|
|||||||
ABI_$(1)_JNI_OBJ := $$(ABI_$(1)_OBJDIR)/$(JNI_SOURCE:.c=.o)
|
ABI_$(1)_JNI_OBJ := $$(ABI_$(1)_OBJDIR)/$(JNI_SOURCE:.c=.o)
|
||||||
|
|
||||||
# --- Build fftw3 (double) ---
|
# --- Build fftw3 (double) ---
|
||||||
$$(ABI_$(1)_FFTW_STAMP):
|
$$(ABI_$(1)_FFTW_STAMP): $(FFTW_SRC)/configure
|
||||||
@mkdir -p $$(ABI_$(1)_OBJDIR)/fftw-build $$(ABI_$(1)_FFTW_PREFIX)
|
@mkdir -p $$(ABI_$(1)_OBJDIR)/fftw-build $$(ABI_$(1)_FFTW_PREFIX)
|
||||||
cd $$(ABI_$(1)_OBJDIR)/fftw-build && \
|
cd $$(ABI_$(1)_OBJDIR)/fftw-build && \
|
||||||
$(abspath $(FFTW_SRC))/configure \
|
$(abspath $(FFTW_SRC))/configure \
|
||||||
@ -240,7 +248,7 @@ $$(ABI_$(1)_FFTW_STAMP):
|
|||||||
@touch $$@
|
@touch $$@
|
||||||
|
|
||||||
# --- Build fftw3f (float/single) ---
|
# --- Build fftw3f (float/single) ---
|
||||||
$$(ABI_$(1)_FFTWF_STAMP):
|
$$(ABI_$(1)_FFTWF_STAMP): $(FFTW_SRC)/configure
|
||||||
@mkdir -p $$(ABI_$(1)_OBJDIR)/fftwf-build $$(ABI_$(1)_FFTWF_PREFIX)
|
@mkdir -p $$(ABI_$(1)_OBJDIR)/fftwf-build $$(ABI_$(1)_FFTWF_PREFIX)
|
||||||
cd $$(ABI_$(1)_OBJDIR)/fftwf-build && \
|
cd $$(ABI_$(1)_OBJDIR)/fftwf-build && \
|
||||||
$(abspath $(FFTW_SRC))/configure \
|
$(abspath $(FFTW_SRC))/configure \
|
||||||
@ -311,3 +319,6 @@ java-classes: $(JAVA_SOURCE)
|
|||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -rf $(ANDROID_OBJ_ROOT) $(ANDROID_LIB_ROOT)
|
rm -rf $(ANDROID_OBJ_ROOT) $(ANDROID_LIB_ROOT)
|
||||||
|
|
||||||
|
distclean: clean
|
||||||
|
-rm -rf $(FFTW_SRC) third_party/$(FFTW_TAR)
|
||||||
|
|||||||
16
README.md
16
README.md
@ -17,7 +17,7 @@ wdsp/
|
|||||||
├── java/
|
├── java/
|
||||||
│ └── org/openhpsdr/dsp/Wdsp.java
|
│ └── org/openhpsdr/dsp/Wdsp.java
|
||||||
├── third_party/
|
├── third_party/
|
||||||
│ ├── fftw/ — FFTW source (download manually, Android only)
|
│ ├── fftw-3.3.11/ — FFTW source (downloaded automatically)
|
||||||
│ ├── fftw-win64/ — FFTW Windows binaries (downloaded automatically)
|
│ ├── fftw-win64/ — FFTW Windows binaries (downloaded automatically)
|
||||||
│ ├── rnnoise/ — RNNoise noise suppression
|
│ ├── rnnoise/ — RNNoise noise suppression
|
||||||
│ └── libspecbleach/ — spectral noise reduction
|
│ └── libspecbleach/ — spectral noise reduction
|
||||||
@ -169,15 +169,9 @@ make -f Makefile.windows distclean # + удалить скачанный FFTW
|
|||||||
### Prerequisites
|
### Prerequisites
|
||||||
|
|
||||||
1. **Android NDK** r23 or newer
|
1. **Android NDK** r23 or newer
|
||||||
2. **FFTW source** — download and extract into `third_party/fftw/`:
|
2. **Java compiler** — for building the `.class` file (Android Studio's JBR or any JDK)
|
||||||
|
|
||||||
```bash
|
FFTW 3.3.11 скачивается и собирается автоматически. Чтобы использовать уже скачанный исходник, передайте `FFTW_SRC=/path/to/fftw-3.3.11`.
|
||||||
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
|
|
||||||
```
|
|
||||||
|
|
||||||
3. **Java compiler** — for building the `.class` file (Android Studio's JBR or any JDK)
|
|
||||||
|
|
||||||
### Build
|
### Build
|
||||||
|
|
||||||
@ -227,8 +221,8 @@ make -f Makefile.android \
|
|||||||
### Clean
|
### Clean
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
make -f Makefile.android clean
|
make -f Makefile.android clean # удаляет obj/android/ и lib/android/
|
||||||
# removes obj/android/ and lib/android/
|
make -f Makefile.android distclean # + удаляет скачанный FFTW
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user