I was trying to build GNU C Library (glibc implementation) using the clang compiler in a x86_64 Linux system. However, whenever I try to set the clang compiler as the compiler in the configure script of glibc, I am getting the following error.
checking if clang is sufficient to build libc… no
I did a quick research to see why does clang compiler is not sufficient to build the glibc implementation and found that the glibc implementation may have some target specific features that GCC only can support. But I am not getting what are the exact reasons behind this insufficiency.
Can anybody please point me what are the exact reason behind this insufficiency. Some examples would also help. Any kind of help would be greatly appreciated. Thank you!
I don’t know for certain but it’s likely due to gcc specific extensions that glibc capitalizes on that clang decided not to implement.
Autoconf produces evidence of what it’s testing for, though. It’s probably testing a particular feature. Depending on your goal you might find it easier to deactivate the check and patch glibc to workaround this feature.
The main reason is that GLIBC uses non-standards compliant extensions for programmers convenience and LLVM want’s to stick to the standards as much as possible.
LLVM also uses some non-standard extensions. For example asm goto; the last time I checked Clang did not support ASM GOTO and so later linux kernels cannot be compiled.
The general answer comes down to standards compliance; that’s my understanding.
There's a fork of glibc in the Sourceware repo that's known to work for at least somewhat being build-able with
Clang/LLVM. Not sure how stable it is outside of static linking, I think with LTO and heavy optimizations you may
stil get a lot of weird quirks. I think the name is "clangify" or something like that, it's up on Sourceware along
with all other glibc forks.
But again this is largely uncharted territory so be prepared to deal with a lot of weird ABI-level bugs, there is
no official support for that fork from any party. I've used Clang to build glibc with dynamic linking successfully
before but the test suite results aren't exactly promising and there's not a lot of effort going into glibc getting
to work with Clang due to its licensing conditions, with some developers putting in more effort into permissive
licensed libcs (ie. Musl and Bionic being two good examples). Contributing to those projects helps a lot more than
untangling the mess that glibc codebase has turned into.
I'll add the obvious disclaimer that this is a just personal opinion of mine etc.
As luck would have it, asm goto was recently implemented in LLVM: http://llvm.org/viewvc/llvm-project?view=revision&revision=353563 (not sure if it’s fully baked yet, that might just be the LLVM part & maybe there’s some Clang plumbing still required)
The clang part is not committed yet. It’s review is here