mirror of
https://git.vladimir.cc/vladimir/wdsp.git
synced 2026-08-25 17:27:33 +00:00
Merge remote-tracking branch 'origin/main' into wfm
This commit is contained in:
+58
-22
@@ -5,17 +5,39 @@
|
||||
# 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
|
||||
# Auto-detect NDK path (can always be overridden by setting ANDROID_NDK explicitly):
|
||||
# 1. ANDROID_NDK_HOME environment variable
|
||||
# 2. Latest NDK under ANDROID_SDK_ROOT or ANDROID_HOME
|
||||
# 3. Default SDK locations: ~/Android/Sdk (Linux) or ~/Library/Android/sdk (macOS)
|
||||
ifeq ($(origin ANDROID_NDK),undefined)
|
||||
ifdef ANDROID_NDK_HOME
|
||||
ANDROID_NDK := $(ANDROID_NDK_HOME)
|
||||
else
|
||||
_SDK_ROOT := $(or $(ANDROID_SDK_ROOT),$(ANDROID_HOME),\
|
||||
$(wildcard $(HOME)/Android/Sdk),\
|
||||
$(wildcard $(HOME)/Library/Android/sdk))
|
||||
ifdef _SDK_ROOT
|
||||
ANDROID_NDK := $(lastword $(sort $(wildcard $(_SDK_ROOT)/ndk/*)))
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
ifndef ANDROID_NDK
|
||||
$(error Cannot find Android NDK. Set ANDROID_NDK, ANDROID_NDK_HOME, ANDROID_SDK_ROOT, or ANDROID_HOME)
|
||||
endif
|
||||
ANDROID_API ?= 24
|
||||
ANDROID_ABIS ?= arm64-v8a armeabi-v7a x86_64
|
||||
ANDROID_HOST_TAG ?= $(shell uname -s | tr '[:upper:]' '[:lower:]' | sed 's/darwin/darwin/;s/linux/linux/')-$(shell uname -m | sed 's/aarch64/arm64/;s/x86_64/x86_64/')
|
||||
|
||||
JBR_BIN ?= /opt/android-studio/jbr/bin
|
||||
JAVAC ?= $(JBR_BIN)/javac
|
||||
# Auto-detect javac: JAVA_HOME > system PATH > Android Studio JBR (Linux/macOS)
|
||||
_JAVAC_CANDIDATES := \
|
||||
$(if $(JAVA_HOME),$(wildcard $(JAVA_HOME)/bin/javac)) \
|
||||
$(shell command -v javac 2>/dev/null) \
|
||||
$(wildcard /opt/android-studio/jbr/bin/javac) \
|
||||
$(wildcard /Applications/Android\ Studio.app/Contents/jbr/Contents/Home/bin/javac)
|
||||
JAVAC ?= $(firstword $(_JAVAC_CANDIDATES))
|
||||
|
||||
TOOLCHAIN := $(ANDROID_NDK)/toolchains/llvm/prebuilt/$(ANDROID_HOST_TAG)
|
||||
|
||||
@@ -24,7 +46,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 \
|
||||
@@ -150,9 +175,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 \
|
||||
@@ -160,15 +185,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
|
||||
@@ -228,11 +259,12 @@ 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 \
|
||||
--host=$(call fftw_host,$(1)) \
|
||||
--build=$(shell uname -m)-linux-gnu \
|
||||
--host=$(strip $(call fftw_host,$(1))) \
|
||||
CC="$$(ABI_$(1)_CC)" \
|
||||
CFLAGS="-fPIC" \
|
||||
--prefix=$(abspath $$(ABI_$(1)_FFTW_PREFIX)) \
|
||||
@@ -242,11 +274,12 @@ $$(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 \
|
||||
--host=$(call fftw_host,$(1)) \
|
||||
--build=$(shell uname -m)-linux-gnu \
|
||||
--host=$(strip $(call fftw_host,$(1))) \
|
||||
CC="$$(ABI_$(1)_CC)" \
|
||||
CFLAGS="-fPIC" \
|
||||
--prefix=$(abspath $$(ABI_$(1)_FFTWF_PREFIX)) \
|
||||
@@ -313,3 +346,6 @@ java-classes: $(JAVA_SOURCE)
|
||||
|
||||
clean:
|
||||
rm -rf $(ANDROID_OBJ_ROOT) $(ANDROID_LIB_ROOT)
|
||||
|
||||
distclean: clean
|
||||
-rm -rf $(FFTW_SRC) third_party/$(FFTW_TAR)
|
||||
|
||||
Reference in New Issue
Block a user