Using the Build System#
L4Re uses make for building all artifacts of the system.
While it is always safe and valid to just issue make
from the root directory
of your build tree, this takes longer than needed when building everything is
not required. For example, this is the case if you are working on a specific
package.
There are a couple of options to only build what is of interest.
Build specific packages only#
You can build a specific package only, including its dependencies, like this from the root of your build tree:
build-root-dir$ make pkg/l4re-core/moe
This builds moe including all of moe’s dependencies only.
If you just want to build a package, not considering its dependencies, just do:
build-root-dir$ make -C pkg/l4re-core/moe
In fact that works with any directory.
This is useful if you are working on a specific package and just want to recompile this specific code.
The build system also has a shortcut for building multiple directories at
once like with make’s -C
. For example, if you are working on a library and
need to build the library as well as the program using it, you can do:
build-root-dir$ make S=pkg/mylib/lib/src:pkg/myprog
This will just build those two directories.
Building from the source tree#
If you build from the source tree, you need to specify the root of the
object tree, do this with O=
:
source-tree$ make O=/path/to/obj-tree
Build Anywhere#
The L4Re build system has Makefiles everywhere, so you can also start the build process from everywhere. This includes both the source tree as well as the object tree. The build system will descent to sub-directories.
Parallel Building#
make
uses the -j
parameter with a number indicating the parallelism it
should use. So using make -j8
is a good choice if you happen to have an 8
core machine.
To avoid mixing output of different packages but still benefit from parallel
builds of individual object files of a package, parallel building can be
enabled with the PL=
option. Call make
without -j
like this:
$ make PL=8
Building Intermediate Files#
Within the OBJ-*
directories in the build tree, intermediate .i
pre-processed files and .S
assembly files can be generated, like this:
pkg/l4re-core/moe/server/src/OBJ-arm64_armv8a-std-l4f$ make main.i
pkg/l4re-core/moe/server/src/OBJ-arm64_armv8a-std-l4f$ make main.S
Inspecting Disassembly#
Sometimes it is useful to look at the disassembly of a program. There is a shortcut for this:
pkg/l4re-core/moe/server/src/OBJ-arm64_armv8a-std-l4f$ make disasm
For directories with multiple targets this will automatically disassemble the
first. Specify DABIN
to choose another one in these instances. For example
to disassemble liblua.so
instead of liblua.a
use:
pkg/l4re-core/lua/lib/build/OBJ-arm64_armv8a-std-l4f$ make disasm DABIN=liblua.so