24 Sept 2012

Wayland on Android: upgrade to 4.0.4 and new build integration

We at Collabora have been working on a new Android build system integration with autotools projects, still based on Androgenizer (git). Now we have our own repo manifest repository, and a tool called anagrman for managing optional feature packages (aggregates). Wayland on Android is one feature package, and the first to become available. We also upgraded to Ice Cream Sandwhich 4.0.4_r2.1. Instead of a snapshot release, this particular announcement is about live branches.

Weston (git) was upgraded to upstream as of Sept. 18th, 2012, though there are no user visible changes on Android. This brings the 0.95 protocol, and the new evdev input rework from upstream, which went through some changes since the 4.0.1_r1.2-b Wayland on Android release. Weston now has its GLESv2 renderer separated in code, and shaders are faster and simpler (I have not done any shader benchmarks myself).

Libxkbcommon lost its final dependencies to kbproto and xproto, and our Android build files are upstream. Thanks to Daniel Stone, we can use libxkbcommon straight from upstream.

The new Android build system integration requires you to manually download only anagrman in addition to Android repo. There is no make wayland-aggregate-configure step anymore, all generated Android makefiles are created during the full build. Also androgenizer and wayland-scanner are built automatically as needed. All this is possible using the makefile update feature of GNU Make. If there is a rule that can update a makefile, GNU Make will update the makefile as needed. If any makefiles were updated, Make will then start from scratch, reading in all makefiles again, before continuing to the actual build phase. This causes Make to reload all Android makefiles 2-3 times during the first build. It should also solve any dependency issues of the explicit configure step, like when one project's configure depends on another project's fully built library. A big thank you to Helio Chissini de Castro for doing most of the build system work.

This work is available in two ways:
The ready-made image is configured to launch Weston at boot instead of SurfaceFlinger (the setting is in device/samsung/maguro/system.prop in the source tree). The source code, however, does not start Weston nor SurfaceFlinger automatically. You have to use the commands # adb root and # adb shell to log into the phone, and run one of:
  • # setprop service.compositor surfaceflinger
  • # setprop service.compositor weston
You can also run Weston by just # weston & and start other demo clients manually. Weston will automatically start simple-touch finger drawing demo, and the power button will cause Weston to power off the phone. The available demo apps are: simple-touch, simple-shm, flower, and clickdot. Any GL based demos are not included, since the EGL Wayland platform for clients is still unimplemented.

Even though this is a live release, i.e. not tagged to a specific revision, I do not expect much changes in the near future. We are now researching other ways to enable Wayland on Android and other embedded-like devices.

5 comments:

Inactive Account said...

Excellent.
Thank you!

Qole Pejorian said...

Is there any hope of SurfaceFlinger and Weston coexisting peacefully (either being able to share the display or Weston being able to replace SurfaceFlinger for Android apps)?

I really look forward to seeing X clients being able to run on Android via this project.

pq said...

Qole, I think I can safely say, that not by me in the near future. But, you might be interested in combining these two:
http://www.youtube.com/watch?v=HItv4HX5r3k
http://www.youtube.com/watch?v=TEkubKZaUt8

ilia said...

As you know, Wayland on the desktop is not supported by the proprietary drivers. I think that your project brings a solution to this problem. Do you plan to use your experience in the direction of Wayland adaptation to work with proprietary drivers on the desktop?

pq said...

ilia, no, for several reasons in this particular context: I do not work on this anymore, desktop drivers do not have an open source wrapper libEGL like Android does, and desktop drivers are always tied to X from what I've seen. I've never heard of a proprietary desktop gfx driver that worked in any way without X.

As for Wayland on Android hardware, libhybris seems like the way to go.