Looks like this caused http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fast/builds/204/steps/check-clang%20msan/logs/stdio
On Mon, Dec 29, 2014 at 4:09 AM, Chandler Carruth <[email protected]> wrote: > Author: chandlerc > Date: Mon Dec 29 06:09:08 2014 > New Revision: 224924 > > URL: http://llvm.org/viewvc/llvm-project?rev=224924&view=rev > Log: > [multilib] Teach Clang's code about multilib by threading > a CLANG_LIBDIR_SUFFIX down from the build system and using that as part > of the default resource dir computation. > > Without this, essentially nothing that uses the clang driver works when > building clang with a libdir suffix. This is probably the single biggest > missing piece of support for multilib as without this people could hack > clang to end up installed in the correct location, but it would then > fail to find its own basic resources. I know of at least one distro that > has some variation on this patch to hack around this; hopefully they'll > be able to use the libdir suffix functionality directly as the rest of > these bits land. > > This required fixing a copy of the code to compute Clang's resource > directory that is buried inside of the frontend (!!!). It had bitrotted > significantly relative to the driver code. I've made it essentially > a clone of the driver code in order to keep tests (which use cc1 > heavily) passing. This copy should probably just be removed and the > frontend taught to always rely on an explicit resource directory from > the driver, but that is a much more invasive change for another day. > > I've also updated one test which actually encoded the resource directory > in its checked output to tolerate multilib suffixes. > > Note that this relies on a prior LLVM commit to add a stub to the > autoconf build system for this variable. > > Modified: > cfe/trunk/CMakeLists.txt > cfe/trunk/include/clang/Config/config.h.cmake > cfe/trunk/include/clang/Config/config.h.in > cfe/trunk/lib/Driver/Driver.cpp > cfe/trunk/lib/Frontend/CompilerInvocation.cpp > cfe/trunk/test/Preprocessor/iwithprefix.c > > Modified: cfe/trunk/CMakeLists.txt > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/CMakeLists.txt?rev=224924&r1=224923&r2=224924&view=diff > > ============================================================================== > --- cfe/trunk/CMakeLists.txt (original) > +++ cfe/trunk/CMakeLists.txt Mon Dec 29 06:09:08 2014 > @@ -193,6 +193,9 @@ endif() > set(CLANG_VENDOR_UTI "org.llvm.clang" CACHE STRING > "Vendor-specific uti.") > > +# The libdir suffix must exactly match whatever LLVM's configuration used. > +set(CLANG_LIBDIR_SUFFIX "${LLVM_LIBDIR_SUFFIX}") > + > set(CLANG_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) > set(CLANG_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}) > > > Modified: cfe/trunk/include/clang/Config/config.h.cmake > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Config/config.h.cmake?rev=224924&r1=224923&r2=224924&view=diff > > ============================================================================== > --- cfe/trunk/include/clang/Config/config.h.cmake (original) > +++ cfe/trunk/include/clang/Config/config.h.cmake Mon Dec 29 06:09:08 2014 > @@ -8,6 +8,9 @@ > /* Bug report URL. */ > #define BUG_REPORT_URL "${BUG_REPORT_URL}" > > +/* Multilib suffix for libdir. */ > +#define CLANG_LIBDIR_SUFFIX "${CLANG_LIBDIR_SUFFIX}" > + > /* Relative directory for resource files */ > #define CLANG_RESOURCE_DIR "${CLANG_RESOURCE_DIR}" > > > Modified: cfe/trunk/include/clang/Config/config.h.in > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Config/config.h.in?rev=224924&r1=224923&r2=224924&view=diff > > ============================================================================== > --- cfe/trunk/include/clang/Config/config.h.in (original) > +++ cfe/trunk/include/clang/Config/config.h.in Mon Dec 29 06:09:08 2014 > @@ -8,6 +8,9 @@ > /* Bug report URL. */ > #undef BUG_REPORT_URL > > +/* Multilib suffix for libdir. */ > +#undef CLANG_LIBDIR_SUFFIX > + > /* Relative directory for resource files */ > #undef CLANG_RESOURCE_DIR > > > Modified: cfe/trunk/lib/Driver/Driver.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=224924&r1=224923&r2=224924&view=diff > > ============================================================================== > --- cfe/trunk/lib/Driver/Driver.cpp (original) > +++ cfe/trunk/lib/Driver/Driver.cpp Mon Dec 29 06:09:08 2014 > @@ -65,10 +65,13 @@ Driver::Driver(StringRef ClangExecutable > // Compute the path to the resource directory. > StringRef ClangResourceDir(CLANG_RESOURCE_DIR); > SmallString<128> P(Dir); > - if (ClangResourceDir != "") > + if (ClangResourceDir != "") { > llvm::sys::path::append(P, ClangResourceDir); > - else > - llvm::sys::path::append(P, "..", "lib", "clang", > CLANG_VERSION_STRING); > + } else { > + StringRef ClangLibdirSuffix(CLANG_LIBDIR_SUFFIX); > + llvm::sys::path::append(P, "..", Twine("lib") + ClangLibdirSuffix, > "clang", > + CLANG_VERSION_STRING); > + } > ResourceDir = P.str(); > } > > > Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=224924&r1=224923&r2=224924&view=diff > > ============================================================================== > --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original) > +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Mon Dec 29 06:09:08 2014 > @@ -10,6 +10,7 @@ > #include "clang/Frontend/CompilerInvocation.h" > #include "clang/Basic/FileManager.h" > #include "clang/Basic/Version.h" > +#include "clang/Config/config.h" > #include "clang/Driver/DriverDiagnostic.h" > #include "clang/Driver/Options.h" > #include "clang/Driver/Util.h" > @@ -982,14 +983,18 @@ static InputKind ParseFrontendArgs(Front > > std::string CompilerInvocation::GetResourcesPath(const char *Argv0, > void *MainAddr) { > - SmallString<128> P(llvm::sys::fs::getMainExecutable(Argv0, MainAddr)); > + StringRef ClangExecutable = llvm::sys::fs::getMainExecutable(Argv0, > MainAddr); > + StringRef Dir = llvm::sys::path::parent_path(ClangExecutable); > > - if (!P.empty()) { > - llvm::sys::path::remove_filename(P); // Remove /clang from > foo/bin/clang > - llvm::sys::path::remove_filename(P); // Remove /bin from foo/bin > - > - // Get foo/lib/clang/<version>/include > - llvm::sys::path::append(P, "lib", "clang", CLANG_VERSION_STRING); > + // Compute the path to the resource directory. > + StringRef ClangResourceDir(CLANG_RESOURCE_DIR); > + SmallString<128> P(Dir); > + if (ClangResourceDir != "") { > + llvm::sys::path::append(P, ClangResourceDir); > + } else { > + StringRef ClangLibdirSuffix(CLANG_LIBDIR_SUFFIX); > + llvm::sys::path::append(P, "..", Twine("lib") + ClangLibdirSuffix, > "clang", > + CLANG_VERSION_STRING); > } > > return P.str(); > > Modified: cfe/trunk/test/Preprocessor/iwithprefix.c > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/iwithprefix.c?rev=224924&r1=224923&r2=224924&view=diff > > ============================================================================== > --- cfe/trunk/test/Preprocessor/iwithprefix.c (original) > +++ cfe/trunk/test/Preprocessor/iwithprefix.c Mon Dec 29 06:09:08 2014 > @@ -9,7 +9,7 @@ > > // CHECK: #include <...> search starts here: > // CHECK: {{.*}}.tmps/first > -// CHECK: {{/|\\}}lib{{/|\\}}clang{{/|\\}}{{[.0-9]+}}{{/|\\}}include > +// CHECK: > {{/|\\}}lib{{(32|64)?}}{{/|\\}}clang{{/|\\}}{{[.0-9]+}}{{/|\\}}include > // CHECK: {{.*}}.tmps/second > // CHECK-NOT: {{.*}}.tmps > > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits > -- Alexey Samsonov [email protected]
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
