Subject: Re: bug#32773: [PATCH] Fix clang libstdc++ header location search

From: Mathieu Othacehe <[email-masked]>
Date: Thu, 14 Nov 2019 11:30:07 +0100

Hello David,

This patch is a real progress, thank you! However, I still have a
linking error when compiling a trivial test program with clang:

mathieu@elbruz ~/guix [env]$ ./pre-inst-env guix environment --ad-hoc clang --pure
mathieu@elbruz ~/guix [env]$ clang ~/tmp/t.cpp 
clang-8: error: unable to execute command: Executable "ld" doesn't exist!
clang-8: error: linker command failed with exit code 1 (use -v to see invocation)

This is because the linker provided by "binutils" is not accessible. I
guess we need to make something analog to make-gcc-toolchain.

WDYT?

Mathieu

David Truby writes:

> ---
>  gnu/packages/llvm.scm | 5 +++++
>  1 file changed, 5 insertions(+)
>
> diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm
> index 33fb53d65e..0a7efe980f 100644
> --- a/gnu/packages/llvm.scm
> +++ b/gnu/packages/llvm.scm
> @@ -202,6 +202,7 @@ compiler.  In LLVM this library is called \"compiler-rt\".")
>                     (lambda* (#:key inputs #:allow-other-keys)
>                       (let ((libc (assoc-ref inputs "libc"))
>                             (compiler-rt (assoc-ref inputs "clang-runtime"))
> +                           (gcc (assoc-ref inputs "gcc"))
>                             (version
>                              (string->number
>                               ,(version-major (package-version clang-runtime)))))
> @@ -218,6 +219,10 @@ compiler.  In LLVM this library is called \"compiler-rt\".")
>                              (("(^[[:blank:]]+LibDir = ).*" _ declaration)
>                               (string-append declaration "\"" libc "/lib\";\n"))
>  
> +                            ;; Make clang look for libstdc++ in the right location
> +                            (("LibStdCXXIncludePathCandidates\\[\\] = \\{")
> +                             (string-append "LibStdCXXIncludePathCandidates[] = { \"" gcc "/include/c++\","))
> +
>                              ;; Make sure libc's libdir is on the search path, to
>                              ;; allow crt1.o & co. to be found.
>                              (("@GLIBC_LIBDIR@")