[cfe-dev] cross compiling with 6.0.0 not finding gcc paths - fix, what next
Miller Henry via cfe-dev
cfe-dev at lists.llvm.org
Tue Oct 2 14:05:47 PDT 2018
clang version 7.0.0 (tags/RELEASE_700/final)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /opt/jdx/tools/usr/clang-7.0.0/bin
find jdx -name crtbegin.o
jdx/wr8-baytrail_64/buildbox/usr/lib64/x86_64-wrs-linux/5.2.0/crtbegin.o
find jdx -name string
jdx/wr8-baytrail_64/buildbox/usr/include/c++/5.2.0/string
The above are the two paths not found in my system by the default clang that are fixed by the changes below.
-----Original Message-----
From: Tom Stellard [mailto:tstellar at redhat.com]
Sent: Tuesday, October 2, 2018 3:56 PM
To: Miller Henry <MillerHenry at JohnDeere.com>; cfe-dev at lists.llvm.org
Subject: Re: [cfe-dev] cross compiling with 6.0.0 not finding gcc paths - fix, what next
On 10/02/2018 01:25 PM, Miller Henry via cfe-dev wrote:
> This is a follow up to my message from last april
> https://lists.llvm.org/pipermail/cfe-dev/2018-April/057693.html. I've
> finally had time to dig deeper and fix my problem. I'm sending this in
> part so that if someone else has this problem maybe google will find
> this message and help them; and in part to ask if there is a patch
> that should be applied
>
>
What base operating system are you using?
Can you post the output of
clang --verbose --sysroot=/home/user/repo/jdx/wr8-baytrail_64/buildbox
Can you provide the full path to the crtbegin.o/crtend.o/libgcc that you are trying to use?
-Tom
>
> For the record, I was seeing errors like the following in clang 4.0+ (3.9 and below work). The ultimate cause is in my environment system headers and libraries are not found in a path clang knows to search by default. Gcc is probably compiled with a hard coded path and so it works.
>
>
>
> The first error I get is is from cmake:
>
> [2/2] Linking C executable cmTC_03cd5
>
> FAILED: cmTC_03cd5
>
> : && /opt/jdx/tools//usr/local/share/icecc/bin//clang --sysroot=/home/user/repo/jdx/wr8-baytrail_64/buildbox -fno-omit-frame-pointer -gsplit-dwarf -fdiagnostics-color=always --target=x86_64-wrs-linux --sysroot=/home/repo/jdx/wr8-baytrail_64/buildbox -rdynamic -O2 -L/home/repo/jdx/wr8-baytrail_64/buildbox/usr/local/lib -Wl,--gdb-index -lrt -lpthread -Wl,--disable-new-dtags CMakeFiles/cmTC_03cd5.dir/testCCompiler.c.o -o cmTC_03cd5 && :
>
> /opt/jdx/tools/sysroots/x86_64-wrlinuxsdk-linux/usr/bin/x86_64-wrs-lin
> ux/x86_64-wrs-linux-ld: error: cannot open crtbegin.o: No such file or
> directory
>
> /opt/jdx/tools/sysroots/x86_64-wrlinuxsdk-linux/usr/bin/x86_64-wrs-lin
> ux/x86_64-wrs-linux-ld: error: cannot open crtend.o: No such file or
> directory
>
>
> /opt/jdx/tools/sysroots/x86_64-wrlinuxsdk-linux/usr/bin/x86_64-wrs-lin
> ux/x86_64-wrs-linux-ld: error: cannot find -lgcc
>
>
> /opt/jdx/tools/sysroots/x86_64-wrlinuxsdk-linux/usr/bin/x86_64-wrs-lin
> ux/x86_64-wrs-linux-ld: error: cannot find -lgcc
>
> clang-6.0: error: linker command failed with exit code 1 (use -v
> to see invocation)
>
>
>
> My fix is in two parts, first in
> llvm/tools/clang/lib/Driver/Toolchains/Gnu.cpp, function
> Generic_GCC::GCCInstallationDetector::ScanLibDirForGCCTriple(
>
> add to Suffixes[]: (about line 2181)
>
> {CandidateTriple.str(), "../..", true},
>
> Which is to say you need to make this get from the system lib directory to where the triple-specific directories are.
>
>
>
> Then in llvm/tools/clang/lib/Driver/Toolchains/Linux.cpp, function
> Linux::addLibStdCxxIncludePaths()
>
> Add to LibStdCXXIncludePathCandidates[]: (about line 867)
>
> LibDir.str() + "/include/c++/" + Version.Text,
>
> Which is to say you need find libstdc++ relative to the lib directory.
>
>
>
> From here I see several options (there might be more)
>
> 1: someone can read this and say "I'll add that patch quick". Since
> it is probably only a few minutes work for someone who knows the
> processes around committing code this is easiest
>
> 2: submit a bug report asking someone to apply the patch above.
>
> 3: I can go through the work of submitting code. (This is mostly
> about getting corporate legal to approve, a formality that should just
> take a couple weeks)
>
> 4: Do nothing - there are infinite ways to configure a system file
> locations, and supporting all the weird ones is not worth the code
> clutter. Distributions should use the common locations or patch clang
> themselves. (while somewhat hostile it isn't entirely a bad option)
>
>
>
> If nobody suggests otherwise I'll take the lazy approach and choose 4.
>
>
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>
More information about the cfe-dev
mailing list