
ARCH = $(shell uname)

LEX=flex
YACC=bison -d -v -t
LEXLIB = -lfl
ifneq ($(ARCH),Darwin)
DLLLIB = -ldl
endif
EXRINCLUDE=../OpenEXR/include
EXRLIBS=-lIlmImf -lImath -lIex -lHalf -lz

CXX=g++
OPT=-g
# OPT=-O2 -msse -mfpmath=sse
INCLUDE=-I. -I../core -I$(EXRINCLUDE)
WARN=-Wall
CWD=$(shell pwd)
CXXFLAGS=$(OPT) $(INCLUDE) $(WARN)
LIBS=$(LEXLIB) $(DLLLIB) -L$(EXRLIBDIR) $(EXRLIBS) -lm 
ifeq ($(ARCH), Darwin)
  SHARED_LDFLAGS = -flat_namespace -undefined suppress -bundle -noprebind
  LRT_LDFLAGS=$(OPT) -L/sw/lib 
  #PBRTPRELINK=-Wl,-all_load
  INCLUDE += -I/sw/include
  CXX=ccache g++
  EXRLIBDIR=../OpenEXR/lib-osx
  WARN += -Wno-long-double
else
  SHARED_LDFLAGS = -shared
  LRT_LDFLAGS=-rdynamic $(OPT)
  EXRLIBDIR=OpenEXR/lib-linux
  PBRTPRELINK=-Wl,--export-dynamic -Wl,-whole-archive
  PBRTPOSTLINK=-Wl,-no-whole-archive
endif
LD=$(CXX) $(OPT)

CAMERAS      = realistic

CAMERAS_DSOS      := $(CAMERAS:=.so)

CORE_HEADERFILES = api.h camera.h color.h dynload.h film.h geometry.h \
                  kdtree.h light.h pbrt.h material.h mc.h mipmap.h octree.h \
                  paramset.h primitive.h reflection.h sampling.h scene.h \
                  shape.h texture.h timer.h tonemap.h transform.h transport.h \
                  volume.h 

CORE_HEADERS := $(addprefix ../core/, $(CORE_HEADERFILES) )

.SECONDARY: $(CAMERAS_OBJS) 

default: $(CAMERAS_DSOS) 

$(CORE_LIB): $(CORE_OBJS)
	ar rcs $(CORE_LIB) $(CORE_OBJS)

%.so: %.o 
	@$(LD) $(SHARED_LDFLAGS) $^ -o $@

%.o: cameras/%.cpp $(CORE_HEADERS)
	@echo "Building Camera Plugin \"$*\""
	@$(CXX) $(CXXFLAGS) -o $@ -c $<

clean:
	rm -f *.o *.so

