<p dir="ltr">Is it possible to test this?</p>
<div class="gmail_quote">On Jul 19, 2015 11:39 PM, "Yaron Keren" <<a href="mailto:yaron.keren@gmail.com">yaron.keren@gmail.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: yrnkrn<br>
Date: Mon Jul 20 01:38:39 2015<br>
New Revision: 242660<br>
<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject-3Frev-3D242660-26view-3Drev&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREeq0cCxk&m=5C_QQTPiAvLs2WaVH4WEj_bS371cgmkomFU1dvUvyNk&s=D7_rXPhJV6bguz_2Zshn247sMjsnihxN73Ie0rV5eyc&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=242660&view=rev</a><br>
Log:<br>
Support mingw toolchain include and lib directories on Arch Linux.<br>
Thanks to Thomas Pochtrager for testing this!<br>
<br>
<br>
Modified:<br>
cfe/trunk/lib/Driver/MinGWToolChain.cpp<br>
<br>
Modified: cfe/trunk/lib/Driver/MinGWToolChain.cpp<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_lib_Driver_MinGWToolChain.cpp-3Frev-3D242660-26r1-3D242659-26r2-3D242660-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREeq0cCxk&m=5C_QQTPiAvLs2WaVH4WEj_bS371cgmkomFU1dvUvyNk&s=V-hp8Az7owB90hsdYx5-5Wow2s6RMWdykYf9aUpisBU&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/MinGWToolChain.cpp?rev=242660&r1=242659&r2=242660&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Driver/MinGWToolChain.cpp (original)<br>
+++ cfe/trunk/lib/Driver/MinGWToolChain.cpp Mon Jul 20 01:38:39 2015<br>
@@ -26,6 +26,8 @@ MinGW::MinGW(const Driver &D, const llvm<br>
<br>
llvm::SmallString<1024> LibDir;<br>
<br>
+ // In Windows there aren't any standard install locations, we search<br>
+ // for gcc on the PATH. In Liunx the base is always /usr.<br>
#ifdef LLVM_ON_WIN32<br>
if (getDriver().SysRoot.size())<br>
Base = getDriver().SysRoot;<br>
@@ -36,42 +38,48 @@ MinGW::MinGW(const Driver &D, const llvm<br>
else<br>
Base = llvm::sys::path::parent_path(getDriver().getInstalledDir());<br>
Base += llvm::sys::path::get_separator();<br>
- LibDir = Base;<br>
- llvm::sys::path::append(LibDir, "lib", "gcc");<br>
#else<br>
if (getDriver().SysRoot.size())<br>
Base = getDriver().SysRoot;<br>
else<br>
Base = "/usr/";<br>
- LibDir = Base;<br>
- llvm::sys::path::append(LibDir, "lib64", "gcc");<br>
#endif<br>
<br>
- LibDir += llvm::sys::path::get_separator();<br>
-<br>
- // First look for mingw-w64.<br>
- Arch = getTriple().getArchName();<br>
- Arch += "-w64-mingw32";<br>
- std::error_code EC;<br>
- llvm::sys::fs::directory_iterator MingW64Entry(LibDir + Arch, EC);<br>
- if (!EC) {<br>
- GccLibDir = MingW64Entry->path();<br>
- Ver = llvm::sys::path::filename(GccLibDir);<br>
- } else {<br>
+ // By default Arch is for mingw-w64.<br>
+ Arch = (getTriple().getArchName() + "-w64-mingw32").str();<br>
+ // lib: Arch Linux, Ubuntu, Windows<br>
+ // lib64: openSUSE Linux<br>
+ for (StringRef Lib : {"lib", "lib64 "}) {<br>
+ LibDir = Base;<br>
+ llvm::sys::path::append(LibDir, Lib, "gcc");<br>
+ LibDir += llvm::sys::path::get_separator();<br>
+ std::error_code EC;<br>
+ // First look for mingw-w64.<br>
+ llvm::sys::fs::directory_iterator MingW64Entry(LibDir + Arch, EC);<br>
+ if (!EC) {<br>
+ GccLibDir = MingW64Entry->path();<br>
+ Ver = llvm::sys::path::filename(GccLibDir);<br>
+ break;<br>
+ }<br>
// If mingw-w64 not found, try looking for <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__mingw.org&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREeq0cCxk&m=5C_QQTPiAvLs2WaVH4WEj_bS371cgmkomFU1dvUvyNk&s=ZSQyEJZIUVBYhuKqPOX8RCIrY6gbJUKb5wKgKeVBoLA&e=" rel="noreferrer" target="_blank">mingw.org</a>.<br>
- Arch = "mingw32";<br>
- llvm::sys::fs::directory_iterator MingwOrgEntry(LibDir + Arch, EC);<br>
- if (!EC)<br>
+ llvm::sys::fs::directory_iterator MingwOrgEntry(LibDir + "mingw32", EC);<br>
+ if (!EC) {<br>
GccLibDir = MingwOrgEntry->path();<br>
+ // Replace Arch with mingw32 arch.<br>
+ Arch = "mingw32";<br>
+ break;<br>
+ }<br>
}<br>
+<br>
Arch += llvm::sys::path::get_separator();<br>
// GccLibDir must precede Base/lib so that the<br>
// correct crtbegin.o ,cetend.o would be found.<br>
getFilePaths().push_back(GccLibDir);<br>
- getFilePaths().push_back(Base + "lib");<br>
getFilePaths().push_back(Base + Arch + "lib");<br>
-#ifdef LLVM_ON_UNIX<br>
- // For openSUSE.<br>
+#ifdef LLVM_ON_WIN32<br>
+ getFilePaths().push_back(Base + "lib");<br>
+#else<br>
+ // openSUSE<br>
getFilePaths().push_back(Base + Arch + "sys-root/mingw/lib");<br>
#endif<br>
}<br>
@@ -134,7 +142,7 @@ void MinGW::AddClangSystemIncludeArgs(co<br>
addSystemInclude(DriverArgs, CC1Args, IncludeDir.c_str());<br>
IncludeDir += "-fixed";<br>
#ifdef LLVM_ON_UNIX<br>
- // For openSUSE.<br>
+ // openSUSE<br>
addSystemInclude(DriverArgs, CC1Args,<br>
"/usr/x86_64-w64-mingw32/sys-root/mingw/include");<br>
#endif<br>
@@ -149,23 +157,28 @@ void MinGW::AddClangCXXStdlibIncludeArgs<br>
DriverArgs.hasArg(options::OPT_nostdincxx))<br>
return;<br>
<br>
- // C++ includes may be found in several locations depending on distribution.<br>
+ // C++ includes locations are different with almost every mingw distribution.<br>
+ //<br>
// Windows<br>
// -------<br>
- // mingw-w64 mingw-builds: $sysroot/i686-w64-mingw32/include/c++.<br>
+ // mingw-w64 mingw-builds: $sysroot/i686-w64-mingw32/include/c++<br>
// mingw-w64 msys2: $sysroot/include/c++/4.9.2<br>
// <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__mingw.org&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREeq0cCxk&m=5C_QQTPiAvLs2WaVH4WEj_bS371cgmkomFU1dvUvyNk&s=ZSQyEJZIUVBYhuKqPOX8RCIrY6gbJUKb5wKgKeVBoLA&e=" rel="noreferrer" target="_blank">mingw.org</a>: GccLibDir/include/c++<br>
//<br>
// Linux<br>
// -----<br>
// openSUSE: GccLibDir/include/c++<br>
- llvm::SmallVector<llvm::SmallString<1024>, 3> CppIncludeBases;<br>
+ // Arch: $sysroot/i686-w64-mingw32/include/c++/5.1.0<br>
+ //<br>
+ llvm::SmallVector<llvm::SmallString<1024>, 4> CppIncludeBases;<br>
CppIncludeBases.emplace_back(Base);<br>
llvm::sys::path::append(CppIncludeBases[0], Arch, "include", "c++");<br>
CppIncludeBases.emplace_back(Base);<br>
- llvm::sys::path::append(CppIncludeBases[1], "include", "c++", Ver);<br>
+ llvm::sys::path::append(CppIncludeBases[1], Arch, "include", "c++", Ver);<br>
+ CppIncludeBases.emplace_back(Base);<br>
+ llvm::sys::path::append(CppIncludeBases[2], "include", "c++", Ver);<br>
CppIncludeBases.emplace_back(GccLibDir);<br>
- llvm::sys::path::append(CppIncludeBases[2], "include", "c++");<br>
+ llvm::sys::path::append(CppIncludeBases[3], "include", "c++");<br>
for (auto &CppIncludeBase : CppIncludeBases) {<br>
CppIncludeBase += llvm::sys::path::get_separator();<br>
addSystemInclude(DriverArgs, CC1Args, CppIncludeBase);<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div>