2.9 KiB
Porting
FRT is a modular system, and FRT modules can be developed and tested mostly in isolation, without compiling them as part of Godot. The idea is that developing and testing a module can be done on a real board with a very quick test cycle. Once the module is tested, it can be compiled as part of Godot.
As an example, compiling and linking every FRT module from scratch takes less
than 5 seconds on a Pi 2. Relinking them takes less than 1 second.
As another example, compiling and linking the video_fbdev
module on a
A10-based board takes less than 3 seconds.
Modules don't need to be generic. For example, you could access a custom
device via GPIO and make a custom module implementing the frt::Keyboard
interface. You can then use it instead of one of the standard keyboard
modules.
Compiling and Testing a Module
To get familiar with the process, here is how to compile and test the
mouse_x11
module on a Linux debian desktop. Either clone the repository
or uncompress the FRT source tarball:
$ git clone https://github.com/efornara/frt
$ cd frt
The X11 FRT modules can dynamically load the libX11.so
library. The loading
code is not included in the repository and it is generated by a python script.
If you have python available, you can generate the loading code like this:
$ cd dl
$ ./procdl.py x11.dl
You will then have to compile and link the generated x11.gen.cpp
file.
If you don't have python available, you can use a shell script that generates
a mock x11.gen.h
file instead:
$ ./minidl.py x11.dl
In this case, there is no 'x11.gen.cpp` file to compile and link.
In the porting
directory, there is a sample Makefile
. It has been written
so that there shouldn't be a need to change it. Instead, changes can be made
to the Local.mk
file. If you are using git, you don't need to commit the
file to the repository and you can just soft-link the real one to it:
$ cd ../porting
$ make local
git update-index --assume-unchanged Local.mk
$ touch Test.mk
$ ln -sf Test.mk Local.mk
Here is an example Test.mk
for the python-generated dynamic loading code.
OBJS += test_mouse.o mouse_x11.o x11.gen.o
LIBS += -ldl
And here is an example Test.mk
for the mock dynamic loading header:
OBJS += test_mouse.o mouse_x11.o
LIBS += -lX11
You can then compile and test the module like this:
$ make run
Tips
-
If you have a powerful board, consider starting the Godot compilation in background, making sure to choose compilation options carefully as changing them later can trigger a full recompile. Also, make sure that ALSA and udev are enabled (if you need them).
-
If you don't have a powerful board, consider cross compiling.
-
If you need to add preprocessor definitions or special include directories to the compiler command line, add them in the cloned
frt_env
environment defined inSCsub
. This way, they will only be used when compiling the files inplatform/frt
and changing them will not trigger a full recompile.