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

COMPILER	= gcc
REAL_TYPE	= double

CFLAGS		= -O -DREAL=$(REAL_TYPE)
CC		= $(COMPILER) $(CFLAGS)
OBJS		= ./obj
LINTFLAGS	= -CHABUX $(CFLAGS)
TARGET		= simmel
INCLUDE		= -I$(MATRIX_INCLUDE) -I$(COMMUNICATION_INCLUDE) \
		  -I../include -I.
LIBS		= $(COMMUNICATION_LIB) $(MATRIX_LIB) -lm

CC	= $(COMPILER) -g $(CFLAGS) $(INCLUDE)
LINT	= lint $(LINTFLAGS) $(INCLUDE)


CFILES= communication.c\
	io.c\
	kinematic.c\
	main.c

OFILES= $(OBJS)/communication.o\
	$(OBJS)/io.o\
	$(OBJS)/kinematic.o\
	$(OBJS)/main.o

.c.s:;  $(CC) $(CFLAGS) -S $<

all: $(TARGET)1
	rm -f $(TARGET)2
	ln $(TARGET)1 $(TARGET)2

communication.h: global_simmel.h
	@touch communication.h

def.h: $(MATRIX_INCLUDE)/matrix.h
	@touch def.h

kinematic.h: global_simmel.h
	@touch kinematic.h

main.h: global_simmel.h
	@touch main.h

global_simmel.h: def.h $(MATRIX_INCLUDE)/vector.h
	@touch global_simmel.h

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

$(OBJS)/communication.o: communication.c ../include/global_communication.h\
	communication.h global_simmel.h Makefile
	$(CC) -c $(CFLAGS) -o $(OBJS)/communication.o communication.c

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

$(OBJS)/kinematic.o: kinematic.c kinematic.h \
	main.h communication.h io.h global_simmel.h \
	$(MATRIX_INCLUDE)/matrix.h $(MATRIX_INCLUDE)/vector.h \
	$(MAIN_INCLUDE)/setup.h Makefile
	$(CC) -c $(CFLAGS) -o $(OBJS)/kinematic.o kinematic.c

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


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

clean:
	rm -f $(OFILES)

lint:
	$(LINT) $(CFILES)
