Skip to content

Commit 34249ce

Browse files
AnastaZIukdeprilula28
authored andcommitted
Resolve some of GH comments: build DXC executable with fixed Release configuration and dxcompiler with $<IF:$<CONFIG:Debug>,Debug,Release> configuration. Enable ENABLE_SPIRV_CODEGEN and don't give anybody choice to enable DXC build
1 parent 1f80721 commit 34249ce

File tree

3 files changed

+128
-131
lines changed

3 files changed

+128
-131
lines changed

3rdparty/CMakeLists.txt

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,21 +20,13 @@ set(BUILD_TESTING ${_OLD_BUILD_TESTING})
2020
add_subdirectory(openssl openssl EXCLUDE_FROM_ALL)
2121

2222
# DXC
23-
option(_NBL_COMPILE_WITH_DXC_ "Build Nabla with DXC" ON)
2423
option(_NBL_ENABLE_DXC_COMPILE_TESTS_ "Enable it in order to test compilation of Nabla shaders at build time" OFF)
2524
option(_NBL_DXC_COMPILE_TESTS_ENABLE_CMAKE_LOG_ "Enable more verbose log when creating DXC compile test target - only for Nabla developers!" OFF)
2625
set(_NBL_DXC_CT_PREFIX_CMAKE_LOG_DEBUG_ "[DXC_CT]:" CACHE INTERNAL "only for Nabla developers")
27-
if(_NBL_COMPILE_WITH_DXC_)
28-
message(STATUS "_NBL_COMPILE_WITH_DXC_ enabled, Nabla will be built with DXC!")
29-
add_subdirectory(dxc dxc EXCLUDE_FROM_ALL)
30-
31-
if(_NBL_ENABLE_DXC_COMPILE_TESTS_)
32-
message(STATUS "_NBL_ENABLE_DXC_COMPILE_TESTS_ enabled, DXC compile test target will be executed at build time!")
33-
endif()
34-
else()
35-
if(_NBL_ENABLE_DXC_COMPILE_TESTS_)
36-
message(WARNING "_NBL_ENABLE_DXC_COMPILE_TESTS_ enabled, but _NBL_COMPILE_WITH_DXC_ is turned off! DXC compile tests won't be executed...")
37-
endif()
26+
add_subdirectory(dxc dxc EXCLUDE_FROM_ALL)
27+
28+
if(_NBL_ENABLE_DXC_COMPILE_TESTS_)
29+
message(STATUS "_NBL_ENABLE_DXC_COMPILE_TESTS_ enabled, DXC compile test target will be executed at build time!")
3830
endif()
3931

4032
# volk

3rdparty/dxc/CMakeLists.txt

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ list(APPEND DXC_CMAKE_ARGS "-DHLSL_ENABLE_FIXED_VER:BOOL=OFF")
66
list(APPEND DXC_CMAKE_ARGS "-DHLSL_FIXED_VERSION_LOCATION:STRING=")
77
list(APPEND DXC_CMAKE_ARGS "-DHLSL_BUILD_DXILCONV:BOOL=ON")
88
list(APPEND DXC_CMAKE_ARGS "-DCLANG_VENDOR:STRING=")
9-
list(APPEND DXC_CMAKE_ARGS "-DENABLE_SPIRV_CODEGEN:BOOL=OFF")
9+
list(APPEND DXC_CMAKE_ARGS "-DENABLE_SPIRV_CODEGEN:BOOL=ON")
1010
list(APPEND DXC_CMAKE_ARGS "-DSPIRV_BUILD_TESTS:BOOL=OFF")
1111
list(APPEND DXC_CMAKE_ARGS "-DCLANG_ENABLE_ARCMT:BOOL=OFF")
1212
list(APPEND DXC_CMAKE_ARGS "-DCLANG_ENABLE_STATIC_ANALYZER:BOOL=OFF")
@@ -30,23 +30,31 @@ list(APPEND DXC_CMAKE_ARGS "-DCLANG_CL:BOOL=OFF")
3030
list(APPEND DXC_CMAKE_ARGS "-DCMAKE_SYSTEM_VERSION=10.0.17763.0")
3131
list(APPEND DXC_CMAKE_ARGS "-DDXC_BUILD_ARCH=x64")
3232

