PROJNAME = im
LIBNAME = im_fftw3
OPT = YES

DEF_FILE = im_fftw.def

RDFT_CODELETS_R2R = e01_8.c e10_8.c rrcodlist.c
RDFT_CODELETS_R2R := $(addprefix r2r/, $(RDFT_CODELETS_R2R))

R2HC = r2hc_2.c r2hc_3.c r2hc_4.c r2hc_5.c r2hc_6.c r2hc_7.c r2hc_8.c	\
  r2hc_9.c r2hc_10.c r2hc_11.c r2hc_12.c r2hc_13.c r2hc_14.c r2hc_15.c	\
  r2hc_16.c r2hc_32.c 
MR2HC = mr2hc_32.c mr2hc_64.c mr2hc_128.c
HF = hf_2.c hf_3.c hf_4.c hf_5.c hf_6.c hf_7.c hf_8.c hf_9.c	\
  hf_10.c hf_12.c hf_15.c hf_16.c hf_32.c hf_64.c
HF2 = hf2_4.c hf2_8.c hf2_16.c hf2_32.c hf2_64.c
R2HCII = r2hcII_2.c r2hcII_3.c r2hcII_4.c r2hcII_5.c r2hcII_6.c		\
  r2hcII_7.c r2hcII_8.c r2hcII_9.c r2hcII_10.c r2hcII_12.c r2hcII_15.c	\
  r2hcII_16.c r2hcII_32.c
MR2HCII =  mr2hcII_32.c mr2hcII_64.c
RDFT_CODELETS_R2HC = $(R2HC) $(MR2HC) $(HF) $(HF2) $(R2HCII) $(MR2HCII) rhcodlist.c 
RDFT_CODELETS_R2HC := $(addprefix r2hc/, $(RDFT_CODELETS_R2HC))

HC2R = hc2r_3.c hc2r_4.c hc2r_5.c hc2r_6.c hc2r_7.c hc2r_8.c hc2r_9.c	\
  hc2r_10.c hc2r_11.c hc2r_12.c hc2r_13.c hc2r_14.c hc2r_15.c hc2r_16.c	\
  hc2r_32.c
MHC2R = mhc2r_32.c mhc2r_64.c mhc2r_128.c
HB = hb_2.c hb_3.c hb_4.c hb_5.c hb_6.c hb_7.c hb_8.c hb_9.c	\
  hb_10.c hb_12.c hb_15.c hb_16.c hb_32.c hb_64.c
HB2 = hb2_4.c hb2_8.c hb2_16.c hb2_32.c hb2_64.c
HC2RIII = hc2rIII_2.c hc2rIII_3.c hc2rIII_4.c hc2rIII_5.c hc2rIII_6.c	\
  hc2rIII_7.c hc2rIII_8.c hc2rIII_9.c hc2rIII_10.c hc2rIII_12.c		\
  hc2rIII_15.c hc2rIII_16.c hc2rIII_32.c
MHC2RIII = mhc2rIII_32.c mhc2rIII_64.c
RDFT_CODELETS_HC2R = $(HC2R) $(MHC2R) $(HB) $(HC2RIII) $(MHC2RIII) hcodlist.c
RDFT_CODELETS_HC2R := $(addprefix hc2r/, $(RDFT_CODELETS_HC2R))

RDFT_CODELETS = hc2r.c hfb.c	\
  r2hc.c r2r.c $(RDFT_CODELETS_R2R) $(RDFT_CODELETS_HC2R) $(RDFT_CODELETS_R2HC)
RDFT_CODELETS := $(addprefix codelets/, $(RDFT_CODELETS))

RDFT2 = buffered2.c direct2.c nop2.c rank0-rdft2.c rank-geq2-rdft2.c	\
  plan2.c problem2.c solve2.c vrank-geq1-rdft2.c rdft2-radix2.c		\
  rdft2-tensor-max-index.c rdft2-inplace-strides.c rdft2-strides.c
RDFT = dft-r2hc.c dht-r2hc.c dht-rader.c rbuffered.c	\
  rconf.c rdirect.c rgeneric.c khc2hc-dif.c khc2hc-dit.c	\
  khc2r.c kr2hc.c kr2r.c hc2hc.c hc2hc-dif.c hc2hc-dit.c		\
  hc2hc-buf.c rindirect.c rnop.c rplan.c rproblem.c rader-hc2hc.c rrank0.c	\
  rrank-geq2.c rdft-dht.c rsolve.c rvrank-geq1.c $(RDFT2) $(RDFT_CODELETS)
RDFT  := $(addprefix rdft/, $(RDFT))

N1 = n1_2.c n1_3.c n1_4.c n1_5.c n1_6.c n1_7.c n1_8.c n1_9.c n1_10.c	\
  n1_11.c n1_12.c n1_13.c n1_14.c n1_15.c n1_16.c
M1 = m1_16.c m1_32.c m1_64.c
T1 = t1_2.c t1_3.c t1_4.c t1_5.c t1_6.c t1_7.c t1_8.c t1_9.c	\
  t1_10.c t1_12.c t1_15.c t1_16.c t1_32.c t1_64.c
T2 = t2_4.c t2_8.c t2_16.c t2_32.c t2_64.c
DFT_CODELETS_STANDARD = $(N1) $(M1) $(T1) $(T2) scodlist.c
DFT_CODELETS_STANDARD  := $(addprefix standard/, $(DFT_CODELETS_STANDARD))

