PROJECT ( MESHUP )

CMAKE_MINIMUM_REQUIRED (VERSION 2.6)

# Needed for UnitTest++
LIST( APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/CMake )

# Perform the proper linking
SET (CMAKE_SKIP_BUILD_RPATH FALSE)
SET (CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
SET (CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
SET (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)

# Enable proper C++11 flags
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
elseif(COMPILER_SUPPORTS_CXX0X)
	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
else()
	message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
endif()

# enable strings in GDB
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GLIBCXX_DEBUG")

INCLUDE_DIRECTORIES (
	${QT_INCLUDE_DIR}/QtOpenGL
	${CMAKE_CURRENT_BINARY_DIR}
	${CMAKE_CURRENT_SOURCE_DIR}
	${CMAKE_CURRENT_SOURCE_DIR}/src

	# Required to compile RCPP related code
	${CMAKE_CURRENT_SOURCE_DIR}/3rdparty
	${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/bgfx
	)

FIND_PACKAGE (X11 REQUIRED)
FIND_PACKAGE (OpenGL REQUIRED)
FIND_PACKAGE (Threads REQUIRED)

INCLUDE_DIRECTORIES ( 
	3rdparty/glfw/deps
	3rdparty/glfw/include
	3rdparty/bx/include
	3rdparty/bgfx/include
	3rdparty/bgfx/examples/common
	3rdparty/bgfx/examples/common/entry
	3rdparty/bgfx/3rdparty
	3rdparty/tinyobjloader
	3rdparty/bgfx/3rdparty/glsl-optimizer/include/
	3rdparty/bgfx/3rdparty/glsl-optimizer/src/
	3rdparty/bgfx/3rdparty/glsl-optimizer/src/mesa/
	${CMAKE_CURRENT_BINARY_DIR}/src
	)

SUBDIRS ( 
	src/modules
	tests/

	3rdparty/glfw
	3rdparty/bgfx
	3rdparty/googletest
	)

SET ( protot_SRCS
	src/shaderc_compile.cpp
	src/shaderc_glsl.cpp
	src/shaderc_hlsl.cpp

	src/RuntimeModuleManager.cc

	3rdparty/glfw/deps/glad.c
	)

SET (PROTOT_SOURCE_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})

CONFIGURE_FILE (
	"${CMAKE_CURRENT_SOURCE_DIR}/src/protot_config.h.cmake" 
	"${CMAKE_CURRENT_BINARY_DIR}/src/protot_config.h"
	)

ADD_EXECUTABLE (protot src/main.cc ${protot_SRCS})

file(GLOB glcpp-library_sources 
	3rdparty/bgfx/3rdparty/glsl-optimizer/src/mesa/main/*.c
	3rdparty/bgfx/3rdparty/glsl-optimizer/src/mesa/program/*.c
	3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/glcpp/*.c 
	3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/*.cpp 
	3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/*.c
	3rdparty/bgfx/3rdparty/glsl-optimizer/src/util/*.c
	)

list(REMOVE_ITEM glcpp-library_sources ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/main.cpp)

ADD_LIBRARY (glsl-optimizer
	${glcpp-library_sources}

	3rdparty/bgfx/3rdparty/fcpp/cpp1.c
	3rdparty/bgfx/3rdparty/fcpp/cpp2.c
	3rdparty/bgfx/3rdparty/fcpp/cpp3.c
	3rdparty/bgfx/3rdparty/fcpp/cpp4.c
	3rdparty/bgfx/3rdparty/fcpp/cpp5.c
	3rdparty/bgfx/3rdparty/fcpp/cpp6.c
	)

SET_TARGET_PROPERTIES ( ${PROJECT_EXECUTABLES} PROPERTIES
	LINKER_LANGUAGE CXX
	INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib" 
)

SET_TARGET_PROPERTIES ( glsl-optimizer PROPERTIES
	COMPILE_FLAGS "-fno-strict-aliasing"
)

MESSAGE (STATUS "glfw libraries: ${X11_X11_LIB}")

SET (glfw_dependencies
	${X11_X11_LIB}
	${X11_Xrandr_LIB}
	${X11_Xinerama_LIB}
	${X11_Xinput_LIB}
	${X11_Xcursor_LIB}
	${X11_Xxf86vm_LIB}
	${CMAKE_DL_LIBS}
	${CMAKE_THREAD_LIBS_INIT}
	)

TARGET_LINK_LIBRARIES ( protot
	#glew
	glfw
	${glfw_dependencies}
	${OPENGL_LIBRARIES}
	bgfx
	bgfx_aux
	glsl-optimizer
)
