@@ -1395,6 +1395,24 @@ namespace @IMPL_NAMESPACE@ {
13951395 list (APPEND DEPENDS_ON ${IMPL_DEPENDS} )
13961396 endif ()
13971397
1398+ function (ERROR_WHILE_PARSING_ITEM )
1399+ string (JSON ITEM GET "${IMPL_INPUTS} " ${INDEX} )
1400+ message (FATAL_ERROR
1401+ "While parsing ${IMPL_TARGET} 's NSC compile rule\n ${ITEM} \n "
1402+ ${ARGV}
1403+ )
1404+ endfunction ()
1405+
1406+ set (RULE_MODE compile)
1407+ string (JSON MODE_TYPE ERROR_VARIABLE MODE_ERROR TYPE "${IMPL_INPUTS} " ${INDEX} MODE)
1408+ if (NOT MODE_ERROR)
1409+ if (NOT MODE_TYPE STREQUAL "STRING" )
1410+ ERROR_WHILE_PARSING_ITEM ("MODE must be a string when present" )
1411+ endif ()
1412+ string (JSON RULE_MODE GET "${IMPL_INPUTS} " ${INDEX} MODE)
1413+ string (TOLOWER "${RULE_MODE} " RULE_MODE)
1414+ endif ()
1415+
13981416 set (HAS_CAPS FALSE )
13991417 set (CAPS_LENGTH 0)
14001418 string (JSON CAPS_TYPE ERROR_VARIABLE ERROR_VAR TYPE "${IMPL_INPUTS} " ${INDEX} CAPS)
@@ -1405,13 +1423,12 @@ namespace @IMPL_NAMESPACE@ {
14051423 endif ()
14061424 endif ()
14071425
1408- function (ERROR_WHILE_PARSING_ITEM )
1409- string (JSON ITEM GET "${IMPL_INPUTS} " ${INDEX} )
1410- message (FATAL_ERROR
1411- "While parsing ${IMPL_TARGET} 's NSC compile rule\n ${ITEM} \n "
1412- ${ARGV}
1413- )
1414- endfunction ()
1426+ if (NOT RULE_MODE MATCHES "^(compile|preprocess)$" )
1427+ ERROR_WHILE_PARSING_ITEM (
1428+ "Invalid MODE \" ${RULE_MODE} \"\n "
1429+ "Allowed modes are: compile, preprocess"
1430+ )
1431+ endif ()
14151432
14161433 set (CAP_NAMES "" )
14171434 set (CAP_TYPES "" )
@@ -1498,6 +1515,15 @@ namespace @IMPL_NAMESPACE@ {
14981515
14991516 set_property (TARGET ${IMPL_TARGET} APPEND PROPERTY NBL_CANONICAL_IDENTIFIERS "${NEW_CANONICAL_IDENTIFIER} " )
15001517
1518+ set (OUTPUT_EXT ".spv" )
1519+ set (OUTPUT_PREFIX "$<CONFIG >/" )
1520+ set (OUTPUT_GROUP_BY_CONFIG TRUE )
1521+ set (MODE_ARGS "" )
1522+ if (RULE_MODE STREQUAL "preprocess" )
1523+ set (OUTPUT_EXT ".preprocessed.hlsl" )
1524+ list (APPEND MODE_ARGS -P)
1525+ endif ()
1526+
15011527 set (HEADER_ITEM_VIEW [=[
15021528namespace @IMPL_NAMESPACE@ {
15031529 template<>
@@ -1506,8 +1532,8 @@ namespace @IMPL_NAMESPACE@ {
15061532 {
15071533 nbl::core::string retval = "@BASE_KEY@";
15081534@RETVAL_EVAL@
1509- retval += ".spv ";
1510- return "$<CONFIG>/ " + retval;
1535+ retval += "@OUTPUT_EXT@ ";
1536+ return "@OUTPUT_PREFIX@ " + retval;
15111537 }
15121538}
15131539
@@ -1532,27 +1558,29 @@ namespace @IMPL_NAMESPACE@ {
15321558 function (GENERATE_KEYS PREFIX CAP_INDEX CAPS_EVAL_PART )
15331559 if (NUM_CAPS EQUAL 0 OR CAP_INDEX EQUAL ${NUM_CAPS} )
15341560 # generate .config file
1535- set (FINAL_KEY "${BASE_KEY}${PREFIX} .spv" ) # always add ext even if its already there to make sure asset loader always is able to load as IShader
1561+ set (FINAL_KEY "${BASE_KEY}${PREFIX}${OUTPUT_EXT} " )
15361562 set (CONFIG_FILE_TARGET_OUTPUT "${IMPL_BINARY_DIR} /${FINAL_KEY} " )
15371563 set (CONFIG_FILE "${CONFIG_FILE_TARGET_OUTPUT} .config" )
15381564 set (CAPS_EVAL "${CAPS_EVAL_PART} " )
15391565 string (CONFIGURE "${DEVICE_CONFIG_VIEW} " CONFIG_CONTENT @ONLY)
15401566 file (WRITE "${CONFIG_FILE} " "${CONFIG_CONTENT} " )
15411567
15421568 # generate keys and commands for compiling shaders
1543- set (FINAL_KEY_REL_PATH "$< CONFIG >/ ${FINAL_KEY} " )
1569+ set (FINAL_KEY_REL_PATH "${OUTPUT_PREFIX} ${FINAL_KEY} " )
15441570 set (TARGET_OUTPUT "${IMPL_BINARY_DIR} /${FINAL_KEY_REL_PATH} " )
15451571 set (DEPFILE_PATH "${TARGET_OUTPUT} .d" )
15461572 set (NBL_NSC_LOG_PATH "${TARGET_OUTPUT} .log" )
15471573
15481574 set (NBL_NSC_DEPFILE_ARGS "" )
1549- if (NSC_USE_DEPFILE)
1575+ set (NBL_NSC_RULE_USE_DEPFILE ${NSC_USE_DEPFILE} )
1576+ if (NBL_NSC_RULE_USE_DEPFILE)
15501577 set (NBL_NSC_DEPFILE_ARGS -MD -MF "${DEPFILE_PATH} " )
15511578 endif ()
15521579
15531580 set (NBL_NSC_COMPILE_COMMAND
15541581 "$<TARGET_FILE :Nabla ::nsc >"
15551582 ${NBL_NSC_EXTRA_ARGS}
1583+ ${MODE_ARGS}
15561584 -Fc "${TARGET_OUTPUT} "
15571585 ${COMPILE_OPTIONS} ${REQUIRED_OPTIONS} ${IMPL_COMMON_OPTIONS}
15581586 ${NBL_NSC_DEPFILE_ARGS}
@@ -1562,7 +1590,7 @@ namespace @IMPL_NAMESPACE@ {
15621590 get_filename_component (NBL_NSC_INPUT_NAME "${TARGET_INPUT} " NAME )
15631591 get_filename_component (NBL_NSC_CONFIG_NAME "${CONFIG_FILE} " NAME )
15641592 set (NBL_NSC_BYPRODUCTS "${NBL_NSC_LOG_PATH} " )
1565- if (NSC_USE_DEPFILE )
1593+ if (NBL_NSC_RULE_USE_DEPFILE )
15661594 list (APPEND NBL_NSC_BYPRODUCTS "${DEPFILE_PATH} " )
15671595 endif ()
15681596
@@ -1582,12 +1610,12 @@ namespace @IMPL_NAMESPACE@ {
15821610 VERBATIM
15831611 COMMAND_EXPAND_LISTS
15841612 )
1585- if (NSC_USE_DEPFILE )
1613+ if (NBL_NSC_RULE_USE_DEPFILE )
15861614 list (APPEND NBL_NSC_CUSTOM_COMMAND_ARGS DEPFILE "${DEPFILE_PATH} " )
15871615 endif ()
15881616 add_custom_command (${NBL_NSC_CUSTOM_COMMAND_ARGS} )
15891617 set (NBL_NSC_OUT_FILES "${TARGET_OUTPUT} " "${NBL_NSC_LOG_PATH} " )
1590- if (NSC_USE_DEPFILE )
1618+ if (NBL_NSC_RULE_USE_DEPFILE )
15911619 list (APPEND NBL_NSC_OUT_FILES "${DEPFILE_PATH} " )
15921620 endif ()
15931621
@@ -1600,19 +1628,19 @@ namespace @IMPL_NAMESPACE@ {
16001628 HEADER_FILE_ONLY ON
16011629 VS_TOOL_OVERRIDE None
16021630 )
1603- if (CMAKE_CONFIGURATION_TYPES )
1631+ if (CMAKE_CONFIGURATION_TYPES AND OUTPUT_GROUP_BY_CONFIG )
16041632 foreach (_CFG IN LISTS CMAKE_CONFIGURATION_TYPES )
16051633 set (TARGET_OUTPUT_IDE "${IMPL_BINARY_DIR} /${_CFG} /${FINAL_KEY} " )
16061634 set (NBL_NSC_OUT_FILES_IDE "${TARGET_OUTPUT_IDE} " "${TARGET_OUTPUT_IDE} .log" )
1607- if (NSC_USE_DEPFILE )
1635+ if (NBL_NSC_RULE_USE_DEPFILE )
16081636 list (APPEND NBL_NSC_OUT_FILES_IDE "${TARGET_OUTPUT_IDE} .d" )
16091637 endif ()
16101638 source_group ("${OUT} /${_CFG} " FILES ${NBL_NSC_OUT_FILES_IDE} )
16111639 endforeach ()
16121640 else ()
16131641 set (TARGET_OUTPUT_IDE "${IMPL_BINARY_DIR} /${FINAL_KEY} " )
16141642 set (NBL_NSC_OUT_FILES_IDE "${TARGET_OUTPUT_IDE} " "${TARGET_OUTPUT_IDE} .log" )
1615- if (NSC_USE_DEPFILE )
1643+ if (NBL_NSC_RULE_USE_DEPFILE )
16161644 list (APPEND NBL_NSC_OUT_FILES_IDE "${TARGET_OUTPUT_IDE} .d" )
16171645 endif ()
16181646 source_group ("${OUT} " FILES ${NBL_NSC_OUT_FILES_IDE} )
0 commit comments