tree: 196ddab048742ca32028e5d9b8e0a54402846f37 [path history] [tgz]
  1. common_flags.mk
  2. compile_proto.mk
  3. gen_manifest.mk
  4. library.mk
  5. README.md
  6. trusted_app.mk
  7. userspace_recurse.mk
make/README.md

Trusty userspace build system

The userspace build system is built on top of the lk build system, along with the xbin extension for building multiple independent modules. Libraries are built independently into static library archives and their build flags are cached for use by future modules. When a library or app depends on another library, its cached flags are added to the current module flags and re-exported in the case of a library.

The top-level entry point for building a userspace app is the trusty-build-rule function in user-tasks.mk. This helper function kicks off generation of the necessary build rules using the new module system. See the doc comment on the function's definition for more details on usage.

Library rules files must include make/library.mk after the appropriate variables have been configured, and similarly, apps must include make/trusted_app.mk. These makefiles handle the generation of the appropriate build rules for the app or library. See the comments at the beginning of these makefiles for a full list of the relevant variables that can be set in library/app rules files to control the build.

library.mk includes userspace_recurse.mk to handle isolation of libraries from each other and the main app, along with proper dependency chains and propagation of flags up from dependencies. Users writing rules for libraries should never need to interact with this makefile directly.

Example Library Rules

Note the use of library.mk rather than module.mk. Apps rules are structured the same, but must include make/trusted_app.mk instead of library.mk.

Libraries and apps must use the MODULE_MODULE_LIBRARY_DEPS variable to add other libraries as dependencies. See library.mk for a full list of input variables available for use in library rules.mk files.

LOCAL_DIR := $(GET_LOCAL_DIR)
MODULE := $(LOCAL_DIR)

MODULE_SRCS := $(LOCAL_DIR)/source_file.c

MODULE_LIBRARY_DEPS := trusty/user/base/lib/tipc

include make/library.mk

Include Diagram

user-tasks.mk is included by lk make/build.mk as an extra build rule.

user-tasks.mk
   |
   |--> arch/$(ARCH)/toolchain.mk
   |
   \--> For each user task $TASK in $(ALL_USER_TASKS):
          | MODULE := $(TASK)
          |
         make/userspace_recurse.mk
            |
            | Reset all GLOBAL_ and MODULE_ variables to get
            | a clean state.
            |
            |--> $(TASK)/rules.mk
            |      |
            |      \--> make/trusted_app.mk
            |            | TRUSTY_APP = true
            |            |
            |            |    /---------------------------------------------------------------\
            |            |    |                                                               |
            |            |    v                                                               |
            |            |--> make/library.mk                                                 |
            |            |        |                                                           |
            |            |        | Cache flags for this module in _MODULES_$(MODULE)_$(FLAG) |
            |            |        | variables.                                                |
            |            |        |                                                           |
            |            |        | For each DEPENDENCY_MODULE in                             |
            |            |        | $(MODULE_LIBRARY_DEPS):                                   |
            |            |        |--> make/userspace_recurse.mk                              |
            |            |        |     |                                                     |
            |            |        |     | Reset all GLOBAL_ and MODULE_ variables to get      |
            |            |        |     | a clean state.                                      |
            |            |        |     |                                                     |
            |            |        |     | TRUSTY_APP = false                                  |
            |            |        |     |                                                     |
            |            |        |     |--> $(DEP)/rules.mk                                  |
            |            |        |     |      |                                              |
            |            |        |     |      \______________________________________________/
            |            |        |     |
            |            |        |     |
            |            |        |     | Restore GLOBAL_ and MODULE_ variables to saved values
            |            |        |     |
            |            |        |     | Add dependency's flags to current module's
            |            |        |     | private flags.
            |            |        |
            |            |        | Cache library and ldflags for this module in
            |            |        | _MODULES_$(MODULE)_$(FLAG) variables.
            |            |        |
            |            |        \--> make/module.mk --> make/compile.mk
            |            |
            |            |
            |            | Build app ELF binary from objects and all dependency libraries
            |            | (formerly done by xbin.mk).
            |
            |
            | Restore GLOBAL_ and MODULE_ variables to saved values.