option(NBL_LLVM_ENABLE_ASSERTIONS "LLVM_ENABLE_ASSERTIONS" ON) list(APPEND NBL_DXC_CMAKE_OPTIONS "-DLLVM_ENABLE_ASSERTIONS:BOOL=${NBL_LLVM_ENABLE_ASSERTIONS}") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DHLSL_OPTIONAL_PROJS_IN_DEFAULT:BOOL=OFF") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DHLSL_ENABLE_ANALYZE:BOOL=OFF") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DHLSL_OFFICIAL_BUILD:BOOL=OFF") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DHLSL_ENABLE_FIXED_VER:BOOL=OFF") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DHLSL_FIXED_VERSION_LOCATION:STRING=") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DHLSL_BUILD_DXILCONV:BOOL=ON") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DCLANG_VENDOR:STRING=") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DENABLE_SPIRV_CODEGEN:BOOL=ON") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DSPIRV_BUILD_TESTS:BOOL=OFF") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DCLANG_ENABLE_ARCMT:BOOL=OFF") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DCLANG_ENABLE_STATIC_ANALYZER:BOOL=OFF") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DCLANG_INCLUDE_TESTS:BOOL=Off") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DLLVM_INCLUDE_TESTS:BOOL=Off") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DHLSL_INCLUDE_TESTS:BOOL=OFF") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DLLVM_INCLUDE_UTILS:BOOL=OFF") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DLLVM_TARGETS_TO_BUILD:STRING=None") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DLLVM_INCLUDE_DOCS:BOOL=OFF") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DLLVM_INCLUDE_TESTS:BOOL=OFF") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DLLVM_INCLUDE_EXAMPLES:BOOL=OFF") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DLIBCLANG_BUILD_STATIC:BOOL=ON") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DLLVM_OPTIMIZED_TABLEGEN:BOOL=OFF") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DLLVM_REQUIRES_EH:BOOL=ON") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DLLVM_APPEND_VC_REV:BOOL=ON") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DLLVM_ENABLE_RTTI:BOOL=ON") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DLLVM_ENABLE_EH:BOOL=ON") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DLLVM_DEFAULT_TARGET_TRIPLE:STING=dxil-ms-dx") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DCLANG_BUILD_EXAMPLES:BOOL=OFF") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DLLVM_REQUIRES_RTTI:BOOL=ON") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DCLANG_CL:BOOL=OFF") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DLLVM_ENABLE_WERROR:BOOL=OFF") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DSPIRV_WERROR:BOOL=OFF") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DDXC_BUILD_ARCH:STRING=x64") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DSPIRV_HEADERS_SKIP_INSTALL:BOOL=ON") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DSPIRV_HEADERS_SKIP_EXAMPLES:BOOL=ON") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DSKIP_SPIRV_TOOLS_INSTALL:BOOL=ON") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DSPIRV_SKIP_TESTS:BOOL=ON") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DSPIRV_SKIP_EXECUTABLES:BOOL=ON") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DHLSL_ENABLE_DEBUG_ITERATORS:BOOL=ON") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DDXC_SPIRV_TOOLS_DIR=${DXC_SPIRV_TOOLS_DIR}") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DDXC_SPIRV_HEADERS_DIR=${DXC_SPIRV_HEADERS_DIR}") list(APPEND NBL_DXC_CMAKE_OPTIONS "-DDXC_ENABLE_ETW=OFF") if(NOT NBL_IS_MULTI_CONFIG) list(APPEND NBL_DXC_CMAKE_OPTIONS "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}") endif() #if(NBL_FORCE_RELEASE_3RDPARTY) # priority over RWDI # NBL_EXT_P_APPEND_COMPILE_OPTIONS(NBL_DXC_CMAKE_OPTIONS Release Release Release) #elseif(NBL_FORCE_RELWITHDEBINFO_3RDPARTY) # NBL_EXT_P_APPEND_COMPILE_OPTIONS(NBL_DXC_CMAKE_OPTIONS RelWithDebInfo RelWithDebInfo RelWithDebInfo) #else() # NBL_EXT_P_APPEND_COMPILE_OPTIONS(NBL_DXC_CMAKE_OPTIONS Release RelWithDebInfo Debug) #endif() #list(TRANSFORM NBL_DXC_CMAKE_OPTIONS REPLACE "/fp:fast" "/fp:precise") if(WIN32) if(NOT DEFINED HLSL_AUTOCRLF) list(APPEND NBL_DXC_CMAKE_OPTIONS "-DHLSL_AUTOCRLF:BOOL=ON") else() list(APPEND NBL_DXC_CMAKE_OPTIONS "-DHLSL_AUTOCRLF:BOOL=${HLSL_AUTOCRLF}") endif() endif() list(APPEND NBL_DXC_CMAKE_OPTIONS "-DCMAKE_MSVC_RUNTIME_LIBRARY:STATIC=MultiThreaded$<$:Debug>$<$:DLL>") # perform DXC compile standard requirement test set(CMAKE_CXX_STANDARD_REQUIRED ON) # TODO: Don't they support a higher standard now, like 17 ? set(CMAKE_CXX_STANDARD 11) # compiler must support exactly c++11 or c++14 standard in order to be able to build DXC libraries try_compile(DXC_COMPILE_TEST_PASSED SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/test/test.cpp" OUTPUT_VARIABLE DXC_COMPILE_RET_VAL CXX_STANDARD ${CMAKE_CXX_STANDARD} CXX_STANDARD_REQUIRED ON ) if(DXC_COMPILE_TEST_PASSED) set(DXC_COMPILE_TEST_DONE ON CACHE BOOL "") else() message(FATAL_ERROR "${DXC_COMPILE_RET_VAL}") endif() set(DXC_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/build" CACHE INTERNAL "") if(NOT CMAKE_GENERATOR MATCHES "Ninja*") list(APPEND NBL_DXC_CMAKE_OPTIONS -Ax64) endif() if(CMAKE_GENERATOR_TOOLSET) list(APPEND NBL_DXC_CMAKE_OPTIONS -T "${CMAKE_GENERATOR_TOOLSET}") endif() if(CMAKE_TOOLCHAIN_FILE) list(APPEND NBL_DXC_CMAKE_OPTIONS "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}") endif() execute_process(COMMAND "${CMAKE_COMMAND}" -C "${CMAKE_CURRENT_SOURCE_DIR}/dxc/cmake/caches/PredefinedParams.cmake" -S "${CMAKE_CURRENT_SOURCE_DIR}/dxc" -B "${DXC_BUILD_DIR}" -G "${CMAKE_GENERATOR}" ${NBL_DXC_CMAKE_OPTIONS} RESULT_VARIABLE DXC_CMAKE_RESULT OUTPUT_VARIABLE DXC_CMAKE_STREAM_PIPE ) if(NOT "${DXC_CMAKE_RESULT}" STREQUAL "0") message(FATAL_ERROR "${DXC_CMAKE_STREAM_PIPE}") endif() set(CMAKE_CXX_STANDARD 20) # it's mandatory unset(CMAKE_CXX_STANDARD_REQUIRED) if(NBL_IS_MULTI_CONFIG) include("${DXC_BUILD_DIR}/nbl/generate/dxc/config/debug.cmake") include("${DXC_BUILD_DIR}/nbl/generate/dxc/config/release.cmake") else() if(CMAKE_BUILD_TYPE STREQUAL "Debug") include("${DXC_BUILD_DIR}/nbl/generate/dxc/config/debug.cmake") else() include("${DXC_BUILD_DIR}/nbl/generate/dxc/config/release.cmake") endif() endif() set(DXC_INCLUDE_DIRECTORIES $,${NBL_DXC_DEBUG_INCLUDE_DIRECTORIES},${NBL_DXC_RELEASE_INCLUDE_DIRECTORIES}> CACHE INTERNAL "" FORCE) set(DXC_LIB $,${NBL_DXC_DEBUG_LIB},${NBL_DXC_RELEASE_LIB}> CACHE INTERNAL "" FORCE) set(DXC_DLL $,${NBL_DXC_DEBUG_DLL},${NBL_DXC_RELEASE_DLL}> CACHE INTERNAL "" FORCE) if(NBL_IS_MULTI_CONFIG) cmake_path(GET NBL_DXC_DEBUG_DLL FILENAME _NBL_DXC_DEBUG_DLL_NAME_) cmake_path(GET NBL_DXC_RELEASE_DLL FILENAME _NBL_DXC_RELEASE_DLL_NAME_) else() if(CMAKE_BUILD_TYPE STREQUAL "Debug") cmake_path(GET NBL_DXC_DEBUG_DLL FILENAME _NBL_DXC_DEBUG_DLL_NAME_) else() cmake_path(GET NBL_DXC_RELEASE_DLL FILENAME _NBL_DXC_RELEASE_DLL_NAME_) endif() endif() set(DXC_DLL_NAME $,${_NBL_DXC_DEBUG_DLL_NAME_},${_NBL_DXC_RELEASE_DLL_NAME_}> CACHE INTERNAL "" FORCE) set(DXC_COMPILE_FLAGS_RELEASE "") set(DXC_COMPILE_FLAGS_RWDI "") set(DXC_COMPILE_FLAGS_DEBUG "") set(DXC_COMPILE_FLAGS $<$:${DXC_COMPILE_FLAGS_RELEASE}>$<$:${DXC_COMPILE_FLAGS_DEBUG}>$<$:${DXC_COMPILE_FLAGS_RWDI}> CACHE INTERNAL "" FORCE) get_filename_component(_SPIRV_BR_BUNDLE_SEARCH_DIRECTORY_ "${DXC_SPIRV_HEADERS_DIR}/include" ABSOLUTE) get_filename_component(_SPIRV_BR_OUTPUT_DIRECTORY_SOURCE_ "${CMAKE_CURRENT_BINARY_DIR}/src" ABSOLUTE) get_filename_component(_SPIRV_BR_OUTPUT_DIRECTORY_HEADER_ "${CMAKE_CURRENT_BINARY_DIR}/include" ABSOLUTE) set(SPIRV_BUILTIN_RESOURCES_DIRECTORY_PATH "${_SPIRV_BR_BUNDLE_SEARCH_DIRECTORY_}/spirv" CACHE INTERNAL "" FORCE) if(NBL_EMBED_BUILTIN_RESOURCES) include("${NBL_ROOT_PATH}/src/nbl/builtin/utils.cmake") # SPIRV Header in builtin resources, nbl paths as aliases LIST_BUILTIN_RESOURCE(SPIRV_RESOURCES_TO_EMBED "unified1/spirv.h") LIST_BUILTIN_RESOURCE(SPIRV_RESOURCES_TO_EMBED "unified1/spirv.hpp") LIST_BUILTIN_RESOURCE(SPIRV_RESOURCES_TO_EMBED "unified1/GLSL.std.450.h") ADD_CUSTOM_BUILTIN_RESOURCES(spirvBuiltinResourceData SPIRV_RESOURCES_TO_EMBED "${_SPIRV_BR_BUNDLE_SEARCH_DIRECTORY_}" "spirv" "spirv::builtin" "${_SPIRV_BR_OUTPUT_DIRECTORY_HEADER_}" "${_SPIRV_BR_OUTPUT_DIRECTORY_SOURCE_}" "STATIC" "INTERNAL") endif()