<div dir="ltr"><div>Hello,</div><div><br></div><div>Thanks for the detailed report. We do test libc build on Aarch64 regularly but we use the Ninja generator and clang for our compiler. The problems you are seeing are perhaps linked to using gcc as a compiler. We are working on getting the build going gcc. We will also add a CI builder testing everything end-to-end with gcc.</div><div><br></div><div>Thanks,</div><div>Siva Chandra</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Nov 30, 2020 at 10:38 AM Juergen Ilse via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hello,<br>
<br>
i got errors, when i tried to compile llvm-11.0.0 on rasberry pi4 (8 GB model),<br>
I tried to compile llvm-11.0.0 with gcc-8.3.0 as it was per default installed<br>
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<br>
used to detect an llvm directory. To get around that issue, i used a script<br>
named g++ instead of the real compiler found in /usr/bin/g++. The script<br>
looked like this:<br>
<br>
#!/bin/sh<br>
if test "x$1" = "x--print-resource-dir"; then<br>
        echo /usr/local/lib/clang/11.0.0<br>
else<br>
        /usr/bin/`basename $0` "$@"<br>
fi<br>
<br>
That was a (quick and dirty) workaround for this first issue. If you know <br>
a better workaround, please let me know.<br>
<br>
The second error was, that one test tried to include <malloc/malloc.h>, but <br>
on RaspiOS, the include file malloc.h is not in a subdirectory "malloc".<br>
<br>
To avoid this error, i changed temporarily my system with creating a <br>
directory /usr/include/malloc and creating a softlink from <br>
/usr/include(malloc.h to /usr/include/malloc/malloc.h.This workaround was <br>
more simple than searching and patching the CMakefiles to test for <br>
<malloc.h> and <malloc/malloc.h><br>
<br>
The next error was with testing cpu geatures. I found a special and (i hope)<br>
portable workaround for the case, that there are no special cpu features.<br>
<br>
I simply applied the following patch to the file <br>
llvm-project-11.0.0/libc/cmake/modules/cpu_features/<a href="http://check_cpu_features.cpp.in" rel="noreferrer" target="_blank">check_cpu_features.cpp.in</a>:<br>
<br>
+++ llvm-project-11.0.0/libc/cmake/modules/cpu_features/check_cpu_features.cpp.in.orig  2020-11-30 00:18:12.569056896 +0100<br>
@@ -17,7 +17,7 @@<br>
<br>
 int main(int, char **) {<br>
   const char *strings[] = {<br>
-      @DEFINITIONS@ ""<br>
+      @DEFINITIONS@<br>
   };<br>
   const size_t size = sizeof(strings) / sizeof(strings[0]);<br>
   for (size_t i = 0; i < size; ++i) {<br>
<br>
<br>
With adding the empty string in this line, there will be no change in the <br>
case, where @DEFINITIONS@ is empty (because ISO C++ will concatenate the<br>
last string in @DEFINITIONS@ with the empty string, which will result in<br>
the same string), but it will lead to a non empty list of strings <br>
consisting only of the emptystring in the case of an empty @DEFINITIONS@.<br>
With an empty @DEFINITIONS@, the above source will result in syntax errors,<br>
because C++ does not allow "const char *strings[] = { };" ...<br>
<br>
For the next error, i didn't find a workaround, because my C++ knowledge <br>
is not good enough to find a fix for this error:<br>
<br>
[ 76%] Building CXX object projects/libc/src/math/CMakeFiles/libc.src.math.modff_objects.dir/modff.cpp.o<br>
In file included from /usr/src/llvm-11/llvm-project-11.0.0/libc/utils/FPUtil/ManipulationFunctions.h:9,<br>
                 from /usr/src/llvm-11/llvm-project-11.0.0/libc/src/math/modff.cpp:10:<br>
/usr/src/llvm-11/llvm-project-11.0.0/libc/utils/FPUtil/FPBits.h:103:37: error: expected ‘)’ before ‘x’<br>
   explicit FPBits<long double>(XType x) {<br>
                               ~     ^~<br>
                                     )<br>
/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]’:<br>
/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]’<br>
/usr/src/llvm-11/llvm-project-11.0.0/libc/src/math/modff.cpp:15:31:   required from here<br>
/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]<br>
     *this = *reinterpret_cast<FPBits<T> *>(&x);<br>
             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>
/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]<br>
     *this = *reinterpret_cast<FPBits<T> *>(&x);<br>
     ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>
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<br>
make[1]: *** [CMakeFiles/Makefile2:27781: projects/libc/src/math/CMakeFiles/libc.src.math.modff_objects.dir/all] Fehler 2<br>
make: *** [Makefile:152: all] Fehler 2<br>
<br>
Can you please try to fix those errors in the next release of llvm?<br>
I would like to compile llvm ibcuding libc on 64 Bit Version of RaspiOS<br>
on my Raspi4 ... A "MinSizeRel" build with all other subproject was<br>
successful on my raspi4, but libc led to the above issues (and i think<br>
i found an acceptable workaround for one of them, see the patch above).<br>
<br>
I hope, this information about trying to compile LLVM on RaspiOS 64 Bit<br>
is helpful to make llvm better and more portable.<br>
<br>
Thanks in advance,<br>
        Juergen Ilse                    (<a href="mailto:juergen@usenet-verwaltung.de" target="_blank">juergen@usenet-verwaltung.de</a>)<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div></div>