The open source OpenXR runtime
1# Copyright 2019, Collabora, Ltd.
2#
3# SPDX-License-Identifier: BSL-1.0
4
5find_program(GLSLANGVALIDATOR_COMMAND
6 glslangValidator)
7if(NOT GLSLANGVALIDATOR_COMMAND)
8 message(FATAL_ERROR "glslangValidator required - source maintained at https://github.com/KhronosGroup/glslang")
9endif()
10
11#
12# Generate SPIR-V header files from the arguments. Returns a list of headers.
13#
14function(spirv_shaders ret)
15 set(options)
16 set(oneValueArgs SPIRV_VERSION)
17 set(multiValueArgs SOURCES DEPENDS)
18 cmake_parse_arguments(_spirvshaders "${options}" "${oneValueArgs}"
19 "${multiValueArgs}" ${ARGN})
20
21 if(NOT _spirvshaders_SPIRV_VERSION)
22 set(_spirvshaders_SPIRV_VERSION 1.0)
23 endif()
24
25 foreach(GLSL ${_spirvshaders_SOURCES})
26 string(MAKE_C_IDENTIFIER ${GLSL} IDENTIFIER)
27 set(HEADER "${CMAKE_CURRENT_BINARY_DIR}/${GLSL}.h")
28 set(GLSL "${CMAKE_CURRENT_SOURCE_DIR}/${GLSL}")
29
30 add_custom_command(
31 OUTPUT ${HEADER}
32 COMMAND ${GLSLANGVALIDATOR_COMMAND} -V --target-env spirv${_spirvshaders_SPIRV_VERSION} ${GLSL} --vn ${IDENTIFIER} -o ${HEADER}
33 DEPENDS ${GLSL} ${_spirvshaders_DEPENDS})
34 list(APPEND HEADERS ${HEADER})
35 endforeach()
36
37 set(${ret} "${HEADERS}" PARENT_SCOPE)
38endfunction(spirv_shaders)