Starboard on DirectFB

Starboard features a configuration for DirectFB, allowing applications targeting Starboard to be run on devices that support DirectFB.

Building Starboard to target DirectFB is setup as its own configuration which must be specifically selected by gyp. The configuration files can be found in starboard/linux/x64directfb, the same directory as this README file. The configuration assumes that DirectFB is running on a Linux x64 platform.

Building an application for Starboard DirectFB x64 Linux

First, ensure that the DirectFB libraries are installed and accessible.

$ sudo apt-get install libdirectfb-dev libdirectfb-extra

Next, run gyp for this DirectFB configuration:

$ cobalt/build/gyp_cobalt linux-x64directfb

And finally, run ninja to build the application:

$ ninja -C out/linux-x64directfb_debug starboard_blitter_example

Running an application built for Starboard DirectFB x64 Linux

If you are using a desktop Linux workstation to run the executable, you will likely not have framebuffer support enabled in your Linux build. In order to have DirectFB applications run under X11, you will need to modify your DirectFB configuration file.

$ vi ~/.directfbrc
    > system=x11
    > quiet

Adding the “quiet” flag is optional, it will suppress log output from DirectFB.

You can now run applications built under this configuration. However, if you run an application, you may encounter a message (if you don’t specify “quiet” in your .directfbrc file) indicating that XShm is not being used. If you see this, you will likely encounter a crash when DirectFB is shutdown (such as during application shutdown). To avoid this, you can run all DirectFB apps through Xephyr.

First, install Xephyr:

$ sudo apt-get install xserver-xephyr

There is a script, starboard/linux/x64/directfb/xephyr_run.sh which will automatically run an executable (and its parameters) within a Xephyr window. For example, to run the nplb executable under Xephyr:

$ starboard/linux/x64directfb/xephyr_run.sh out/linux-x64directfb_debug/nplb

Note that the script will start an instance of Xephyr, run the application within it, and then shutdown Xephyr when the application terminates.

If you would like to manually start Xephyr and run applications within it (e.g. to make debugging easier), you can do so by first starting Xephyr in the background:

$ Xephyr -screen 1920x1080 :1 2> /dev/null &

And then launch the application and have it target the Xephyr display:

$ DISPLAY=:1 out/linux-x64directfb_debug/starboard_blitter_example

or

$ DISPLAY=:1 out/linux-x64directfb_debug/nplb