wdsp/Makefile
Uladzimir Karpenka 89c8a0e2b5 first commit
2026-06-01 15:58:45 +03:00

229 lines
5.2 KiB
Makefile

#
# Makefile for WDSP library
# Builds static, shared and (optionally) Java JNI libraries.
#
UNAME_S := $(shell uname -s)
PREFIX ?= /usr/local
LIBDIR ?= $(PREFIX)/lib
INCLUDEDIR ?= $(PREFIX)/include
CC ?= gcc
AR ?= ar
RANLIB ?= ranlib
CFLAGS ?= -pthread -O3 -D_GNU_SOURCE -Wno-parentheses
CPPFLAGS ?=
LDFLAGS ?=
JNI_CFLAGS ?= -std=gnu89 -Wno-implicit-function-declaration -Wno-int-conversion -Wno-incompatible-pointer-types -Wno-incompatible-pointer-types-discards-qualifiers
FFTWINCLUDE := $(shell pkg-config --cflags fftw3 2>/dev/null)
FFTWLIBS := $(shell pkg-config --libs fftw3 2>/dev/null)
FFTWLIBS_F := $(shell pkg-config --libs fftw3f 2>/dev/null)
ifeq ($(strip $(FFTWLIBS)),)
FFTWLIBS := -lfftw3
endif
ifeq ($(strip $(FFTWLIBS_F)),)
FFTWLIBS_F := -lfftw3f
endif
ifeq ($(UNAME_S),Darwin)
SHARED_EXT := dylib
SHARED_LDFLAGS := -dynamiclib
PIC_CFLAGS :=
NOEXECSTACK :=
JAVA_OS_INCLUDE := darwin
else
SHARED_EXT := so
SHARED_LDFLAGS := -shared
PIC_CFLAGS := -fPIC
NOEXECSTACK := -Wl,-z,noexecstack
JAVA_OS_INCLUDE := linux
endif
OBJDIR := obj
OUTDIR := lib
STATIC_LIB_FILE := libwdsp.a
SHARED_LIB_FILE := libwdsp.$(SHARED_EXT)
JAVA_LIB_FILE := libwdspj.$(SHARED_EXT)
STATIC_LIB := $(OUTDIR)/$(STATIC_LIB_FILE)
SHARED_LIB := $(OUTDIR)/$(SHARED_LIB_FILE)
JAVA_LIB := $(OUTDIR)/$(JAVA_LIB_FILE)
ifeq ($(UNAME_S),Darwin)
SHARED_LDFLAGS += -install_name $(LIBDIR)/$(SHARED_LIB_FILE)
JAVA_SHARED_LDFLAGS := -dynamiclib -install_name $(LIBDIR)/$(JAVA_LIB_FILE)
else
JAVA_SHARED_LDFLAGS := $(SHARED_LDFLAGS)
endif
JAVA_HOME ?= $(shell /usr/libexec/java_home 2>/dev/null || sh -c 'J=$$(command -v javac 2>/dev/null); if [ -n "$$J" ]; then dirname "$$(dirname "$$(readlink -f "$$J")")"; fi')
JAVA_INCLUDE := -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/$(JAVA_OS_INCLUDE)
ifneq ($(NR34LIB),ON)
CPPFLAGS += -I third_party/rnnoise/include -I third_party/libspecbleach/include
NR34_DEPS := third_party/rnnoise/librnnoise.a third_party/libspecbleach/libspecbleach.a
NR34_LIBS := $(NR34_DEPS) $(FFTWLIBS_F)
else
NR34_DEPS :=
NR34_LIBS :=
endif
COMMON_LIBS := $(FFTWLIBS) -lpthread -lm
COMPILE = $(CC) $(CPPFLAGS) $(CFLAGS) $(PIC_CFLAGS) $(FFTWINCLUDE)
SOURCES = amd.c \
ammod.c \
amsq.c \
analyzer.c \
anf.c \
anr.c \
apfshadow.c \
bandpass.c \
calcc.c \
calculus.c \
cblock.c \
cfcomp.c \
cfir.c \
channel.c \
cmath.c \
compress.c \
delay.c \
dexp.c \
div.c \
doublepole.c \
eer.c \
emnr.c \
emph.c \
eq.c \
fcurve.c \
FDnoiseIQ.c \
fir.c \
firmin.c \
fmd.c \
fmmod.c \
fmsq.c \
gain.c \
gaussian.c \
gen.c \
icfir.c \
iir.c \
impulse_cache.c \
iobuffs.c \
iqc.c \
linux_port.c \
lmath.c \
main.c \
matchedCW.c \
meter.c \
meterlog10.c \
nbp.c \
nob.c \
nobII.c \
osctrl.c \
patchpanel.c \
resample.c \
rmatch.c \
rnnr.c \
RXA.c \
sbnr.c \
sender.c \
shift.c \
siphon.c \
slew.c \
snb.c \
ssql.c \
syncbuffs.c \
TXA.c \
utilities.c \
varsamp.c \
version.c \
wcpAGC.c \
wisdom.c \
zetaHat.c
OBJS = $(addprefix $(OBJDIR)/, $(SOURCES:.c=.o))
JAVA_SOURCES = org_openhpsdr_dsp_Wdsp.c
JAVA_OBJS = $(addprefix $(OBJDIR)/, $(JAVA_SOURCES:.c=.o))
JAVA_CLASS = java/org/openhpsdr/dsp/Wdsp.java
JAVA_BUILD_DIR = java/build
.PHONY: all static shared java java-classes android install install_java install-dirs clean release
all: static shared java
static: $(STATIC_LIB)
shared: $(SHARED_LIB)
java:
ifeq ($(strip $(JAVA_HOME)),)
@echo "Skipping Java build: JAVA_HOME is not set and javac was not found in PATH"
else
@$(MAKE) $(JAVA_LIB) java-classes
endif
android:
$(MAKE) -f Makefile.android all
$(OUTDIR) $(OBJDIR):
mkdir -p $@
$(STATIC_LIB): $(OBJS) | $(OUTDIR)
$(AR) rv $@ $(OBJS)
$(RANLIB) $@
$(SHARED_LIB): $(OBJS) $(NR34_DEPS) | $(OUTDIR)
$(CC) $(SHARED_LDFLAGS) $(NOEXECSTACK) $(LDFLAGS) -o $@ $(OBJS) $(NR34_LIBS) $(COMMON_LIBS)
$(JAVA_LIB): $(JAVA_OBJS) $(SHARED_LIB) | $(OUTDIR)
$(CC) $(JAVA_SHARED_LDFLAGS) $(NOEXECSTACK) $(LDFLAGS) -o $@ $(JAVA_OBJS) -L$(OUTDIR) -lwdsp
java-classes: $(JAVA_CLASS)
@mkdir -p $(JAVA_BUILD_DIR)
javac -d $(JAVA_BUILD_DIR) $(JAVA_CLASS)
third_party/rnnoise/librnnoise.a:
$(MAKE) -C third_party/rnnoise CFLAGS="$(CFLAGS) $(PIC_CFLAGS) -Iinclude -Isrc"
third_party/libspecbleach/libspecbleach.a:
$(MAKE) -C third_party/libspecbleach CFLAGS="$(CFLAGS) $(PIC_CFLAGS) $(shell pkg-config --cflags fftw3f 2>/dev/null)"
$(OBJDIR)/%.o: %.c | $(OBJDIR)
$(COMPILE) -c -o $@ $<
$(OBJDIR)/org_openhpsdr_dsp_Wdsp.o: org_openhpsdr_dsp_Wdsp.c org_openhpsdr_dsp_Wdsp.h | $(OBJDIR)
@test -n "$(JAVA_HOME)" || (echo "JAVA_HOME is required to build JNI object org_openhpsdr_dsp_Wdsp.o"; exit 2)
$(CC) $(CPPFLAGS) $(CFLAGS) $(JNI_CFLAGS) $(PIC_CFLAGS) $(FFTWINCLUDE) $(JAVA_INCLUDE) -c -o $@ $<
install-dirs:
mkdir -p $(LIBDIR) $(INCLUDEDIR)
install: $(STATIC_LIB) $(SHARED_LIB) install-dirs
cp wdsp.h $(INCLUDEDIR)
cp $(STATIC_LIB) $(LIBDIR)
cp $(SHARED_LIB) $(LIBDIR)
ifeq ($(UNAME_S),Darwin)
/usr/bin/install_name_tool -id $(LIBDIR)/$(SHARED_LIB_FILE) $(LIBDIR)/$(SHARED_LIB_FILE)
else
ldconfig || :
endif
install_java: $(JAVA_LIB) install-dirs
cp $(JAVA_LIB) $(LIBDIR)
release: $(SHARED_LIB)
cp $(SHARED_LIB) ../pihpsdr/release/pihpsdr
clean:
-rm -rf $(OBJDIR) $(OUTDIR)
-rm -rf $(JAVA_BUILD_DIR)
-$(MAKE) -C third_party/rnnoise clean
-$(MAKE) -C third_party/libspecbleach clean