cmake_minimum_required(VERSION 2.6)

set(CMAKE_CONFIGURATION_TYPES "Release;RelWithDebInfo" CACHE STRING "Configurations" FORCE)

project(GridView)

set(PHOENIX_SDK_DIR CACHE PATH "")
option(USE_PHOENIX_SDK_DYNAMIC_LIB "Build shared libraries" ON)

set(OUTPUT_DIR "${PROJECT_BINARY_DIR}/bin/")

SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${OUTPUT_DIR})
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${OUTPUT_DIR})
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${OUTPUT_DIR})
SET(EXECUTABLE_OUTPUT_PATH {OUTPUT_DIR})

#We don't need $(Configuration) in our output directory.
foreach( OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES} )
	string( TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG )
	set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${OUTPUT_DIR} )
	set( CMAKE_LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${OUTPUT_DIR} )
	set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${OUTPUT_DIR} )
endforeach( OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES )

#############################################################################
add_subdirectory(external_libs/glfw3)

#override the default glfw settings
set(GLFW_BUILD_EXAMPLES CACHE BOOL OFF FORCE)

set(GLFW_BUILD_TESTS CACHE BOOL OFF FORCE)
set(GLFW_BUILD_DOCS CACHE BOOL OFF FORCE)
set(GLFW_INSTALL CACHE BOOL OFF FORCE)
set(GLFW_DOCUMENT_INTERNALS CACHE BOOL OFF FORCE)

if(WIN32)
	set(BUILD_SHARED_LIBS CACHE BOOL OFF FORCE)
else()
	set(BUILD_SHARED_LIBS CACHE BOOL ON FORCE)
endif()

#############################################################################
#lib dirs
link_directories("${PHOENIX_SDK_DIR}/lib/") #Phoenix SDK Lib dir
link_directories("${OUTPUT_DIR}/")

#############################################################################
#include dirs

include_directories("./")
include_directories("${PHOENIX_SDK_DIR}/include/") #Phoenix SDK Include dir
include_directories("external_libs/glfw3/include")
include_directories("external_libs/glew/include/")
include_directories(${OPENGL_INCLUDE_DIRS})

#############################################################################
#additional compiler options
add_definitions(-DGLEW_STATIC)

#############################################################################
#project files

#The actual import code
SOURCE_GROUP(Main FILES main.cpp)
SOURCE_GROUP(Main FILES AuraLoader.h)
SOURCE_GROUP(Main FILES AuraLoader.cpp)
SOURCE_GROUP(Main FILES VolumeShaderCode.h)

#Some minor helpers
SOURCE_GROUP(UTILS FILES utils/MathHelpers.cpp)
SOURCE_GROUP(UTILS FILES utils/MathHelpers.h)
SOURCE_GROUP(UTILS FILES utils/Mesh.cpp)
SOURCE_GROUP(UTILS FILES utils/Mesh.h)
SOURCE_GROUP(UTILS FILES utils/Shader.cpp)
SOURCE_GROUP(UTILS FILES utils/Shader.h)
SOURCE_GROUP(UTILS FILES utils/VolumeTexture.cpp)
SOURCE_GROUP(UTILS FILES utils/VolumeTexture.h)

add_executable(GridView
	main.cpp
	AuraLoader.h
	AuraLoader.cpp
	VolumeShaderCode.h

	utils/MathHelpers.cpp
	utils/MathHelpers.h
	utils/Mesh.cpp
	utils/Mesh.h
	utils/Shader.cpp
	utils/Shader.h
	utils/VolumeTexture.cpp
	utils/VolumeTexture.h

	external_libs/glew/src/glew.c
)

#############################################################################
#add additional lib dependencies
if(USE_PHOENIX_SDK_DYNAMIC_LIB)
	target_link_libraries(GridView aurloader)
else()
	target_link_libraries(GridView aurloader_s)
	target_link_libraries(GridView vutils_s)

	if(UNIX)
		# Under non Windows platforms it is convenient to use the already installed zlib.
		find_package(zlib REQUIRED)
		target_link_libraries(GridView ${ZLIB_LIBRARIES})
	else()
		# Under Windows build zlib using it's default CMakeLists.txt
		add_subdirectory(external_libs/zlib)
		target_link_libraries(GridView zlibstatic)
	endif()

	if(UNIX)
		target_link_libraries(GridView rt)
	endif()
endif()

find_package(OpenGL REQUIRED)
target_link_libraries(GridView ${OPENGL_LIBRARIES})

if(UNIX)
	target_link_libraries(GridView glfw)
else()
	target_link_libraries(GridView glfw3)
endif(UNIX)

#############################################################################
#add additional linker options and definitions

if(USE_PHOENIX_SDK_DYNAMIC_LIB)
	add_definitions(-DAURLOADER_DYNAMIC_LIB)
endif()

if(UNIX)
	find_package(X11)
	target_link_libraries(GridView ${X11_LIBRARIES} -lXxf86vm  -lXrandr -lXi)
	add_definitions(-m64)
	find_package( Threads )
	target_link_libraries(GridView "${CMAKE_THREAD_LIBS_INIT}")
endif(UNIX)

#############################################################################
if(WIN32 AND USE_PHOENIX_SDK_DYNAMIC_LIB)
	file(COPY ${PHOENIX_SDK_DIR}/lib/aurloader.dll DESTINATION ${OUTPUT_DIR}/)
endif()
