diff --git a/Makefile.android b/Makefile.android index a540ea5..249876f 100644 --- a/Makefile.android +++ b/Makefile.android @@ -5,9 +5,8 @@ # Optional overrides: # ANDROID_NDK=/path/to/ndk ANDROID_API=24 ANDROID_ABIS="arm64-v8a x86_64" # -# Requires FFTW source in third_party/fftw/ -# Download from https://www.fftw.org/download.html and extract so that -# third_party/fftw/configure exists. +# FFTW source is downloaded and extracted automatically. +# Override FFTW_SRC to use an existing directory. ANDROID_NDK ?= /home/vladimir/Android/Sdk/ndk/29.0.14206865 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 \ -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) WDSP_SOURCES = amd.c \ @@ -148,9 +150,9 @@ ANDROID_OBJ_ROOT := obj/android ANDROID_LIB_ROOT := lib/android 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),\ $(ANDROID_LIB_ROOT)/$(abi)/libfftw3.so \ $(ANDROID_LIB_ROOT)/$(abi)/libfftw3f.so \ @@ -158,15 +160,21 @@ all: check-fftw-src \ $(ANDROID_LIB_ROOT)/$(abi)/libwdspj.so) \ java-classes -check-fftw-src: - @test -f $(FFTW_SRC)/configure || { \ - echo ""; \ - echo "ERROR: FFTW source not found at $(FFTW_SRC)/configure"; \ - echo "Download and extract FFTW from https://www.fftw.org/download.html"; \ - echo "so that $(FFTW_SRC)/configure exists."; \ - echo ""; \ - exit 1; \ - } +# ── Автоматическое получение FFTW ──────────────────────────────────────────── + +third_party/$(FFTW_TAR): + mkdir -p third_party + @echo ">>> Скачиваем FFTW $(FFTW_VERSION)..." + @if command -v wget >/dev/null 2>&1; then \ + wget -q --show-progress -O $@ "$(FFTW_URL)"; \ + 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 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) # --- 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) cd $$(ABI_$(1)_OBJDIR)/fftw-build && \ $(abspath $(FFTW_SRC))/configure \ @@ -240,7 +248,7 @@ $$(ABI_$(1)_FFTW_STAMP): @touch $$@ # --- 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) cd $$(ABI_$(1)_OBJDIR)/fftwf-build && \ $(abspath $(FFTW_SRC))/configure \ @@ -311,3 +319,6 @@ java-classes: $(JAVA_SOURCE) clean: rm -rf $(ANDROID_OBJ_ROOT) $(ANDROID_LIB_ROOT) + +distclean: clean + -rm -rf $(FFTW_SRC) third_party/$(FFTW_TAR) diff --git a/README.md b/README.md index 861af64..2eaf217 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ wdsp/ ├── java/ │ └── org/openhpsdr/dsp/Wdsp.java ├── third_party/ -│ ├── fftw/ — FFTW source (download manually, Android only) +│ ├── fftw-3.3.11/ — FFTW source (downloaded automatically) │ ├── fftw-win64/ — FFTW Windows binaries (downloaded automatically) │ ├── rnnoise/ — RNNoise noise suppression │ └── libspecbleach/ — spectral noise reduction @@ -169,15 +169,9 @@ make -f Makefile.windows distclean # + удалить скачанный FFTW ### Prerequisites 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 -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) +FFTW 3.3.11 скачивается и собирается автоматически. Чтобы использовать уже скачанный исходник, передайте `FFTW_SRC=/path/to/fftw-3.3.11`. ### Build @@ -227,8 +221,8 @@ make -f Makefile.android \ ### Clean ```bash -make -f Makefile.android clean -# removes obj/android/ and lib/android/ +make -f Makefile.android clean # удаляет obj/android/ и lib/android/ +make -f Makefile.android distclean # + удаляет скачанный FFTW ``` ---