cross compiling with 6.0.0 not finding gcc paths

I’m building for an embedded system, this is working fine with gcc 5.2.0, but I’ve become interested in clang. In 3.9.1 everything builds fine (once I fixed the real bugs – thank you to everyone who wrote useful warnings). I’m interested in trying clang 6.0.0, and there things don’t build.

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-linux/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-linux/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-linux/x86_64-wrs-linux-ld: error: cannot find -lgcc

/opt/jdx/tools/sysroots/x86_64-wrlinuxsdk-linux/usr/bin/x86_64-wrs-linux/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)

crtbegin.o is in /home/repo/jdx/wr8-baytrail_64/buildbox/usr/lib64/x86_64-wrs-linux/5.2.0/crtbegin.o When I copy the missing files to /home/repo/jdx/wr8-baytrail_64/buildbox/usr/lib64 cmake passes and but the build fails on unable to find and , I started to add include paths for jdx/wr8-baytrail_64/buildbox/usr/include/c++/5.2.0/ and that gets farther. However it is time to stop hacking the wrong way and fix the real problem. I suspect the problem is related to clang not understanding my --target option and thus not asking gcc for the paths to the missing files, but I don’t really know how to make this work.

A search finds https://stackoverflow.com/questions/4160262/clang-linker-problem, but it isn’t helpful because the code in that area has changed so much.

My host is x86-64 linux. The target OS is x86_64 embedded linux (the sysroot is NOT compatible with the host libraries)

Can someone give me a hint about where I should look to make this work. I can change either the command line arguments or the clang source code but I’m not clear on where the right place to look is.

Does it help to pass the following to the clang command line: --gcc-toolchain=/home/repo/jdx/wr8-baytrail_64/buildbox/usr/lib64 ?

Have you tried to use --gcc-toolchain frontend option in order to provide with a non-standard location of GCC?

No. I played with a few alternate paths, but that doesn’t seem to make a difference. Any other ideas?

[2/2] Linking C executable cmTC_68894

FAILED: cmTC_68894

: && /opt/jdx/tools//usr/bin/clang --sysroot=/home/repo/jdx/wr8-baytrail_64/buildbox -fno-omit-frame-pointer -gsplit-dwarf -v --gcc-toolchain=/home/repo/jdx/wr8-baytrail_64/buildbox/usr/lib64/ --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_68894.dir/testCCompiler.c.o -o cmTC_68894 && :

clang version 6.0.0 (tags/RELEASE_600/final)

Target: x86_64-wrs-linux

Thread model: posix

InstalledDir: /opt/jdx/tools//usr/bin

“/opt/jdx/tools/sysroots/x86_64-wrlinuxsdk-linux/usr/bin/x86_64-wrs-linux/x86_64-wrs-linux-ld” --sysroot=/home/repo/jdx/wr8-baytrail_64/buildbox -export-dynamic -z relro --hash-style=gnu --eh-frame-hdr -m elf_x86_64 -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_68894 /home/repo/jdx/wr8-baytrail_64/buildbox/usr/lib/…/lib64/crt1.o /home/repo/jdx/wr8-baytrail_64/buildbox/usr/lib/…/lib64/crti.o crtbegin.o -L/home/repo/jdx/wr8-baytrail_64/buildbox/usr/local/lib -L/home/repo/jdx/wr8-baytrail_64/buildbox/lib/…/lib64 -L/home/repo/jdx/wr8-baytrail_64/buildbox/usr/lib/…/lib64 -L/home/repo/jdx/wr8-baytrail_64/buildbox/lib -L/home/repo/jdx/wr8-baytrail_64/buildbox/usr/lib --gdb-index -lrt -lpthread --disable-new-dtags CMakeFiles/cmTC_68894.dir/testCCompiler.c.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed crtend.o /home/repo/jdx/wr8-baytrail_64/buildbox/usr/lib/…/lib64/crtn.o

/opt/jdx/tools/sysroots/x86_64-wrlinuxsdk-linux/usr/bin/x86_64-wrs-linux/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-linux/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-linux/x86_64-wrs-linux-ld: error: cannot find -lgcc

/opt/jdx/tools/sysroots/x86_64-wrlinuxsdk-linux/usr/bin/x86_64-wrs-linux/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)

ninja: build stopped: subcommand failed.

I would try the following

–gcc-toolchain=/home/repo/jdx/wr8-baytrail_64/buildbox/usr/

I’ve tried every path in my sysroot up to crtbegin.o and it doesn’t make a difference

/home/repo/jdx/wr8-baytrail_64/buildbox/

/home/repo/jdx/wr8-baytrail_64/buildbox/usr

/home/repo/jdx/wr8-baytrail_64/buildbox/usr/lib64/

/home/repo/jdx/wr8-baytrail_64/buildbox/usr/lib64/x86_64-wrs-linux

/home/repo/jdx/wr8-baytrail_64/buildbox/usr/lib64/x86_64-wrs-linux/5.2.0/

On MacPorts we have patched clang-6.0 to find and use gcc7's libgcc's libstdc++ installed into non-standard locations by adding search paths and link paths to clang, controlled by a flag in the build.

You might find a useful clue in there as to how you could force a custom build of clang yourself to find what you want it to find, if a preexisting flag doesn't exist.

For these modifications, see:

<https://github.com/macports/macports-ports/blob/master/lang/llvm-6.0/files/9001-macports-libstdcxx.diff>

and

<https://github.com/macports/macports-ports/blob/master/lang/llvm-6.0/Portfile>

Ken