MaskRay added a comment. > While cross-compiling Linux kernel tools with Clang on ArchLinux, it was > revealed the sysroot is not properly detected and instead of fixing the root > cause in Clang, kernel developers started doing workarounds [1] upon > workarounds [2] in the kernel build to be able to pass a working sysroot > during Clang invocation.
I disagree that [1] and [2] are workarounds. Figuring out the sysroot and GCC installation directory is the canonical and bullet-proof way to let Clang reuse the glibc/GCC files. It works for system cross GCC packages as well as user-built cross GCC packages, regardless how sysroot is configured. Other approaches require file hierarchy detection which is more or less brittle. Some is unavoidable as we want Clang to be a drop-in replacement of GCC. Unfortunately traditionally we did not set a clear bar and many extended system packages are supported, e.g. the strange mips distribution detection, gentoo-config, RedHat devtools, etc. Adding such extended support just doesn't scale. Thankfully the main branch has now a fullblown configuration file support (probably with some rough edges) and they can be easily extended to support a new distribution's bespoke GCC customization. For the Arch Linux example, what if another distribution claims that they use `/usr/aarch64-linux-gnu/sysroot` and suit them better? What if it is another directory? Clang Driver detects a GCC installation in the sysroot, then it is backward to change the sysroot after a GCC installation is found. Worse, `computeSysroot` result does not completely replace reading the stored `Sysroot` variable. Some places (e.g. -isysroot, --print-search-dirs) use the `Sysroot` variable. I am inclined to think that they are correct and what we actually need to fix are mips/Android/CSKY in `Linux::computeSysRoot`. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D134454/new/ https://reviews.llvm.org/D134454 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits