RFR: 8278954: Using clang together with devkit on linux doesn't work for building

Gilles Duboscq gdub at openjdk.java.net
Fri Dec 17 11:46:41 UTC 2021


When running `configure`, using `--with-devkit=` to point to a typical linux devkit along with `--with-toolchain-path=` and `--with-toolchain-type=clang` to point to a clang-based toolchain results in:

configure:75064: checking whether the C compiler works
configure:75086: /dl/tools/clang -m64 -isysroot /dl/x86_64-linux-gnu-to-x86_64-linux-gnu/x86_64-linux-gnu/sysroot -isysroot /dl/x86_64-linux-gnu-to-x86_64-linux-gnu/x86_64-linux-gnu/sysroot -m64 -isysroot /dl/x86_64-linux-gnu-to-x86_64-linux-gnu/x86_64-linux-gnu/sysroot conftest.c >&5
d.lld: error: cannot open crt1.o: No such file or directory
ld.lld: error: cannot open crti.o: No such file or directory
ld.lld: error: cannot open crtbegin.o: No such file or directory
ld.lld: error: unable to find library -lgcc
ld.lld: error: unable to find library -lgcc_s
ld.lld: error: unable to find library -lc
ld.lld: error: unable to find library -lgcc
ld.lld: error: unable to find library -lgcc_s
ld.lld: error: cannot open crtend.o: No such file or directory
ld.lld: error: cannot open crtn.o: No such file or directory
clang-12: error: linker command failed with exit code 1 (use -v to see invocation)
``` 
This is because clang is unable to locate the gcc installation from the devkit.
The gcc toolchain is not in the location clang expects in the sysroot (that's not how our devkits are structured).
Note that it might go unnoticed on machines that have gcc installed because clang will fallback to system-global locations.

We can help clang by letting it now about the gcc location in the devkit with `--gcc-toolchain=`.
However that's not enough and we then get:

ld.lld: error: cannot open crt1.o: No such file or directory
ld.lld: error: cannot open crti.o: No such file or directory
ld.lld: error: unable to find library -lc
ld.lld: error: cannot open crtn.o: No such file or directory

clang was able to locate the gcc support libraries but is not able to locate required system libraries.
That's because `-isysroot` is not intended for libraries (only headers) but also because `-isysroot` has no effect for clang on linux (see [llvm#11503](https://bugs.llvm.org/show_bug.cgi?id=11503)).
Using `--sysroot=` in this case (clang on linux) resolves this issue.

-------------

Commit messages:
 - 8278954: Using clang together with devkit on linux doesn't work for building

Changes: https://git.openjdk.java.net/jdk/pull/6880/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=6880&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8278954
  Stats: 15 lines in 1 file changed: 13 ins; 0 del; 2 mod
  Patch: https://git.openjdk.java.net/jdk/pull/6880.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/6880/head:pull/6880

PR: https://git.openjdk.java.net/jdk/pull/6880



More information about the build-dev mailing list