From b57bfb771a16d28968a1883ace276eed78fda07f Mon Sep 17 00:00:00 2001 From: LLVM Packaging Team Date: Fri, 4 Nov 2022 18:36:56 +0000 Subject: [PATCH] wasm-sysroot-usr =================================================================== Gbp-Pq: Topic wasm Gbp-Pq: Name wasm-sysroot-usr.diff --- clang/lib/Driver/ToolChains/WebAssembly.cpp | 22 +++++++++++++++++---- clang/lib/Driver/ToolChains/WebAssembly.h | 2 ++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/clang/lib/Driver/ToolChains/WebAssembly.cpp b/clang/lib/Driver/ToolChains/WebAssembly.cpp index 5bffc0f7ce..239b61e30f 100644 --- a/clang/lib/Driver/ToolChains/WebAssembly.cpp +++ b/clang/lib/Driver/ToolChains/WebAssembly.cpp @@ -16,6 +16,7 @@ #include "clang/Driver/Options.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/Path.h" +#include "llvm/Support/VirtualFileSystem.h" #include "llvm/Option/ArgList.h" using namespace clang::driver; @@ -172,7 +173,7 @@ WebAssembly::WebAssembly(const Driver &D, const llvm::Triple &Triple, getProgramPaths().push_back(getDriver().getInstalledDir()); - auto SysRoot = getDriver().SysRoot; + std::string SysRoot = computeSysRoot(); if (getTriple().getOS() == llvm::Triple::UnknownOS) { // Theoretically an "unknown" OS should mean no standard libraries, however // it could also mean that a custom set of libraries is in use, so just add @@ -396,6 +397,7 @@ void WebAssembly::AddClangSystemIncludeArgs(const ArgList &DriverArgs, return; const Driver &D = getDriver(); + std::string SysRoot = computeSysRoot(); if (!DriverArgs.hasArg(options::OPT_nobuiltininc)) { SmallString<128> P(D.ResourceDir); @@ -421,10 +423,10 @@ void WebAssembly::AddClangSystemIncludeArgs(const ArgList &DriverArgs, if (getTriple().getOS() != llvm::Triple::UnknownOS) { const std::string MultiarchTriple = - getMultiarchTriple(D, getTriple(), D.SysRoot); - addSystemInclude(DriverArgs, CC1Args, D.SysRoot + "/include/" + MultiarchTriple); + getMultiarchTriple(D, getTriple(), SysRoot); + addSystemInclude(DriverArgs, CC1Args, SysRoot + "/include/" + MultiarchTriple); } - addSystemInclude(DriverArgs, CC1Args, D.SysRoot + "/include"); + addSystemInclude(DriverArgs, CC1Args, SysRoot + "/include"); } void WebAssembly::AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs, @@ -467,3 +469,15 @@ SanitizerMask WebAssembly::getSupportedSanitizers() const { Tool *WebAssembly::buildLinker() const { return new tools::wasm::Linker(*this); } + +std::string WebAssembly::computeSysRoot() const { + if (!getDriver().SysRoot.empty()) + return getDriver().SysRoot; + + std::string Path = "/usr"; + if (getVFS().exists(Path)) + return Path; + + return std::string(); +} + diff --git a/clang/lib/Driver/ToolChains/WebAssembly.h b/clang/lib/Driver/ToolChains/WebAssembly.h index a73edce87e..fe7a428d41 100644 --- a/clang/lib/Driver/ToolChains/WebAssembly.h +++ b/clang/lib/Driver/ToolChains/WebAssembly.h @@ -80,6 +80,8 @@ private: std::string getMultiarchTriple(const Driver &D, const llvm::Triple &TargetTriple, StringRef SysRoot) const override; + + std::string computeSysRoot() const override; }; } // end namespace toolchains -- 2.30.2