Skip to content

Commit

Permalink
[clang][driver] Remove dynamic gcc-toolset/devtoolset logic
Browse files Browse the repository at this point in the history
This breaks when the newest available devtoolset directory is not a
complete toolset: #57843

Remove this again in favor or just adding the two new directories for
devtoolset/gcc-toolset 12.

This reverts commit 35aaf54.
This reverts commit 9f97720.

Fixes #57843

Differential Revision: https://reviews.llvm.org/D136435
  • Loading branch information
tbaederr committed Oct 26, 2022
1 parent 3a0b610 commit 4a5184f
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 116 deletions.
40 changes: 15 additions & 25 deletions clang/lib/Driver/ToolChains/Gnu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2162,31 +2162,21 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
// and gcc-toolsets.
if (SysRoot.empty() && TargetTriple.getOS() == llvm::Triple::Linux &&
D.getVFS().exists("/opt/rh")) {
// Find the directory in /opt/rh/ starting with gcc-toolset-* or
// devtoolset-* with the highest version number and add that
// one to our prefixes.
std::string ChosenToolsetDir;
unsigned ChosenToolsetVersion = 0;
std::error_code EC;
for (llvm::vfs::directory_iterator LI = D.getVFS().dir_begin("/opt/rh", EC),
LE;
!EC && LI != LE; LI = LI.increment(EC)) {
StringRef ToolsetDir = llvm::sys::path::filename(LI->path());
unsigned ToolsetVersion;
if ((!ToolsetDir.startswith("gcc-toolset-") &&
!ToolsetDir.startswith("devtoolset-")) ||
ToolsetDir.substr(ToolsetDir.rfind('-') + 1)
.getAsInteger(10, ToolsetVersion))
continue;

if (ToolsetVersion > ChosenToolsetVersion) {
ChosenToolsetVersion = ToolsetVersion;
ChosenToolsetDir = "/opt/rh/" + ToolsetDir.str();
}
}

if (ChosenToolsetVersion > 0)
Prefixes.push_back(ChosenToolsetDir + "/root/usr");
// TODO: We may want to remove this, since the functionality
// can be achieved using config files.
Prefixes.push_back("/opt/rh/gcc-toolset-12/root/usr");
Prefixes.push_back("/opt/rh/gcc-toolset-11/root/usr");
Prefixes.push_back("/opt/rh/gcc-toolset-10/root/usr");
Prefixes.push_back("/opt/rh/devtoolset-12/root/usr");
Prefixes.push_back("/opt/rh/devtoolset-11/root/usr");
Prefixes.push_back("/opt/rh/devtoolset-10/root/usr");
Prefixes.push_back("/opt/rh/devtoolset-9/root/usr");
Prefixes.push_back("/opt/rh/devtoolset-8/root/usr");
Prefixes.push_back("/opt/rh/devtoolset-7/root/usr");
Prefixes.push_back("/opt/rh/devtoolset-6/root/usr");
Prefixes.push_back("/opt/rh/devtoolset-4/root/usr");
Prefixes.push_back("/opt/rh/devtoolset-3/root/usr");
Prefixes.push_back("/opt/rh/devtoolset-2/root/usr");
}

// Fall back to /usr which is used by most non-Solaris systems.
Expand Down
91 changes: 0 additions & 91 deletions clang/unittests/Driver/ToolChainTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
#include "clang/Frontend/CompilerInstance.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/MC/TargetRegistry.h"
#include "llvm/Support/Host.h"
#include "llvm/Support/TargetSelect.h"
#include "llvm/Support/VirtualFileSystem.h"
#include "llvm/Support/raw_ostream.h"
Expand Down Expand Up @@ -394,96 +393,6 @@ struct SimpleDiagnosticConsumer : public DiagnosticConsumer {
std::vector<SmallString<32>> Errors;
};

