Lines 1870-1875
bool FreeBSD::UseSjLjExceptions() const {
Link Here
|
1870 |
} |
1870 |
} |
1871 |
} |
1871 |
} |
1872 |
|
1872 |
|
|
|
1873 |
/// \brief Helper to add the three variant paths for a libstdc++ installation. |
1874 |
/*static*/ bool FreeBSD::addLibStdCXXIncludePaths(Twine Base, Twine TargetArchDir, |
1875 |
const ArgList &DriverArgs, |
1876 |
ArgStringList &CC1Args) { |
1877 |
if (!llvm::sys::fs::exists(Base)) |
1878 |
return false; |
1879 |
addSystemInclude(DriverArgs, CC1Args, Base); |
1880 |
addSystemInclude(DriverArgs, CC1Args, Base + "/" + TargetArchDir); |
1881 |
addSystemInclude(DriverArgs, CC1Args, Base + "/backward"); |
1882 |
return true; |
1883 |
} |
1884 |
|
1885 |
/// \brief Helper to add an extra variant path for an (Ubuntu) multilib |
1886 |
/// libstdc++ installation. |
1887 |
/*static*/ bool FreeBSD::addLibStdCXXIncludePaths(Twine Base, Twine Suffix, |
1888 |
Twine TargetArchDir, |
1889 |
Twine MultiLibSuffix, |
1890 |
const ArgList &DriverArgs, |
1891 |
ArgStringList &CC1Args) { |
1892 |
if (!addLibStdCXXIncludePaths(Base+Suffix, TargetArchDir + MultiLibSuffix, |
1893 |
DriverArgs, CC1Args)) |
1894 |
return false; |
1895 |
|
1896 |
addSystemInclude(DriverArgs, CC1Args, Base + "/" + TargetArchDir + Suffix |
1897 |
+ MultiLibSuffix); |
1898 |
return true; |
1899 |
} |
1900 |
|
1901 |
void FreeBSD::AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs, |
1902 |
ArgStringList &CC1Args) const { |
1903 |
if (DriverArgs.hasArg(options::OPT_nostdlibinc) || |
1904 |
DriverArgs.hasArg(options::OPT_nostdincxx)) |
1905 |
return; |
1906 |
|
1907 |
// Check if libc++ has been enabled and provide its include paths if so. |
1908 |
if (GetCXXStdlibType(DriverArgs) == ToolChain::CST_Libcxx) { |
1909 |
// libc++ is always installed at a fixed path on Linux currently. |
1910 |
addSystemInclude(DriverArgs, CC1Args, |
1911 |
getDriver().SysRoot + "/usr/include/c++/v1"); |
1912 |
return; |
1913 |
} |
1914 |
|
1915 |
// We need a detected GCC installation on Linux to provide libstdc++'s |
1916 |
// headers. We handled the libc++ case above. |
1917 |
if (!GCCInstallation.isValid()) |
1918 |
return; |
1919 |
|
1920 |
// By default, look for the C++ headers in an include directory adjacent to |
1921 |
// the lib directory of the GCC installation. Note that this is expect to be |
1922 |
// equivalent to '/usr/include/c++/X.Y' in almost all cases. |
1923 |
StringRef LibDir = GCCInstallation.getParentLibPath(); |
1924 |
StringRef InstallDir = GCCInstallation.getInstallPath(); |
1925 |
StringRef Version = GCCInstallation.getVersion().Text; |
1926 |
StringRef TripleStr = GCCInstallation.getTriple().str(); |
1927 |
|
1928 |
if (addLibStdCXXIncludePaths(LibDir.str() + "/../include", |
1929 |
"/c++/" + Version.str(), |
1930 |
TripleStr, |
1931 |
GCCInstallation.getMultiarchSuffix(), |
1932 |
DriverArgs, CC1Args)) |
1933 |
return; |
1934 |
|
1935 |
const std::string IncludePathCandidates[] = { |
1936 |
// Gentoo is weird and places its headers inside the GCC install, so if the |
1937 |
// first attempt to find the headers fails, try this pattern. |
1938 |
InstallDir.str() + "/include/g++-v4", |
1939 |
// Android standalone toolchain has C++ headers in yet another place. |
1940 |
LibDir.str() + "/../" + TripleStr.str() + "/include/c++/" + Version.str(), |
1941 |
// Freescale SDK C++ headers are directly in <sysroot>/usr/include/c++, |
1942 |
// without a subdirectory corresponding to the gcc version. |
1943 |
LibDir.str() + "/../include/c++", |
1944 |
}; |
1945 |
|
1946 |
for (unsigned i = 0; i < llvm::array_lengthof(IncludePathCandidates); ++i) { |
1947 |
if (addLibStdCXXIncludePaths(IncludePathCandidates[i], (TripleStr + |
1948 |
GCCInstallation.getMultiarchSuffix()), |
1949 |
DriverArgs, CC1Args)) |
1950 |
break; |
1951 |
} |
1952 |
} |
1953 |
|
1873 |
/// NetBSD - NetBSD tool chain which can call as(1) and ld(1) directly. |
1954 |
/// NetBSD - NetBSD tool chain which can call as(1) and ld(1) directly. |
1874 |
|
1955 |
|
1875 |
NetBSD::NetBSD(const Driver &D, const llvm::Triple& Triple, const ArgList &Args) |
1956 |
NetBSD::NetBSD(const Driver &D, const llvm::Triple& Triple, const ArgList &Args) |