waydroid_script
waydroid_script copied to clipboard
libhoudini install breaks 32 bit waydroid
I'm running Waydroid in Ubuntu 22.10. The CPU doesn't support SSE4.2, so Waydroid installs 32-bit Android. It works. But then if I install libhoudini, it stops working. The only relevant error message I'm able to see is this in waydroid log:
lxc-start: waydroid: conf.c: run_buffer: 321 Script exited with status 126
This seems to be because of the way build props are set, including 64 abi props. I got Waydroid to work again by changing abi props to:
ro.product.cpu.abi=x86
ro.product.cpu.abilist=x86,armeabi-v7a,armeabi
ro.product.cpu.abilist32=x86,armeabi-v7a,armeabi
After that I could install an app with 32 bit arm libraries. But then, trying to run it, I get this in logcat:
11-15 16:33:10.653 44041 44110 D houdini : [44110] Expected CPU feature >> AES << is not supported.
11-15 16:33:10.653 44041 44110 D houdini : [44110] Expected CPU feature >> POPCNT << is not supported.
11-15 16:33:10.653 44041 44110 D houdini : [44110] Expected CPU feature >> SSE4_2 << is not supported.
11-15 16:33:10.653 44041 44110 D houdini : [44110] Expected CPU feature >> PCLMULQDQ << is not supported.
11-15 16:33:10.658 45 45 I tombstoned: received crash request for pid 44041
So, at least this build of houdini can't actually run on my CPU. I wonder if houdini can be built without those requirements?
Edit: Installing libndk runs into the same problems. Again there is a need to edit system/build.prop the same way. Then when I try to run the app, it dies with SIGILL (illegal instruction) in the NDK library.
Using https://github.com/mirh/opemu-linux, which I needed to alter a bit to run with my kernel, the translators crash a different way instead. Opemu works well enough to make POPCNT work, but I guess there are some problems with other instructions.
update your hardware
It would be nice if waydroid_script refused to install Houdini on 32 bit Waydroid instead of breaking Waydroid.
There are 3 versions of Houdini:
x: arm32 translation for x86
y: arm32 translation for x86_64
z: arm64 translation for x86_64
But after Android11, only y and z exist.