环境是:
VMWare Workstation 12上的Win7 x 64主机+ Ubuntu14.04 x64 VM
来源是AOSP 9.0.0_r30
构建错误是:
xargs的:
/open source/build/Android-9.0.0_日30/双人床-9.0.0_日30/host/Linux-小86/斌/hidden API:
由信号4终止
正确答案在这里:https://github.com/sonyxperiadev/bug_tracker/issues/207
原因是我的构建主机CPU(Q6600)不支持SSE4指令。
项目艺术需要SSE4,因为在
art\build\Android.bp
有这些cflags:
"-msse4.2",
"-mpopcnt",
和子项目
art\tools\hiddenapi
继承这些cflags,因此输出主机可执行文件“hiddenapi”将包含SSE4指令并在构建期间触发SIGILL。
根据本页末尾:https://superuser.com/questions/726395/how-to-check-if-a-binary-requires-sse4-or-avx-on-linux,您可以通过以下方式验证:
objdump -d /OpenSource/Build/Android-9.0.0_r30/src-9.0.0_r30/host/linux-x86/bin/hiddenapi> ~/hiddenapi.asm
注意:我的OUT_DIR_COMMON_BASE设置为
/OpenSource/Build/Android-9.0.0_r30/
然后
gawk '/\<(mpsadbw|phminposuw|pmulld|pmuldq|dpps|dppd|blendps|blendpd|blendvps|blendvpd|pblendvb|pblenddw|pminsb|pmaxsb|pminuw|pmaxuw|pminud|pmaxud|pminsd|pmaxsd|roundps|roundss|roundpd|roundsd|insertps|pinsrb|pinsrd|pinsrq|extractps|pextrb|pextrd|pextrw|pextrq|pmovsxbw|pmovzxbw|pmovsxbd|pmovzxbd|pmovsxbq|pmovzxbq|pmovsxwd|pmovzxwd|pmovsxwq|pmovzxwq|pmovsxdq|pmovzxdq|ptest|pcmpeqq|pcmpgtq|packusdw|pcmpestri|pcmpestrm|pcmpistri|pcmpistrm|crc32|popcnt|movntdqa|extrq|insertq|movntsd|movntss|lzcnt)\>/' ~/hiddenapi.asm
然后你会看到它包含一条SSE4指令......
删除上面的cflags之后,源代码将成功构建。但是这是否会产生任何错误现在都是未知的,但由于cflags似乎只影响主机可执行文件,因此机会很低。