mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2025-12-13 16:43:52 +01:00
59 lines
2.4 KiB
Plaintext
59 lines
2.4 KiB
Plaintext
---
|
|
title: The Build System
|
|
description: Learn how the build system in RIOT works
|
|
---
|
|
|
|
RIOT uses [GNU make](https://www.gnu.org/software/make/) as build system. The
|
|
simplest way to compile and link an application with RIOT, is to set up a
|
|
Makefile providing at least the following variables:
|
|
|
|
* `APPLICATION`: should contain the (unique) name of your application
|
|
* `BOARD`: specifies the platform the application should be built for by
|
|
default
|
|
* `RIOTBASE`: specifies the path to your copy of the RIOT repository (note,
|
|
that you may want to use `$(CURDIR)` here, to give a relative path)
|
|
|
|
Additionally it has to include the `Makefile.include`, located in RIOT's root
|
|
directory:
|
|
|
|
```make title="a minimal application Makefile"
|
|
APPLICATION = mini-makefile
|
|
BOARD ?= native
|
|
RIOTBASE ?= $(CURDIR)/../RIOT
|
|
|
|
include $(RIOTBASE)/Makefile.include
|
|
```
|
|
|
|
You can use Make's `?=` operator in order to allow overwriting
|
|
variables from the command line. For example, you can easily specify the target
|
|
platform, using the sample Makefile, by invoking make like this:
|
|
|
|
```shell
|
|
make BOARD=iotlab-m3
|
|
```
|
|
|
|
Besides typical targets like `clean`, `all`, or `doc`, RIOT provides the
|
|
special targets `flash` and `term` to invoke the configured flashing and
|
|
terminal tools for the specified platform. These targets use the variable
|
|
`PORT` for the serial communication to the device. Neither this variable nor
|
|
the targets `flash` and `term` are mandatory for the native port.
|
|
|
|
For the native port, `PORT` has a special meaning: it is used to identify the
|
|
tap interface if the `netdev_tap` module is used. The target `debug` can be
|
|
used to invoke a debugger on some platforms. For the native port the additional
|
|
targets such as `all-valgrind` and `valgrind` exist. Refer to
|
|
`cpu/native/README.md` for additional information
|
|
|
|
Some RIOT directories contain special Makefiles like `Makefile.base`,
|
|
`Makefile.include` or `Makefile.dep`. The first one can be included into other
|
|
Makefiles to define some standard targets. The files called `Makefile.include`
|
|
are used in `boards` and `cpu` to append target specific information to
|
|
variables like `INCLUDES`, setting the include paths. `Makefile.dep` serves to
|
|
define dependencies.
|
|
|
|
Unless specified otherwise, make will create an elf-file as well as an Intel
|
|
hex file in the `bin` folder of your application directory.
|
|
|
|
Learn more about the build system in the
|
|
[Wiki](https://github.com/RIOT-OS/RIOT/wiki/The-Make-Build-System)
|