MATRIX_INCLUDE		= ../matrix/include
MATRIX_LIB		= ../matrix/matrix.a
COMMUNICATION_INCLUDE	= ../communication/include
COMMUNICATION_LIB	= ../communication/communication.a
MAIN_INCLUDE		= ../include

TARGET			= connel

COMPILER= gcc
REAL_TYPE= double
CFLAGS	= -O -DREAL=$(REAL_TYPE) -I. -I$(MATRIX_INCLUDE) \
	-I$(COMMUNICATION_INCLUDE) -I$(MAIN_INCLUDE)
CC	= $(COMPILER) $(CFLAGS)
LIBS	= $(MATRIX_LIB) $(COMMUNICATION_LIB) -lm -lX11
OBJS	= obj
OFILES	=\
	  $(OBJS)/inverse.o \
	  $(OBJS)/matrices.o \
	  $(OBJS)/io.o \
	  $(OBJS)/main.o \
	  $(OBJS)/communication.o \
	  $(OBJS)/moving.o


all: $(TARGET)

$(TARGET): $(OFILES) $(MATRIX_LIB) $(COMMUNICATION_LIB)
	$(CC) -o $(TARGET) $(OFILES) $(LIBS)


communication.h: $(MATRIX_INCLUDE)/vector.h $(MATRIX_INCLUDE)/matrix.h
	@touch communication.h

inverse.h: $(MATRIX_INCLUDE)/vector.h $(MATRIX_INCLUDE)/matrix.h
	@touch inverse.h

$(OBJS)/main.o: main.c main.h $(MATRIX_INCLUDE)/vector.h \
	$(MATRIX_INCLUDE)/matrix.h $(MAIN_INCLUDE)/setup.h \
	$(MAIN_INCLUDE)/global_communication.h Makefile
	$(CC) -g -c $(CFLAGS) -o $(OBJS)/main.o main.c

$(OBJS)/communication.o: communication.c communication.h \
	$(COMMUNICATION_INCLUDE)/data_code.h $(MAIN_INCLUDE)/setup.h \
	$(MAIN_INCLUDE)/global_communication.h Makefile
	$(CC) -g -c $(CFLAGS) -o $(OBJS)/communication.o communication.c

$(OBJS)/moving.o: moving.c moving.h communication.h \
	$(MAIN_INCLUDE)/global_communication.h $(MAIN_INCLUDE)/setup.h Makefile
	$(CC) -g -c $(CFLAGS) -o $(OBJS)/moving.o moving.c

$(OBJS)/inverse.o: inverse.c matrices.h inverse.h \
	io.h moving.h  $(MAIN_INCLUDE)/setup.h Makefile
	$(CC) -g -c $(CFLAGS) -o $(OBJS)/inverse.o inverse.c

$(OBJS)/matrices.o: matrices.c matrices.h $(MATRIX_INCLUDE)/vector.h \
	$(MAIN_INCLUDE)/setup.h Makefile
	$(CC) -g -c $(CFLAGS) -o $(OBJS)/matrices.o matrices.c

$(OBJS)/io.o: io.c io.h $(MAIN_INCLUDE)/setup.h Makefile
	$(CC) -g -c $(CFLAGS) -o $(OBJS)/io.o io.c

clear:
	rm -f $(OFILES) $(TARGET)

clean:
	rm -f $(OFILES)
