Skip to content
Travis Geiselbrecht edited this page Feb 20, 2016 · 13 revisions

Architectures, Platforms, Targets, and Projects

The LK build system thinks of the world in four layers.

Projects are what you ask make to build. They are a set of modules (typically apps and libraries) built for a Target. They are defined in project/<name>.mk. The Target is selected via TARGET := <name> in this makefile or an included makefile (in the case where multiple projects share a common configuration). You choose your project by either passing it to make on the commandline (make <name>) or putting a PROJECT := <name> directive in local.mk.

Targets are typically a specific PCB (or family of extremely closely related PCBs, maybe differing just a little, detectable by some revision resistors or the like). They belong to a Platform and are defined in target/<name>/rules.mk. The Platform is selected via PLATFORM := <name> in this makefile.

Platforms typically are Systems-on-Chip (either individual or related families). They belong to an Architecture and are defined in platform/<name>/rules.mk. The Architecture is selected via ARCH := <name> in this makefile.

Architectures are a specific CPU or CPU family (ARM Cortex M3, Intel IA32, etc).

Example Project

An example project is stm32f4-discovery-test. The Target there is stm32f4-discovery (the ST development board of the same name). Its Platform is stm32f4xx, a family of ST microcontrollers. STM32_CHIP is set to stm32f407 for things that may be specific to that chip. Some GLOBAL_DEFINES are configured here as well, like HSE_VALUE which is the frequency of the crystal — a platform-specific definition. The Platform stm32f4xx sets ARCH as arm and ARM_CPU (specific to arm architecture) to cortex-m4, as well as configuring other platform-specific values.

The above configuration information lives in the following files in the lk source tree:
project/stm32f4-discovery-test.mk
target/stm32f4-discovery/rules.mk
platform/stm32f4xx/rules.mk
arch/arm/rules.mk