####### Compiler, tools and options
ifeq ("$(shell uname)", "Linux") 
  OS=PLATFORM_LINUX
endif

ifeq ("$(shell uname)", "Darwin")
  OS=PLATFORM_MACOSX
endif

ifndef OS
  $(error Unsupported operating system)
endif

CC	=	gcc 
CXX	=	g++ 
DEPEND	=	makedepend
REGULAR = 	-O2 -pipe -Wall -fno-strength-reduce 
ATHLON	=	-march=athlon-xp -mcpu=athlon-xp -O3 -ffast-math \
		-malign-double -funroll-loops -pipe -fomit-frame-pointer \
		-mfpmath=sse -msse 
PENTIUM4=	-march=pentium4 -mcpu=pentium4 -O3 -ffast-math \
		-malign-double -funroll-loops -pipe -fomit-frame-pointer \
		-mfpmath=sse -msse2 
OPTERON	=	-march=opteron -O3 -ffast-math \
		-funroll-loops -pipe -fomit-frame-pointer \
		-mfpmath=sse -msse2 
NATIVE  =       -mtune=native -march=native -O3 -ffast-math -mfpmath=sse -msse3 

APP_FLAGS=	-Wall -DTIMER -DUNIX -D$(OS) -I. #-I/home/scratch/andrei/inc
CFLAGS	=	$(APP_FLAGS) $(REGULAR)
CXXFLAGS=	$(APP_FLAGS) -I/usr/include -fopenmp -D_GLIBCXX_PARALLEL $(NATIVE)	

INCPATH	=	$(NVSDKINC)
LINK	=	g++
LFLAGS	= 	-fopenmp
TAR	=	tar -cf
GZIP	=	gzip -9f
NASM	=	nasm -f elf 

ifeq ($(OS),PLATFORM_LINUX)
LIBGL	  =   -lglut -lGL -lGLU -lgomp 
else
LIBGL	  =   -framework GLUT -framework OpenGL
endif

LIBX	=	# -L/usr/X11R6/lib -lX11 -lXmu -lXi   
LIBS	=	# -L/usr/lib -L/usr/local/lib -lm
LIBDIR	=	$(LIBGL) $(LIBX) $(LIBS)

########### CUDA
CUDAPATH := /usr/local/cuda
CUDALIBPATH := $(CUDAPATH)/lib
NVCC := $(CUDAPATH)/bin/nvcc --compiler-bindir=.

# CUTILPATH := $(HOME)/NVIDIA_CUDA_SDK/common/inc

CUTILPATH := ./cutil
NVCCFLAGS=-O3 -use_fast_math -I$(CUTILPATH) -ItsANN/include\
	-D_DEBUG --ptxas-options=-v --maxrregcount 12 -arch sm_11 \
	#-deviceemu regs interes. 24, 32

CUDALIBS = -L$(CUDALIBPATH) -lcuda -lcudart
####### Files

include Make.inc

all: $(TARGET)

.SUFFIXES: .cpp .c .asm

%.o: %.cu
	$(NVCC) -c $(NVCCFLAGS) -o $@ $<
.cpp.o:
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -I$(CUDAPATH)/include -I$(CUTILPATH) -o $@ $<
.c.o:
	$(CC) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
.asm.o:
	$(NASM) -o $@ $<

$(TARGET): $(OBJECTS) 
	$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(LIBDIR)

# what are the source dependencies
depend:	$(SOURCES)
	$(DEPEND) -f Makefile $(SOURCES) 2> /dev/null

clean:
	-rm -f $(OBJECTS)
	-rm -f *~ core
	-rm -f *.so






# DO NOT DELETE

