HEADERS=triangle.h linalg.h queue.h

#SPECIAL_OPTIONS=-O0 -g -D_DEBUG
#SPECIAL_OPTIONS=-O3 -pg -funroll-loops -fno-inline
SPECIAL_OPTIONS=-O3 -flto -funroll-loops -Winline
#SPECIAL_OPTIONS=

OPTIONS=-m64 -march=native -mtune=native -std=gnu99 -D_GNU_SOURCE $(SPECIAL_OPTIONS)

all: discreteness singular_values nondiscrete traces element_path limit_set hyperbolic ellipticity

singular_values: singular_values.o triangle.o linalg.o
	gcc $(OPTIONS) -o singular_values triangle.o linalg.o singular_values.o -lm -lgsl -lcblas

nondiscrete: nondiscrete.o triangle.o linalg.o
	gcc $(OPTIONS) -o nondiscrete triangle.o linalg.o nondiscrete.o -lm -lgsl -lcblas

traces: traces.o triangle.o linalg.o
	gcc $(OPTIONS) -o traces triangle.o linalg.o traces.o -lm -lgsl -lcblas

discreteness: discreteness.o triangle.o linalg.o
	gcc $(OPTIONS) -o discreteness triangle.o linalg.o discreteness.o -lm -lgsl -lcblas

element_path: element_path.o linalg.o
	gcc $(OPTIONS) -o element_path element_path.o linalg.o -lm -lgsl -lcblas

limit_set: limit_set.o linalg.o triangle.o
	gcc $(OPTIONS) -o limit_set limit_set.o linalg.o triangle.o -lm -lgsl -lcblas

hyperbolic: hyperbolic.o triangle.o linalg.o
	gcc $(OPTIONS) -o hyperbolic hyperbolic.o triangle.o linalg.o -lm -lgsl -lcblas

ellipticity: ellipticity.o triangle.o linalg.o
	gcc $(OPTIONS) -o ellipticity ellipticity.o triangle.o linalg.o -lm -lgsl -lcblas

singular_values.o: singular_values.c $(HEADERS)
	gcc $(OPTIONS) -c singular_values.c

nondiscrete.o: nondiscrete.c $(HEADERS)
	gcc $(OPTIONS) -c nondiscrete.c

traces.o: traces.c $(HEADERS)
	gcc $(OPTIONS) -c traces.c

discreteness.o: discreteness.c $(HEADERS)
	gcc $(OPTIONS) -c discreteness.c

element_path.o: element_path.c $(HEADERS)
	gcc $(OPTIONS) -c element_path.c

linalg.o: linalg.c $(HEADERS)
	gcc $(OPTIONS) -c linalg.c

triangle.o: triangle.c $(HEADERS)
	gcc $(OPTIONS) -c triangle.c

limit_set.o: limit_set.c $(HEADERS)
	gcc $(OPTIONS) -c limit_set.c

hyperbolic.o: hyperbolic.c $(HEADERS)
	gcc $(OPTIONS) -c hyperbolic.c

ellipticity.o: ellipticity.c $(HEADERS)
	gcc $(OPTIONS) -c ellipticity.c

clean:
	rm -f singular_values nondiscrete traces discreteness element_path limit_set hyperbolic ellipticity triangle.o linalg.o singular_values.o nondiscrete.o traces.o discreteness.o element_path.o limit_set.o hyperbolic.o ellipticity.o