Author: atanasyan Date: Thu May 19 10:07:21 2016 New Revision: 270069 URL: http://llvm.org/viewvc/llvm-project?rev=270069&view=rev Log: [driver] Do not pass install dir to the MultilibSet include dirs callback
All additional include directories are relative to the toolchain install folder. So let's do not pass this folder to each callback to simplify and slightly reduce the code. Modified: cfe/trunk/include/clang/Driver/Multilib.h cfe/trunk/lib/Driver/ToolChains.cpp Modified: cfe/trunk/include/clang/Driver/Multilib.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Multilib.h?rev=270069&r1=270068&r2=270069&view=diff ============================================================================== --- cfe/trunk/include/clang/Driver/Multilib.h (original) +++ cfe/trunk/include/clang/Driver/Multilib.h Thu May 19 10:07:21 2016 @@ -99,8 +99,7 @@ public: typedef multilib_list::iterator iterator; typedef multilib_list::const_iterator const_iterator; - typedef std::function<std::vector<std::string>(StringRef InstallDir, - const Multilib &M)> + typedef std::function<std::vector<std::string>(const Multilib &M)> IncludeDirsFunc; typedef llvm::function_ref<bool(const Multilib &)> FilterCallback; Modified: cfe/trunk/lib/Driver/ToolChains.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=270069&r1=270068&r2=270069&view=diff ============================================================================== --- cfe/trunk/lib/Driver/ToolChains.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains.cpp Thu May 19 10:07:21 2016 @@ -1923,16 +1923,12 @@ static bool findMIPSMultilibs(const Driv .Maybe(Nan2008) .FilterOut(".*sof/nan2008") .FilterOut(NonExistent) - .setIncludeDirsCallback([](StringRef InstallDir, - const Multilib &M) { - std::vector<std::string> Dirs; - Dirs.push_back((InstallDir + "/include").str()); - std::string SysRootInc = - InstallDir.str() + "/../../../../sysroot"; + .setIncludeDirsCallback([](const Multilib &M) { + std::vector<std::string> Dirs({"/include"}); if (StringRef(M.includeSuffix()).startswith("/uclibc")) - Dirs.push_back(SysRootInc + "/uclibc/usr/include"); + Dirs.push_back("/../../../../sysroot/uclibc/usr/include"); else - Dirs.push_back(SysRootInc + "/usr/include"); + Dirs.push_back("/../../../../sysroot/usr/include"); return Dirs; }); } @@ -1954,12 +1950,9 @@ static bool findMIPSMultilibs(const Driv MuslMipsMultilibs = MultilibSet().Either(MArchMipsR2, MArchMipselR2); // Specify the callback that computes the include directories. - MuslMipsMultilibs.setIncludeDirsCallback([](StringRef InstallDir, - const Multilib &M) { - std::vector<std::string> Dirs; - Dirs.push_back( - (InstallDir + "/../sysroot" + M.osSuffix() + "/usr/include").str()); - return Dirs; + MuslMipsMultilibs.setIncludeDirsCallback([](const Multilib &M) { + return std::vector<std::string>( + {"/../sysroot" + M.osSuffix() + "/usr/include"}); }); } @@ -2006,16 +1999,13 @@ static bool findMIPSMultilibs(const Driv .FilterOut("/mips16.*/64") .FilterOut("/micromips.*/64") .FilterOut(NonExistent) - .setIncludeDirsCallback([](StringRef InstallDir, - const Multilib &M) { - std::vector<std::string> Dirs; - Dirs.push_back((InstallDir + "/include").str()); - std::string SysRootInc = - InstallDir.str() + "/../../../../mips-linux-gnu"; + .setIncludeDirsCallback([](const Multilib &M) { + std::vector<std::string> Dirs({"/include"}); if (StringRef(M.includeSuffix()).startswith("/uclibc")) - Dirs.push_back(SysRootInc + "/libc/uclibc/usr/include"); + Dirs.push_back( + "/../../../../mips-linux-gnu/libc/uclibc/usr/include"); else - Dirs.push_back(SysRootInc + "/libc/usr/include"); + Dirs.push_back("/../../../../mips-linux-gnu/libc/usr/include"); return Dirs; }); } @@ -2059,13 +2049,9 @@ static bool findMIPSMultilibs(const Driv .Maybe(MAbi64) .Maybe(LittleEndian) .FilterOut(NonExistent) - .setIncludeDirsCallback([](StringRef InstallDir, - const Multilib &M) { - std::vector<std::string> Dirs; - Dirs.push_back((InstallDir + "/include").str()); - Dirs.push_back( - (InstallDir + "/../../../../sysroot/usr/include").str()); - return Dirs; + .setIncludeDirsCallback([](const Multilib &M) { + return std::vector<std::string>( + {"/include", "/../../../../sysroot/usr/include"}); }); } @@ -2540,9 +2526,9 @@ void MipsLLVMToolChain::AddClangSystemIn const auto &Callback = Multilibs.includeDirsCallback(); if (Callback) { - const auto IncludePaths = Callback(D.getInstalledDir(), SelectedMultilib); - for (const auto &Path : IncludePaths) - addExternCSystemIncludeIfExists(DriverArgs, CC1Args, Path); + for (const auto &Path : Callback(SelectedMultilib)) + addExternCSystemIncludeIfExists(DriverArgs, CC1Args, + D.getInstalledDir() + Path); } } @@ -2587,11 +2573,10 @@ void MipsLLVMToolChain::AddClangCXXStdli const auto &Callback = Multilibs.includeDirsCallback(); if (Callback) { - const auto IncludePaths = - Callback(getDriver().getInstalledDir(), SelectedMultilib); - for (const auto &Path : IncludePaths) { - if (llvm::sys::fs::exists(Path + "/c++/v1")) { - addSystemInclude(DriverArgs, CC1Args, Path + "/c++/v1"); + for (std::string Path : Callback(SelectedMultilib)) { + Path = getDriver().getInstalledDir() + Path + "/c++/v1"; + if (llvm::sys::fs::exists(Path)) { + addSystemInclude(DriverArgs, CC1Args, Path); break; } } @@ -3969,10 +3954,9 @@ void Linux::AddClangSystemIncludeArgs(co if (GCCInstallation.isValid()) { const auto &Callback = Multilibs.includeDirsCallback(); if (Callback) { - const auto IncludePaths = Callback(GCCInstallation.getInstallPath(), - GCCInstallation.getMultilib()); - for (const auto &Path : IncludePaths) - addExternCSystemIncludeIfExists(DriverArgs, CC1Args, Path); + for (const auto &Path : Callback(GCCInstallation.getMultilib())) + addExternCSystemIncludeIfExists( + DriverArgs, CC1Args, GCCInstallation.getInstallPath() + Path); } } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits