TARGET = Image
SOURCE = bmp.cpp image.cpp image.todo.cpp jpeg.cpp lineSegments.cpp lineSegments.todo.cpp


TARGET_LIB = lib$(TARGET).a

CFLAGS += -I. -I.. -std=c++20 -Wunused-result

CFLAGS_DEBUG = -DDEBUG -g3
CFLAGS_RELEASE = -O3 -DRELEASE -funroll-loops -ffast-math -DNDEBUG

SRC = ./
BIN = ../
BIN_O = ../Bin/Linux/Release/$(TARGET)/
INCLUDE = /usr/include/

CC  = gcc
CXX = g++
MD  = mkdir
AR  = ar

OBJECTS=$(addprefix $(BIN_O), $(addsuffix .o, $(basename $(SOURCE))))


all: CFLAGS += $(CFLAGS_RELEASE)
all: $(BIN)
all: $(BIN_O)
all: $(BIN)$(TARGET_LIB)

allNoGL: CFLAGS += $(CFLAGS_RELEASE)
allNoGL: $(BIN)
allNoGL: $(BIN_O)
allNoGL: $(BIN)$(TARGET_LIB)

debug: CFLAGS += $(CFLAGS_DEBUG)
debug: $(BIN)
debug: $(BIN)$(TARGET_LIB)

clean:
	rm -f $(BIN)$(TARGET_LIB)
	rm -f $(OBJECTS)

depend:
	makedepend -- $(CFLAGS) -- -I../SVD -I../Util -Y $(SOURCE)
	
$(BIN):
	$(MD) -p $(BIN)

$(BIN_O):
	$(MD) -p $(BIN_O)

$(BIN)$(TARGET_LIB): $(OBJECTS)
	$(AR) rcs $@ $(OBJECTS)

$(BIN_O)%.o: $(SRC)%.c
	$(CC) -c -o $@ $(CFLAGS) -I$(INCLUDE) $<

$(BIN_O)%.o: $(SRC)%.cpp
	$(CXX) -c -o $@ $(CFLAGS) -I$(INCLUDE) $<
	
# DO NOT DELETE

bmp.o: ../Util/exceptions.h bmp.h image.h ../Util/geometry.h
bmp.o: ../Util/algebra.h ../Util/geometry.inl ../SVD/SVDFit.h
bmp.o: ../SVD/MatrixMNTC.h ../SVD/MatrixMNTC.inl ../SVD/SVD.h ../SVD/SVD.inl
bmp.o: ../SVD/SVDFit.inl ../SVD/MatrixMNTC.h ../Util/geometry.todo.inl
bmp.o: lineSegments.h
image.o: image.h ../Util/geometry.h ../Util/algebra.h ../Util/geometry.inl
image.o: ../SVD/SVDFit.h ../SVD/MatrixMNTC.h ../SVD/MatrixMNTC.inl
image.o: ../SVD/SVD.h ../SVD/SVD.inl ../SVD/SVDFit.inl ../SVD/MatrixMNTC.h
image.o: ../Util/exceptions.h ../Util/geometry.todo.inl lineSegments.h
image.o: ../Util/cmdLineParser.h ../Util/cmdLineParser.inl ../Image/bmp.h
image.o: ../Image/jpeg.h
image.todo.o: image.h ../Util/geometry.h ../Util/algebra.h
image.todo.o: ../Util/geometry.inl ../SVD/SVDFit.h ../SVD/MatrixMNTC.h
image.todo.o: ../SVD/MatrixMNTC.inl ../SVD/SVD.h ../SVD/SVD.inl
image.todo.o: ../SVD/SVDFit.inl ../SVD/MatrixMNTC.h ../Util/exceptions.h
image.todo.o: ../Util/geometry.todo.inl lineSegments.h
jpeg.o: jpeg.h image.h ../Util/geometry.h ../Util/algebra.h
jpeg.o: ../Util/geometry.inl ../SVD/SVDFit.h ../SVD/MatrixMNTC.h
jpeg.o: ../SVD/MatrixMNTC.inl ../SVD/SVD.h ../SVD/SVD.inl ../SVD/SVDFit.inl
jpeg.o: ../SVD/MatrixMNTC.h ../Util/exceptions.h ../Util/geometry.todo.inl
jpeg.o: lineSegments.h
lineSegments.o: lineSegments.h ../Util/geometry.h ../Util/algebra.h
lineSegments.o: ../Util/geometry.inl ../SVD/SVDFit.h ../SVD/MatrixMNTC.h
lineSegments.o: ../SVD/MatrixMNTC.inl ../SVD/SVD.h ../SVD/SVD.inl
lineSegments.o: ../SVD/SVDFit.inl ../SVD/MatrixMNTC.h ../Util/exceptions.h
lineSegments.o: ../Util/geometry.todo.inl
lineSegments.todo.o: lineSegments.h ../Util/geometry.h ../Util/algebra.h
lineSegments.todo.o: ../Util/geometry.inl ../SVD/SVDFit.h ../SVD/MatrixMNTC.h
lineSegments.todo.o: ../SVD/MatrixMNTC.inl ../SVD/SVD.h ../SVD/SVD.inl
lineSegments.todo.o: ../SVD/SVDFit.inl ../SVD/MatrixMNTC.h
lineSegments.todo.o: ../Util/exceptions.h ../Util/geometry.todo.inl
