45 lines
1.5 KiB
CMake
45 lines
1.5 KiB
CMake
# Copyright (c) 2025 Dominic Masters
|
|
#
|
|
# This software is released under the MIT License.
|
|
# https://opensource.org/licenses/MIT
|
|
|
|
# Path to the CMake script for converting GLSL to header
|
|
set(DUSK_GLSL_TOOL_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/glsltool.cmake CACHE INTERNAL ${DUSK_CACHE_TARGET})
|
|
|
|
# GLSL to C-code
|
|
function(glsltool GLSL_FILE)
|
|
get_filename_component(GLSL_FILE_NAME_WE ${GLSL_FILE} NAME_WE)
|
|
set(GLSL_SOURCE_DIRECTORY ${CMAKE_CURRENT_LIST_DIR})
|
|
set(GLSL_FILE_ABSOLUTE ${GLSL_SOURCE_DIRECTORY}/${GLSL_FILE})
|
|
set(GLSL_FILE_PATH ${CMAKE_CURRENT_LIST_DIR}/${GLSL_FILE})
|
|
set(GLSL_FILE_HEADER ${DUSK_GENERATED_HEADERS_DIR}/${GLSL_FILE}.h)
|
|
set(GLSL_MISSING_FILE ${DUSK_GENERATED_HEADERS_DIR}/missing_${GLSL_FILE}.h)
|
|
|
|
# Ensure the generated files are recompiled
|
|
add_custom_command(
|
|
OUTPUT
|
|
${GLSL_FILE_HEADER}
|
|
${GLSL_MISSING_FILE}
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${DUSK_GENERATED_HEADERS_DIR}
|
|
COMMAND ${CMAKE_COMMAND}
|
|
-DGLSL_FILE_ABSOLUTE=${GLSL_FILE_ABSOLUTE}
|
|
-DGLSL_FILE_HEADER=${GLSL_FILE_HEADER}
|
|
-DGLSL_FILE_NAME_WE=${GLSL_FILE_NAME_WE}
|
|
-DGLSL_SOURCE_DIRECTORY=${GLSL_SOURCE_DIRECTORY}
|
|
-P ${DUSK_GLSL_TOOL_SCRIPT}
|
|
DEPENDS ${GLSL_FILE_PATH}
|
|
COMMENT "Converting ${GLSL_FILE} to header"
|
|
)
|
|
|
|
# Trick to always run the command
|
|
add_custom_target(GLSL_TOOL_ALWAYS_RUN_${GLSL_FILE}
|
|
ALL
|
|
DEPENDS
|
|
${GLSL_MISSING_FILE}
|
|
${GLSL_FILE_HEADER}
|
|
)
|
|
|
|
add_dependencies(${DUSK_TARGET_NAME}
|
|
GLSL_TOOL_ALWAYS_RUN_${GLSL_FILE}
|
|
)
|
|
endfunction() |