CCFLAGS=-I./src -Wall -Wno-write-strings -O3 -fno-strict-aliasing -DPTHREADS
LDFLAGS=
ifeq ($(OS), Windows_NT)
CCFLAGS+=-I"C:/Program Files/Python25/include"
LDFLAGS+=-L"C:\Program Files\Python25\libs" -lpython25 -lpthreadGC2
MODULENAME=raytracer.pyd
else
CCFLAGS+=-pthread -fPIC `python-config --includes`
MODULENAME=raytracermodule.so
endif
# optimizations
#CCFLAGS+=-pipe -fomit-frame-pointer -ffast-math -msse3
# TARGETS
#########
all: python-module
python-module: $(MODULENAME)
tests: testvector testmatrix
clean:
rm -f *.o $(MODULENAME) testvector testmatrix
# RULES
#######
%.o: src/%.cc
$(CXX) -c -o $@ src/$*.cc $(CCFLAGS)
test%: tests/%.cc
$(CXX) -o $@ tests/$*.cc $(CCFLAGS)
./$@
# DEPENDENCIES
##############
# C++ raytracer
vector.o: src/vector.cc src/vector.h
matrix.o: src/matrix.cc src/matrix.h src/vector.h
noise.o: src/noise.cc src/noise.h
scene.o: src/scene.cc src/scene.h src/vector.h src/noise.h
raytracer.o: src/raytracer.cc src/raytracer.h src/scene.h src/vector.h src/noise.h
# python module
raytracermodule.o: src/raytracermodule.cc src/raytracer.h src/scene.h src/vector.h
$(MODULENAME): raytracermodule.o raytracer.o scene.o noise.o
$(CXX) $^ -shared -o $@ $(LDFLAGS)
# library tests
testvector: tests/vector.cc src/vector.h