this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Overhaul Make makefiles

* Header files and correspondent C sources that define
functions recently added to public API moved from
'tools' directory to root

* By default, install prefix is '/usr/local/', and header
install path is '${PREFIX}/include/kissfft'

* Added detection of external libraries like FFTW or libPNG

Signed-off-by: Vasyl Gello <vasek.gello@gmail.com>

+532 -144
+1
.gitignore
··· 1 1 *.o 2 2 *.swp 3 3 *.so 4 + *.so.* 4 5 *.a 5 6 *.dylib 6 7 test/testcpp
+295 -30
Makefile
··· 1 - KFVER=131 1 + # 2 + # Semantic versioning 3 + # 4 + # KFVER_MAJOR denotes the ABI version. 5 + # 6 + # - It must be bumped only if API public members are removed or 7 + # changed in the incompatible 8 + # 9 + # KFVER_MINOR denotes the minor version within a compatible ABI. 10 + # 11 + # - It should be bumped if new API public members are added 12 + # (but not removed!) so programs linked against the same library 13 + # version continue operating properly 14 + # 15 + # KFVER_PATCH denotes bugfix count since the last minor update. 16 + # 17 + # - It should be bumped whenever a bug fix is pushed. 18 + # 19 + 20 + export KFVER_MAJOR = 131 21 + export KFVER_MINOR = 1 22 + export KFVER_PATCH = 0 2 23 3 - DATATYPE ?= float 24 + # 25 + # Data type (float / int16_t / int32_t / simd) 26 + # 27 + 28 + export KISSFFT_DATATYPE ?= float 29 + 30 + # 31 + # Default options 32 + # 33 + 34 + export KISSFFT_OPENMP ?= 0 35 + export KISSFFT_STATIC ?= 0 36 + export KISSFFT_TOOLS ?= 1 37 + export KISSFFT_USE_ALLOCA ?= 0 38 + 39 + # 40 + # Installation directories 41 + # 4 42 5 43 PREFIX ?= /usr/local 6 - INCDIR ?= $(PREFIX)/include 7 - LIBDIR ?= $(PREFIX)/lib 44 + export ABS_PREFIX = $(abspath $(PREFIX)) 45 + 46 + BINDIR ?= $(ABS_PREFIX)/bin 47 + export ABS_BINDIR = $(abspath $(BINDIR)) 48 + 49 + INCLUDEDIR ?= $(ABS_PREFIX)/include 50 + export ABS_INCLUDEDIR = $(abspath $(INCLUDEDIR)) 51 + export ABS_PKGINCLUDEDIR = $(ABS_INCLUDEDIR)/kissfft 52 + 53 + # 54 + # Override LIBDIR with lib64 following CMake's 55 + # GNUInstallDirs logic: 56 + # 57 + 58 + CANDIDATE_LIBDIR_NAME = lib 59 + 60 + ifneq ($(MAKECMDGOALS),clean) 61 + ifeq ($(shell uname -s),Linux) 62 + _UNAME_ARCH = $(shell uname -i) 63 + 64 + ifeq (,$(_UNAME_ARCH)) 65 + _UNAME_ARCH = $(shell uname -m) 66 + 67 + ifeq (,$(_UNAME_ARCH)) 68 + $(warning WARNING: Can not detect system architecture!) 69 + endif 70 + endif 71 + 72 + ifeq ($(_UNAME_ARCH),x86_64) 73 + CANDIDATE_LIBDIR_NAME = lib64 74 + endif 75 + endif 76 + endif 77 + 78 + CANDIDATE_LIBDIR = $(PREFIX)/$(CANDIDATE_LIBDIR_NAME) 79 + LIBDIR ?= $(CANDIDATE_LIBDIR) 80 + 81 + export ABS_LIBDIR = $(abspath $(LIBDIR)) 82 + 83 + export INSTALL ?= install 84 + 85 + # 86 + # Library name and version 87 + # 88 + 89 + ifeq ($(KISSFFT_OPENMP), 1) 90 + KISSFFTLIB_SHORTNAME = kissfft-$(KISSFFT_DATATYPE)-openmp 91 + KISSFFT_PKGCONFIG = kissfft-$(KISSFFT_DATATYPE)-openmp.pc 92 + KISSFFTLIB_FLAGS = -fopenmp 93 + TYPEFLAGS = -fopenmp 94 + PKGCONFIG_OPENMP = -fopenmp 95 + else 96 + KISSFFTLIB_SHORTNAME = kissfft-$(KISSFFT_DATATYPE) 97 + KISSFFT_PKGCONFIG = kissfft-$(KISSFFT_DATATYPE).pc 98 + TYPEFLAGS = 99 + PKGCONFIG_OPENMP = 100 + endif 101 + 102 + ifeq ($(KISSFFT_STATIC), 1) 103 + KISSFFTLIB_NAME = lib$(KISSFFTLIB_SHORTNAME).a 104 + KISSFFTLIB_FLAGS += -static 105 + else ifeq ($(shell uname -s),Darwin) 106 + KISSFFTLIB_NAME = lib$(KISSFFTLIB_SHORTNAME).dylib 107 + KISSFFTLIB_FLAGS += -shared -Wl,-install_name,$(KISSFFTLIB_NAME) 108 + else 109 + KISSFFTLIB_SODEVELNAME = lib$(KISSFFTLIB_SHORTNAME).so 110 + KISSFFTLIB_SONAME = $(KISSFFTLIB_SODEVELNAME).$(KFVER_MAJOR) 111 + KISSFFTLIB_NAME = $(KISSFFTLIB_SONAME).$(KFVER_MINOR).$(KFVER_PATCH) 112 + KISSFFTLIB_FLAGS += -shared -Wl,-soname,$(KISSFFTLIB_SONAME) 113 + endif 114 + 115 + export KISSFFTLIB_SHORTNAME 116 + 117 + # 118 + # Compile-time definitions by datatype 119 + # 120 + # 121 + # Note: -DKISS_FFT_BUILD and -DKISS_FFT_SHARED control 122 + # C symbol visibility. 123 + # 124 + 125 + ifeq "$(KISSFFT_DATATYPE)" "int32_t" 126 + TYPEFLAGS += -DFIXED_POINT=32 127 + else ifeq "$(KISSFFT_DATATYPE)" "int16_t" 128 + TYPEFLAGS += -DFIXED_POINT=16 129 + else ifeq "$(KISSFFT_DATATYPE)" "simd" 130 + TYPEFLAGS += -DUSE_SIMD=1 -msse 131 + else ifeq "$(KISSFFT_DATATYPE)" "float" 132 + TYPEFLAGS += -Dkiss_fft_scalar=$(KISSFFT_DATATYPE) 133 + else ifeq "$(KISSFFT_DATATYPE)" "double" 134 + TYPEFLAGS += -Dkiss_fft_scalar=$(KISSFFT_DATATYPE) 135 + else 136 + $(error ERROR: KISSFFT_DATATYPE must be one of: float double int16_t int32_t simd) 137 + endif 138 + 139 + ifneq ($(KISSFFT_STATIC), 1) 140 + TYPEFLAGS += -DKISS_FFT_SHARED 141 + endif 142 + 143 + ifeq ($(KISSFFT_USE_ALLOCA), 1) 144 + TYPEFLAGS += -DKISS_FFT_USE_ALLOCA=1 145 + endif 146 + 147 + # 148 + # Compile-time definitions 149 + # 150 + 151 + # 152 + # Save pkgconfig variables before appending 153 + # -DKISS_FFT_BUILD to TYPEFLAGS 154 + # 155 + 156 + ifneq ($(shell uname -s),Darwin) 157 + PKGCONFIG_KISSFFT_VERSION = $(KFVER_MAJOR).$(KFVER_MINOR).$(KFVER_PATCH) 158 + PKGCONFIG_KISSFFT_OUTPUT_NAME = $(KISSFFTLIB_SHORTNAME) 159 + PKGCONFIG_PKG_KISSFFT_DEFS = $(TYPEFLAGS) 160 + PKGCONFIG_KISSFFT_PREFIX = $(ABS_PREFIX) 161 + ifeq ($(ABS_INCLUDEDIR),$(ABS_PREFIX)/include) 162 + PKGCONFIG_KISSFFT_INCLUDEDIR = $${prefix}/include 163 + else 164 + PKGCONFIG_KISSFFT_INCLUDEDIR = $(ABS_INCLUDEDIR) 165 + 166 + endif 167 + ifeq ($(ABS_LIBDIR),$(ABS_PREFIX)/$(CANDIDATE_LIBDIR_NAME)) 168 + PKGCONFIG_KISSFFT_LIBDIR = $${prefix}/$(CANDIDATE_LIBDIR_NAME) 169 + else 170 + PKGCONFIG_KISSFFT_LIBDIR = $(ABS_LIBDIR) 171 + endif 172 + PKGCONFIG_KISSFFT_PKGINCLUDEDIR = $${includedir}/kissfft 173 + endif 174 + 175 + export TYPEFLAGS 176 + 177 + # Compile .c into .o 178 + # 179 + 180 + # 181 + # -DKISS_FFT_BUILD is used for library artifacts, so 182 + # consumer executable in 'test' and 'tools' do _NOT_ 183 + # need it. pkg-config output does not need it either. 184 + # 185 + 186 + %.c.o: %.c 187 + $(CC) -Wall -fPIC \ 188 + -o $@ \ 189 + $(CFLAGS) $(TYPEFLAGS) -DKISS_FFT_BUILD \ 190 + -c $< 8 191 9 - INSTALL ?= install 192 + # 193 + # Target: "make all" 194 + # 10 195 11 - ifeq ($(shell uname -s),Darwin) 12 - SHARED_NAME := libkissfft.dylib 13 - SHARED_FLAGS := -Wl,-install_name,$(SHARED_NAME) 196 + all: kfc.c.o kiss_fft.c.o kiss_fftnd.c.o kiss_fftndr.c.o kiss_fftr.c.o 197 + ifneq ($(KISSFFT_STATIC), 1) 198 + $(CC) $(KISSFFTLIB_FLAGS) -o $(KISSFFTLIB_NAME) $^ 199 + ifneq ($(shell uname -s),Darwin) 200 + ln -sf $(KISSFFTLIB_NAME) $(KISSFFTLIB_SONAME) 201 + ln -sf $(KISSFFTLIB_NAME) $(KISSFFTLIB_SODEVELNAME) 202 + endif 14 203 else 15 - SHARED_NAME := libkissfft.so 16 - SHARED_FLAGS := -Wl,-soname,$(SHARED_NAME) 204 + $(AR) crus $(KISSFFTLIB_NAME) $^ 205 + endif 206 + ifneq ($(KISSFFT_TOOLS), 0) 207 + make -C tools CFLAGADD="$(CFLAGADD)" all 17 208 endif 18 209 19 - all: 20 - $(CC) -Wall -fPIC -c *.c -Dkiss_fft_scalar=$(DATATYPE) -o kiss_fft.o 21 - $(AR) crus libkissfft.a kiss_fft.o 22 - $(CC) -shared $(SHARED_FLAGS) -o $(SHARED_NAME) kiss_fft.o 210 + # 211 + # Target: "make install" 212 + # 23 213 24 214 install: all 25 - $(INSTALL) -Dt $(INCDIR) -m 644 kiss_fft.h 26 - $(INSTALL) -Dt $(LIBDIR) $(SHARED_NAME) 215 + $(INSTALL) -Dt $(ABS_PKGINCLUDEDIR) -m 644 \ 216 + kfc.h \ 217 + kiss_fft.h \ 218 + kissfft.hh \ 219 + kissfft_i32.hh \ 220 + kiss_fftnd.h \ 221 + kiss_fftndr.h \ 222 + kiss_fftr.h 223 + $(INSTALL) -Dt $(ABS_LIBDIR) -m 644 $(KISSFFTLIB_NAME) 224 + ifneq ($(KISSFFT_STATIC), 1) 225 + ifneq ($(shell uname -s),Darwin) 226 + cd $(LIBDIR) && \ 227 + ln -sf $(KISSFFTLIB_NAME) $(KISSFFTLIB_SONAME) && \ 228 + ln -sf $(KISSFFTLIB_NAME) $(KISSFFTLIB_SODEVELNAME) 229 + endif 230 + endif 231 + ifneq ($(shell uname -s),Darwin) 232 + mkdir "$(ABS_LIBDIR)/pkgconfig" 233 + sed \ 234 + -e 's+@PKGCONFIG_KISSFFT_VERSION@+$(PKGCONFIG_KISSFFT_VERSION)+' \ 235 + -e 's+@KISSFFT_OUTPUT_NAME@+$(PKGCONFIG_KISSFFT_OUTPUT_NAME)+' \ 236 + -e 's+@PKG_KISSFFT_DEFS@+$(PKGCONFIG_PKG_KISSFFT_DEFS)+' \ 237 + -e 's+@PKG_OPENMP@+$(PKGCONFIG_OPENMP)+' \ 238 + -e 's+@PKGCONFIG_KISSFFT_PREFIX@+$(PKGCONFIG_KISSFFT_PREFIX)+' \ 239 + -e 's+@PKGCONFIG_KISSFFT_INCLUDEDIR@+$(PKGCONFIG_KISSFFT_INCLUDEDIR)+' \ 240 + -e 's+@PKGCONFIG_KISSFFT_LIBDIR@+$(PKGCONFIG_KISSFFT_LIBDIR)+' \ 241 + -e 's+@PKGCONFIG_KISSFFT_PKGINCLUDEDIR@+$(PKGCONFIG_KISSFFT_PKGINCLUDEDIR)+' \ 242 + kissfft.pc.in 1>"$(ABS_LIBDIR)/pkgconfig/$(KISSFFT_PKGCONFIG)" 243 + endif 244 + ifneq ($(KISSFFT_TOOLS), 0) 245 + make -C tools install 246 + endif 247 + 248 + # 249 + # Target: "make doc" 250 + # 27 251 28 252 doc: 29 - @echo "Start by reading the README file. If you want to build and test lots of stuff, do a 'make testall'" 30 - @echo "but be aware that 'make testall' has dependencies that the basic kissfft software does not." 31 - @echo "It is generally unneeded to run these tests yourself, unless you plan on changing the inner workings" 32 - @echo "of kissfft and would like to make use of its regression tests." 253 + $(warning Start by reading the README file. If you want to build and test lots of stuff, do a 'make testall') 254 + $(warning but be aware that 'make testall' has dependencies that the basic kissfft software does not.) 255 + $(warning It is generally unneeded to run these tests yourself, unless you plan on changing the inner workings) 256 + $(warning of kissfft and would like to make use of its regression tests.) 257 + 258 + # 259 + # Target: "make testsingle" 260 + # 261 + 262 + testsingle: 263 + make clean 264 + make all 265 + make -C test CFLAGADD="$(CFLAGADD)" test testcpp 266 + 267 + # 268 + # Target: "make testall" 269 + # 33 270 34 271 testall: 35 - # The simd and int32_t types may or may not work on your machine 36 - make -C test testcpp && test/testcpp 37 - make -C test DATATYPE=simd CFLAGADD="$(CFLAGADD)" test 38 - make -C test DATATYPE=int32_t CFLAGADD="$(CFLAGADD)" test 39 - make -C test DATATYPE=int16_t CFLAGADD="$(CFLAGADD)" test 40 - make -C test DATATYPE=float CFLAGADD="$(CFLAGADD)" test 41 - make -C test DATATYPE=double CFLAGADD="$(CFLAGADD)" test 42 - make -C test testsse 43 - echo "all tests passed" 272 + # Shared libraries 273 + make KISSFFT_DATATYPE=double testsingle 274 + make KISSFFT_DATATYPE=float testsingle 275 + make KISSFFT_DATATYPE=int16_t testsingle 276 + # The simd and int32_t types may or may not work on your machine 277 + make KISSFFT_DATATYPE=int32_t testsingle 278 + make KISSFFT_DATATYPE=simd testsingle 279 + # Static libraries 280 + make KISSFFT_DATATYPE=double KISSFFT_STATIC=1 testsingle 281 + make KISSFFT_DATATYPE=float KISSFFT_STATIC=1 testsingle 282 + make KISSFFT_DATATYPE=int16_t KISSFFT_STATIC=1 testsingle 283 + # The simd and int32_t types may or may not work on your machine 284 + make KISSFFT_DATATYPE=int32_t KISSFFT_STATIC=1 testsingle 285 + make KISSFFT_DATATYPE=simd KISSFFT_STATIC=1 testsingle 286 + # OpenMP libraries 287 + make KISSFFT_DATATYPE=double KISSFFT_OPENMP=1 testsingle 288 + make KISSFFT_DATATYPE=float KISSFFT_OPENMP=1 testsingle 289 + make KISSFFT_DATATYPE=int16_t KISSFFT_OPENMP=1 testsingle 290 + # The simd and int32_t types may or may not work on your machine 291 + make KISSFFT_DATATYPE=int32_t KISSFFT_OPENMP=1 testsingle 292 + make KISSFFT_DATATYPE=simd KISSFFT_OPENMP=1 testsingle 293 + $(warning All tests passed!) 294 + 295 + # 296 + # Target: "make tarball" 297 + # 44 298 45 299 tarball: clean 46 300 git archive --prefix=kissfft/ -o kissfft$(KFVER).tar.gz v$(KFVER) 47 301 git archive --prefix=kissfft/ -o kissfft$(KFVER).zip v$(KFVER) 48 302 303 + # 304 + # Target: "make clean" 305 + # 306 + 49 307 clean: 308 + rm -f *.o *.a *.so *.so.* 50 309 cd test && make clean 51 310 cd tools && make clean 52 - rm -f kiss_fft*.tar.gz *~ *.pyc kiss_fft*.zip 311 + rm -f kiss_fft*.tar.gz *~ *.pyc kiss_fft*.zip 312 + 313 + # 314 + # Target: "make asm" 315 + # 53 316 54 317 asm: kiss_fft.s 318 + 319 + # TODO: Sort out if we should add kfc / other C headers 55 320 56 321 kiss_fft.s: kiss_fft.c kiss_fft.h _kiss_fft_guts.h 57 322 [ -e kiss_fft.s ] && mv kiss_fft.s kiss_fft.s~ || true
+6 -5
kissfft.pc.in
··· 1 - libdir=@CMAKE_INSTALL_FULL_LIBDIR@ 2 - includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ 1 + prefix=@PKGCONFIG_KISSFFT_PREFIX@ 2 + libdir=@PKGCONFIG_KISSFFT_LIBDIR@ 3 + includedir=@PKGCONFIG_KISSFFT_INCLUDEDIR@ 3 4 4 5 Name: kissfft 5 6 Description: A Fast Fourier Transform (FFT) library that tries to Keep it Simple, Stupid 6 - Version: @kissfft_VERSION@ 7 + Version: @PKGCONFIG_KISSFFT_VERSION@ 7 8 8 - Libs: -L${libdir} -l@KISSFFT_OUTPUT_NAME@ 9 - Cflags: -I${includedir} @PKG_KISSFFT_DEFS@ 9 + Libs: @PKG_OPENMP@ -L${libdir} -l@KISSFFT_OUTPUT_NAME@ 10 + Cflags: -I@PKGCONFIG_KISSFFT_PKGINCLUDEDIR@ @PKG_KISSFFT_DEFS@
+150 -68
test/Makefile
··· 1 + # 2 + # Warnings 3 + # 1 4 2 - WARNINGS=-W -Wall -Wstrict-prototypes -Wmissing-prototypes \ 5 + WARNINGS = -W -Wall -Wstrict-prototypes -Wmissing-prototypes \ 3 6 -Wcast-align -Wcast-qual -Wnested-externs -Wshadow -Wbad-function-cast \ 4 7 -Wwrite-strings 5 8 6 - CFLAGS=-O3 -I.. -I../tools $(WARNINGS) 7 - CFLAGS+=-ffast-math -fomit-frame-pointer 8 - #CFLAGS+=-funroll-loops 9 - #CFLAGS+=-march=prescott 10 - #CFLAGS+= -mtune=native 9 + # 10 + # Compile-time definitions 11 + # 12 + 13 + CFLAGS = -O3 -I.. -I../tools $(WARNINGS) 14 + CFLAGS += -ffast-math -fomit-frame-pointer 15 + #CFLAGS += -funroll-loops 16 + #CFLAGS += -march=prescott 17 + #CFLAGS += -mtune=native 11 18 # TIP: try adding -openmp or -fopenmp to enable OPENMP directives and use of multiple cores 12 - #CFLAGS+=-fopenmp 13 - CFLAGS+= $(CFLAGADD) 19 + #CFLAGS += -fopenmp 20 + CFLAGS += $(CFLAGADD) 14 21 22 + CXXFLAGS = -O3 -ffast-math -fomit-frame-pointer -I.. -W -Wall -march=native -mtune=native 23 + 24 + # 25 + # Count of FFT runs tested 26 + # 15 27 16 28 ifeq "$(NFFT)" "" 17 - NFFT=1800 29 + NFFT = 1800 18 30 endif 19 31 ifeq "$(NUMFFTS)" "" 20 - NUMFFTS=10000 32 + NUMFFTS = 10000 21 33 endif 22 34 23 - ifeq "$(DATATYPE)" "" 24 - DATATYPE=float 35 + # 36 + # Test binary executable names 37 + # 38 + 39 + SELFTESTSRC = twotonetest.c 40 + 41 + ifneq ($(KISSFFT_OPENMP),1) 42 + BENCHKISS = bm-kiss-$(KISSFFT_DATATYPE) 43 + BENCHFFTW = bm-fftw-$(KISSFFT_DATATYPE) 44 + SELFTEST = st-$(KISSFFT_DATATYPE) 45 + TESTREAL = tr-$(KISSFFT_DATATYPE) 46 + TESTKFC = tkfc-$(KISSFFT_DATATYPE) 47 + TESTFASTFILT = fastfilt-$(KISSFFT_DATATYPE) 48 + TESTCPP = testcpp-$(KISSFFT_DATATYPE) 49 + TESTSIMD = testsimd 50 + else 51 + BENCHKISS = bm-kiss-$(KISSFFT_DATATYPE)-openmp 52 + BENCHFFTW = bm-fftw-$(KISSFFT_DATATYPE)-openmp 53 + SELFTEST = st-$(KISSFFT_DATATYPE)-openmp 54 + TESTREAL = tr-$(KISSFFT_DATATYPE)-openmp 55 + TESTKFC = tkfc-$(KISSFFT_DATATYPE)-openmp 56 + TESTFASTFILT = fastfilt-$(KISSFFT_DATATYPE)-openmp 57 + TESTCPP = testcpp-$(KISSFFT_DATATYPE)-openmp 58 + TESTSIMD = testsimd-openmp 59 + CFLAGS += -fopenmp 60 + CXXFLAGS += -fopenmp 25 61 endif 26 62 27 - BENCHKISS=bm_kiss_$(DATATYPE) 28 - BENCHFFTW=bm_fftw_$(DATATYPE) 29 - SELFTEST=st_$(DATATYPE) 30 - TESTREAL=tr_$(DATATYPE) 31 - TESTKFC=tkfc_$(DATATYPE) 32 - FASTFILTREAL=ffr_$(DATATYPE) 33 - SELFTESTSRC=twotonetest.c 63 + ifeq "$(KISSFFT_DATATYPE)" "float" 64 + # fftw needs to be built with --enable-float to build this lib 65 + FFTWLIB = -lfftw3f 66 + else 67 + FFTWLIB = -lfftw3 68 + endif 34 69 70 + FFTWLIBDIR ?= $(ABS_LIBDIR) 71 + ABS_FFTWLIBDIR = $(abspath $(FFTWLIBDIR)) 35 72 36 - TYPEFLAGS=-Dkiss_fft_scalar=$(DATATYPE) 73 + # 74 + # Check missing external libraries 75 + # 37 76 38 - ifeq "$(DATATYPE)" "int16_t" 39 - TYPEFLAGS=-DFIXED_POINT=16 77 + ifneq ($(MAKECMDGOALS),clean) 78 + LIBFFTW_MISSING = $(shell echo "int main(){return 0;}" > _test_library_dummy.c; \ 79 + $(CC) -o _test_library_dummy _test_library_dummy.c $(FFTWLIB) -L$(ABS_FFTWLIBDIR); \ 80 + echo $$?; \ 81 + rm -f _test_library_dummy.c _test_library_dummy) 40 82 endif 41 83 42 - ifeq "$(DATATYPE)" "int32_t" 43 - TYPEFLAGS=-DFIXED_POINT=32 44 - endif 84 + # 85 + # Find Python interpreter 86 + # 45 87 46 - ifeq "$(DATATYPE)" "simd" 47 - TYPEFLAGS=-DUSE_SIMD=1 -msse 88 + ifneq ($(MAKECMDGOALS),clean) 89 + PYTHON_INTERPRETER = $(shell python --version) 90 + ifeq ($(PYTHON_INTERPRETER), ) 91 + PYTHON_INTERPRETER = $(shell python2 --version) 92 + ifeq ($(PYTHON_INTERPRETER), ) 93 + PYTHON_INTERPRETER = $(shell python3 --version) 94 + ifeq ($(PYTHON_INTERPRETER), ) 95 + $(error ERROR: Can not find Python interpreter!) 96 + else 97 + PYTHON_INTERPRETER = "python3" 98 + endif 99 + else 100 + PYTHON_INTERPRETER = "python2" 101 + endif 102 + else 103 + PYTHON_INTERPRETER = "python" 104 + endif 48 105 endif 49 106 107 + # 108 + # Target: "make all" 109 + # 50 110 51 - ifeq "$(DATATYPE)" "float" 52 - # fftw needs to be built with --enable-float to build this lib 53 - FFTWLIB=-lfftw3f 54 - else 55 - FFTWLIB=-lfftw3 56 - endif 111 + all: $(BENCHKISS) $(SELFTEST) $(BENCHFFTW) $(TESTREAL) $(TESTKFC) $(TESTFASTFILT) 57 112 58 - FFTWLIBDIR=-L/usr/local/lib/ 113 + # 114 + # Individual test make rules 115 + # 116 + 117 + $(SELFTEST): $(SELFTESTSRC) 118 + $(CC) -o $@ $(CFLAGS) $(TYPEFLAGS) $< -L.. -l$(KISSFFTLIB_SHORTNAME) -lm 119 + 120 + $(TESTKFC): ../kfc.c 121 + $(CC) -o $@ $(CFLAGS) -DKFC_TEST $(TYPEFLAGS) $^ -L.. -l$(KISSFFTLIB_SHORTNAME) -lm 122 + 123 + $(TESTREAL): test_real.c 124 + $(CC) -o $@ $(CFLAGS) $(TYPEFLAGS) $< -L.. -l$(KISSFFTLIB_SHORTNAME) -lm 125 + 126 + $(BENCHKISS): benchkiss.c pstats.c 127 + $(CC) -o $@ $(CFLAGS) $(TYPEFLAGS) $^ -L.. -l$(KISSFFTLIB_SHORTNAME) -lm 59 128 60 - SRCFILES=../kiss_fft.c ../tools/kiss_fftnd.c ../tools/kiss_fftr.c pstats.c ../tools/kfc.c ../tools/kiss_fftndr.c 129 + $(TESTFASTFILT): ../tools/fftutil.c 130 + $(CC) -o $@ $(CFLAGS) -DKFC_TEST $(TYPEFLAGS) $^ -L.. -l$(KISSFFTLIB_SHORTNAME) -lm 61 131 62 - all: tools $(BENCHKISS) $(SELFTEST) $(BENCHFFTW) $(TESTREAL) $(TESTKFC) 132 + $(BENCHFFTW): benchfftw.c pstats.c 133 + $(warning ======attempting to build FFTW benchmark) 134 + ifeq ($(LIBFFTW_MISSING), 0) 135 + $(CC) -o $@ $(CFLAGS) -DDATATYPE$(KISSFFT_DATATYPE) $^ $(FFTWLIB) -L$(ABS_FFTWLIBDIR) -L.. -l$(KISSFFTLIB_SHORTNAME) -lm 136 + else 137 + $(warning WARNING: No FFTW development files found! FFTW not available for comparison!0 138 + endif 63 139 64 - tools: 65 - cd ../tools && make all 140 + # 141 + # Test SSE 142 + # 66 143 67 - test_simd: test_simd.c $(SRCFILES) 68 - $(CC) -o $@ -g $(CFLAGS) -DUSE_SIMD=1 -msse $+ -lm 144 + $(TESTSIMD): test_simd.c 145 + ifeq "$(KISSFFT_DATATYPE)" "simd" 146 + $(CC) -o $@ -g $(CFLAGS) -DUSE_SIMD=1 -msse $< -L.. -l$(KISSFFTLIB_SHORTNAME) -lm 147 + else 148 + $(error ERROR: This test makes sense only with KISSFFT_DATATYPE=simd) 149 + endif 69 150 70 - testsse: test_simd 71 - ./test_simd 151 + testsse: $(TESTSIMD) 152 + LD_LIBRARY_PATH="$(LD_LIBRARY_PATH):.." ./$(TESTSIMD) 72 153 73 - $(SELFTEST): $(SELFTESTSRC) $(SRCFILES) 74 - $(CC) -o $@ $(CFLAGS) $(TYPEFLAGS) $+ -lm 154 + # 155 + # Test C++ 156 + # 75 157 76 - $(TESTKFC): $(SRCFILES) 77 - $(CC) -o $@ $(CFLAGS) -DKFC_TEST $(TYPEFLAGS) $+ -lm 78 - 79 - $(TESTREAL): test_real.c $(SRCFILES) 80 - $(CC) -o $@ $(CFLAGS) $(TYPEFLAGS) $+ -lm 158 + $(TESTCPP): testcpp.cc ../kissfft.hh 159 + $(CXX) -o $@ $(CXXFLAGS) testcpp.cc -L.. -l$(KISSFFTLIB_SHORTNAME) -lm 81 160 82 - $(BENCHKISS): benchkiss.c $(SRCFILES) 83 - $(CC) -o $@ $(CFLAGS) $(TYPEFLAGS) $+ -lm 161 + testcpp: $(TESTCPP) 162 + LD_LIBRARY_PATH="$(LD_LIBRARY_PATH):.." ./$(TESTCPP) 84 163 85 - $(BENCHFFTW): benchfftw.c pstats.c 86 - @echo "======attempting to build FFTW benchmark" 87 - @$(CC) -o $@ $(CFLAGS) -DDATATYPE$(DATATYPE) $+ $(FFTWLIB) $(FFTWLIBDIR) -lm || echo "FFTW not available for comparison" 164 + # 165 + # Target: "make test" 166 + # 88 167 89 168 test: all 90 - @./$(TESTKFC) 91 - @echo "======1d & 2-d complex fft self test (type= $(DATATYPE) )" 92 - @./$(SELFTEST) 93 - @echo "======real FFT (type= $(DATATYPE) )" 94 - @./$(TESTREAL) 95 - @echo "======timing test (type=$(DATATYPE))" 96 - @./$(BENCHKISS) -x $(NUMFFTS) -n $(NFFT) 97 - @[ -x ./$(BENCHFFTW) ] && ./$(BENCHFFTW) -x $(NUMFFTS) -n $(NFFT) ||true 98 - @echo "======higher dimensions type=$(DATATYPE))" 99 - @./testkiss.py 169 + ifeq "$(KISSFFT_DATATYPE)" "simd" 170 + make testsse 171 + endif 172 + @LD_LIBRARY_PATH="$(LD_LIBRARY_PATH):.." ./$(TESTKFC) 173 + $(warning ======1d & 2-d complex fft self test (type= $(KISSFFT_DATATYPE) )) 174 + @LD_LIBRARY_PATH="$(LD_LIBRARY_PATH):.." ./$(SELFTEST) 175 + $(warning ======real FFT (type= $(KISSFFT_DATATYPE) )) 176 + @LD_LIBRARY_PATH="$(LD_LIBRARY_PATH):.." ./$(TESTREAL) 177 + $(warning ======timing test (type=$(KISSFFT_DATATYPE))) 178 + @LD_LIBRARY_PATH="$(LD_LIBRARY_PATH):.." ./$(BENCHKISS) -x $(NUMFFTS) -n $(NFFT) 179 + @[ -x ./$(BENCHFFTW) ] && LD_LIBRARY_PATH="$(LD_LIBRARY_PATH):.." ./$(BENCHFFTW) -x $(NUMFFTS) -n $(NFFT) || true 180 + $(warning ======higher dimensions (type=$(KISSFFT_DATATYPE))) 181 + @LD_LIBRARY_PATH="$(LD_LIBRARY_PATH):.." $(PYTHON_INTERPRETER) ./testkiss.py 100 182 101 - CXXFLAGS=-O3 -ffast-math -fomit-frame-pointer -I.. -I../tools -W -Wall -march=native -mtune=native 102 - testcpp: testcpp.cc ../kissfft.hh 103 - $(CXX) -o $@ $(CXXFLAGS) testcpp.cc -lm 183 + # 184 + # Target: "make clean" 185 + # 104 186 105 187 clean: 106 - rm -f *~ bm_* st_* tr_* kf_* tkfc_* ff_* ffr_* *.pyc *.pyo *.dat testcpp 188 + rm -f *~ bm-* st-* tr-* kf-* tkfc-* ff-* fastfilt-* *.pyc *.pyo *.dat testcpp-* testsimd testsimd-* _test_library_dummy _test_library_dummy.c
+80 -41
tools/Makefile
··· 1 - WARNINGS=-W -Wall -Wstrict-prototypes -Wmissing-prototypes \ 1 + # 2 + # Warnings 3 + # 4 + 5 + WARNINGS = -W -Wall -Wstrict-prototypes -Wmissing-prototypes \ 2 6 -Wcast-align -Wcast-qual -Wnested-externs -Wshadow -Wbad-function-cast \ 3 7 -Wwrite-strings 4 8 5 - ifeq "$(DATATYPE)" "" 6 - DATATYPE=float 9 + # 10 + # Compile-time definitions 11 + # 12 + 13 + CFLAGS = -Wall -O3 $(WARNINGS) 14 + #CFLAGS = -Wall -O3 -pedantic -march=pentiumpro -ffast-math -fomit-frame-pointer $(WARNINGS) 15 + # If the above flags do not work, try the following 16 + # tip: try -openmp or -fopenmp to use multiple cores 17 + 18 + CFLAGS += $(CFLAGADD) 19 + 20 + # 21 + # Check missing external libraries 22 + # 23 + 24 + ifneq ($(MAKECMDGOALS),clean) 25 + LIBPNG_MISSING = $(shell echo "int main(){return 0;}" > _test_library_dummy.c; \ 26 + $(CC) -o _test_library_dummy _test_library_dummy.c -lpng; \ 27 + echo $$?; \ 28 + rm -f _test_library_dummy.c _test_library_dummy) 7 29 endif 8 30 9 - ifeq "$(DATATYPE)" "int32_t" 10 - TYPEFLAGS=-DFIXED_POINT=32 11 - endif 31 + # 32 + # Tool names 33 + # 12 34 13 - ifeq "$(DATATYPE)" "int16_t" 14 - TYPEFLAGS=-DFIXED_POINT=16 35 + ifneq ($(KISSFFT_OPENMP),1) 36 + FFTUTIL = fft-$(KISSFFT_DATATYPE) 37 + FASTFILT = fastconv-$(KISSFFT_DATATYPE) 38 + FASTFILTREAL = fastconvr-$(KISSFFT_DATATYPE) 39 + PSDPNG = psdpng-$(KISSFFT_DATATYPE) 40 + DUMPHDR = dumphdr-$(KISSFFT_DATATYPE) 41 + else 42 + FFTUTIL = fft-$(KISSFFT_DATATYPE)-openmp 43 + FASTFILT = fastconv-$(KISSFFT_DATATYPE)-openmp 44 + FASTFILTREAL = fastconvr-$(KISSFFT_DATATYPE)-openmp 45 + PSDPNG = psdpng-$(KISSFFT_DATATYPE)-openmp 46 + DUMPHDR = dumphdr-$(KISSFFT_DATATYPE)-openmp 15 47 endif 16 48 17 - ifeq "$(DATATYPE)" "simd" 18 - TYPEFLAGS=-DUSE_SIMD=1 -msse 19 - endif 49 + # 50 + # Target: "make all" 51 + # 20 52 21 - ifeq "$(TYPEFLAGS)" "" 22 - TYPEFLAGS=-Dkiss_fft_scalar=$(DATATYPE) 23 - endif 53 + all: $(FFTUTIL) $(FASTFILT) $(FASTFILTREAL) $(PSDPNG) 54 + # $(DUMPHDR) 24 55 25 - ifneq ("$(KISS_FFT_USE_ALLOCA)","") 26 - CFLAGS+= -DKISS_FFT_USE_ALLOCA=1 27 - endif 28 - CFLAGS+= $(CFLAGADD) 56 + # 57 + # Individual tool make rules 58 + # 29 59 60 + $(FASTFILTREAL): kiss_fastfir.c 61 + $(CC) -o $@ $(CFLAGS) -I.. $(TYPEFLAGS) -DREAL_FASTFIR $< -DFAST_FILT_UTIL -L.. -l$(KISSFFTLIB_SHORTNAME) -lm 30 62 31 - FFTUTIL=fft_$(DATATYPE) 32 - FASTFILT=fastconv_$(DATATYPE) 33 - FASTFILTREAL=fastconvr_$(DATATYPE) 34 - PSDPNG=psdpng_$(DATATYPE) 35 - DUMPHDR=dumphdr_$(DATATYPE) 63 + $(FASTFILT): kiss_fastfir.c 64 + $(CC) -o $@ $(CFLAGS) -I.. $(TYPEFLAGS) $< -DFAST_FILT_UTIL -L.. -l$(KISSFFTLIB_SHORTNAME) -lm 36 65 37 - all: $(FFTUTIL) $(FASTFILT) $(FASTFILTREAL) 38 - # $(PSDPNG) 39 - # $(DUMPHDR) 66 + $(FFTUTIL): fftutil.c 67 + $(CC) -o $@ $(CFLAGS) -I.. $(TYPEFLAGS) $< -L.. -l$(KISSFFTLIB_SHORTNAME) -lm 40 68 41 - #CFLAGS=-Wall -O3 -pedantic -march=pentiumpro -ffast-math -fomit-frame-pointer $(WARNINGS) 42 - # If the above flags do not work, try the following 43 - CFLAGS=-Wall -O3 $(WARNINGS) 44 - # tip: try -openmp or -fopenmp to use multiple cores 69 + $(PSDPNG): psdpng.c 70 + ifeq "$(KISSFFT_DATATYPE)" "simd" 71 + $(warning WARNING: psdpng can not utilize SIMD!) 72 + else ifeq ($(LIBPNG_MISSING), 0) 73 + $(CC) -o $@ $(CFLAGS) -I.. $(TYPEFLAGS) $< -L.. -l$(KISSFFTLIB_SHORTNAME) -lpng -lm 74 + else 75 + $(error ERROR: no libpng development files found!) 76 + endif 45 77 46 - $(FASTFILTREAL): ../kiss_fft.c kiss_fastfir.c kiss_fftr.c 47 - $(CC) -o $@ $(CFLAGS) -I.. $(TYPEFLAGS) -DREAL_FASTFIR $+ -DFAST_FILT_UTIL -lm 78 + $(DUMPHDR): dumphdr.c 79 + $(CC) -o $@ $(CFLAGS) -I.. $(TYPEFLAGS) $< -L.. -l$(KISSFFTLIB_SHORTNAME) -lm 48 80 49 - $(FASTFILT): ../kiss_fft.c kiss_fastfir.c 50 - $(CC) -o $@ $(CFLAGS) -I.. $(TYPEFLAGS) $+ -DFAST_FILT_UTIL -lm 81 + # 82 + # Target: "make install" 83 + # 51 84 52 - $(FFTUTIL): ../kiss_fft.c fftutil.c kiss_fftnd.c kiss_fftr.c kiss_fftndr.c 53 - $(CC) -o $@ $(CFLAGS) -I.. $(TYPEFLAGS) $+ -lm 85 + install: all 86 + $(INSTALL) -Dt $(ABS_BINDIR) -m 755 \ 87 + $(FFTUTIL) \ 88 + $(FASTFILT) \ 89 + $(FASTFILTREAL) 54 90 55 - $(PSDPNG): ../kiss_fft.c psdpng.c kiss_fftr.c 56 - $(CC) -o $@ $(CFLAGS) -I.. $(TYPEFLAGS) $+ -lpng -lm 91 + ifneq "$(KISSFFT_DATATYPE)" "simd" 92 + $(INSTALL) -Dt $(ABS_BINDIR) -m 755 \ 93 + $(PSDPNG) 94 + endif 57 95 58 - $(DUMPHDR): ../kiss_fft.c dumphdr.c 59 - $(CC) -o $@ $(CFLAGS) -I.. $(TYPEFLAGS) $+ -lm 96 + # 97 + # Target: "make clean" 98 + # 60 99 61 100 clean: 62 - rm -f *~ fft fft_* fastconv fastconv_* fastconvr fastconvr_* psdpng psdpng_* 101 + rm -f *~ fft fft-* fastconv fastconv-* fastconvr fastconvr-* psdpng psdpng-* _test_library_dummy _test_library_dummy.c
tools/kfc.c kfc.c
tools/kfc.h kfc.h
tools/kiss_fftnd.c kiss_fftnd.c
tools/kiss_fftnd.h kiss_fftnd.h
tools/kiss_fftndr.c kiss_fftndr.c
tools/kiss_fftndr.h kiss_fftndr.h
tools/kiss_fftr.c kiss_fftr.c
tools/kiss_fftr.h kiss_fftr.h