[llvm-dev] Bug in compiling libc on AArch64 (rasberry pi4)
Juergen Ilse via llvm-dev
llvm-dev at lists.llvm.org
Sun Nov 29 17:22:22 PST 2020
Hello,
i got errors, when i tried to compile llvm-11.0.0 on rasberry pi4 (8 GB model),
I tried to compile llvm-11.0.0 with gcc-8.3.0 as it was per default installed
on the RaspiOS 64 Bit Version. First i git error Messages, because gcc does not know anything about the command-line option "--print-resource-dir", which was
used to detect an llvm directory. To get around that issue, i used a script
named g++ instead of the real compiler found in /usr/bin/g++. The script
looked like this:
#!/bin/sh
if test "x$1" = "x--print-resource-dir"; then
echo /usr/local/lib/clang/11.0.0
else
/usr/bin/`basename $0` "$@"
fi
That was a (quick and dirty) workaround for this first issue. If you know
a better workaround, please let me know.
The second error was, that one test tried to include <malloc/malloc.h>, but
on RaspiOS, the include file malloc.h is not in a subdirectory "malloc".
To avoid this error, i changed temporarily my system with creating a
directory /usr/include/malloc and creating a softlink from
/usr/include(malloc.h to /usr/include/malloc/malloc.h.This workaround was
more simple than searching and patching the CMakefiles to test for
<malloc.h> and <malloc/malloc.h>
The next error was with testing cpu geatures. I found a special and (i hope)
portable workaround for the case, that there are no special cpu features.
I simply applied the following patch to the file
llvm-project-11.0.0/libc/cmake/modules/cpu_features/check_cpu_features.cpp.in:
+++ llvm-project-11.0.0/libc/cmake/modules/cpu_features/check_cpu_features.cpp.in.orig 2020-11-30 00:18:12.569056896 +0100
@@ -17,7 +17,7 @@
int main(int, char **) {
const char *strings[] = {
- @DEFINITIONS@ ""
+ @DEFINITIONS@
};
const size_t size = sizeof(strings) / sizeof(strings[0]);
for (size_t i = 0; i < size; ++i) {
With adding the empty string in this line, there will be no change in the
case, where @DEFINITIONS@ is empty (because ISO C++ will concatenate the
last string in @DEFINITIONS@ with the empty string, which will result in
the same string), but it will lead to a non empty list of strings
consisting only of the emptystring in the case of an empty @DEFINITIONS at .
With an empty @DEFINITIONS@, the above source will result in syntax errors,
because C++ does not allow "const char *strings[] = { };" ...
For the next error, i didn't find a workaround, because my C++ knowledge
is not good enough to find a fix for this error:
[ 76%] Building CXX object projects/libc/src/math/CMakeFiles/libc.src.math.modff_objects.dir/modff.cpp.o
In file included from /usr/src/llvm-11/llvm-project-11.0.0/libc/utils/FPUtil/ManipulationFunctions.h:9,
from /usr/src/llvm-11/llvm-project-11.0.0/libc/src/math/modff.cpp:10:
/usr/src/llvm-11/llvm-project-11.0.0/libc/utils/FPUtil/FPBits.h:103:37: error: expected ‘)’ before ‘x’
explicit FPBits<long double>(XType x) {
~ ^~
)
/usr/src/llvm-11/llvm-project-11.0.0/libc/utils/FPUtil/FPBits.h: In instantiation of ‘__llvm_libc::fputil::FPBits<T>::FPBits(XType) [with XType = float; typename __llvm_libc::cpp::EnableIf<__llvm_libc::cpp::IsSame<T, XType>::Value, int>::Type <anonymous> = 0; T = float]’:
/usr/src/llvm-11/llvm-project-11.0.0/libc/utils/FPUtil/ManipulationFunctions.h:88:13: required from ‘T __llvm_libc::fputil::modf(T, T&) [with T = float; typename __llvm_libc::cpp::EnableIf<__llvm_libc::cpp::IsFloatingPointType<Type>::Value, int>::Type <anonymous> = 0]’
/usr/src/llvm-11/llvm-project-11.0.0/libc/src/math/modff.cpp:15:31: required from here
/usr/src/llvm-11/llvm-project-11.0.0/libc/utils/FPUtil/FPBits.h:81:13: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
*this = *reinterpret_cast<FPBits<T> *>(&x);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/src/llvm-11/llvm-project-11.0.0/libc/utils/FPUtil/FPBits.h:81:11: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
*this = *reinterpret_cast<FPBits<T> *>(&x);
~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
make[2]: *** [projects/libc/src/math/CMakeFiles/libc.src.math.modff_objects.dir/build.make:63: projects/libc/src/math/CMakeFiles/libc.src.math.modff_objects.dir/modff.cpp.o] Fehler 1
make[1]: *** [CMakeFiles/Makefile2:27781: projects/libc/src/math/CMakeFiles/libc.src.math.modff_objects.dir/all] Fehler 2
make: *** [Makefile:152: all] Fehler 2
Can you please try to fix those errors in the next release of llvm?
I would like to compile llvm ibcuding libc on 64 Bit Version of RaspiOS
on my Raspi4 ... A "MinSizeRel" build with all other subproject was
successful on my raspi4, but libc led to the above issues (and i think
i found an acceptable workaround for one of them, see the patch above).
I hope, this information about trying to compile LLVM on RaspiOS 64 Bit
is helpful to make llvm better and more portable.
Thanks in advance,
Juergen Ilse (juergen at usenet-verwaltung.de)
More information about the llvm-dev
mailing list