Build hiddenapi上SIGILL的AOSP9.0生成失败
环境是: VMWare工作站12上的Win7 x 64主机+Ubuntu14.04 x64虚拟机 来源是AOSP 9.0.0_r30 生成错误为: xargs: /OpenSource/Build/Android-9.0.0_r30/src-9.0.0_r30/host/linux-x86/bin/hiddenapi: 由信号4终止 正确答案如下: 原因是我的构建主机CPU(Q6600)不支持SSE4指令 项目艺术要求SSE4,因为在Build hiddenapi上SIGILL的AOSP9.0生成失败,build,android-source,Build,Android Source,环境是: VMWare工作站12上的Win7 x 64主机+Ubuntu14.04 x64虚拟机 来源是AOSP 9.0.0_r30 生成错误为: xargs: /OpenSource/Build/Android-9.0.0_r30/src-9.0.0_r30/host/linux-x86/bin/hiddenapi: 由信号4终止 正确答案如下: 原因是我的构建主机CPU(Q6600)不支持SSE4指令 项目艺术要求SSE4,因为在 art\build\Android.bp 有以下CFLA
art\build\Android.bp
有以下CFLAG:
"-msse4.2",
"-mpopcnt",
以及子项目
art\tools\hiddenapi
继承这些cflag,因此输出主机可执行文件“hiddenapi”将包含SSE4指令,并在构建期间触发SIGILL
根据本页末尾:,您可以通过以下方式进行验证:
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'/\/'~/hiddenapi.asm
然后您将看到它包含一条SSE4指令
删除上述cflags后,源代码将成功构建。但现在还不知道这是否会产生任何bug,尽管cflags似乎只影响主机可执行文件,可能性很低。您可以手动进行此提交中概述的更改,以添加此检查的旁路:在VirtualBox+Ubuntu 18.04中构建时面临相同的问题。这个解决方案对我有效。
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