if (NOT DEFINED SPIRV_DIS_EXE) message(FATAL_ERROR "SPIRV_DIS_EXE is not defined.") endif() if (NOT DEFINED NSC_RELEASE_BUILD_INFO) message(FATAL_ERROR "NSC_RELEASE_BUILD_INFO is not defined.") endif() if (NOT DEFINED NSC_RELWITHDEBINFO_BUILD_INFO) message(FATAL_ERROR "NSC_RELWITHDEBINFO_BUILD_INFO is not defined.") endif() if (NOT DEFINED NSC_DEBUG_BUILD_INFO) message(FATAL_ERROR "NSC_DEBUG_BUILD_INFO is not defined.") endif() if (NOT DEFINED OUTPUT_CONFIG_FILE) message(FATAL_ERROR "OUTPUT_CONFIG_FILE is not defined.") endif() function(GET_HASH MODULE BUILD_INFO_JSON OUT_VAR) string(JSON MODULE_JSON ERROR_VARIABLE JSON_ERROR GET "${BUILD_INFO_JSON}" "modules") if (JSON_ERROR) message(FATAL_ERROR "JSON_ERROR: ${JSON_ERROR}") endif() string(JSON MODULE_HASH ERROR_VARIABLE JSON_ERROR GET "${MODULE_JSON}" "${MODULE}") if (JSON_ERROR) message(FATAL_ERROR "JSON_ERROR: ${JSON_ERROR}") endif() string(JSON HASH ERROR_VARIABLE JSON_ERROR GET "${MODULE_HASH}" "commitHash") if (JSON_ERROR) message(FATAL_ERROR "JSON_ERROR: ${JSON_ERROR}") endif() set("${OUT_VAR}" "${HASH}" PARENT_SCOPE) endfunction() set(NABLA_REPO_URL "https://github.com/Devsh-Graphics-Programming/Nabla") set(DXC_REPO_URL "https://github.com/Devsh-Graphics-Programming/DirectXShaderCompiler") function(NBL_CONFIGURE_COMPILER _CONFIG_ CONFIG_CONTENT) set(BUILD_INFO_FILE ${NSC_${_CONFIG_}_BUILD_INFO}) message(STATUS "Configuring \"${BUILD_INFO_FILE}\"..") if (NOT EXISTS "${BUILD_INFO_FILE}") message(STATUS "${_CONFIG_} compiler variant will not get created because build info file does not exist!") return() endif() file(READ "${BUILD_INFO_FILE}" BUILD_INFO_JSON) # module hashes GET_HASH("nabla" "${BUILD_INFO_JSON}" NABLA_COMMIT_HASH) GET_HASH("dxc" "${BUILD_INFO_JSON}" DXC_COMMIT_HASH) # exe string(JSON EXE_PATH ERROR_VARIABLE JSON_ERROR GET "${BUILD_INFO_JSON}" "exe.path") if (JSON_ERROR) message(FATAL_ERROR "JSON_ERROR: ${JSON_ERROR}") endif() string(JSON EXE_TIMESTAMP_DATE ERROR_VARIABLE JSON_ERROR GET "${BUILD_INFO_JSON}" "exe.timestamp.date") if (JSON_ERROR) message(FATAL_ERROR "JSON_ERROR: ${JSON_ERROR}") endif() string(JSON EXE_TIMESTAMP_TIME ERROR_VARIABLE JSON_ERROR GET "${BUILD_INFO_JSON}" "exe.timestamp.time") if (JSON_ERROR) message(FATAL_ERROR "JSON_ERROR: ${JSON_ERROR}") endif() string(TOLOWER "${_CONFIG_}" _L_CONFIG_) set(CE_COMPILER_CONTENT [=[ compiler.nsc_@_L_CONFIG_@_upstream.exe=@EXE_PATH@ compiler.nsc_@_L_CONFIG_@_upstream.name=NSC (@_L_CONFIG_@) compiler.nsc_@_L_CONFIG_@_upstream.notification=The NSC (@_L_CONFIG_@) has been compiled from the following Nabla commit and DXC commit. @BUILD_INFO_HTML@ compiler.nsc_@_L_CONFIG_@_upstream.supportsExecute=false compiler.nsc_@_L_CONFIG_@_upstream.options= compiler.nsc_@_L_CONFIG_@_upstream.disassemblerPath=@SPIRV_DIS_EXE@ compiler.nsc_@_L_CONFIG_@_upstream.demangler= ]=] ) string(REPLACE "\n" "
" BUILD_INFO_HTML "${BUILD_INFO_JSON}") string(PREPEND BUILD_INFO_HTML "

Build info:
") string(CONFIGURE "${CE_COMPILER_CONTENT}" CE_COMPILER_CONTENT @ONLY) string(APPEND CONFIG_CONTENT "${CE_COMPILER_CONTENT}") set(CONFIG_CONTENT "${CONFIG_CONTENT}" PARENT_SCOPE) list(APPEND NSC_COMPILERS "nsc_${_L_CONFIG_}_upstream") set(NSC_COMPILERS "${NSC_COMPILERS}" PARENT_SCOPE) message(STATUS "OK! Target CT \"${EXE_PATH}\" configured.") endfunction() NBL_CONFIGURE_COMPILER(RELEASE "${CONFIG_CONTENT}" "${NSC_COMPILERS}") NBL_CONFIGURE_COMPILER(RELWITHDEBINFO "${CONFIG_CONTENT}" "${NSC_COMPILERS}") NBL_CONFIGURE_COMPILER(DEBUG "${CONFIG_CONTENT}" "${NSC_COMPILERS}") string(REPLACE ";" ":" NSC_COMPILERS "${NSC_COMPILERS}") set(FINAL_CONFIG_CONTENT [=[ compilers=&dxc defaultCompiler=nsc_release_upstream supportsBinary=true supportsBinaryObject=true compilerType=nsc-spirv needsMulti=false supportsLibraryCodeFilter=true disassemblerPath=@SPIRV_DIS_EXE@ demangler= group.dxc.compilers=@NSC_COMPILERS@ group.dxc.includeFlag=-I group.dxc.versionFlag=--version group.dxc.groupName=NSC compilers ]=] ) if(NSC_COMPILERS) string(CONFIGURE "${FINAL_CONFIG_CONTENT}" FINAL_CONFIG_CONTENT @ONLY) string(APPEND FINAL_CONFIG_CONTENT "${CONFIG_CONTENT}") else() message(FATAL_ERROR "No compilers, internal error!") endif() file(WRITE "${OUTPUT_CONFIG_FILE}" "${FINAL_CONFIG_CONTENT}") message(STATUS "Compiler Explorer configuration written to: ${OUTPUT_CONFIG_FILE}")