Makefile 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. WARNINGS=-W -Wall -Wstrict-prototypes -Wmissing-prototypes -Waggregate-return \
  2. -Wcast-align -Wcast-qual -Wnested-externs -Wshadow -Wbad-function-cast \
  3. -Wwrite-strings
  4. CFLAGS=-O3 -I.. -I../tools $(WARNINGS)
  5. CFLAGS+=-ffast-math -fomit-frame-pointer
  6. #CFLAGS+=-funroll-loops
  7. #CFLAGS+=-march=prescott
  8. #CFLAGS+= -mtune=native
  9. # TIP: try adding -openmp or -fopenmp to enable OPENMP directives and use of multiple cores
  10. #CFLAGS+=-fopenmp
  11. CFLAGS+= $(CFLAGADD)
  12. ifeq "$(NFFT)" ""
  13. NFFT=1800
  14. endif
  15. ifeq "$(NUMFFTS)" ""
  16. NUMFFTS=10000
  17. endif
  18. ifeq "$(DATATYPE)" ""
  19. DATATYPE=float
  20. endif
  21. BENCHKISS=bm_kiss_$(DATATYPE)
  22. BENCHFFTW=bm_fftw_$(DATATYPE)
  23. SELFTEST=st_$(DATATYPE)
  24. TESTREAL=tr_$(DATATYPE)
  25. TESTKFC=tkfc_$(DATATYPE)
  26. FASTFILTREAL=ffr_$(DATATYPE)
  27. SELFTESTSRC=twotonetest.c
  28. TYPEFLAGS=-Dkiss_fft_scalar=$(DATATYPE)
  29. ifeq "$(DATATYPE)" "int16_t"
  30. TYPEFLAGS=-DFIXED_POINT=16
  31. endif
  32. ifeq "$(DATATYPE)" "int32_t"
  33. TYPEFLAGS=-DFIXED_POINT=32
  34. endif
  35. ifeq "$(DATATYPE)" "simd"
  36. TYPEFLAGS=-DUSE_SIMD=1 -msse
  37. endif
  38. ifeq "$(DATATYPE)" "float"
  39. # fftw needs to be built with --enable-float to build this lib
  40. FFTWLIB=-lfftw3f
  41. else
  42. FFTWLIB=-lfftw3
  43. endif
  44. FFTWLIBDIR=-L/usr/local/lib/
  45. SRCFILES=../kiss_fft.c ../tools/kiss_fftnd.c ../tools/kiss_fftr.c pstats.c ../tools/kfc.c ../tools/kiss_fftndr.c
  46. all: tools $(BENCHKISS) $(SELFTEST) $(BENCHFFTW) $(TESTREAL) $(TESTKFC)
  47. tools:
  48. cd ../tools && make all
  49. $(SELFTEST): $(SELFTESTSRC) $(SRCFILES)
  50. $(CC) -o $@ $(CFLAGS) $(TYPEFLAGS) $+ -lm
  51. $(TESTKFC): $(SRCFILES)
  52. $(CC) -o $@ $(CFLAGS) -DKFC_TEST $(TYPEFLAGS) $+ -lm
  53. $(TESTREAL): test_real.c $(SRCFILES)
  54. $(CC) -o $@ $(CFLAGS) $(TYPEFLAGS) $+ -lm
  55. $(BENCHKISS): benchkiss.c $(SRCFILES)
  56. $(CC) -o $@ $(CFLAGS) $(TYPEFLAGS) $+ -lm
  57. $(BENCHFFTW): benchfftw.c pstats.c
  58. @echo "======attempting to build FFTW benchmark"
  59. @$(CC) -o $@ $(CFLAGS) -DDATATYPE$(DATATYPE) $+ $(FFTWLIB) $(FFTWLIBDIR) -lm || echo "FFTW not available for comparison"
  60. test: all
  61. @./$(TESTKFC)
  62. @echo "======1d & 2-d complex fft self test (type= $(DATATYPE) )"
  63. @./$(SELFTEST)
  64. @echo "======real FFT (type= $(DATATYPE) )"
  65. @./$(TESTREAL)
  66. @echo "======timing test (type=$(DATATYPE))"
  67. @./$(BENCHKISS) -x $(NUMFFTS) -n $(NFFT)
  68. @[ -x ./$(BENCHFFTW) ] && ./$(BENCHFFTW) -x $(NUMFFTS) -n $(NFFT) ||true
  69. @echo "======higher dimensions type=$(DATATYPE))"
  70. @./testkiss.py
  71. selftest.c:
  72. ./mk_test.py 10 12 14 > selftest.c
  73. selftest_short.c:
  74. ./mk_test.py -s 10 12 14 > selftest_short.c
  75. CXXFLAGS=-O3 -ffast-math -fomit-frame-pointer -I.. -I../tools -W -Wall
  76. testcpp: testcpp.cc ../kissfft.hh
  77. $(CXX) -o $@ $(CXXFLAGS) testcpp.cc -lm
  78. clean:
  79. rm -f *~ bm_* st_* tr_* kf_* tkfc_* ff_* ffr_* *.pyc *.pyo *.dat testcpp