-
Notifications
You must be signed in to change notification settings - Fork 751
Building Outside The LK Tree
The build system provides a mechanism to overlay additional projects, targets, platforms, apps, libs, etc, from sibling directory hierarchies. This allows you to more easily build and maintain projects that are not part of the main lk tree.
For example, say you have LK checked out in an lk directory, and next to that
you have a mystuff directory (a checkout of your own source tree). It can
contain your own projects, libraries, and apps, like so:
mystuff/project/toaster-oven.mk
mystuff/target/toaster-oven/{rules.mk, init.c, ...}
mystuff/app/toaster-ui/{rules.mk, main.c, ...}
mystuff/lib/cool-lcd/{rules.mk, lcddriver.c, ...}
mystuff/lib/pid-controller/...
If you copy lk/makefile to mystuff/makefile and create lk_inc.mk like so:
LOCAL_DIR := mystuff LKMAKEROOT := .. LKROOT := lk LKINC := $(LOCAL_DIR) DEFAULT_PROJECT ?= toaster-oven BUILDROOT ?= $(LOCAL_DIR)
You can then cd to mystuff and run make to build your project.
You don’t need to modify anything in the main lk tree, so it’s
easy to keep that up to date — no need to fork it, merge or
rebase your changes, etc.
LKMAKEROOT is the relative path from the overlay tree you’re building
in to the directory that’s above the lk directory and any overlay tree
directories (you can have multiple of these if you like). This variable
is the only one that can have .. path elements in it. Such elements
used anywhere else will cause the build system to misbehave.
LKROOT is the path relative to LKMAKEROOT to LK itself
LKINC is the set of paths relative to LKMAKEROOT to overlay directories
DEFAULT_PROJECT does what it says — sets the project to build if another
is not specified when make is invoked.
BUILDROOT is relative to LKMAKEROOT and is the directory where build-$(PROJECT)
will live, containing the build results.
You can also specify your TOOLCHAIN_PREFIX here to point at your chosen
cross-compiler for this overlay.