DFT_CODELETS_INPLACE = q1_2.c q1_4.c q1_8.c  q1_3.c q1_5.c q1_6.c icodlist.c
DFT_CODELETS_INPLACE := $(addprefix inplace/, $(DFT_CODELETS_INPLACE))

DFT_CODELETS = n.c t.c $(DFT_CODELETS_INPLACE) $(DFT_CODELETS_STANDARD)
DFT_CODELETS := $(addprefix codelets/, $(DFT_CODELETS))

DFT = buffered.c conf.c ct-dif.c ct-dit.c ct-ditbuf.c	\
  ct-ditf.c ct.c direct.c generic.c indirect.c kdft-dif.c kdft-difsq.c	\
  kdft-dit.c kdft.c nop.c plan.c problem.c rader.c rader-omega.c		\
  rank-geq2.c rank0.c solve.c vrank-geq1.c vrank2-transpose.c		\
  vrank3-transpose.c zero.c $(DFT_CODELETS)
DFT := $(addprefix dft/, $(DFT))

REODFT = reoconf.c reodft010e-r2hc.c	\
  reodft11e-radix2.c reodft11e-r2hc-odd.c redft00e-r2hc-pad.c	\
  rodft00e-r2hc-pad.c
REODFT := $(addprefix reodft/, $(REODFT))

KERNEL = align.c alloc.c assert.c awake.c kbuffered.c	\
  kct.c debug.c hash.c iabs.c md5.c md5-1.c minmax.c ops.c pickdim.c	\
  kplan.c planner.c primes.c print.c kproblem.c krader.c scan.c solver.c	\
  solvtab.c square.c stride.c tensor.c tensor1.c tensor2.c tensor4.c	\
  tensor5.c tensor7.c tensor8.c tensor9.c timer.c transpose.c trig.c	\
  trig1.c twiddle.c
KERNEL := $(addprefix kernel/, $(KERNEL))

API = apiplan.c configure.c execute.c execute-dft.c	\
  execute-dft-c2r.c execute-dft-r2c.c execute-r2r.c			\
  export-wisdom-to-file.c export-wisdom-to-string.c export-wisdom.c	\
  extract-reim.c flops.c forget-wisdom.c import-system-wisdom.c		\
  import-wisdom-from-file.c import-wisdom-from-string.c import-wisdom.c	\
  mapflags.c mkprinter-file.c mktensor-iodims.c mktensor-rowmajor.c	\
  plan-dft-1d.c plan-dft-2d.c plan-dft-3d.c plan-dft.c plan-guru-dft.c	\
  plan-many-dft.c plan-many-dft-c2r.c plan-dft-c2r.c plan-dft-c2r-1d.c	\
  plan-dft-c2r-2d.c plan-dft-c2r-3d.c plan-many-dft-r2c.c plan-dft-r2c.c	\
  plan-dft-r2c-1d.c plan-dft-r2c-2d.c plan-dft-r2c-3d.c			\
  plan-guru-dft-c2r.c plan-guru-dft-r2c.c map-r2r-kind.c plan-many-r2r.c	\
  plan-r2r-1d.c plan-r2r-2d.c plan-r2r-3d.c plan-r2r.c plan-guru-r2r.c	\
  print-plan.c the-planner.c rdft2-pad.c version.c \
  execute-split-dft-c2r.c execute-split-dft-r2c.c execute-split-dft.c	\
  plan-guru-split-dft-c2r.c plan-guru-split-dft-r2c.c	\
  plan-guru-split-dft.c f77api.c
API := $(addprefix api/, $(API))
	
SRC = $(API) $(REODFT) $(RDFT) $(DFT) $(KERNEL)
SRC := $(addprefix fftw3/, $(SRC))

SRC := process/im_fft.cpp $(SRC)

INCLUDES := ../include fftw3/kernel fftw3/dft fftw3/rdft fftw3/api \
  fftw3/reodft fftw3/rdft/codelets fftw3/dft/codelets

DEFINES = USE_FFTW3

USE_IM = Yes
IM = ..
LIBS = im_process


ifneq ($(findstring Win, $(TEC_SYSNAME)), )
  ifneq ($(findstring gcc, $(TEC_UNAME)), )
    DEFINES += HAVE_UINTPTR_T
  endif
  ifneq ($(findstring ow, $(TEC_UNAME)), )
    DEFINES += IM_DEFMATHFLOAT
  endif         
  ifneq ($(findstring bc, $(TEC_UNAME)), )
    DEFINES += IM_DEFMATHFLOAT
  endif
else
  ifneq ($(findstring IRIX, $(TEC_UNAME)), )
    DEFINES += HAVE_UINTPTR_T
  endif
  ifneq ($(findstring Darwin, $(TEC_UNAME)), )
    DEFINES += HAVE_UINTPTR_T
  endif
  ifneq ($(findstring FreeBSD, $(TEC_UNAME)), )
    DEFINES += HAVE_UINTPTR_T
  endif
  ifneq ($(findstring AIX, $(TEC_UNAME)), )
    DEFINES += IM_DEFMATHFLOAT HAVE_UINTPTR_T
  endif
  ifneq ($(findstring SunOS, $(TEC_UNAME)), )
    DEFINES += IM_DEFMATHFLOAT
  endif
endif

# Duplicated files: buffered.c conf.c direct.c indirect.c generic.c 
#                   nop.c plan.c problem.c rader.c rank0.c rank-geq2.c
#                   vrank-geq1.c solve.c ct.c codlist.c
# These were renamed to "r*" when in the rdft folder, and to "k*" when in the kernel folder.