mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-01-03 23:47:08 +00:00
324 lines
8.4 KiB
Makefile
324 lines
8.4 KiB
Makefile
#
|
|
# Semantic versioning
|
|
#
|
|
# KFVER_MAJOR denotes the ABI version.
|
|
#
|
|
# - It must be bumped only if API public members are removed or
|
|
# changed in the incompatible
|
|
#
|
|
# KFVER_MINOR denotes the minor version within a compatible ABI.
|
|
#
|
|
# - It should be bumped if new API public members are added
|
|
# (but not removed!) so programs linked against the same library
|
|
# version continue operating properly
|
|
#
|
|
# KFVER_PATCH denotes bugfix count since the last minor update.
|
|
#
|
|
# - It should be bumped whenever a bug fix is pushed.
|
|
#
|
|
|
|
export KFVER_MAJOR = 131
|
|
export KFVER_MINOR = 1
|
|
export KFVER_PATCH = 0
|
|
|
|
#
|
|
# Data type (float / int16_t / int32_t / simd)
|
|
#
|
|
|
|
export KISSFFT_DATATYPE ?= float
|
|
|
|
#
|
|
# Default options
|
|
#
|
|
|
|
export KISSFFT_OPENMP ?= 0
|
|
export KISSFFT_STATIC ?= 0
|
|
export KISSFFT_TOOLS ?= 1
|
|
export KISSFFT_USE_ALLOCA ?= 0
|
|
|
|
#
|
|
# Installation directories
|
|
#
|
|
|
|
PREFIX ?= /usr/local
|
|
export ABS_PREFIX = $(abspath $(PREFIX))
|
|
|
|
BINDIR ?= $(ABS_PREFIX)/bin
|
|
export ABS_BINDIR = $(abspath $(BINDIR))
|
|
|
|
INCLUDEDIR ?= $(ABS_PREFIX)/include
|
|
export ABS_INCLUDEDIR = $(abspath $(INCLUDEDIR))
|
|
export ABS_PKGINCLUDEDIR = $(ABS_INCLUDEDIR)/kissfft
|
|
|
|
#
|
|
# Override LIBDIR with lib64 following CMake's
|
|
# GNUInstallDirs logic:
|
|
#
|
|
|
|
CANDIDATE_LIBDIR_NAME = lib
|
|
|
|
ifneq ($(MAKECMDGOALS),clean)
|
|
ifeq ($(shell uname -s),Linux)
|
|
_UNAME_ARCH = $(shell uname -i)
|
|
|
|
ifeq (,$(_UNAME_ARCH))
|
|
_UNAME_ARCH = $(shell uname -m)
|
|
|
|
ifeq (,$(_UNAME_ARCH))
|
|
$(warning WARNING: Can not detect system architecture!)
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(_UNAME_ARCH),x86_64)
|
|
CANDIDATE_LIBDIR_NAME = lib64
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
CANDIDATE_LIBDIR = $(PREFIX)/$(CANDIDATE_LIBDIR_NAME)
|
|
LIBDIR ?= $(CANDIDATE_LIBDIR)
|
|
|
|
export ABS_LIBDIR = $(abspath $(LIBDIR))
|
|
|
|
export INSTALL ?= install
|
|
|
|
#
|
|
# Library name and version
|
|
#
|
|
|
|
ifeq ($(KISSFFT_OPENMP), 1)
|
|
KISSFFTLIB_SHORTNAME = kissfft-$(KISSFFT_DATATYPE)-openmp
|
|
KISSFFT_PKGCONFIG = kissfft-$(KISSFFT_DATATYPE)-openmp.pc
|
|
KISSFFTLIB_FLAGS = -fopenmp
|
|
TYPEFLAGS = -fopenmp
|
|
PKGCONFIG_OPENMP = -fopenmp
|
|
else
|
|
KISSFFTLIB_SHORTNAME = kissfft-$(KISSFFT_DATATYPE)
|
|
KISSFFT_PKGCONFIG = kissfft-$(KISSFFT_DATATYPE).pc
|
|
TYPEFLAGS =
|
|
PKGCONFIG_OPENMP =
|
|
endif
|
|
|
|
ifeq ($(KISSFFT_STATIC), 1)
|
|
KISSFFTLIB_NAME = lib$(KISSFFTLIB_SHORTNAME).a
|
|
KISSFFTLIB_FLAGS += -static
|
|
else ifeq ($(shell uname -s),Darwin)
|
|
KISSFFTLIB_NAME = lib$(KISSFFTLIB_SHORTNAME).dylib
|
|
KISSFFTLIB_FLAGS += -shared -Wl,-install_name,$(KISSFFTLIB_NAME)
|
|
else
|
|
KISSFFTLIB_SODEVELNAME = lib$(KISSFFTLIB_SHORTNAME).so
|
|
KISSFFTLIB_SONAME = $(KISSFFTLIB_SODEVELNAME).$(KFVER_MAJOR)
|
|
KISSFFTLIB_NAME = $(KISSFFTLIB_SONAME).$(KFVER_MINOR).$(KFVER_PATCH)
|
|
KISSFFTLIB_FLAGS += -shared -Wl,-soname,$(KISSFFTLIB_SONAME)
|
|
endif
|
|
|
|
export KISSFFTLIB_SHORTNAME
|
|
|
|
#
|
|
# Compile-time definitions by datatype
|
|
#
|
|
#
|
|
# Note: -DKISS_FFT_BUILD and -DKISS_FFT_SHARED control
|
|
# C symbol visibility.
|
|
#
|
|
|
|
ifeq "$(KISSFFT_DATATYPE)" "int32_t"
|
|
TYPEFLAGS += -DFIXED_POINT=32
|
|
else ifeq "$(KISSFFT_DATATYPE)" "int16_t"
|
|
TYPEFLAGS += -DFIXED_POINT=16
|
|
else ifeq "$(KISSFFT_DATATYPE)" "simd"
|
|
TYPEFLAGS += -DUSE_SIMD=1 -msse
|
|
else ifeq "$(KISSFFT_DATATYPE)" "float"
|
|
TYPEFLAGS += -Dkiss_fft_scalar=$(KISSFFT_DATATYPE)
|
|
else ifeq "$(KISSFFT_DATATYPE)" "double"
|
|
TYPEFLAGS += -Dkiss_fft_scalar=$(KISSFFT_DATATYPE)
|
|
else
|
|
$(error ERROR: KISSFFT_DATATYPE must be one of: float double int16_t int32_t simd)
|
|
endif
|
|
|
|
ifneq ($(KISSFFT_STATIC), 1)
|
|
TYPEFLAGS += -DKISS_FFT_SHARED
|
|
endif
|
|
|
|
ifeq ($(KISSFFT_USE_ALLOCA), 1)
|
|
TYPEFLAGS += -DKISS_FFT_USE_ALLOCA=1
|
|
endif
|
|
|
|
#
|
|
# Compile-time definitions
|
|
#
|
|
|
|
#
|
|
# Save pkgconfig variables before appending
|
|
# -DKISS_FFT_BUILD to TYPEFLAGS
|
|
#
|
|
|
|
ifneq ($(shell uname -s),Darwin)
|
|
PKGCONFIG_KISSFFT_VERSION = $(KFVER_MAJOR).$(KFVER_MINOR).$(KFVER_PATCH)
|
|
PKGCONFIG_KISSFFT_OUTPUT_NAME = $(KISSFFTLIB_SHORTNAME)
|
|
PKGCONFIG_PKG_KISSFFT_DEFS = $(TYPEFLAGS)
|
|
PKGCONFIG_KISSFFT_PREFIX = $(ABS_PREFIX)
|
|
ifeq ($(ABS_INCLUDEDIR),$(ABS_PREFIX)/include)
|
|
PKGCONFIG_KISSFFT_INCLUDEDIR = $${prefix}/include
|
|
else
|
|
PKGCONFIG_KISSFFT_INCLUDEDIR = $(ABS_INCLUDEDIR)
|
|
|
|
endif
|
|
ifeq ($(ABS_LIBDIR),$(ABS_PREFIX)/$(CANDIDATE_LIBDIR_NAME))
|
|
PKGCONFIG_KISSFFT_LIBDIR = $${prefix}/$(CANDIDATE_LIBDIR_NAME)
|
|
else
|
|
PKGCONFIG_KISSFFT_LIBDIR = $(ABS_LIBDIR)
|
|
endif
|
|
PKGCONFIG_KISSFFT_PKGINCLUDEDIR = $${includedir}/kissfft
|
|
endif
|
|
|
|
export TYPEFLAGS
|
|
|
|
# Compile .c into .o
|
|
#
|
|
|
|
#
|
|
# -DKISS_FFT_BUILD is used for library artifacts, so
|
|
# consumer executable in 'test' and 'tools' do _NOT_
|
|
# need it. pkg-config output does not need it either.
|
|
#
|
|
|
|
%.c.o: %.c
|
|
$(CC) -Wall -fPIC \
|
|
-o $@ \
|
|
$(CFLAGS) $(TYPEFLAGS) -DKISS_FFT_BUILD \
|
|
-c $<
|
|
|
|
#
|
|
# Target: "make all"
|
|
#
|
|
|
|
all: kfc.c.o kiss_fft.c.o kiss_fftnd.c.o kiss_fftndr.c.o kiss_fftr.c.o
|
|
ifneq ($(KISSFFT_STATIC), 1)
|
|
$(CC) $(KISSFFTLIB_FLAGS) -o $(KISSFFTLIB_NAME) $^
|
|
ifneq ($(shell uname -s),Darwin)
|
|
ln -sf $(KISSFFTLIB_NAME) $(KISSFFTLIB_SONAME)
|
|
ln -sf $(KISSFFTLIB_NAME) $(KISSFFTLIB_SODEVELNAME)
|
|
endif
|
|
else
|
|
$(AR) crus $(KISSFFTLIB_NAME) $^
|
|
endif
|
|
ifneq ($(KISSFFT_TOOLS), 0)
|
|
make -C tools CFLAGADD="$(CFLAGADD)" all
|
|
endif
|
|
|
|
#
|
|
# Target: "make install"
|
|
#
|
|
|
|
install: all
|
|
$(INSTALL) -Dt $(ABS_PKGINCLUDEDIR) -m 644 \
|
|
kiss_fft.h \
|
|
kissfft.hh \
|
|
kiss_fftnd.h \
|
|
kiss_fftndr.h \
|
|
kiss_fftr.h
|
|
$(INSTALL) -Dt $(ABS_LIBDIR) -m 644 $(KISSFFTLIB_NAME)
|
|
ifneq ($(KISSFFT_STATIC), 1)
|
|
ifneq ($(shell uname -s),Darwin)
|
|
cd $(LIBDIR) && \
|
|
ln -sf $(KISSFFTLIB_NAME) $(KISSFFTLIB_SONAME) && \
|
|
ln -sf $(KISSFFTLIB_NAME) $(KISSFFTLIB_SODEVELNAME)
|
|
endif
|
|
endif
|
|
ifneq ($(shell uname -s),Darwin)
|
|
mkdir "$(ABS_LIBDIR)/pkgconfig"
|
|
sed \
|
|
-e 's+@PKGCONFIG_KISSFFT_VERSION@+$(PKGCONFIG_KISSFFT_VERSION)+' \
|
|
-e 's+@KISSFFT_OUTPUT_NAME@+$(PKGCONFIG_KISSFFT_OUTPUT_NAME)+' \
|
|
-e 's+@PKG_KISSFFT_DEFS@+$(PKGCONFIG_PKG_KISSFFT_DEFS)+' \
|
|
-e 's+@PKG_OPENMP@+$(PKGCONFIG_OPENMP)+' \
|
|
-e 's+@PKGCONFIG_KISSFFT_PREFIX@+$(PKGCONFIG_KISSFFT_PREFIX)+' \
|
|
-e 's+@PKGCONFIG_KISSFFT_INCLUDEDIR@+$(PKGCONFIG_KISSFFT_INCLUDEDIR)+' \
|
|
-e 's+@PKGCONFIG_KISSFFT_LIBDIR@+$(PKGCONFIG_KISSFFT_LIBDIR)+' \
|
|
-e 's+@PKGCONFIG_KISSFFT_PKGINCLUDEDIR@+$(PKGCONFIG_KISSFFT_PKGINCLUDEDIR)+' \
|
|
kissfft.pc.in 1>"$(ABS_LIBDIR)/pkgconfig/$(KISSFFT_PKGCONFIG)"
|
|
endif
|
|
ifneq ($(KISSFFT_TOOLS), 0)
|
|
make -C tools install
|
|
endif
|
|
|
|
#
|
|
# Target: "make doc"
|
|
#
|
|
|
|
doc:
|
|
$(warning Start by reading the README file. If you want to build and test lots of stuff, do a 'make testall')
|
|
$(warning but be aware that 'make testall' has dependencies that the basic kissfft software does not.)
|
|
$(warning It is generally unneeded to run these tests yourself, unless you plan on changing the inner workings)
|
|
$(warning of kissfft and would like to make use of its regression tests.)
|
|
|
|
#
|
|
# Target: "make testsingle"
|
|
#
|
|
|
|
testsingle:
|
|
make clean
|
|
make all
|
|
make -C test CFLAGADD="$(CFLAGADD)" test testcpp
|
|
|
|
#
|
|
# Target: "make testall"
|
|
#
|
|
|
|
testall:
|
|
# Shared libraries
|
|
make KISSFFT_DATATYPE=double testsingle
|
|
make KISSFFT_DATATYPE=float testsingle
|
|
make KISSFFT_DATATYPE=int16_t testsingle
|
|
# The simd and int32_t types may or may not work on your machine
|
|
make KISSFFT_DATATYPE=int32_t testsingle
|
|
make KISSFFT_DATATYPE=simd testsingle
|
|
# Static libraries
|
|
make KISSFFT_DATATYPE=double KISSFFT_STATIC=1 testsingle
|
|
make KISSFFT_DATATYPE=float KISSFFT_STATIC=1 testsingle
|
|
make KISSFFT_DATATYPE=int16_t KISSFFT_STATIC=1 testsingle
|
|
# The simd and int32_t types may or may not work on your machine
|
|
make KISSFFT_DATATYPE=int32_t KISSFFT_STATIC=1 testsingle
|
|
make KISSFFT_DATATYPE=simd KISSFFT_STATIC=1 testsingle
|
|
# OpenMP libraries
|
|
make KISSFFT_DATATYPE=double KISSFFT_OPENMP=1 testsingle
|
|
make KISSFFT_DATATYPE=float KISSFFT_OPENMP=1 testsingle
|
|
make KISSFFT_DATATYPE=int16_t KISSFFT_OPENMP=1 testsingle
|
|
# The simd and int32_t types may or may not work on your machine
|
|
make KISSFFT_DATATYPE=int32_t KISSFFT_OPENMP=1 testsingle
|
|
make KISSFFT_DATATYPE=simd KISSFFT_OPENMP=1 testsingle
|
|
$(warning All tests passed!)
|
|
|
|
#
|
|
# Target: "make tarball"
|
|
#
|
|
|
|
tarball: clean
|
|
git archive --prefix=kissfft/ -o kissfft$(KFVER).tar.gz v$(KFVER)
|
|
git archive --prefix=kissfft/ -o kissfft$(KFVER).zip v$(KFVER)
|
|
|
|
#
|
|
# Target: "make clean"
|
|
#
|
|
|
|
clean:
|
|
rm -f *.o *.a *.so *.so.*
|
|
cd test && make clean
|
|
cd tools && make clean
|
|
rm -f kiss_fft*.tar.gz *~ *.pyc kiss_fft*.zip
|
|
|
|
#
|
|
# Target: "make asm"
|
|
#
|
|
|
|
asm: kiss_fft.s
|
|
|
|
# TODO: Sort out if we should add kfc / other C headers
|
|
|
|
kiss_fft.s: kiss_fft.c kiss_fft.h _kiss_fft_guts.h
|
|
[ -e kiss_fft.s ] && mv kiss_fft.s kiss_fft.s~ || true
|
|
$(CC) -S kiss_fft.c -O3 -mtune=native -ffast-math -fomit-frame-pointer -unroll-loops -dA -fverbose-asm
|
|
$(CC) -o kiss_fft_short.s -S kiss_fft.c -O3 -mtune=native -ffast-math -fomit-frame-pointer -dA -fverbose-asm -DFIXED_POINT
|
|
[ -e kiss_fft.s~ ] && diff kiss_fft.s~ kiss_fft.s || true
|