Skip to content

Commit

Permalink
Support --sysroot= for ${arch}-windows-msvc targets
Browse files Browse the repository at this point in the history
I think it is possible to use the same rule for msvc targets with
--target= and --sysroot=

See Repository:
https://github.com/trcrsired/windows-msvc-sysroot

Add sysroot support for msvc

MSVC.cpp needs getDriver before using D

add stl in parser for -stdlib=

Add Vcruntime to runtime list and unwind list

MSVC add default runtime lib type and default unwind lib type

add a msvc sysroot test

use %S instead of /foo

Fix test for msvc-sysroot

Also add a pesudo implementation for WebAssembly and
maybe Microsoft STL could be ported to more targets in the future

Fix the toggle of wasm that prevents -stdlib=stl passed into

Avoid clang-formatting in MSVC.cpp

Add some comments to ToolChain

avoid indent the if block

Add back space before winsysroot line

use  instead of arch in the comment

remove FIXME for libc++ since we have added the logic here

Remove MSVC.h formatting

Remove default cases in WebAssembly

add back the empty line before the Sysroot line

fix msvc-sysroot typo for libc++ loongarch

Fix : missing in CST_Stl case
  • Loading branch information
trcrsired committed Jul 17, 2024
1 parent 21e6777 commit 0b98d15
Show file tree
Hide file tree
Showing 8 changed files with 279 additions and 5 deletions.
11 changes: 7 additions & 4 deletions clang/include/clang/Driver/ToolChain.h
Original file line number Diff line number Diff line change
Expand Up @@ -94,19 +94,22 @@ class ToolChain {
using path_list = SmallVector<std::string, 16>;

enum CXXStdlibType {
CST_Libcxx,
CST_Libstdcxx
CST_Libcxx, // LLVM libc++
CST_Libstdcxx, // GNU libstdc++
CST_Stl, // MSVC STL
};

enum RuntimeLibType {
RLT_CompilerRT,
RLT_Libgcc
RLT_Libgcc,
RLT_Vcruntime
};

enum UnwindLibType {
UNW_None,
UNW_CompilerRT,
UNW_Libgcc
UNW_Libgcc,
UNW_Vcruntime
};

enum class UnwindTableLevel {
Expand Down
10 changes: 10 additions & 0 deletions clang/lib/Driver/ToolChain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1101,6 +1101,8 @@ ToolChain::RuntimeLibType ToolChain::GetRuntimeLibType(
runtimeLibType = ToolChain::RLT_CompilerRT;
else if (LibName == "libgcc")
runtimeLibType = ToolChain::RLT_Libgcc;
else if (LibName == "vcruntime")
runtimeLibType = ToolChain::RLT_Vcruntime;
else if (LibName == "platform")
runtimeLibType = GetDefaultRuntimeLibType();
else {
Expand Down Expand Up @@ -1139,6 +1141,8 @@ ToolChain::UnwindLibType ToolChain::GetUnwindLibType(
unwindLibType = ToolChain::UNW_CompilerRT;
} else if (LibName == "libgcc")
unwindLibType = ToolChain::UNW_Libgcc;
else if (LibName == "vcruntime")
unwindLibType = ToolChain::UNW_Vcruntime;
else {
if (A)
getDriver().Diag(diag::err_drv_invalid_unwindlib_name)
Expand All @@ -1162,6 +1166,8 @@ ToolChain::CXXStdlibType ToolChain::GetCXXStdlibType(const ArgList &Args) const{
cxxStdlibType = ToolChain::CST_Libcxx;
else if (LibName == "libstdc++")
cxxStdlibType = ToolChain::CST_Libstdcxx;
else if (LibName == "stl")
cxxStdlibType = ToolChain::CST_Stl;
else if (LibName == "platform")
cxxStdlibType = GetDefaultCXXStdlibType();
else {
Expand Down Expand Up @@ -1300,6 +1306,10 @@ void ToolChain::AddCXXStdlibLibArgs(const ArgList &Args,
case ToolChain::CST_Libstdcxx:
CmdArgs.push_back("-lstdc++");
break;

case ToolChain::CST_Stl:
// MSVC STL does not need to add -l
break;
}
}

Expand Down
128 changes: 127 additions & 1 deletion clang/lib/Driver/ToolChains/MSVC.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,16 @@ void visualstudio::Linker::ConstructJob(Compilation &C, const JobAction &JA,
CmdArgs.push_back("-defaultlib:oldnames");
}

auto SysRoot = TC.getDriver().SysRoot;
if (!SysRoot.empty()) {
// If we have --sysroot, then we ignore all other setings
// libpath is $SYSROOT/lib and $SYSROOT/lib/${ARCH}-unknown-windows-msvc
const std::string MultiarchTriple =
TC.getMultiarchTriple(TC.getDriver(), TC.getTriple(), SysRoot);
std::string SysRootLib = "-libpath:" + SysRoot + "/lib";
CmdArgs.push_back(Args.MakeArgString(SysRootLib + '/' + MultiarchTriple));
CmdArgs.push_back(Args.MakeArgString(SysRootLib));
} else {
// If the VC environment hasn't been configured (perhaps because the user
// did not run vcvarsall), try to build a consistent link environment. If
// the environment variable is set however, assume the user knows what
Expand Down Expand Up @@ -133,6 +143,7 @@ void visualstudio::Linker::ConstructJob(Compilation &C, const JobAction &JA,
CmdArgs.push_back(
Args.MakeArgString(std::string("-libpath:") + WindowsSdkLibPath));
}
}

if (!C.getDriver().IsCLMode() && Args.hasArg(options::OPT_L))
for (const auto &LibPath : Args.getAllArgValues(options::OPT_L))
Expand Down Expand Up @@ -430,6 +441,12 @@ MSVCToolChain::MSVCToolChain(const Driver &D, const llvm::Triple &Triple,
RocmInstallation(D, Triple, Args) {
getProgramPaths().push_back(getDriver().Dir);

auto SysRoot = getDriver().SysRoot;
if (!SysRoot.empty()) {
// We have sysroot so we ignore all VCTools settings
return;
}

std::optional<llvm::StringRef> VCToolsDir, VCToolsVersion;
if (Arg *A = Args.getLastArg(options::OPT__SLASH_vctoolsdir))
VCToolsDir = A->getValue();
Expand Down Expand Up @@ -647,6 +664,17 @@ void MSVCToolChain::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
"include");
}

auto SysRoot = getDriver().SysRoot;
if (!SysRoot.empty()) {
const Driver &D = getDriver();
const std::string MultiarchTriple =
getMultiarchTriple(D, getTriple(), SysRoot);
addSystemInclude(DriverArgs, CC1Args,
SysRoot + "/include/" + MultiarchTriple);
addSystemInclude(DriverArgs, CC1Args, SysRoot + "/include");
return;
}

// Add %INCLUDE%-like directories from the -imsvc flag.
for (const auto &Path : DriverArgs.getAllArgValues(options::OPT__SLASH_imsvc))
addSystemInclude(DriverArgs, CC1Args, Path);
Expand Down Expand Up @@ -775,7 +803,22 @@ void MSVCToolChain::AddClangSystemIncludeArgs(const ArgList &DriverArgs,

void MSVCToolChain::AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs,
ArgStringList &CC1Args) const {
// FIXME: There should probably be logic here to find libc++ on Windows.
if (DriverArgs.hasArg(options::OPT_nostdinc, options::OPT_nostdlibinc,
options::OPT_nostdincxx))
return;
if (getDriver().SysRoot.empty())
return;
switch (GetCXXStdlibType(DriverArgs)) {
case ToolChain::CST_Stl:
addStlIncludePaths(DriverArgs, CC1Args);
break;
case ToolChain::CST_Libstdcxx:
addLibStdCXXIncludePaths(DriverArgs, CC1Args);
break;
case ToolChain::CST_Libcxx:
addLibCxxIncludePaths(DriverArgs, CC1Args);
break;
}
}

VersionTuple MSVCToolChain::computeMSVCVersion(const Driver *D,
Expand Down Expand Up @@ -1027,3 +1070,86 @@ void MSVCToolChain::addClangTargetOptions(
if (Arg *A = DriverArgs.getLastArgNoClaim(options::OPT_marm64x))
A->ignoreTargetSpecific();
}

void MSVCToolChain::addStlIncludePaths(
const llvm::opt::ArgList &DriverArgs,
llvm::opt::ArgStringList &CC1Args) const {
const Driver &D = getDriver();
std::string SysRoot = computeSysRoot();
std::string LibPath = SysRoot + "/include";
const std::string MultiarchTriple =
getMultiarchTriple(D, getTriple(), SysRoot);

std::string TargetDir = LibPath + "/" + MultiarchTriple + "/c++/stl";
addSystemInclude(DriverArgs, CC1Args, TargetDir);

// Second add the generic one.
addSystemInclude(DriverArgs, CC1Args, LibPath + "/c++/stl");
}

void MSVCToolChain::addLibCxxIncludePaths(
const llvm::opt::ArgList &DriverArgs,
llvm::opt::ArgStringList &CC1Args) const {
const Driver &D = getDriver();
std::string SysRoot = computeSysRoot();
std::string LibPath = SysRoot + "/include";
const std::string MultiarchTriple =
getMultiarchTriple(D, getTriple(), SysRoot);

std::string Version = detectLibcxxVersion(LibPath);
if (Version.empty())
return;

std::string TargetDir = LibPath + "/" + MultiarchTriple + "/c++/" + Version;
addSystemInclude(DriverArgs, CC1Args, TargetDir);

// Second add the generic one.
addSystemInclude(DriverArgs, CC1Args, LibPath + "/c++/" + Version);
}

void MSVCToolChain::addLibStdCXXIncludePaths(
const llvm::opt::ArgList &DriverArgs,
llvm::opt::ArgStringList &CC1Args) const {
// We cannot use GCCInstallationDetector here as the sysroot usually does
// not contain a full GCC installation.
// Instead, we search the given sysroot for /usr/include/xx, similar
// to how we do it for libc++.
const Driver &D = getDriver();
std::string SysRoot = computeSysRoot();
std::string LibPath = SysRoot + "/include";
const std::string MultiarchTriple =
getMultiarchTriple(D, getTriple(), SysRoot);

// This is similar to detectLibcxxVersion()
std::string Version;
{
std::error_code EC;
Generic_GCC::GCCVersion MaxVersion =
Generic_GCC::GCCVersion::Parse("0.0.0");
SmallString<128> Path(LibPath);
llvm::sys::path::append(Path, "c++");
for (llvm::vfs::directory_iterator LI = getVFS().dir_begin(Path, EC), LE;
!EC && LI != LE; LI = LI.increment(EC)) {
StringRef VersionText = llvm::sys::path::filename(LI->path());
if (VersionText[0] != 'v') {
auto Version = Generic_GCC::GCCVersion::Parse(VersionText);
if (Version > MaxVersion)
MaxVersion = Version;
}
}
if (MaxVersion.Major > 0)
Version = MaxVersion.Text;
}

if (Version.empty())
return;

std::string TargetDir = LibPath + "/c++/" + Version + "/" + MultiarchTriple;
addSystemInclude(DriverArgs, CC1Args, TargetDir);

// Second add the generic one.
addSystemInclude(DriverArgs, CC1Args, LibPath + "/c++/" + Version);
// Third the backward one.
addSystemInclude(DriverArgs, CC1Args,
LibPath + "/c++/" + Version + "/backward");
}
15 changes: 15 additions & 0 deletions clang/lib/Driver/ToolChains/MSVC.h
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,21 @@ class LLVM_LIBRARY_VISIBILITY MSVCToolChain : public ToolChain {
Tool *buildLinker() const override;
Tool *buildAssembler() const override;
private:
CXXStdlibType GetDefaultCXXStdlibType() const override {
return ToolChain::CST_Stl;
}
RuntimeLibType GetDefaultRuntimeLibType() const override {
return ToolChain::RLT_Vcruntime;
}
UnwindLibType GetDefaultUnwindLibType() const override {
return ToolChain::UNW_Vcruntime;
}
void addStlIncludePaths(const llvm::opt::ArgList &DriverArgs,
llvm::opt::ArgStringList &CC1Args) const;
void addLibCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,
llvm::opt::ArgStringList &CC1Args) const;
void addLibStdCXXIncludePaths(const llvm::opt::ArgList &DriverArgs,
llvm::opt::ArgStringList &CC1Args) const;
std::optional<llvm::StringRef> WinSdkDir, WinSdkVersion, WinSysRoot;
std::string VCToolChainPath;
llvm::ToolsetLayout VSLayout = llvm::ToolsetLayout::OlderVS;
Expand Down
25 changes: 25 additions & 0 deletions clang/lib/Driver/ToolChains/WebAssembly.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -460,6 +460,8 @@ WebAssembly::GetCXXStdlibType(const ArgList &Args) const {
return ToolChain::CST_Libcxx;
else if (Value == "libstdc++")
return ToolChain::CST_Libstdcxx;
else if (Value == "stl")
return ToolChain::CST_Stl;
else
getDriver().Diag(diag::err_drv_invalid_stdlib_name)
<< A->getAsString(Args);
Expand Down Expand Up @@ -518,6 +520,9 @@ void WebAssembly::AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs,
case ToolChain::CST_Libstdcxx:
addLibStdCXXIncludePaths(DriverArgs, CC1Args);
break;
case ToolChain::CST_Stl:
addStlIncludePaths(DriverArgs, CC1Args);
break;
}
}

Expand Down Expand Up @@ -552,6 +557,26 @@ Tool *WebAssembly::buildLinker() const {
return new tools::wasm::Linker(*this);
}

void WebAssembly::addStlIncludePaths(
const llvm::opt::ArgList &DriverArgs,
llvm::opt::ArgStringList &CC1Args) const {
const Driver &D = getDriver();
std::string SysRoot = computeSysRoot();
std::string LibPath = SysRoot + "/include";
const std::string MultiarchTriple =
getMultiarchTriple(D, getTriple(), SysRoot);
bool IsKnownOs = (getTriple().getOS() != llvm::Triple::UnknownOS);

// First add the per-target include path if the OS is known.
if (IsKnownOs) {
std::string TargetDir = LibPath + "/" + MultiarchTriple + "/c++/stl";
addSystemInclude(DriverArgs, CC1Args, TargetDir);
}

// Second add the generic one.
addSystemInclude(DriverArgs, CC1Args, LibPath + "/c++/stl");
}

void WebAssembly::addLibCxxIncludePaths(
const llvm::opt::ArgList &DriverArgs,
llvm::opt::ArgStringList &CC1Args) const {
Expand Down
2 changes: 2 additions & 0 deletions clang/lib/Driver/ToolChains/WebAssembly.h
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,8 @@ class LLVM_LIBRARY_VISIBILITY WebAssembly final : public ToolChain {
const llvm::Triple &TargetTriple,
StringRef SysRoot) const override;

void addStlIncludePaths(const llvm::opt::ArgList &DriverArgs,
llvm::opt::ArgStringList &CC1Args) const;
void addLibCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,
llvm::opt::ArgStringList &CC1Args) const;
void addLibStdCXXIncludePaths(const llvm::opt::ArgList &DriverArgs,
Expand Down
81 changes: 81 additions & 0 deletions clang/test/Driver/msvc-sysroot.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
// RUN: %clangxx --target=x86_64-unknown-windows-msvc -### \
// RUN: --sysroot=%S -fuse-ld=lld %s 2>&1 \
// RUN: | FileCheck --check-prefix=COMPILE_X86_64_STL %s
// COMPILE_X86_64_STL: clang{{.*}}" "-cc1"
// COMPILE_X86_64_STL: "-isysroot" "[[SYSROOT:[^"]+]]"
// COMPILE_X86_64_STL: "-internal-isystem" "[[SYSROOT:[^"]+]]/include/x86_64-unknown-windows-msvc/c++/stl"
// COMPILE_X86_64_STL: "-internal-isystem" "[[SYSROOT:[^"]+]]/include/c++/stl"
// COMPILE_X86_64_STL: lld-link{{.*}}" "-libpath:[[SYSROOT:[^"]+]]/lib/x86_64-unknown-windows-msvc" "-libpath:[[SYSROOT:[^"]+]]/lib"

// RUN: %clangxx --target=x86_64-unknown-windows-msvc -### \
// RUN: --sysroot=%S/Inputs/basic_linux_libcxx_tree/usr -stdlib=libc++ -fuse-ld=lld %s 2>&1 \
// RUN: | FileCheck --check-prefix=COMPILE_X86_64_LIBCXX %s
// COMPILE_X86_64_LIBCXX: clang{{.*}}" "-cc1"
// COMPILE_X86_64_LIBCXX: "-isysroot" "[[SYSROOT:[^"]+]]"
// COMPILE_X86_64_LIBCXX: "-internal-isystem" "[[SYSROOT:[^"]+]]/include/x86_64-unknown-windows-msvc/c++/v1"
// COMPILE_X86_64_LIBCXX: "-internal-isystem" "[[SYSROOT:[^"]+]]/include/c++/v1"
// COMPILE_X86_64_LIBCXX: lld-link{{.*}}" "-libpath:[[SYSROOT:[^"]+]]/lib/x86_64-unknown-windows-msvc" "-libpath:[[SYSROOT:[^"]+]]/lib"

// RUN: %clangxx -### --target=x86_64-unknown-windows-msvc --stdlib=libstdc++ %s 2>&1 \
// RUN: -fuse-ld=lld --sysroot=%S/Inputs/basic_linux_libstdcxx_libcxxv2_tree/usr \
// RUN: | FileCheck -check-prefix=COMPILE_X86_64_LIBSTDCXX %s
// COMPILE_X86_64_LIBSTDCXX: "-cc1"
// COMPILE_X86_64_LIBSTDCXX: "-resource-dir" "[[RESOURCE_DIR:[^"]*]]"
// COMPILE_X86_64_LIBSTDCXX: "-isysroot" "[[SYSROOT:[^"]+]]"
// COMPILE_X86_64_LIBSTDCXX: "-internal-isystem" "[[SYSROOT:[^"]+]]/include/c++/4.8/x86_64-unknown-windows-msvc"
// COMPILE_X86_64_LIBSTDCXX: "-internal-isystem" "[[SYSROOT:[^"]+]]/include/c++/4.8"
// COMPILE_X86_64_LIBSTDCXX: "-internal-isystem" "[[SYSROOT:[^"]+]]/include/c++/4.8/backward"
// COMPILE_X86_64_LIBSTDCXX: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include"
// COMPILE_X86_64_LIBSTDCXX: "-internal-isystem" "[[SYSROOT:[^"]+]]/include/x86_64-unknown-windows-msvc"
// COMPILE_X86_64_LIBSTDCXX: "-internal-isystem" "[[SYSROOT:[^"]+]]/include"
// COMPILE_X86_64_LIBSTDCXX: lld-link{{.*}}" "-libpath:[[SYSROOT:[^"]+]]/lib/x86_64-unknown-windows-msvc" "-libpath:[[SYSROOT:[^"]+]]/lib"

// RUN: %clangxx --target=aarch64-unknown-windows-msvc -### \
// RUN: --sysroot=%S -fuse-ld=lld %s 2>&1 \
// RUN: | FileCheck --check-prefix=COMPILE_AARCH64_STL %s
// COMPILE_AARCH64_STL: clang{{.*}}" "-cc1"
// COMPILE_AARCH64_STL: "-isysroot" "[[SYSROOT:[^"]+]]"
// COMPILE_AARCH64_STL: "-internal-isystem" "[[SYSROOT:[^"]+]]/include/aarch64-unknown-windows-msvc/c++/stl"
// COMPILE_AARCH64_STL: "-internal-isystem" "[[SYSROOT:[^"]+]]/include/c++/stl"
// COMPILE_AARCH64_STL: lld-link{{.*}}" "-libpath:[[SYSROOT:[^"]+]]/lib/aarch64-unknown-windows-msvc" "-libpath:[[SYSROOT:[^"]+]]/lib"

// RUN: %clangxx --target=loongarch64-unknown-windows-msvc -stdlib=stl -### \
// RUN: --sysroot=%S -fuse-ld=lld %s 2>&1 \
// RUN: | FileCheck --check-prefix=COMPILE_LOONGARCH64_STL %s
// COMPILE_LOONGARCH64_STL: clang{{.*}}" "-cc1"
// COMPILE_LOONGARCH64_STL: "-isysroot" "[[SYSROOT:[^"]+]]"
// COMPILE_LOONGARCH64_STL: "-internal-isystem" "[[SYSROOT:[^"]+]]/include/loongarch64-unknown-windows-msvc/c++/stl"
// COMPILE_LOONGARCH64_STL: "-internal-isystem" "[[SYSROOT:[^"]+]]/include/c++/stl"
// COMPILE_LOONGARCH64_STL: lld-link{{.*}}" "-libpath:[[SYSROOT:[^"]+]]/lib/loongarch64-unknown-windows-msvc" "-libpath:[[SYSROOT:[^"]+]]/lib"

// RUN: %clangxx --target=x86_64-unknown-windows-msvc -stdlib=stl -### \
// RUN: --sysroot=%S %s 2>&1 \
// RUN: | FileCheck --check-prefix=COMPILE_X86_64_STL_LINK %s
// COMPILE_X86_64_STL_LINK: clang{{.*}}" "-cc1"
// COMPILE_X86_64_STL_LINK: "-isysroot" "[[SYSROOT:[^"]+]]"
// COMPILE_X86_64_STL_LINK: "-internal-isystem" "[[SYSROOT:[^"]+]]/include/x86_64-unknown-windows-msvc/c++/stl"
// COMPILE_X86_64_STL_LINK: "-internal-isystem" "[[SYSROOT:[^"]+]]/include/c++/stl"
// COMPILE_X86_64_STL_LINK: link.exe{{.*}}" "-libpath:[[SYSROOT:[^"]+]]/lib/x86_64-unknown-windows-msvc" "-libpath:[[SYSROOT:[^"]+]]/lib"

// RUN: %clangxx --target=loongarch64-unknown-windows-msvc -stdlib=libc++ -### \
// RUN: --sysroot=%S/Inputs/basic_linux_libcxx_tree/usr %s 2>&1 \
// RUN: | FileCheck --check-prefix=COMPILE_LOONGARCH64_LIBCXX_LINK %s
// COMPILE_LOONGARCH64_LIBCXX_LINK: clang{{.*}}" "-cc1"
// COMPILE_LOONGARCH64_LIBCXX_LINK: "-isysroot" "[[SYSROOT:[^"]+]]"
// COMPILE_LOONGARCH64_LIBCXX_LINK: "-internal-isystem" "[[SYSROOT:[^"]+]]/include/loongarch64-unknown-windows-msvc/c++/v1"
// COMPILE_LOONGARCH64_LIBCXX_LINK: "-internal-isystem" "[[SYSROOT:[^"]+]]/include/c++/v1"
// COMPILE_LOONGARCH64_LIBCXX_LINK: link.exe{{.*}}" "-libpath:[[SYSROOT:[^"]+]]/lib/loongarch64-unknown-windows-msvc" "-libpath:[[SYSROOT:[^"]+]]/lib"

// RUN: %clangxx --target=riscv64-unknown-windows-msvc -### --stdlib=libstdc++ %s 2>&1 \
// RUN: --sysroot=%S/Inputs/basic_linux_libstdcxx_libcxxv2_tree/usr \
// RUN: | FileCheck -check-prefix=COMPILE_RISCV64_LIBSTDCXX_LINK %s
// COMPILE_RISCV64_LIBSTDCXX_LINK: "-cc1"
// COMPILE_RISCV64_LIBSTDCXX_LINK: "-resource-dir" "[[RESOURCE_DIR:[^"]*]]"
// COMPILE_RISCV64_LIBSTDCXX_LINK: "-isysroot" "[[SYSROOT:[^"]+]]"
// COMPILE_RISCV64_LIBSTDCXX_LINK: "-internal-isystem" "[[SYSROOT:[^"]+]]/include/c++/4.8/riscv64-unknown-windows-msvc"
// COMPILE_RISCV64_LIBSTDCXX_LINK: "-internal-isystem" "[[SYSROOT:[^"]+]]/include/c++/4.8"
// COMPILE_RISCV64_LIBSTDCXX_LINK: "-internal-isystem" "[[SYSROOT:[^"]+]]/include/c++/4.8/backward"
// COMPILE_RISCV64_LIBSTDCXX_LINK: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include"
// COMPILE_RISCV64_LIBSTDCXX_LINK: "-internal-isystem" "[[SYSROOT:[^"]+]]/include/riscv64-unknown-windows-msvc"
// COMPILE_RISCV64_LIBSTDCXX_LINK: "-internal-isystem" "[[SYSROOT:[^"]+]]/include"
// COMPILE_RISCV64_LIBSTDCXX_LINK: link.exe{{.*}}" "-libpath:[[SYSROOT:[^"]+]]/lib/riscv64-unknown-windows-msvc" "-libpath:[[SYSROOT:[^"]+]]/lib"
Loading

0 comments on commit 0b98d15

Please sign in to comment.