# cmake file for glslang

if (NOT DE_DEFS)
	message(FATAL_ERROR "Include Defs.cmake")
endif ()

if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/SPIRV/GlslangToSpv.cpp")
	set(DEFAULT_GLSLANG_SRC_PATH ${CMAKE_CURRENT_SOURCE_DIR}/src)
else ()
	set(DEFAULT_GLSLANG_SRC_PATH "../glslang")
endif ()

set(GLSLANG_SRC_PATH ${DEFAULT_GLSLANG_SRC_PATH} CACHE STRING "Path to glslang source tree")

if (IS_ABSOLUTE ${GLSLANG_SRC_PATH})
	set(GLSLANG_ABS_PATH ${GLSLANG_SRC_PATH})
else ()
	set(GLSLANG_ABS_PATH "${CMAKE_SOURCE_DIR}/${GLSLANG_SRC_PATH}")
endif ()

if (EXISTS ${GLSLANG_ABS_PATH}/glslang/GenericCodeGen/CodeGen.cpp)
	message(STATUS "glslang found; building with DEQP_SUPPORT_GLSLANG")

	include_directories(
		${GLSLANG_ABS_PATH}
		${GLSLANG_ABS_PATH}/glslang
		${GLSLANG_ABS_PATH}/glslang/Include
		${GLSLANG_ABS_PATH}/glslang/Public
		${GLSLANG_ABS_PATH}/glslang/MachineIndependent
		${GLSLANG_ABS_PATH}/glslang/GenericCodeGen
		${GLSLANG_ABS_PATH}/glslang/OSDependent
		${GLSLANG_ABS_PATH}/OGLCompilersDLL
		${GLSLANG_ABS_PATH}/SPIRV
		)

	set(GLSLANG_SRCS
		${GLSLANG_ABS_PATH}/glslang/MachineIndependent/Constant.cpp
		${GLSLANG_ABS_PATH}/glslang/MachineIndependent/InfoSink.cpp
		${GLSLANG_ABS_PATH}/glslang/MachineIndependent/Initialize.cpp
		${GLSLANG_ABS_PATH}/glslang/MachineIndependent/IntermTraverse.cpp
		${GLSLANG_ABS_PATH}/glslang/MachineIndependent/Intermediate.cpp
		${GLSLANG_ABS_PATH}/glslang/MachineIndependent/ParseHelper.cpp
		${GLSLANG_ABS_PATH}/glslang/MachineIndependent/PoolAlloc.cpp
		${GLSLANG_ABS_PATH}/glslang/MachineIndependent/RemoveTree.cpp
		${GLSLANG_ABS_PATH}/glslang/MachineIndependent/Scan.cpp
		${GLSLANG_ABS_PATH}/glslang/MachineIndependent/ShaderLang.cpp
		${GLSLANG_ABS_PATH}/glslang/MachineIndependent/SymbolTable.cpp
		${GLSLANG_ABS_PATH}/glslang/MachineIndependent/Versions.cpp
		${GLSLANG_ABS_PATH}/glslang/MachineIndependent/glslang_tab.cpp
		${GLSLANG_ABS_PATH}/glslang/MachineIndependent/intermOut.cpp
		${GLSLANG_ABS_PATH}/glslang/MachineIndependent/limits.cpp
		${GLSLANG_ABS_PATH}/glslang/MachineIndependent/linkValidate.cpp
		${GLSLANG_ABS_PATH}/glslang/MachineIndependent/parseConst.cpp
		${GLSLANG_ABS_PATH}/glslang/MachineIndependent/reflection.cpp
		${GLSLANG_ABS_PATH}/glslang/MachineIndependent/propagateNoContraction.cpp
		${GLSLANG_ABS_PATH}/glslang/MachineIndependent/preprocessor/Pp.cpp
		${GLSLANG_ABS_PATH}/glslang/MachineIndependent/preprocessor/PpAtom.cpp
		${GLSLANG_ABS_PATH}/glslang/MachineIndependent/preprocessor/PpContext.cpp
		${GLSLANG_ABS_PATH}/glslang/MachineIndependent/preprocessor/PpMemory.cpp
		${GLSLANG_ABS_PATH}/glslang/MachineIndependent/preprocessor/PpScanner.cpp
		${GLSLANG_ABS_PATH}/glslang/MachineIndependent/preprocessor/PpSymbols.cpp
		${GLSLANG_ABS_PATH}/glslang/MachineIndependent/preprocessor/PpTokens.cpp
		${GLSLANG_ABS_PATH}/glslang/GenericCodeGen/CodeGen.cpp
		${GLSLANG_ABS_PATH}/glslang/GenericCodeGen/Link.cpp
		${GLSLANG_ABS_PATH}/OGLCompilersDLL/InitializeDll.cpp
		
		${GLSLANG_ABS_PATH}/hlsl/hlslGrammar.cpp
		${GLSLANG_ABS_PATH}/hlsl/hlslParseHelper.cpp
		${GLSLANG_ABS_PATH}/hlsl/hlslScanContext.cpp
		${GLSLANG_ABS_PATH}/hlsl/hlslTokenStream.cpp
		${GLSLANG_ABS_PATH}/hlsl/hlslOpMap.cpp
		${GLSLANG_ABS_PATH}/hlsl/hlslParseables.cpp

		${GLSLANG_ABS_PATH}/SPIRV/GlslangToSpv.cpp
		${GLSLANG_ABS_PATH}/SPIRV/InReadableOrder.cpp
		${GLSLANG_ABS_PATH}/SPIRV/SpvBuilder.cpp
		${GLSLANG_ABS_PATH}/SPIRV/SPVRemapper.cpp
		${GLSLANG_ABS_PATH}/SPIRV/doc.cpp
		${GLSLANG_ABS_PATH}/SPIRV/disassemble.cpp
		${GLSLANG_ABS_PATH}/SPIRV/Logger.cpp

		osinclude.cpp
		)

	set(CMAKE_C_FLAGS	${DE_3RD_PARTY_C_FLAGS})
	set(CMAKE_CXX_FLAGS	${DE_3RD_PARTY_CXX_FLAGS})

	if (DE_COMPILER_IS_GCC OR DE_COMPILER_IS_CLANG)
		set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
	endif ()

	add_library(glslang STATIC ${GLSLANG_SRCS})
	target_link_libraries(glslang dethread ${ZLIB_LIBRARY})

	set(GLSLANG_INCLUDE_PATH	${GLSLANG_ABS_PATH}	PARENT_SCOPE)
	set(GLSLANG_LIBRARY			glslang				PARENT_SCOPE)
	set(DEQP_HAVE_GLSLANG		ON					PARENT_SCOPE)

else ()
	message(STATUS "glslang not found; GLSL to SPIR-V compilation not available")

	set(DEQP_HAVE_GLSLANG		OFF					PARENT_SCOPE)

endif ()