33+
set(_DXC_CURRENT_CONFIG_ "$<IF:$<CONFIG:Debug>,Debug,Release>")
3334
set(DXC_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/dxc" CACHE INTERNAL "")
3435
set(DXC_BINARY_DIR_EP "${CMAKE_CURRENT_BINARY_DIR}/external/dxc" CACHE INTERNAL "")
35-
set(DXC_BINARY_DIR_GE "${DXC_BINARY_DIR_EP}/Release" CACHE INTERNAL "")
36-
set(DXC_BIN_DIR "${DXC_BINARY_DIR_GE}/Release/bin" CACHE INTERNAL "")
37-
set(DXC_LIB_DIR "${DXC_BINARY_DIR_GE}/Release/lib" CACHE INTERNAL "")
36+
set(DXC_BINARY_DIR_GE "${DXC_BINARY_DIR_EP}/${_DXC_CURRENT_CONFIG_}" CACHE INTERNAL "")
37+
set(DXC_BIN_DIR "${DXC_BINARY_DIR_GE}/${_DXC_CURRENT_CONFIG_}/bin" CACHE INTERNAL "")
38+
set(DXC_LIB_DIR "${DXC_BINARY_DIR_GE}/${_DXC_CURRENT_CONFIG_}/lib" CACHE INTERNAL "")
3839
set(DXC_EXECUTABLE "${DXC_BIN_DIR}/dxc.exe" CACHE INTERNAL "")
39-
set(DXC_DXCOMPILER_LIB "${DXC_LIB_DIR}/dxcompiler.lib" CACHE INTERNAL "")
40+
set(DXC_DXCOMPILER_LIB "${DXC_LIB_DIR}/dxcompiler.lib" CACHE INTERNAL "") # TODO: check if there is any debug postfix/suffix!
41+
42+
# DXC External Project
43+
# builds DXC executable target and dxcompiler library target
44+
# we cannot include it to Nabla's BS because DXC's BS isn't supposed to be added via submodule
45+
# - there are troubles with linker input paths and include/link search directory paths
4046

4147
ExternalProject_Add(dxc
4248
DOWNLOAD_COMMAND ""
4349
SOURCE_DIR "${DXC_SOURCE_DIR}"
4450
BINARY_DIR "${DXC_BINARY_DIR_EP}"
45-
BUILD_COMMAND "${CMAKE_COMMAND}" --build "${DXC_BINARY_DIR_GE}" --config Release --target dxc --target dxcompiler -v
51+
BUILD_COMMAND "${CMAKE_COMMAND}" --build "${DXC_BINARY_DIR_GE}" --config Release --target dxc -v # DXC executable will be compiled always in Release mode
52+
COMMAND "${CMAKE_COMMAND}" --build "${DXC_BINARY_DIR_GE}" --config ${_DXC_CURRENT_CONFIG_} --target dxcompiler -v
4653
CONFIGURE_COMMAND "${CMAKE_COMMAND}" -S "${DXC_SOURCE_DIR}" -B "${DXC_BINARY_DIR_GE}" -G "${CMAKE_GENERATOR}" "-Ax64" -T "${CMAKE_GENERATOR_TOOLSET}" ${DXC_CMAKE_ARGS}
4754
INSTALL_COMMAND ""
4855
TEST_COMMAND ""
4956
LOG_INSTALL 1
5057
)
5158

52-
unset(DXC_CMAKE_ARGS)
59+
unset(DXC_CMAKE_ARGS)
60+
unset(_DXC_CURRENT_CONFIG_)

src/nbl/CMakeLists.txt

Lines changed: 109 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -580,132 +580,129 @@ if(_NBL_COMPILE_WITH_GLI_)
580580
endif()
581581

582582
# DXC
583-
if(_NBL_COMPILE_WITH_DXC_)
584-
add_dependencies(Nabla dxc)
585-
target_include_directories(Nabla PRIVATE
586-
"${DXC_BINARY_DIR_GE}/tools/clang/tools/dxcompiler"
587-
"${DXC_SOURCE_DIR}/tools/clang/tools/dxcompiler"
588-
"${DXC_SOURCE_DIR}/tools/clang/include"
589-
"${DXC_BINARY_DIR_GE}/tools/clang/include"
590-
"${DXC_SOURCE_DIR}/include/llvm/llvm_assert"
591-
"${DXC_BINARY_DIR_GE}/include"
592-
"${DXC_SOURCE_DIR}/include"
593-
"${DXC_BINARY_DIR_GE}/include/dxc/Tracing"
594-
"${DXC_BINARY_DIR_GE}/utils/version"
595-
)
596-
target_link_libraries(Nabla INTERFACE "${DXC_DXCOMPILER_LIB}")
583+
add_dependencies(Nabla dxc)
584+
target_include_directories(Nabla PRIVATE
585+
"${DXC_BINARY_DIR_GE}/tools/clang/tools/dxcompiler"
586+
"${DXC_SOURCE_DIR}/tools/clang/tools/dxcompiler"
587+
"${DXC_SOURCE_DIR}/tools/clang/include"
588+
"${DXC_BINARY_DIR_GE}/tools/clang/include"
589+
"${DXC_SOURCE_DIR}/include/llvm/llvm_assert"
590+
"${DXC_BINARY_DIR_GE}/include"
591+
"${DXC_SOURCE_DIR}/include"
592+
"${DXC_BINARY_DIR_GE}/include/dxc/Tracing"
593+
"${DXC_BINARY_DIR_GE}/utils/version"
594+
)
595+
target_link_libraries(Nabla INTERFACE "${DXC_DXCOMPILER_LIB}")
596+
597+
############################################################################
598+
# list files you want to compile with DXC in _NBL_ENABLE_DXC_COMPILE_TESTS_
599+
# once we have guarantee all of shaders in Nabla can be compiled with DXC,
600+
# we can simply grep all of those files/use existing vars holding paths to
601+
# shaders and remove manual adding the files bellow
602+
###################################################
603+
604+
if(_NBL_ENABLE_DXC_COMPILE_TESTS_)
605+
set(_NBL_DXC_CT_INCLUDE_ROOT_ "${NBL_ROOT_PATH}/include") # Nabla include root path for shaders
606+
set(_NBL_DXC_CT_BINARY_BIN_ "${CMAKE_CURRENT_BINARY_DIR}/DXC/CT") # compile-test directory
597607

598-
############################################################################
599-
# list files you want to compile with DXC in _NBL_ENABLE_DXC_COMPILE_TESTS_
600-
# once we have guarantee all of shaders in Nabla can be compiled with DXC,
601-
# we can simply grep all of those files/use existing vars holding paths to
602-
# shaders and remove manual adding the files bellow
603-
###################################################
608+
if(_NBL_DXC_COMPILE_TESTS_ENABLE_CMAKE_LOG_)
609+
message("${_NBL_DXC_CT_PREFIX_CMAKE_LOG_DEBUG_} _NBL_DXC_CT_INCLUDE_ROOT_ = '${_NBL_DXC_CT_INCLUDE_ROOT_}'")
610+
message("${_NBL_DXC_CT_PREFIX_CMAKE_LOG_DEBUG_} _NBL_DXC_CT_BINARY_BIN_ = '${_NBL_DXC_CT_BINARY_BIN_}'")
611+
endif()
612+
613+
# this is how you add file for compilation test
614+
set(_NBL_DXC_CT_SHADER_FILES_
615+
"${_NBL_DXC_CT_INCLUDE_ROOT_}/nbl/builtin/hlsl/barycentric/utils.hlsl"
616+
)
604617

605-
if(_NBL_ENABLE_DXC_COMPILE_TESTS_)
606-
set(_NBL_DXC_CT_INCLUDE_ROOT_ "${NBL_ROOT_PATH}/include") # Nabla include root path for shaders
607-
set(_NBL_DXC_CT_BINARY_BIN_ "${CMAKE_CURRENT_BINARY_DIR}/DXC/CT") # compile-test directory
618+
foreach(_SHADER_FILE_PATH_ IN LISTS _NBL_DXC_CT_SHADER_FILES_)
619+
if(_NBL_DXC_COMPILE_TESTS_ENABLE_CMAKE_LOG_)
620+
message("${_NBL_DXC_CT_PREFIX_CMAKE_LOG_DEBUG_} adding _SHADER_FILE_PATH_ = '${_SHADER_FILE_PATH_}' as INPUT of DXC CT target")
621+
endif()
622+
623+
cmake_path(RELATIVE_PATH _SHADER_FILE_PATH_ BASE_DIRECTORY "${_NBL_DXC_CT_INCLUDE_ROOT_}" OUTPUT_VARIABLE _SHADER_NEW_RELATIVE_FILE_PATH_)
624+
cmake_path(GET _SHADER_NEW_RELATIVE_FILE_PATH_ STEM LAST_ONLY _SHADER_NEW_STEAM_)
625+
cmake_path(REMOVE_EXTENSION _SHADER_NEW_RELATIVE_FILE_PATH_ LAST_ONLY OUTPUT_VARIABLE _SHADER_NEW_RELATIVE_OUTPUT_DIR_)
626+
627+
set(_NBL_DXC_CT_CURRENT_OUTPUT_BIN_DIR_ "${_NBL_DXC_CT_BINARY_BIN_}/${_SHADER_NEW_RELATIVE_OUTPUT_DIR_}/bin")
628+
set(_NBL_DXC_CT_CURRENT_OUTPUT_FILEPATH_ "${_NBL_DXC_CT_CURRENT_OUTPUT_BIN_DIR_}/${_SHADER_NEW_STEAM_}.bin")
629+
630+
# MSVC and other generators have "SetEnv" task - we need to make sure our enviroment is clean while invoking DXC compilation
631+
string(APPEND _TMP_CLEAN_ENV_ "set PATH=$ENV{PATH}\nset CAExcludePath=\nset LIB=\nset LIBPATH=\nset INCLUDE=\nset EXTERNAL_INCLUDE=\n")
632+
633+
# Include dependency chain for considered compile file
634+
set(_NBL_DXC_CT_CURRENT_DEPENDS_FILEPATH_ "${_NBL_DXC_CT_CURRENT_OUTPUT_BIN_DIR_}/depends.txt")
635+
set(_NBL_DXC_CT_CURRENT_IDC_FILEPATH_ "${_NBL_DXC_CT_CURRENT_OUTPUT_BIN_DIR_}/depends.cmd")
636+
string(APPEND _NBL_DXC_CT_WRAPPER_IDC_COMMAND_ "${_TMP_CLEAN_ENV_}\"${DXC_EXECUTABLE}\" -HV 2021 -T lib_6_7 -I\"${_NBL_DXC_CT_INCLUDE_ROOT_}\" -Zi -MF \"${_NBL_DXC_CT_CURRENT_DEPENDS_FILEPATH_}\" \"${_SHADER_FILE_PATH_}\"")
637+
file(WRITE "${_NBL_DXC_CT_CURRENT_IDC_FILEPATH_}" "${_NBL_DXC_CT_WRAPPER_IDC_COMMAND_}")
638+
# TODO execute_process for _NBL_DXC_CT_CURRENT_IDC_FILEPATH_ and hanlding _NBL_DXC_CT_CURRENT_IDC_FILEPATH_'s deps by custom command
639+
640+
# Compile command
641+
string(APPEND _NBL_DXC_CT_WRAPPER_COMPILE_COMMAND_ "${_TMP_CLEAN_ENV_}\"${DXC_EXECUTABLE}\" -HV 2021 -T lib_6_7 -I\"${_NBL_DXC_CT_INCLUDE_ROOT_}\" -Zi -Fo \"${_NBL_DXC_CT_CURRENT_OUTPUT_FILEPATH_}\" \"${_SHADER_FILE_PATH_}\"")
642+
set(_NBL_DXC_CT_CURRENT_SHADER_COMPILE_FILEPATH_ "${_NBL_DXC_CT_CURRENT_OUTPUT_BIN_DIR_}/compile.cmd")
643+
file(WRITE "${_NBL_DXC_CT_CURRENT_SHADER_COMPILE_FILEPATH_}" "${_NBL_DXC_CT_WRAPPER_COMPILE_COMMAND_}")
644+
645+
unset(_NBL_DXC_CT_WRAPPER_COMPILE_COMMAND_)
646+
unset(_TMP_CLEAN_ENV_)
608647

609648
if(_NBL_DXC_COMPILE_TESTS_ENABLE_CMAKE_LOG_)
610-
message("${_NBL_DXC_CT_PREFIX_CMAKE_LOG_DEBUG_} _NBL_DXC_CT_INCLUDE_ROOT_ = '${_NBL_DXC_CT_INCLUDE_ROOT_}'")
611-
message("${_NBL_DXC_CT_PREFIX_CMAKE_LOG_DEBUG_} _NBL_DXC_CT_BINARY_BIN_ = '${_NBL_DXC_CT_BINARY_BIN_}'")
649+
message("${_NBL_DXC_CT_PREFIX_CMAKE_LOG_DEBUG_} adding _NBL_DXC_CT_CURRENT_OUTPUT_FILEPATH_ = '${_NBL_DXC_CT_CURRENT_OUTPUT_FILEPATH_}' as OUTPUT of DXC CT target")
612650
endif()
613651

614-
# this is how you add file for compilation test
615-
set(_NBL_DXC_CT_SHADER_FILES_
616-
"${_NBL_DXC_CT_INCLUDE_ROOT_}/nbl/builtin/hlsl/barycentric/utils.hlsl"
617-
)
652+
###############################################################
653+
# scans include files of particular hlsl file to compile by DXC
654+
# performs validation of include files and adds them as DEPENDS
655+
# of custom command to keep track of modifications of any
656+
# dependency file
657+
#
658+
# TODO: add recursive scanning of ALL includes, right now it
659+
# doesn't scan recursivly but sinks only with include depth = 1
660+
###############################################################
618661

619-
foreach(_SHADER_FILE_PATH_ IN LISTS _NBL_DXC_CT_SHADER_FILES_)
620-
if(_NBL_DXC_COMPILE_TESTS_ENABLE_CMAKE_LOG_)
621-
message("${_NBL_DXC_CT_PREFIX_CMAKE_LOG_DEBUG_} adding _SHADER_FILE_PATH_ = '${_SHADER_FILE_PATH_}' as INPUT of DXC CT target")
622-
endif()
623-
624-
cmake_path(RELATIVE_PATH _SHADER_FILE_PATH_ BASE_DIRECTORY "${_NBL_DXC_CT_INCLUDE_ROOT_}" OUTPUT_VARIABLE _SHADER_NEW_RELATIVE_FILE_PATH_)
625-
cmake_path(GET _SHADER_NEW_RELATIVE_FILE_PATH_ STEM LAST_ONLY _SHADER_NEW_STEAM_)
626-
cmake_path(REMOVE_EXTENSION _SHADER_NEW_RELATIVE_FILE_PATH_ LAST_ONLY OUTPUT_VARIABLE _SHADER_NEW_RELATIVE_OUTPUT_DIR_)
627-
628-
set(_NBL_DXC_CT_CURRENT_OUTPUT_BIN_DIR_ "${_NBL_DXC_CT_BINARY_BIN_}/${_SHADER_NEW_RELATIVE_OUTPUT_DIR_}/bin")
629-
set(_NBL_DXC_CT_CURRENT_OUTPUT_FILEPATH_ "${_NBL_DXC_CT_CURRENT_OUTPUT_BIN_DIR_}/${_SHADER_NEW_STEAM_}.bin")
630-
631-
# MSVC and other generators have "SetEnv" task - we need to make sure our enviroment is clean while invoking DXC compilation
632-
string(APPEND _TMP_CLEAN_ENV_ "set PATH=$ENV{PATH}\nset CAExcludePath=\nset LIB=\nset LIBPATH=\nset INCLUDE=\nset EXTERNAL_INCLUDE=\n")
633-
634-
# Include dependency chain for considered compile file
635-
set(_NBL_DXC_CT_CURRENT_DEPENDS_FILEPATH_ "${_NBL_DXC_CT_CURRENT_OUTPUT_BIN_DIR_}/depends.txt")
636-
set(_NBL_DXC_CT_CURRENT_IDC_FILEPATH_ "${_NBL_DXC_CT_CURRENT_OUTPUT_BIN_DIR_}/depends.cmd")
637-
string(APPEND _NBL_DXC_CT_WRAPPER_IDC_COMMAND_ "${_TMP_CLEAN_ENV_}\"${DXC_EXECUTABLE}\" -HV 2021 -T lib_6_7 -I\"${_NBL_DXC_CT_INCLUDE_ROOT_}\" -Zi -MF \"${_NBL_DXC_CT_CURRENT_DEPENDS_FILEPATH_}\" \"${_SHADER_FILE_PATH_}\"")
638-
file(WRITE "${_NBL_DXC_CT_CURRENT_IDC_FILEPATH_}" "${_NBL_DXC_CT_WRAPPER_IDC_COMMAND_}")
639-
# TODO execute_process for _NBL_DXC_CT_CURRENT_IDC_FILEPATH_ and hanlding _NBL_DXC_CT_CURRENT_IDC_FILEPATH_'s deps by custom command
640-
641-
# Compile command
642-
string(APPEND _NBL_DXC_CT_WRAPPER_COMPILE_COMMAND_ "${_TMP_CLEAN_ENV_}\"${DXC_EXECUTABLE}\" -HV 2021 -T lib_6_7 -I\"${_NBL_DXC_CT_INCLUDE_ROOT_}\" -Zi -Fo \"${_NBL_DXC_CT_CURRENT_OUTPUT_FILEPATH_}\" \"${_SHADER_FILE_PATH_}\"")
643-
set(_NBL_DXC_CT_CURRENT_SHADER_COMPILE_FILEPATH_ "${_NBL_DXC_CT_CURRENT_OUTPUT_BIN_DIR_}/compile.cmd")
644-
file(WRITE "${_NBL_DXC_CT_CURRENT_SHADER_COMPILE_FILEPATH_}" "${_NBL_DXC_CT_WRAPPER_COMPILE_COMMAND_}")
645-
646-
unset(_NBL_DXC_CT_WRAPPER_COMPILE_COMMAND_)
647-
unset(_TMP_CLEAN_ENV_)
648-
649-
if(_NBL_DXC_COMPILE_TESTS_ENABLE_CMAKE_LOG_)
650-
message("${_NBL_DXC_CT_PREFIX_CMAKE_LOG_DEBUG_} adding _NBL_DXC_CT_CURRENT_OUTPUT_FILEPATH_ = '${_NBL_DXC_CT_CURRENT_OUTPUT_FILEPATH_}' as OUTPUT of DXC CT target")
651-
endif()
652-
653-
###############################################################
654-
# scans include files of particular hlsl file to compile by DXC
655-
# performs validation of include files and adds them as DEPENDS
656-
# of custom command to keep track of modifications of any
657-
# dependency file
658-
#
659-
# TODO: add recursive scanning of ALL includes, right now it
660-
# doesn't scan recursivly but sinks only with include depth = 1
661-
###############################################################
662-
663-
set(_NBL_DXC_CT_CURRENT_ROOT_COMPILE_FILE_ISSUER_ "${_SHADER_FILE_PATH_}")
664-
list(APPEND _TMP_CURRENT_DEPS_LIST_ "${_NBL_DXC_CT_CURRENT_ROOT_COMPILE_FILE_ISSUER_}")
665-
file(STRINGS "${_NBL_DXC_CT_CURRENT_ROOT_COMPILE_FILE_ISSUER_}" _NBL_DXC_CT_INPUT_SCAN_INCLUDE_LINES_ REGEX "#include <|#include \"")
662+
set(_NBL_DXC_CT_CURRENT_ROOT_COMPILE_FILE_ISSUER_ "${_SHADER_FILE_PATH_}")
663+
list(APPEND _TMP_CURRENT_DEPS_LIST_ "${_NBL_DXC_CT_CURRENT_ROOT_COMPILE_FILE_ISSUER_}")
664+
file(STRINGS "${_NBL_DXC_CT_CURRENT_ROOT_COMPILE_FILE_ISSUER_}" _NBL_DXC_CT_INPUT_SCAN_INCLUDE_LINES_ REGEX "#include <|#include \"")
666665

667-
foreach(_NBL_DXC_CT_CURRENT_INPUT_SCAN_LINE_ IN LISTS _NBL_DXC_CT_INPUT_SCAN_INCLUDE_LINES_)
668-
string(REGEX MATCH "<.*>|\".*\"" _TMP_INCLUDE_WITH_SHEATH_CHARS_ "${_NBL_DXC_CT_CURRENT_INPUT_SCAN_LINE_}")
669-
string(REGEX REPLACE <|>|\" "" _TMP_INCLUDE_WITHOUT_SHEATH_CHARS_ "${_TMP_INCLUDE_WITH_SHEATH_CHARS_}")
670-
671-
set(_NBL_DXC_CT_CURRENT_HANDLED_INCLUDE_PATH_ "${_NBL_DXC_CT_INCLUDE_ROOT_}/${_TMP_INCLUDE_WITHOUT_SHEATH_CHARS_}")
672-
673-
if(NOT EXISTS "${_NBL_DXC_CT_CURRENT_HANDLED_INCLUDE_PATH_}")
674-
# NOTE: this won't work for shaders included that are registered on fly by asset manager, but let's assume we won't test shaders including another files stored in virtual file system
675-
message(FATAL_ERROR "${_NBL_DXC_CT_PREFIX_CMAKE_LOG_DEBUG_} File '${_NBL_DXC_CT_CURRENT_HANDLED_INCLUDE_PATH_}' included by '${_NBL_DXC_CT_CURRENT_ROOT_COMPILE_FILE_ISSUER_}' doesn't exist!")
676-
endif()
677-
678-
list(APPEND _TMP_CURRENT_DEPS_LIST_ "${_NBL_DXC_CT_CURRENT_HANDLED_INCLUDE_PATH_}") # add scanned include files as DEPENDS of a add_custom_command
679-
endforeach()
680-
681-
list(APPEND _NBL_DXC_CT_BIN_OUTPUTS_ "${_NBL_DXC_CT_CURRENT_OUTPUT_FILEPATH_}")
666+
foreach(_NBL_DXC_CT_CURRENT_INPUT_SCAN_LINE_ IN LISTS _NBL_DXC_CT_INPUT_SCAN_INCLUDE_LINES_)
667+
string(REGEX MATCH "<.*>|\".*\"" _TMP_INCLUDE_WITH_SHEATH_CHARS_ "${_NBL_DXC_CT_CURRENT_INPUT_SCAN_LINE_}")
668+
string(REGEX REPLACE <|>|\" "" _TMP_INCLUDE_WITHOUT_SHEATH_CHARS_ "${_TMP_INCLUDE_WITH_SHEATH_CHARS_}")
669+
670+
set(_NBL_DXC_CT_CURRENT_HANDLED_INCLUDE_PATH_ "${_NBL_DXC_CT_INCLUDE_ROOT_}/${_TMP_INCLUDE_WITHOUT_SHEATH_CHARS_}")
682671

683-
add_custom_command(
684-
OUTPUT "${_NBL_DXC_CT_CURRENT_OUTPUT_FILEPATH_}"
685-
COMMAND "${_NBL_DXC_CT_CURRENT_SHADER_COMPILE_FILEPATH_}"
686-
DEPENDS ${_TMP_CURRENT_DEPS_LIST_}
687-
WORKING_DIRECTORY "${_NBL_DXC_CT_CURRENT_OUTPUT_BIN_DIR_}"
688-
USES_TERMINAL
689-
VERBATIM
690-
)
672+
if(NOT EXISTS "${_NBL_DXC_CT_CURRENT_HANDLED_INCLUDE_PATH_}")
673+
# NOTE: this won't work for shaders included that are registered on fly by asset manager, but let's assume we won't test shaders including another files stored in virtual file system
674+
message(FATAL_ERROR "${_NBL_DXC_CT_PREFIX_CMAKE_LOG_DEBUG_} File '${_NBL_DXC_CT_CURRENT_HANDLED_INCLUDE_PATH_}' included by '${_NBL_DXC_CT_CURRENT_ROOT_COMPILE_FILE_ISSUER_}' doesn't exist!")
675+
endif()
691676

692-
unset(_NBL_DXC_CT_CURRENT_OUTPUT_FILEPATH_)
693-
unset(_NBL_DXC_CT_CURRENT_SHADER_COMPILE_FILEPATH_)
694-
unset(_TMP_CURRENT_DEPS_LIST_)
677+
list(APPEND _TMP_CURRENT_DEPS_LIST_ "${_NBL_DXC_CT_CURRENT_HANDLED_INCLUDE_PATH_}") # add scanned include files as DEPENDS of a add_custom_command
695678
endforeach()
696-
697-
add_custom_target(HLSL_NABLA_COMPILE_TEST DEPENDS ${_NBL_DXC_CT_BIN_OUTPUTS_}
698-
COMMENT "${CMAKE_COMMAND}" -E echo "Launching Nabla HLSL compile test..."
699-
)
700679

701-
add_dependencies(HLSL_NABLA_COMPILE_TEST dxc)
680+
list(APPEND _NBL_DXC_CT_BIN_OUTPUTS_ "${_NBL_DXC_CT_CURRENT_OUTPUT_FILEPATH_}")
702681

703-
unset(_NBL_DXC_CT_BIN_OUTPUTS_)
704-
unset(_NBL_DXC_CT_BINARY_BIN_)
705-
unset(_NBL_DXC_CT_SHADER_FILES_)
706-
unset(_NBL_DXC_CT_INCLUDE_ROOT_)
707-
endif()
682+
add_custom_command(
683+
OUTPUT "${_NBL_DXC_CT_CURRENT_OUTPUT_FILEPATH_}"
684+
COMMAND "${_NBL_DXC_CT_CURRENT_SHADER_COMPILE_FILEPATH_}"
685+
DEPENDS ${_TMP_CURRENT_DEPS_LIST_}
686+
WORKING_DIRECTORY "${_NBL_DXC_CT_CURRENT_OUTPUT_BIN_DIR_}"
687+
USES_TERMINAL
688+
VERBATIM
689+
)
690+
691+
unset(_NBL_DXC_CT_CURRENT_OUTPUT_FILEPATH_)
692+
unset(_NBL_DXC_CT_CURRENT_SHADER_COMPILE_FILEPATH_)
693+
unset(_TMP_CURRENT_DEPS_LIST_)
694+
endforeach()
695+
696+
add_custom_target(HLSL_NABLA_COMPILE_TEST DEPENDS ${_NBL_DXC_CT_BIN_OUTPUTS_}
697+
COMMENT "${CMAKE_COMMAND}" -E echo "Launching Nabla HLSL compile test..."
698+
)
699+
700+
add_dependencies(HLSL_NABLA_COMPILE_TEST dxc)
708701

702+
unset(_NBL_DXC_CT_BIN_OUTPUTS_)
703+
unset(_NBL_DXC_CT_BINARY_BIN_)
704+
unset(_NBL_DXC_CT_SHADER_FILES_)
705+
unset(_NBL_DXC_CT_INCLUDE_ROOT_)
709706
endif()
710707

711708
# Linux Display Systems

0 commit comments

Comments
 (0)