CC             = gcc
INCLUDE        = -I/usr/local/include
LIBPATHS       = -L/usr/local/lib
ALSA_LIB       = -lasound
GSL_LIB        = -lgsl -lgslblasnative
FFTW_LIB       = -lrfftw -lfftw
DYN_LIB        = -ldl
MATH_LIB       = -lm
C_FLAGS        = -Wall -Winline -malign-double -O2 -DARCH_IA32 -DALSA
NWFIIR_OBJS    = nwfiir.o wfir.o fir.o coeffs.o filter.o wfirloop.o \
                 sample.o nwfiir_io.o alsaio.o
WFIRD_OBJS     = wfird.o toolbox.o spline.o coeffs.o
FIRD_OBJS      = fird.o toolbox.o coeffs.o spline.o
MLSGEN_OBJS    = mlsgen.o mls.o sample.o
MLS2IMP_OBJS   = mls2imp.o mls.o sample.o
IMPPROC_OBJS   = impproc.o coeffs.o toolbox.o spline.o
MSPREPROC_OBJS = mspreproc.o spline.o coeffs.o
FCONV_OBJS     = fconv.o coeffs.o 
PROGNAMES      = mls2imp impproc mlsgen nwfiir wfird fird mspreproc fconv

all: $(PROGNAMES)

.c.o:
	$(CC) -c $(INCLUDE) $(C_FLAGS) $<

nwfiir: $(NWFIIR_OBJS)
	$(CC) $(LIBPATHS) -o $@ $(NWFIIR_OBJS) $(MATH_LIB) $(DYN_LIB) \
        $(ALSA_LIB)

wfird: $(WFIRD_OBJS)
	$(CC) $(LIBPATHS) -o $@ $(WFIRD_OBJS) $(GSL_LIB) $(MATH_LIB)

fird: $(FIRD_OBJS)
	$(CC) $(LIBPATHS) -o $@ $(FIRD_OBJS) $(GSL_LIB) $(MATH_LIB)

mlsgen: $(MLSGEN_OBJS)
	$(CC) $(LIBPATHS) -o $@ $(MLSGEN_OBJS)

mls2imp: $(MLS2IMP_OBJS)
	$(CC) $(LIBPATHS) -o $@ $(MLS2IMP_OBJS) $(MATH_LIB)

impproc: $(IMPPROC_OBJS)
	$(CC) $(LIBPATHS) -o $@ $(IMPPROC_OBJS) $(GSL_LIB) $(MATH_LIB)

mspreproc: $(MSPREPROC_OBJS)
	$(CC) $(LIBPATHS) -o $@ $(MSPREPROC_OBJS) $(MATH_LIB)

fconv: $(FCONV_OBJS)
	$(CC) $(LIBPATHS) -o $@ $(FCONV_OBJS) $(FFTW_LIB) $(MATH_LIB)

clean:
	rm -f *.core core $(NWFIIR_OBJS) $(WFIRD_OBJS) $(FIRD_OBJS) \
        $(MLSGEN_OBJS) $(MLS2IMP_OBJS) $(MSPREPROC_OBJS) \
        $(IMPPROC_OBJS) $(FCONV_OBJS) $(PROGNAMES)
