From a6ebd017c51e5687fd040aaa7a8623c9ee57417f Mon Sep 17 00:00:00 2001 From: Steven Perron Date: Thu, 10 Oct 2024 08:24:56 -0400 Subject: [PATCH] Enable resource directory for DXC. --- tools/clang/lib/Frontend/InitHeaderSearch.cpp | 7 ++++++- tools/clang/tools/dxcompiler/dxcfilesystem.cpp | 6 ++++++ tools/clang/tools/dxcompiler/dxcompilerobj.cpp | 4 +++- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/tools/clang/lib/Frontend/InitHeaderSearch.cpp b/tools/clang/lib/Frontend/InitHeaderSearch.cpp index 5bda990c7e..3861239822 100644 --- a/tools/clang/lib/Frontend/InitHeaderSearch.cpp +++ b/tools/clang/lib/Frontend/InitHeaderSearch.cpp @@ -442,7 +442,12 @@ void InitHeaderSearch::AddDefaultIncludePaths(const LangOptions &Lang, const llvm::Triple &triple, const HeaderSearchOptions &HSOpts) { #if 1 // HLSL Change Starts - return; + if (HSOpts.UseBuiltinIncludes) { + SmallString<128> P = StringRef(HSOpts.ResourceDir); + llvm::sys::path::append(P, "include"); + AddUnmappedPath(P, Angled, false); + } + return; #else // NB: This code path is going away. All of the logic is moving into the // driver which has the information necessary to do target-specific diff --git a/tools/clang/tools/dxcompiler/dxcfilesystem.cpp b/tools/clang/tools/dxcompiler/dxcfilesystem.cpp index b2e38fe2e0..19209df059 100644 --- a/tools/clang/tools/dxcompiler/dxcfilesystem.cpp +++ b/tools/clang/tools/dxcompiler/dxcfilesystem.cpp @@ -21,6 +21,7 @@ #include "dxc/Support/Unicode.h" #include "dxc/Support/dxcfilesystem.h" #include "clang/Frontend/CompilerInstance.h" +#include "llvm/Support/Path.h" #ifndef _WIN32 #include @@ -395,6 +396,11 @@ class DxcArgsFileSystemImpl : public DxcArgsFileSystem { m_searchEntries.emplace_back(std::move(ws)); } } + if (compiler.getHeaderSearchOpts().UseBuiltinIncludes) { + SmallString<128> P = StringRef(compiler.getHeaderSearchOpts().ResourceDir); + llvm::sys::path::append(P, "include"); + m_searchEntries.emplace_back(Unicode::UTF8ToWideStringOrThrow(P.c_str())); + } } HRESULT RegisterOutputStream(LPCWSTR pName, IStream *pStream) override { diff --git a/tools/clang/tools/dxcompiler/dxcompilerobj.cpp b/tools/clang/tools/dxcompiler/dxcompilerobj.cpp index c1c844d4be..95d2827abe 100644 --- a/tools/clang/tools/dxcompiler/dxcompilerobj.cpp +++ b/tools/clang/tools/dxcompiler/dxcompilerobj.cpp @@ -1404,7 +1404,9 @@ class DxcCompiler : public IDxcCompiler3, // Pick additional arguments. clang::HeaderSearchOptions &HSOpts = compiler.getHeaderSearchOpts(); - HSOpts.UseBuiltinIncludes = 0; + HSOpts.UseBuiltinIncludes = true; + HSOpts.ResourceDir = + clang::CompilerInvocation::GetResourcesPath("Hoping this is not needed on any of our platforms", nullptr); // Consider: should we force-include '.' if the source file is relative? for (const llvm::opt::Arg *A : Opts.Args.filtered(options::OPT_I)) { const bool IsFrameworkFalse = false;