main.o: /usr/include/stdlib.h /usr/include/features.h
main.o: /usr/include/bits/predefs.h /usr/include/sys/cdefs.h
main.o: /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h
main.o: /usr/include/gnu/stubs-64.h /usr/include/bits/waitflags.h
main.o: /usr/include/bits/waitstatus.h /usr/include/endian.h
main.o: /usr/include/bits/endian.h /usr/include/bits/byteswap.h
main.o: /usr/include/sys/types.h /usr/include/bits/types.h
main.o: /usr/include/bits/typesizes.h /usr/include/time.h
main.o: /usr/include/sys/select.h /usr/include/bits/select.h
main.o: /usr/include/bits/sigset.h /usr/include/bits/time.h
main.o: /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h
main.o: /usr/include/alloca.h /usr/include/stdio.h /usr/include/libio.h
main.o: /usr/include/_G_config.h /usr/include/wchar.h
main.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
main.o: glwrapper.h /usr/include/math.h /usr/include/bits/huge_val.h
main.o: /usr/include/bits/huge_valf.h /usr/include/bits/huge_vall.h
main.o: /usr/include/bits/inf.h /usr/include/bits/nan.h
main.o: /usr/include/bits/mathdef.h /usr/include/bits/mathcalls.h
main.o: /usr/include/unistd.h /usr/include/bits/posix_opt.h
main.o: /usr/include/bits/environments.h /usr/include/bits/confname.h
main.o: /usr/include/getopt.h Volume.h Image.h /usr/include/string.h
main.o: /usr/include/xlocale.h /usr/include/signal.h
main.o: /usr/include/bits/signum.h /usr/include/bits/siginfo.h
main.o: /usr/include/bits/sigaction.h /usr/include/bits/sigcontext.h
main.o: /usr/include/bits/sigstack.h /usr/include/sys/ucontext.h
main.o: /usr/include/bits/sigthread.h collapseSkel3d.h inverseFT.h hashwrap.h
main.o: /usr/include/assert.h zpr.h CIsoSurface.h Vectors.h
Volume.o: Volume.h Image.h /usr/include/stdlib.h /usr/include/features.h
Volume.o: /usr/include/bits/predefs.h /usr/include/sys/cdefs.h
Volume.o: /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h
Volume.o: /usr/include/gnu/stubs-64.h /usr/include/bits/waitflags.h
Volume.o: /usr/include/bits/waitstatus.h /usr/include/endian.h
Volume.o: /usr/include/bits/endian.h /usr/include/bits/byteswap.h
Volume.o: /usr/include/sys/types.h /usr/include/bits/types.h
Volume.o: /usr/include/bits/typesizes.h /usr/include/time.h
Volume.o: /usr/include/sys/select.h /usr/include/bits/select.h
Volume.o: /usr/include/bits/sigset.h /usr/include/bits/time.h
Volume.o: /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h
Volume.o: /usr/include/alloca.h /usr/include/string.h /usr/include/xlocale.h
Volume.o: /usr/include/signal.h /usr/include/bits/signum.h
Volume.o: /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h
Volume.o: /usr/include/bits/sigcontext.h /usr/include/bits/sigstack.h
Volume.o: /usr/include/sys/ucontext.h /usr/include/bits/sigthread.h
Volume.o: /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h
Volume.o: /usr/include/wchar.h /usr/include/bits/stdio_lim.h
Volume.o: /usr/include/bits/sys_errlist.h /usr/include/math.h
Volume.o: /usr/include/bits/huge_val.h /usr/include/bits/huge_valf.h
Volume.o: /usr/include/bits/huge_vall.h /usr/include/bits/inf.h
Volume.o: /usr/include/bits/nan.h /usr/include/bits/mathdef.h
Volume.o: /usr/include/bits/mathcalls.h /usr/include/assert.h
Volume.o: /usr/include/stdint.h /usr/include/bits/wchar.h
Image.o: Image.h /usr/include/stdlib.h /usr/include/features.h
Image.o: /usr/include/bits/predefs.h /usr/include/sys/cdefs.h
Image.o: /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h
Image.o: /usr/include/gnu/stubs-64.h /usr/include/bits/waitflags.h
Image.o: /usr/include/bits/waitstatus.h /usr/include/endian.h
Image.o: /usr/include/bits/endian.h /usr/include/bits/byteswap.h
Image.o: /usr/include/sys/types.h /usr/include/bits/types.h
Image.o: /usr/include/bits/typesizes.h /usr/include/time.h
Image.o: /usr/include/sys/select.h /usr/include/bits/select.h
Image.o: /usr/include/bits/sigset.h /usr/include/bits/time.h
Image.o: /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h
Image.o: /usr/include/alloca.h /usr/include/string.h /usr/include/xlocale.h
Image.o: /usr/include/signal.h /usr/include/bits/signum.h
Image.o: /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h
Image.o: /usr/include/bits/sigcontext.h /usr/include/bits/sigstack.h
Image.o: /usr/include/sys/ucontext.h /usr/include/bits/sigthread.h
Image.o: /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h
Image.o: /usr/include/wchar.h /usr/include/bits/stdio_lim.h
Image.o: /usr/include/bits/sys_errlist.h /usr/include/sys/wait.h
Image.o: /usr/include/sys/resource.h /usr/include/bits/resource.h
Image.o: /usr/include/math.h /usr/include/bits/huge_val.h
Image.o: /usr/include/bits/huge_valf.h /usr/include/bits/huge_vall.h
Image.o: /usr/include/bits/inf.h /usr/include/bits/nan.h
Image.o: /usr/include/bits/mathdef.h /usr/include/bits/mathcalls.h
Image.o: /usr/include/assert.h
collapseSkel3d.o: collapseSkel3d.h Volume.h Image.h /usr/include/stdlib.h
collapseSkel3d.o: /usr/include/features.h /usr/include/bits/predefs.h
collapseSkel3d.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h
collapseSkel3d.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h
collapseSkel3d.o: /usr/include/bits/waitflags.h
collapseSkel3d.o: /usr/include/bits/waitstatus.h /usr/include/endian.h
collapseSkel3d.o: /usr/include/bits/endian.h /usr/include/bits/byteswap.h
collapseSkel3d.o: /usr/include/sys/types.h /usr/include/bits/types.h
collapseSkel3d.o: /usr/include/bits/typesizes.h /usr/include/time.h
collapseSkel3d.o: /usr/include/sys/select.h /usr/include/bits/select.h
collapseSkel3d.o: /usr/include/bits/sigset.h /usr/include/bits/time.h
collapseSkel3d.o: /usr/include/sys/sysmacros.h
collapseSkel3d.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h
collapseSkel3d.o: /usr/include/string.h /usr/include/xlocale.h
collapseSkel3d.o: /usr/include/signal.h /usr/include/bits/signum.h
collapseSkel3d.o: /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h
collapseSkel3d.o: /usr/include/bits/sigcontext.h /usr/include/bits/sigstack.h
collapseSkel3d.o: /usr/include/sys/ucontext.h /usr/include/bits/sigthread.h
collapseSkel3d.o: /usr/include/stdio.h /usr/include/libio.h
collapseSkel3d.o: /usr/include/_G_config.h /usr/include/wchar.h
collapseSkel3d.o: /usr/include/bits/stdio_lim.h
collapseSkel3d.o: /usr/include/bits/sys_errlist.h inverseFT.h hashwrap.h
collapseSkel3d.o: /usr/include/math.h /usr/include/bits/huge_val.h
collapseSkel3d.o: /usr/include/bits/huge_valf.h /usr/include/bits/huge_vall.h
collapseSkel3d.o: /usr/include/bits/inf.h /usr/include/bits/nan.h
collapseSkel3d.o: /usr/include/bits/mathdef.h /usr/include/bits/mathcalls.h
collapseSkel3d.o: /usr/include/assert.h edt3d.h
zpr.o: /usr/include/stdlib.h /usr/include/features.h
zpr.o: /usr/include/bits/predefs.h /usr/include/sys/cdefs.h
zpr.o: /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h
zpr.o: /usr/include/gnu/stubs-64.h /usr/include/bits/waitflags.h
zpr.o: /usr/include/bits/waitstatus.h /usr/include/endian.h
zpr.o: /usr/include/bits/endian.h /usr/include/bits/byteswap.h
zpr.o: /usr/include/sys/types.h /usr/include/bits/types.h
zpr.o: /usr/include/bits/typesizes.h /usr/include/time.h
zpr.o: /usr/include/sys/select.h /usr/include/bits/select.h
zpr.o: /usr/include/bits/sigset.h /usr/include/bits/time.h
zpr.o: /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h
zpr.o: /usr/include/alloca.h /usr/include/stdio.h /usr/include/libio.h
zpr.o: /usr/include/_G_config.h /usr/include/wchar.h
zpr.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
zpr.o: /usr/include/memory.h /usr/include/string.h /usr/include/xlocale.h
zpr.o: /usr/include/math.h /usr/include/bits/huge_val.h
zpr.o: /usr/include/bits/huge_valf.h /usr/include/bits/huge_vall.h
zpr.o: /usr/include/bits/inf.h /usr/include/bits/nan.h
zpr.o: /usr/include/bits/mathdef.h /usr/include/bits/mathcalls.h zpr.h
CIsoSurface.o: /usr/include/math.h /usr/include/features.h
CIsoSurface.o: /usr/include/bits/predefs.h /usr/include/sys/cdefs.h
CIsoSurface.o: /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h
CIsoSurface.o: /usr/include/gnu/stubs-64.h /usr/include/bits/huge_val.h
CIsoSurface.o: /usr/include/bits/huge_valf.h /usr/include/bits/huge_vall.h
CIsoSurface.o: /usr/include/bits/inf.h /usr/include/bits/nan.h
CIsoSurface.o: /usr/include/bits/mathdef.h /usr/include/bits/mathcalls.h
CIsoSurface.o: CIsoSurface.h Vectors.h Volume.h Image.h /usr/include/stdlib.h
CIsoSurface.o: /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h
CIsoSurface.o: /usr/include/endian.h /usr/include/bits/endian.h
CIsoSurface.o: /usr/include/bits/byteswap.h /usr/include/sys/types.h
CIsoSurface.o: /usr/include/bits/types.h /usr/include/bits/typesizes.h
CIsoSurface.o: /usr/include/time.h /usr/include/sys/select.h
CIsoSurface.o: /usr/include/bits/select.h /usr/include/bits/sigset.h
CIsoSurface.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h
CIsoSurface.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h
CIsoSurface.o: /usr/include/string.h /usr/include/xlocale.h
CIsoSurface.o: /usr/include/signal.h /usr/include/bits/signum.h
CIsoSurface.o: /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h
CIsoSurface.o: /usr/include/bits/sigcontext.h /usr/include/bits/sigstack.h
CIsoSurface.o: /usr/include/sys/ucontext.h /usr/include/bits/sigthread.h
CIsoSurface.o: /usr/include/stdio.h /usr/include/libio.h
CIsoSurface.o: /usr/include/_G_config.h /usr/include/wchar.h
CIsoSurface.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
Vectors.o: Vectors.h
edt3d.o: edt3d.h Volume.h Image.h /usr/include/stdlib.h
edt3d.o: /usr/include/features.h /usr/include/bits/predefs.h
edt3d.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h
edt3d.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h
edt3d.o: /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h
edt3d.o: /usr/include/endian.h /usr/include/bits/endian.h
edt3d.o: /usr/include/bits/byteswap.h /usr/include/sys/types.h
edt3d.o: /usr/include/bits/types.h /usr/include/bits/typesizes.h
edt3d.o: /usr/include/time.h /usr/include/sys/select.h
edt3d.o: /usr/include/bits/select.h /usr/include/bits/sigset.h
edt3d.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h
edt3d.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h
edt3d.o: /usr/include/string.h /usr/include/xlocale.h /usr/include/signal.h
edt3d.o: /usr/include/bits/signum.h /usr/include/bits/siginfo.h
edt3d.o: /usr/include/bits/sigaction.h /usr/include/bits/sigcontext.h
edt3d.o: /usr/include/bits/sigstack.h /usr/include/sys/ucontext.h
edt3d.o: /usr/include/bits/sigthread.h /usr/include/stdio.h
edt3d.o: /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h
edt3d.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
edt3d.o: /usr/include/math.h /usr/include/bits/huge_val.h
edt3d.o: /usr/include/bits/huge_valf.h /usr/include/bits/huge_vall.h
edt3d.o: /usr/include/bits/inf.h /usr/include/bits/nan.h
edt3d.o: /usr/include/bits/mathdef.h /usr/include/bits/mathcalls.h
