@@ -16,6 +16,34 @@ include_guard(GLOBAL)
1616
1717include (ProcessorCount )
1818
19+ # tmp for external projects, to be removed later when I get rid of them (dxc + jpeg currently)
20+ function (nbl_append_sanitize_address_cmake_options out_list )
21+ if (NOT NBL_SANITIZE_ADDRESS)
22+ return ()
23+ endif ()
24+
25+ if (MSVC )
26+ set (_NBL_ASAN_FLAG "/fsanitize=address" )
27+ else ()
28+ set (_NBL_ASAN_FLAG "-fsanitize=address" )
29+ set (_NBL_ASAN_LINK_SUFFIX " ${_NBL_ASAN_FLAG} " )
30+ endif ()
31+
32+ list (APPEND ${out_list}
33+ "-DCMAKE_C_FLAGS:STRING=${CMAKE_C_FLAGS} ${_NBL_ASAN_FLAG} "
34+ "-DCMAKE_CXX_FLAGS:STRING=${CMAKE_CXX_FLAGS} ${_NBL_ASAN_FLAG} "
35+ )
36+ if (DEFINED _NBL_ASAN_LINK_SUFFIX)
37+ list (APPEND ${out_list}
38+ "-DCMAKE_EXE_LINKER_FLAGS:STRING=${CMAKE_EXE_LINKER_FLAGS}${_NBL_ASAN_LINK_SUFFIX} "
39+ "-DCMAKE_SHARED_LINKER_FLAGS:STRING=${CMAKE_SHARED_LINKER_FLAGS}${_NBL_ASAN_LINK_SUFFIX} "
40+ )
41+ endif ()
42+ unset (_NBL_ASAN_FLAG)
43+ unset (_NBL_ASAN_LINK_SUFFIX)
44+ set (${out_list} "${${out_list} }" PARENT_SCOPE )
45+ endfunction ()
46+
1947# Macro creating project for an executable
2048# Project and target get its name from directory when this macro gets executed (truncating number in the beginning of the name and making all lower case)
2149# Created because of common cmake code for examples and tools
@@ -1142,6 +1170,7 @@ option(NSC_DEBUG_EDIF_SOURCE_BIT "Add \"-fspv-debug=source\" to NSC Debug CLI" O
11421170option (NSC_DEBUG_EDIF_LINE_BIT "Add \" -fspv-debug=line\" to NSC Debug CLI" OFF )
11431171option (NSC_DEBUG_EDIF_TOOL_BIT "Add \" -fspv-debug=tool\" to NSC Debug CLI" ON )
11441172option (NSC_DEBUG_EDIF_NON_SEMANTIC_BIT "Add \" -fspv-debug=vulkan-with-source\" to NSC Debug CLI" OFF )
1173+ option (NSC_USE_DEPFILE "Generate depfiles for NSC custom commands" ON )
11451174
11461175function (NBL_CREATE_NSC_COMPILE_RULES )
11471176 set (COMMENT "this code has been autogenerated with Nabla CMake NBL_CREATE_HLSL_COMPILE_RULES utility" )
@@ -1181,6 +1210,7 @@ struct DeviceConfigCaps
11811210 -fspv-target-env=vulkan1.3
11821211 -Wshadow
11831212 -Wconversion
1213+ -Wno-local-type-template-args
11841214 $<$<CONFIG :Debug >:-O0 >
11851215 $<$<CONFIG :Release >:-O3 >
11861216 $<$<CONFIG :RelWithDebInfo >:-O3 >
@@ -1208,6 +1238,7 @@ struct DeviceConfigCaps
12081238
12091239 if (NOT NBL_EMBED_BUILTIN_RESOURCES)
12101240 list (APPEND REQUIRED_OPTIONS
1241+ -no -nbl-builtins
12111242 -I "${NBL_ROOT_PATH} /include"
12121243 -I "${NBL_ROOT_PATH} /3rdparty/dxc/dxc/external/SPIRV-Headers/include"
12131244 -I "${NBL_ROOT_PATH} /3rdparty/boost/superproject/libs/preprocessor/include"
@@ -1216,9 +1247,20 @@ struct DeviceConfigCaps
12161247 endif ()
12171248
12181249 set (REQUIRED_SINGLE_ARGS TARGET BINARY_DIR OUTPUT_VAR INPUTS INCLUDE NAMESPACE MOUNT_POINT_DEFINE)
1219- cmake_parse_arguments (IMPL "" "${REQUIRED_SINGLE_ARGS} ;LINK_TO" "COMMON_OPTIONS;DEPENDS" ${ARGV} )
1250+ set (OPTIONAL_SINGLE_ARGS GLOB_DIR)
1251+ cmake_parse_arguments (IMPL "DISCARD_DEFAULT_GLOB" "${REQUIRED_SINGLE_ARGS} ;${OPTIONAL_SINGLE_ARGS} ;LINK_TO" "COMMON_OPTIONS;DEPENDS" ${ARGV} )
12201252 NBL_PARSE_REQUIRED (IMPL ${REQUIRED_SINGLE_ARGS} )
12211253
1254+ set (IMPL_HLSL_GLOB "" )
1255+ if (NOT IMPL_DISCARD_DEFAULT_GLOB)
1256+ set (GLOB_ROOT "${CMAKE_CURRENT_SOURCE_DIR} " )
1257+ if (IMPL_GLOB_DIR)
1258+ set (GLOB_ROOT "${IMPL_GLOB_DIR} " )
1259+ endif ()
1260+ get_filename_component (GLOB_ROOT "${GLOB_ROOT} " ABSOLUTE BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR} " )
1261+ file (GLOB_RECURSE IMPL_HLSL_GLOB CONFIGURE_DEPENDS "${GLOB_ROOT} /*.hlsl" )
1262+ endif ()
1263+
12221264 if (NOT TARGET ${IMPL_TARGET} )
12231265 add_library (${IMPL_TARGET} INTERFACE )
12241266 endif ()
@@ -1294,6 +1336,10 @@ namespace @IMPL_NAMESPACE@ {
12941336 list (APPEND MP_DEFINES ${IMPL_MOUNT_POINT_DEFINE} ="${IMPL_BINARY_DIR} " )
12951337 set_target_properties (${IMPL_TARGET} PROPERTIES NBL_MOUNT_POINT_DEFINES "${MP_DEFINES} " )
12961338
1339+ set (RTE "NSC Rules" )
1340+ set (IN "${RTE} /In" )
1341+ set (OUT "${RTE} /Out" )
1342+
12971343 string (JSON JSON_LENGTH LENGTH "${IMPL_INPUTS} " )
12981344 math (EXPR LAST_INDEX "${JSON_LENGTH} - 1" )
12991345
@@ -1480,38 +1526,80 @@ namespace @IMPL_NAMESPACE@ {
14801526 # generate keys and commands for compiling shaders
14811527 set (FINAL_KEY_REL_PATH "$<CONFIG >/${FINAL_KEY} " )
14821528 set (TARGET_OUTPUT "${IMPL_BINARY_DIR} /${FINAL_KEY_REL_PATH} " )
1529+ set (DEPFILE_PATH "${TARGET_OUTPUT} .d" )
1530+ set (NBL_NSC_LOG_PATH "${TARGET_OUTPUT} .log" )
1531+
1532+ set (NBL_NSC_DEPFILE_ARGS "" )
1533+ if (NSC_USE_DEPFILE)
1534+ set (NBL_NSC_DEPFILE_ARGS -MD -MF "${DEPFILE_PATH} " )
1535+ endif ()
14831536
14841537 set (NBL_NSC_COMPILE_COMMAND
14851538 "$<TARGET_FILE :nsc >"
14861539 -Fc "${TARGET_OUTPUT} "
14871540 ${COMPILE_OPTIONS} ${REQUIRED_OPTIONS} ${IMPL_COMMON_OPTIONS}
1541+ ${NBL_NSC_DEPFILE_ARGS}
14881542 "${CONFIG_FILE} "
14891543 )
14901544
1491- add_custom_command (OUTPUT "${TARGET_OUTPUT} "
1545+ get_filename_component (NBL_NSC_INPUT_NAME "${TARGET_INPUT} " NAME )
1546+ get_filename_component (NBL_NSC_CONFIG_NAME "${CONFIG_FILE} " NAME )
1547+ set (NBL_NSC_BYPRODUCTS "${NBL_NSC_LOG_PATH} " )
1548+ if (NSC_USE_DEPFILE)
1549+ list (APPEND NBL_NSC_BYPRODUCTS "${DEPFILE_PATH} " )
1550+ endif ()
1551+
1552+ set (NBL_NSC_CUSTOM_COMMAND_ARGS
1553+ OUTPUT "${TARGET_OUTPUT} "
1554+ BYPRODUCTS ${NBL_NSC_BYPRODUCTS}
14921555 COMMAND ${NBL_NSC_COMPILE_COMMAND}
14931556 DEPENDS ${DEPENDS_ON}
1494- COMMENT "Creating \" ${TARGET_OUTPUT} \" "
1557+ COMMENT "${NBL_NSC_CONFIG_NAME} ( ${NBL_NSC_INPUT_NAME} ) "
14951558 VERBATIM
14961559 COMMAND_EXPAND_LISTS
14971560 )
1498- set_source_files_properties ("${TARGET_OUTPUT} " PROPERTIES GENERATED TRUE )
1561+ if (NSC_USE_DEPFILE)
1562+ list (APPEND NBL_NSC_CUSTOM_COMMAND_ARGS DEPFILE "${DEPFILE_PATH} " )
1563+ endif ()
1564+ add_custom_command (${NBL_NSC_CUSTOM_COMMAND_ARGS} )
1565+ set (NBL_NSC_OUT_FILES "${TARGET_OUTPUT} " "${NBL_NSC_LOG_PATH} " )
1566+ if (NSC_USE_DEPFILE)
1567+ list (APPEND NBL_NSC_OUT_FILES "${DEPFILE_PATH} " )
1568+ endif ()
14991569
1500- set (HEADER_ONLY_LIKE "${CONFIG_FILE} " "${TARGET_INPUT} " "${TARGET_OUTPUT} " )
1570+ set_source_files_properties (${NBL_NSC_OUT_FILES} PROPERTIES GENERATED TRUE )
1571+
1572+ set (HEADER_ONLY_LIKE "${CONFIG_FILE} " "${TARGET_INPUT} " ${NBL_NSC_OUT_FILES} )
15011573 target_sources (${IMPL_TARGET} PRIVATE ${HEADER_ONLY_LIKE} )
15021574
15031575 set_source_files_properties (${HEADER_ONLY_LIKE} PROPERTIES
15041576 HEADER_FILE_ONLY ON
15051577 VS_TOOL_OVERRIDE None
15061578 )
1579+ if (CMAKE_CONFIGURATION_TYPES )
1580+ foreach (_CFG IN LISTS CMAKE_CONFIGURATION_TYPES )
1581+ set (TARGET_OUTPUT_IDE "${IMPL_BINARY_DIR} /${_CFG} /${FINAL_KEY} " )
1582+ set (NBL_NSC_OUT_FILES_IDE "${TARGET_OUTPUT_IDE} " "${TARGET_OUTPUT_IDE} .log" )
1583+ if (NSC_USE_DEPFILE)
1584+ list (APPEND NBL_NSC_OUT_FILES_IDE "${TARGET_OUTPUT_IDE} .d" )
1585+ endif ()
1586+ source_group ("${OUT} /${_CFG} " FILES ${NBL_NSC_OUT_FILES_IDE} )
1587+ endforeach ()
1588+ else ()
1589+ set (TARGET_OUTPUT_IDE "${IMPL_BINARY_DIR} /${FINAL_KEY} " )
1590+ set (NBL_NSC_OUT_FILES_IDE "${TARGET_OUTPUT_IDE} " "${TARGET_OUTPUT_IDE} .log" )
1591+ if (NSC_USE_DEPFILE)
1592+ list (APPEND NBL_NSC_OUT_FILES_IDE "${TARGET_OUTPUT_IDE} .d" )
1593+ endif ()
1594+ source_group ("${OUT} " FILES ${NBL_NSC_OUT_FILES_IDE} )
1595+ endif ()
15071596
15081597 set_source_files_properties ("${TARGET_OUTPUT} " PROPERTIES
15091598 NBL_SPIRV_REGISTERED_INPUT "${TARGET_INPUT} "
15101599 NBL_SPIRV_PERMUTATION_CONFIG "${CONFIG_FILE} "
15111600 NBL_SPIRV_BINARY_DIR "${IMPL_BINARY_DIR} "
15121601 NBL_SPIRV_ACCESS_KEY "${FINAL_KEY_REL_PATH} "
15131602 )
1514-
15151603 set_property (TARGET ${IMPL_TARGET} APPEND PROPERTY NBL_SPIRV_OUTPUTS "${TARGET_OUTPUT} " )
15161604 return ()
15171605 endif ()
@@ -1545,12 +1633,15 @@ namespace @IMPL_NAMESPACE@ {
15451633 list (APPEND KEYS ${ACCESS_KEY} )
15461634 endforeach ()
15471635
1548- set (RTE "NSC Rules" )
1549- set (IN "${RTE} /In" )
1550- set (OUT "${RTE} /Out" )
1551-
15521636 source_group ("${IN} " FILES ${CONFIGS} ${INPUTS} )
1553- source_group ("${OUT} " FILES ${SPIRVs} )
1637+ if (IMPL_HLSL_GLOB)
1638+ target_sources (${IMPL_TARGET} PRIVATE ${IMPL_HLSL_GLOB} )
1639+ set_source_files_properties (${IMPL_HLSL_GLOB} PROPERTIES
1640+ HEADER_FILE_ONLY ON
1641+ VS_TOOL_OVERRIDE None
1642+ )
1643+ source_group ("HLSL Files" FILES ${IMPL_HLSL_GLOB} )
1644+ endif ()
15541645
15551646 set (${IMPL_OUTPUT_VAR} ${KEYS} PARENT_SCOPE )
15561647endfunction ()
0 commit comments