#-------------------------------------------------------------------------------------------------
# Extremely simplistic scons script.
# It uses only 2 basic scons functions, Split() & Program(), but it works
# (but quite probably only for me, must be adapted to work properly on other systems as well...)
#-------------------------------------------------------------------------------------------------

debug = int(ARGUMENTS.get("debug", 0))
no_cimg = int(ARGUMENTS.get("no_cimg", 0))
profile = int(ARGUMENTS.get("profile", 0))

# fast-math & omit-frame-pointer as well as athlon64 flags may be completely useless, since it is already compiled
# for athlon64 by default, omit-frame-pointer is turned on by default with O3, and fast-math might not produce correct results either

if debug:
	# for gdb/valgrind, lflags as normal (note: don't use CImg in this case!, will detect lots of leaks in Xwin)
	cppflags  = Split("-Wall -g -O0 -fno-inline -I/usr/X11R6/include `pkg-config --cflags OpenEXR`")
else:
	cppflags = Split("-Wall -Wextra -Wno-unused -Wwrite-strings -O3 -march=athlon64 -ffast-math -I/usr/X11R6/include `pkg-config --cflags OpenEXR`")

lflags = Split("-ljpeg `pkg-config --libs OpenEXR`")
if profile:
	# for profiling, add -pg to both cppflags and lflags (adding -g can be useful as well)
	cppflags.append(Split("-pg -g"))
	lflags.append("-pg")

if not no_cimg:
	# use CImg library
	cppflags.append("-DWITH_CIMG")
	lflags.extend(Split("-L/usr/X11R6/lib64 -lpthread -lX11 -lXext"))

incfiles = Split("core framebuffer framework hider imgio mpgrid primitives qdtl ribparse svm")

# main program
src = ["qdrender.cpp"]

# core directory
src += ["core/Attributes.cpp", "core/Bound.cpp", "core/Camera.cpp", "core/Color.cpp",
        "core/HierarchicalZbuffer.cpp", "core/Mathutil.cpp", "core/Noise.cpp",
        "core/Options.cpp", "core/qdVector.cpp", "core/RenderBucket.cpp",
        "core/State.cpp", "core/Transform.cpp"]

# framebuffer director
src += ["framebuffer/FrameBuffer.cpp"]

# framework directory
src += ["framework/HybridFramework.cpp", "framework/RayTraceFramework.cpp", "framework/ReyesFramework.cpp"]

# hider directory
src += ["hider/RayTraceHider.cpp", "hider/ZbufferHider.cpp"]

# imgio directory
src += ["imgio/exr_io.cpp", "imgio/jpeg_img.cpp"]

# mpgrid directory
src += ["mpgrid/MicroPolygon.cpp", "mpgrid/MicroPolygonGrid.cpp"]

# primitives directory
src += ["primitives/CCSubdivision.cpp", "primitives/Curves.cpp", "primitives/Nurbs.cpp",
        "primitives/Parametric.cpp", "primitives/Patches.cpp", "primitives/Points.cpp",
        "primitives/Polygons.cpp", "primitives/Primitive.cpp", "primitives/Quadrics.cpp"]

# qdtl directory
src += ["qdtl/qdtl.cpp"]

# ribparse directory
src += ["ribparse/decparam.cpp", "ribparse/ribInterface.cpp", "ribparse/RIB_parser.cpp", "ribparse/ri.cpp"]

# svm directory (maketexture.cpp not here (yet) see comments for mktex program below)
src += ["svm/ImageTextures.cpp", "svm/shaderVM.cpp", "svm/slshader.cpp", "svm/TexCache.cpp"]

# Build main program
Program('qdrender', source=src, CPPFLAGS=cppflags, CPPPATH=incfiles, LINKFLAGS=lflags)

# build mktex program, must specify object files already compiled above instead of .cpp,
# otherwise result is scons error "Two different sets of overrides were specified for the same target"
mktex_src = ['mktex.cpp', 'imgio/exr_io.o', 'imgio/jpeg_img.o', 'svm/maketexture.cpp']
mktex_lflags = Split("-ljpeg `pkg-config --libs OpenEXR`")
Program('mktex', source=mktex_src, CPPFLAGS=cppflags, CPPPATH=incfiles, LINKFLAGS=mktex_lflags)