TEST(ToolChainTest, Toolsets) {
// Ignore this test on Windows hosts.
llvm::Triple Host(llvm::sys::getProcessTriple());
if (Host.isOSWindows())
GTEST_SKIP();

IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = new DiagnosticOptions();
IntrusiveRefCntPtr<DiagnosticIDs> DiagID(new DiagnosticIDs());

// Check (newer) GCC toolset installation.
{
IntrusiveRefCntPtr<llvm::vfs::InMemoryFileSystem> InMemoryFileSystem(
new llvm::vfs::InMemoryFileSystem);

// These should be ignored.
InMemoryFileSystem->addFile("/opt/rh/gcc-toolset-2", 0,
llvm::MemoryBuffer::getMemBuffer("\n"));
InMemoryFileSystem->addFile("/opt/rh/gcc-toolset-", 0,
llvm::MemoryBuffer::getMemBuffer("\n"));
InMemoryFileSystem->addFile("/opt/rh/gcc-toolset--", 0,
llvm::MemoryBuffer::getMemBuffer("\n"));
InMemoryFileSystem->addFile("/opt/rh/gcc-toolset--1", 0,
llvm::MemoryBuffer::getMemBuffer("\n"));

// File needed for GCC installation detection.
InMemoryFileSystem->addFile("/opt/rh/gcc-toolset-12/root/usr/lib/gcc/"
"x86_64-redhat-linux/11/crtbegin.o",
0, llvm::MemoryBuffer::getMemBuffer("\n"));

DiagnosticsEngine Diags(DiagID, &*DiagOpts, new SimpleDiagnosticConsumer);
Driver TheDriver("/bin/clang", "x86_64-redhat-linux", Diags,
"clang LLVM compiler", InMemoryFileSystem);
std::unique_ptr<Compilation> C(
TheDriver.BuildCompilation({"clang", "--gcc-toolchain="}));
ASSERT_TRUE(C);
std::string S;
{
llvm::raw_string_ostream OS(S);
C->getDefaultToolChain().printVerboseInfo(OS);
}
EXPECT_EQ("Found candidate GCC installation: "
"/opt/rh/gcc-toolset-12/root/usr/lib/gcc/x86_64-redhat-linux/11\n"
"Selected GCC installation: "
"/opt/rh/gcc-toolset-12/root/usr/lib/gcc/x86_64-redhat-linux/11\n"
"Candidate multilib: .;@m64\n"
"Selected multilib: .;@m64\n",
S);
}

// And older devtoolset.
{
IntrusiveRefCntPtr<llvm::vfs::InMemoryFileSystem> InMemoryFileSystem(
new llvm::vfs::InMemoryFileSystem);

// These should be ignored.
InMemoryFileSystem->addFile("/opt/rh/devtoolset-2", 0,
llvm::MemoryBuffer::getMemBuffer("\n"));
InMemoryFileSystem->addFile("/opt/rh/devtoolset-", 0,
llvm::MemoryBuffer::getMemBuffer("\n"));
InMemoryFileSystem->addFile("/opt/rh/devtoolset--", 0,
llvm::MemoryBuffer::getMemBuffer("\n"));
InMemoryFileSystem->addFile("/opt/rh/devtoolset--1", 0,
llvm::MemoryBuffer::getMemBuffer("\n"));

// File needed for GCC installation detection.
InMemoryFileSystem->addFile("/opt/rh/devtoolset-12/root/usr/lib/gcc/"
"x86_64-redhat-linux/11/crtbegin.o",
0, llvm::MemoryBuffer::getMemBuffer("\n"));

DiagnosticsEngine Diags(DiagID, &*DiagOpts, new SimpleDiagnosticConsumer);
Driver TheDriver("/bin/clang", "x86_64-redhat-linux", Diags,
"clang LLVM compiler", InMemoryFileSystem);
std::unique_ptr<Compilation> C(
TheDriver.BuildCompilation({"clang", "--gcc-toolchain="}));
ASSERT_TRUE(C);
std::string S;
{
llvm::raw_string_ostream OS(S);
C->getDefaultToolChain().printVerboseInfo(OS);
}
EXPECT_EQ("Found candidate GCC installation: "
"/opt/rh/devtoolset-12/root/usr/lib/gcc/x86_64-redhat-linux/11\n"
"Selected GCC installation: "
"/opt/rh/devtoolset-12/root/usr/lib/gcc/x86_64-redhat-linux/11\n"
"Candidate multilib: .;@m64\n"
"Selected multilib: .;@m64\n",
S);
}
}

TEST(ToolChainTest, ConfigFileSearch) {
IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = new DiagnosticOptions();
IntrusiveRefCntPtr<DiagnosticIDs> DiagID(new DiagnosticIDs());
Expand Down

0 comments on commit 4a5184f

Please sign in to comment.