Archived
1
Fork 0
This repository has been archived on 2025-04-12. You can view files and clone it, but cannot push or open issues or pull requests.
prism/cmake/BuildShaders.cmake

57 lines
2 KiB
CMake
Raw Normal View History

# add custom command to output compiled shader
function(add_shader_command)
cmake_parse_arguments(ARGS "" "FILENAME;OUT" "" ${ARGN})
2020-08-11 12:07:21 -04:00
cmake_path(REMOVE_EXTENSION ARGS_FILENAME LAST_ONLY OUTPUT_VARIABLE FILENAME_WITHOUT_EXT)
2020-08-11 12:07:21 -04:00
set(SRC_FILENAME ${CMAKE_CURRENT_SOURCE_DIR}/${ARGS_FILENAME})
set(OUTPUT_FILENAME ${CMAKE_BINARY_DIR}/${FILENAME_WITHOUT_EXT})
if(NEEDS_HOSTED_SHADER_COMPILER)
set(SHADER_COMPILER_COMMAND ${SHADER_COMPILER_LOCATION})
else()
set(SHADER_COMPILER_COMMAND $<TARGET_FILE:ShaderCompilerTool>)
endif()
# we want to remove the .nocompile extension just like the tool does, if it exists
cmake_path(GET FILENAME_WITHOUT_EXT EXTENSION LAST_ONLY LAST_EXT)
if(LAST_EXT STREQUAL ".nocompile")
cmake_path(REPLACE_EXTENSION OUTPUT_FILENAME LAST_ONLY glsl)
2020-08-11 12:07:21 -04:00
endif()
add_custom_command(
OUTPUT ${OUTPUT_FILENAME}
COMMAND ${SHADER_COMPILER_COMMAND} ${SRC_FILENAME} ${OUTPUT_FILENAME} ${REQUIRED_SHADER_LANGUAGE} ${EXTRA_PLATFORM_ARG}
DEPENDS ${SRC_FILENAME}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/shaders)
2020-08-11 12:07:21 -04:00
# return the actual filename
set(${ARGS_OUT} ${OUTPUT_FILENAME} PARENT_SCOPE)
endfunction()
2020-08-11 12:07:21 -04:00
# add shaders to target
function(add_shaders)
cmake_parse_arguments(ARGS "" "TARGET" "SHADERS" ${ARGN})
2020-08-11 12:07:21 -04:00
foreach(SHADER_FILENAME ${ARGS_SHADERS})
cmake_path(REMOVE_EXTENSION SHADER_FILENAME LAST_ONLY OUTPUT_VARIABLE FILENAME_WITHOUT_EXT)
2020-08-11 12:07:21 -04:00
add_shader_command(FILENAME ${SHADER_FILENAME} OUT DST_FILENAME)
2020-09-22 16:21:35 -04:00
list(APPEND SRC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/${SHADER_FILENAME})
list(APPEND DST_FILES ${DST_FILENAME})
endforeach()
2020-08-11 12:07:21 -04:00
if(NOT NEEDS_HOSTED_SHADER_COMPILER)
add_custom_target(BuildShaders DEPENDS ShaderCompilerTool ${DST_FILES})
else()
add_custom_target(BuildShaders DEPENDS ${DST_FILES})
2020-08-11 12:07:21 -04:00
endif()
add_dependencies(${ARGS_TARGET} BuildShaders)
2020-08-11 12:07:21 -04:00
endfunction()
# make the shader directory if it doesnt exist already
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/shaders)