r224924 - [multilib] Teach Clang's code about multilib by threading

Alexey Samsonov vonosmas at gmail.com
Mon Dec 29 11:44:22 PST 2014


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 <chandlerc at gmail.com>
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
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>



-- 
Alexey Samsonov
vonosmas at gmail.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20141229/adb123f7/attachment.html>


More information about the cfe-commits mailing list