<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Thu, Apr 19, 2018 at 12:57 PM Milian Wolff <<a href="mailto:mail@milianw.de">mail@milianw.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Donnerstag, 19. April 2018 14:12:21 CEST Manuel Klimek wrote:<br>
<snip><br>
<br>
> Ah, sorry, I missed the neon part. So this works if we add<br>
> -mcpu=cortex-a15. The problem is that the gcc cross compiler apparently has<br>
> that configured at build time, and I'm not sure what the best way is to<br>
> figure out the full settings for cpu / fpu and float-abi, but I think we'll<br>
> need to find some way to gather them from the underlying cross compiler.<br>
<br>
OK, thanks. This brings us one more step closer towards emulation and should <br>
be sufficient for the example I have given. So, we now end up with these <br>
steps:<br>
<br>
#1: query the target compiler<br>
$ ./gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-<br>
gnueabihf-gcc -xc++ -E -v -dM - < /dev/null<br>
<br>
#2: parse the output for the target:<br>
Target: arm-linux-gnueabihf<br>
<br>
#3: parse the default march GCC argument from:<br>
COLLECT_GCC_OPTIONS='-E' '-v' '-dM' '-march=armv7-a' '-mtune=cortex-a9' '-<br>
mfloat-abi=hard' '-mfpu=vfpv3-d16' '-mthumb' '-mtls-dialect=gnu'<br>
<br>
#4: parse the include paths:<br>
#include <...> search starts here:<br>
 /home/milian/Downloads/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf/<br>
bin/../lib/gcc/arm-linux-gnueabihf/7.2.1/include<br>
 /home/milian/Downloads/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf/<br>
bin/../lib/gcc/arm-linux-gnueabihf/7.2.1/include-fixed<br>
 /home/milian/Downloads/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf/<br>
bin/../lib/gcc/arm-linux-gnueabihf/7.2.1/../../../../arm-linux-gnueabihf/<br>
include<br>
 /home/milian/Downloads/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf/<br>
bin/../arm-linux-gnueabihf/libc/usr/include<br>
<br>
#5: exclude the GCC builtin include path, i.e.:<br>
 /home/milian/Downloads/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf/<br>
bin/../lib/gcc/arm-linux-gnueabihf/7.2.1/include<br>
<br>
For now, this can be done by some heuristics, like checking whether the folder <br>
contains a "varargs.h" file.<br>
<br>
#6: parse the defines and write all into a file that starts with `#pragma <br>
clang system_header`<br></blockquote><div><br></div><div>This might still break if you define things that the compiler wants to define on its own, so you might need a filter, but overall this looks reasonable now :)</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
#7 parse the file with clang:<br>
<br>
clang -Xclang -ast-dump -fsyntax-only -xc++ \<br>
  -target arm-linux-gnueabihf \ (from #2)<br>
  -march=armv7-a \ (from #3)<br>
  -isystem... \ (from #4, 5)<br>
  -imacros... \ (from #6)<br>
  file.cpp<br>
<br>
This seems to work! Thanks for the help Manuel!<br>
<br>
-- <br>
Milian Wolff<br>
<a href="mailto:mail@milianw.de" target="_blank">mail@milianw.de</a><br>
<a href="http://milianw.de" rel="noreferrer" target="_blank">http://milianw.de</a></blockquote></div></div>