#######################################################################################################

# Specify library locations here (add or remove "#" marks to comment/uncomment lines for your platform)

# Mac OS X
DDG_INCLUDE_PATH      = -I/usr/local/include/
DDG_LIBRARY_PATH      = -L/usr/local/lib/
DDG_BLAS_LIBS         = -framework Accelerate
DDG_SUITESPARSE_LIBS  = -lspqr -lumfpack -lcholmod -lmetis -lcolamd -lccolamd -lcamd -lamd -lm -lsuitesparseconfig
DDG_OPENGL_LIBS       = -framework OpenGL -framework GLUT

# # Linux
# DDG_INCLUDE_PATH      =
# DDG_LIBRARY_PATH      =
# DDG_BLAS_LIBS         = -llapack -lblas -lgfortran
# DDG_SUITESPARSE_LIBS  = -lspqr -lcholmod -lmetis -lcolamd -lccolamd -lcamd -lamd -lm
# DDG_OPENGL_LIBS       = -lglut -lGL -lGLU -lX11

# # Windows / Cygwin
# DDG_INCLUDE_PATH      = -I/usr/include/opengl -I/usr/include/suitesparse
# DDG_LIBRARY_PATH      = -L/usr/lib/w32api -L/usr/lib/suitesparse
# DDG_BLAS_LIBS         = -llapack -lblas
# DDG_SUITESPARSE_LIBS  = -lspqr -lcholmod -lcolamd -lccolamd -lcamd -lamd -lm
# DDG_OPENGL_LIBS       = -lglut32 -lglu32 -lopengl32

#######################################################################################################

TARGET = stripe
CC = g++
LD = g++
CFLAGS = -DSP_COMPILE_COMMAND_LINE -O3 -Wall -Wno-deprecated -Werror -pedantic  $(DDG_INCLUDE_PATH) -I./include -I./src -DNDEBUG
LFLAGS = -DSP_COMPILE_COMMAND_LINE -O3 -Wall -Wno-deprecated -Werror -pedantic $(DDG_LIBRARY_PATH) -DNDEBUG
LIBS = $(DDG_OPENGL_LIBS) $(DDG_SUITESPARSE_LIBS) $(DDG_BLAS_LIBS)

## !! Do not edit below this line -- dependencies can be updated by running ./update ##################

OBJS = obj/Camera.o obj/Complex.o obj/DenseMatrix.o obj/Edge.o obj/Face.o obj/HalfEdge.o obj/Image.o obj/LinearContext.o obj/LinearEquation.o obj/LinearPolynomial.o obj/LinearSystem.o obj/Mesh.o obj/MeshIO.o obj/Quaternion.o obj/Real.o obj/Shader.o obj/SparseMatrix.o obj/Variable.o obj/Vector.o obj/Vertex.o obj/Viewer.o obj/main.o

all: $(TARGET)

mac:
	mkdir -p StripePatterns.app/Contents/MacOS
	mkdir -p StripePatterns.app/Contents/Resources
	cp Info.plist StripePatterns.app/Contents/
	cp stripe StripePatterns.app/Contents/MacOS/StripePatterns
	cp -r shaders StripePatterns.app/Contents/Resources/
	cp StripePatterns.icns StripePatterns.app/Contents/Resources/
	dylibbundler -od -b -x ./StripePatterns.app/Contents/MacOS/StripePatterns  -d ./StripePatterns.app/Contents/libs

$(TARGET): $(OBJS)
	$(LD) $(LFLAGS) $(OBJS) $(LIBS) -o $(TARGET)

obj/Camera.o: src/Camera.cpp include/Camera.h include/Quaternion.h include/Vector.h include/Complex.h 
	$(CC) $(CFLAGS) -c src/Camera.cpp -o obj/Camera.o

obj/Complex.o: src/Complex.cpp include/Complex.h 
	$(CC) $(CFLAGS) -c src/Complex.cpp -o obj/Complex.o

obj/DenseMatrix.o: src/DenseMatrix.cpp include/DenseMatrix.h include/Types.h src/DenseMatrix.inl include/LinearContext.h include/Quaternion.h include/Vector.h include/Complex.h include/SparseMatrix.h src/SparseMatrix.inl include/Real.h include/Utility.h 
	$(CC) $(CFLAGS) -c src/DenseMatrix.cpp -o obj/DenseMatrix.o

obj/Edge.o: src/Edge.cpp include/Edge.h include/Types.h include/Mesh.h include/HalfEdge.h include/Vector.h include/Complex.h include/Vertex.h include/Face.h include/DenseMatrix.h src/DenseMatrix.inl include/LinearContext.h include/Quaternion.h include/SparseMatrix.h src/SparseMatrix.inl include/Real.h include/Utility.h 
	$(CC) $(CFLAGS) -c src/Edge.cpp -o obj/Edge.o

obj/Face.o: src/Face.cpp include/Face.h include/Types.h include/Mesh.h include/HalfEdge.h include/Vector.h include/Complex.h include/Vertex.h include/Edge.h include/DenseMatrix.h src/DenseMatrix.inl include/LinearContext.h include/Quaternion.h include/SparseMatrix.h src/SparseMatrix.inl include/Real.h include/Utility.h 
	$(CC) $(CFLAGS) -c src/Face.cpp -o obj/Face.o

obj/HalfEdge.o: src/HalfEdge.cpp include/HalfEdge.h include/Vector.h include/Types.h include/Complex.h include/Mesh.h include/Vertex.h include/Edge.h include/Face.h include/DenseMatrix.h src/DenseMatrix.inl include/LinearContext.h include/Quaternion.h include/SparseMatrix.h src/SparseMatrix.inl include/Real.h include/Utility.h 
	$(CC) $(CFLAGS) -c src/HalfEdge.cpp -o obj/HalfEdge.o

