CC=mpicc
CFLAGS=-O3
CCFLAGS=-O3
OBJECTS=ApplicationServices.o Camera.o ConfigurableParameters.o \
        GeometryIntrinsics.o Imaging.o libtarga.o \
        LightingIntrinsics.o MaterialProps.o Mesh.o \
        ObjectInput.o RayEngine.o SceneGenerators.o \
        SceneIntrinsics.o SpatialPartitioning.o \
        main.o MPIIntrinsics.o WorkerPersonality.o \
        ManagerPersonality.o
HEADERS=ApplicationServices.h Camera.h ConfigurableParameters.h \
        GeometryIntrinsics.h Imaging.h libtarga.h \
        LightingIntrinsics.h MaterialProps.h Mesh.h \
        ObjectInput.h RayEngine.h SceneGenerators.h \
        SceneIntrinsics.h SpatialPartitioning.h MPIIntrinsics.h \
        WorkerPersonality.h ManagerPersonality.h
EXECOUT=raytrace

$(EXECOUT) : $(OBJECTS)
	$(CC) $(CCFLAGS) -o $(EXECOUT) $(OBJECTS)

MPIIntrinsics.o : MPIIntrinsics.c MPIIntrinsics.h ApplicationServices.h \
                  GeometryIntrinsics.h Imaging.h ConfigurableParameters.h

ApplicationServices.o : ApplicationServices.c  ApplicationServices.h

libtarga.o : libtarga.c libtarga.h

GeometryIntrinsics.o : GeometryIntrinsics.c GeometryIntrinsics.h \
                       ApplicationServices.h

Mesh.o : Mesh.c Mesh.h GeometryIntrinsics.h ApplicationServices.h

Camera.o : Camera.c Camera.h GeometryIntrinsics.h ApplicationServices.h

Imaging.o : Imaging.c Imaging.h libtarga.h ApplicationServices.h \
            GeometryIntrinsics.h

MaterialProps.o : MaterialProps.c MaterialProps.h GeometryIntrinsics.h \
                  ApplicationServices.h

ConfigurableParameters.o : ConfigurableParameters.c ConfigurableParameters.h

LightingIntrinsics.o : LightingIntrinsics.c LightingIntrinsics.h \
                       GeometryIntrinsics.h ApplicationServices.h

ObjectInput.o : ObjectInput.c ObjectInput.h Mesh.h ApplicationServices.h \
                GeometryIntrinsics.h

RayEngine.o : RayEngine.c RayEngine.h Imaging.h SceneIntrinsics.h \
              ConfigurableParameters.h MaterialProps.h Mesh.h \
              Camera.h LightingIntrinsics.h SpatialPartitioning.h \
              GeometryIntrinsics.h ApplicationServices.h \
              libtarga.h

SceneGenerators.o : SceneGenerators.c SceneGenerators.h SceneIntrinsics.h \
                    MaterialProps.h Mesh.h Camera.h LightingIntrinsics.h \
                    SpatialPartitioning.h GeometryIntrinsics.h \
                    ApplicationServices.h

SceneIntrinsics.o : SceneIntrinsics.c SceneIntrinsics.h MaterialProps.h \
                    Mesh.h Camera.h LightingIntrinsics.h \
                    SpatialPartitioning.h GeometryIntrinsics.h \
                    ApplicationServices.h

SpatialPartitioning.o : SpatialPartitioning.c SpatialPartitioning.h \
                        Mesh.h GeometryIntrinsics.h ApplicationServices.h

main.o : main.c $(HEADERS)

ManagerPersonality.o: ManagerPersonality.c ManagerPersonality.h \
                      ApplicationServices.h GeometryIntrinsics.h \
                      MPIIntrinsics.h SceneIntrinsics.h Imaging.h \
                      MaterialProps.h Camera.h Mesh.h \
                      LightingIntrinsics.h SpatialPartitioning.h \
                      SceneGenerators.h ConfigurableParameters.h

WorkerPersonality.o: WorkerPersonality.c WorkerPersonality.h \
                     ApplicationServices.h GeometryIntrinsics.h \
                     MPIIntrinsics.h SceneIntrinsics.h Imaging.h \
                     MaterialProps.h Camera.h Mesh.h \
                     LightingIntrinsics.h SpatialPartitioning.h \
                     SceneGenerators.h ConfigurableParameters.h \
                     RayEngine.h Imaging.h

clean:
	rm -f $(OBJECTS) $(EXECOUT) *.c~ *.h~ Makefile~ *.tga
