cmake_minimum_required(VERSION 2.6)
project(OSGLightPropagationVolumeOctree)

set(CMAKE_CXX_FLAGS, "-g -Wall")
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
set(CUDA_ARCHITECTURE "compute_20")

include(FindCuda)

find_package(OSG REQUIRED)
find_package(CUDA REQUIRED)

IF(NOT OSGVIEWER_LIBRARY)
	MESSAGE(FATAL_ERROR "Could not find the osgViewer plugin.")
ENDIF()
IF(NOT OSGDB_LIBRARY)
	MESSAGE(FATAL_ERROR "Could not find the osgDB plugin.")
ENDIF()
IF(NOT OSGGA_LIBRARY)
	MESSAGE(FATAL_ERROR "Could not find the osgGA plugin.")
ENDIF()

IF(NOT OSGCOMPUTE_LIBRARY)
	MESSAGE(FATAL_ERROR "Could not find the osgCompute plugin.")
ENDIF()
IF(NOT OSGCUDA_LIBRARY)
	MESSAGE(FATAL_ERROR "Could not find the osgCuda plugin.")
ENDIF()
IF(NOT OSGCUDAUTIL_LIBRARY)
	MESSAGE(FATAL_ERROR "Could not find the osgCudaUtil plugin.")
ENDIF()

include_directories(
		${OSG_INCLUDE_DIR}
		${CUDA_INCLUDE_PATH}
	)

set(LIBS ${LIBS}
		${OSG_LIBRARY}
		${OSGVIEWER_LIBRARY}
		${OSGDB_LIBRARY}
		${OSGGA_LIBRARY}
		${OSGCOMPUTE_LIBRARY}
		${OSGCUDA_LIBRARY}
		${OSGCUDAUTIL_LIBRARY}
		${CUDA_RUNTIME_LIBRARY}
	)

WRAP_CUDA(CUDA_FILES 
        cuda/Main.cu
    )

add_executable(OSGLightPropagationVolumeOctree
		CalculateBoundingBoxVisitor.cpp
		CallbackUtils.cpp
		FPSManipulator.cpp
		FrameTimeMonitor.cpp
		LightPrerenderSetup.cpp
		osglightpropagationvolumeoctree.cpp
		SceneConfig.cpp
		TangentSpaceVisitor.cpp
		TimeMonitor.cpp
		
		data/GeometryVolume.cpp
		data/IndexVolume.cpp
		data/LightPropagationVolume.cpp
		data/LPVComponents.cpp
		data/ReflectiveShadowMap.cpp
		data/Volume.cpp
		
		modules/GVClearModule.cpp
		modules/GVDebugModule.cpp
		modules/GVInjectModule.cpp
		modules/GVDownsampleModule.cpp
		modules/IXClearModule.cpp
		modules/LPVClearModule.cpp
		modules/LPVDebugModule.cpp
		modules/LPVDownsampleModule.cpp
		modules/LPVInjectModule.cpp
		modules/LPVMergeModule.cpp
		modules/LPVPropagateModule.cpp
		
		${CUDA_FILES}
	)

target_link_libraries(OSGLightPropagationVolumeOctree ${LIBS})