obj/Image.o: src/Image.cpp include/Image.h 
	$(CC) $(CFLAGS) -c src/Image.cpp -o obj/Image.o

obj/LinearContext.o: src/LinearContext.cpp include/LinearContext.h 
	$(CC) $(CFLAGS) -c src/LinearContext.cpp -o obj/LinearContext.o

obj/LinearEquation.o: src/LinearEquation.cpp include/LinearEquation.h include/LinearPolynomial.h include/Variable.h 
	$(CC) $(CFLAGS) -c src/LinearEquation.cpp -o obj/LinearEquation.o

obj/LinearPolynomial.o: src/LinearPolynomial.cpp include/LinearPolynomial.h include/Variable.h include/Types.h 
	$(CC) $(CFLAGS) -c src/LinearPolynomial.cpp -o obj/LinearPolynomial.o

obj/LinearSystem.o: src/LinearSystem.cpp include/LinearSystem.h include/LinearEquation.h include/LinearPolynomial.h include/Variable.h include/SparseMatrix.h include/Types.h src/SparseMatrix.inl include/Real.h include/Complex.h include/DenseMatrix.h src/DenseMatrix.inl include/LinearContext.h include/Quaternion.h include/Vector.h include/Utility.h 
	$(CC) $(CFLAGS) -c src/LinearSystem.cpp -o obj/LinearSystem.o

obj/Mesh.o: src/Mesh.cpp include/Mesh.h include/HalfEdge.h include/Vector.h include/Types.h include/Complex.h include/Vertex.h include/Edge.h include/Face.h include/DenseMatrix.h src/DenseMatrix.inl include/LinearContext.h include/Quaternion.h include/SparseMatrix.h src/SparseMatrix.inl include/Real.h include/Utility.h include/MeshIO.h 
	$(CC) $(CFLAGS) -c src/Mesh.cpp -o obj/Mesh.o

obj/MeshIO.o: src/MeshIO.cpp include/MeshIO.h include/Mesh.h include/HalfEdge.h include/Vector.h include/Types.h include/Complex.h include/Vertex.h include/Edge.h include/Face.h include/DenseMatrix.h src/DenseMatrix.inl include/LinearContext.h include/Quaternion.h include/SparseMatrix.h src/SparseMatrix.inl include/Real.h include/Utility.h 
	$(CC) $(CFLAGS) -c src/MeshIO.cpp -o obj/MeshIO.o

obj/Quaternion.o: src/Quaternion.cpp include/Quaternion.h include/Vector.h include/Complex.h 
	$(CC) $(CFLAGS) -c src/Quaternion.cpp -o obj/Quaternion.o

obj/Real.o: src/Real.cpp include/Real.h 
	$(CC) $(CFLAGS) -c src/Real.cpp -o obj/Real.o

obj/Shader.o: src/Shader.cpp include/Shader.h 
	$(CC) $(CFLAGS) -c src/Shader.cpp -o obj/Shader.o

obj/SparseMatrix.o: src/SparseMatrix.cpp include/SparseMatrix.h include/Types.h src/SparseMatrix.inl include/Real.h include/Complex.h include/DenseMatrix.h src/DenseMatrix.inl include/LinearContext.h include/Quaternion.h include/Vector.h include/Utility.h 
	$(CC) $(CFLAGS) -c src/SparseMatrix.cpp -o obj/SparseMatrix.o

obj/Variable.o: src/Variable.cpp include/Variable.h 
	$(CC) $(CFLAGS) -c src/Variable.cpp -o obj/Variable.o

obj/Vector.o: src/Vector.cpp include/Vector.h include/Utility.h include/Complex.h 
	$(CC) $(CFLAGS) -c src/Vector.cpp -o obj/Vector.o

obj/Vertex.o: src/Vertex.cpp include/Vertex.h include/Complex.h include/Vector.h include/Types.h include/Mesh.h include/HalfEdge.h include/Edge.h include/Face.h include/DenseMatrix.h src/DenseMatrix.inl include/LinearContext.h include/Quaternion.h include/SparseMatrix.h src/SparseMatrix.inl include/Real.h include/Utility.h 
	$(CC) $(CFLAGS) -c src/Vertex.cpp -o obj/Vertex.o

obj/Viewer.o: src/Viewer.cpp include/Viewer.h include/Mesh.h include/HalfEdge.h include/Vector.h include/Types.h include/Complex.h include/Vertex.h include/Edge.h include/Face.h include/DenseMatrix.h src/DenseMatrix.inl include/LinearContext.h include/Quaternion.h include/SparseMatrix.h src/SparseMatrix.inl include/Real.h include/Utility.h include/Camera.h include/Shader.h include/Image.h 
	$(CC) $(CFLAGS) -c src/Viewer.cpp -o obj/Viewer.o

obj/main.o: src/main.cpp include/Viewer.h include/Mesh.h include/HalfEdge.h include/Vector.h include/Types.h include/Complex.h include/Vertex.h include/Edge.h include/Face.h include/DenseMatrix.h src/DenseMatrix.inl include/LinearContext.h include/Quaternion.h include/SparseMatrix.h src/SparseMatrix.inl include/Real.h include/Utility.h include/Camera.h include/Shader.h 
	$(CC) $(CFLAGS) -c src/main.cpp -o obj/main.o


clean:
	rm -f $(OBJS)
	rm -f $(TARGET)
	rm -f $(TARGET).exe

