From bf6e7a0896cdc69b3c81256a17171cd57945d151 Mon Sep 17 00:00:00 2001 From: AnnsAnn Date: Tue, 1 Jul 2025 13:33:05 +0200 Subject: [PATCH 1/2] doc: Deprecate doxygen guides and sync changes --- .../src/advanced-build-system-tricks.md | 209 +---------------- doc/doxygen/src/build-in-docker.md | 124 +--------- doc/doxygen/src/build-system-basics.md | 216 +----------------- doc/doxygen/src/dev-best-practices.md | 2 +- doc/doxygen/src/getting-started.md | 53 +---- .../advanced_build_system_tricks.md | 105 +++++++++ doc/guides/build-system/build-in-docker.md | 4 +- 7 files changed, 112 insertions(+), 601 deletions(-) diff --git a/doc/doxygen/src/advanced-build-system-tricks.md b/doc/doxygen/src/advanced-build-system-tricks.md index e47fa01895..26c22fe5dd 100644 --- a/doc/doxygen/src/advanced-build-system-tricks.md +++ b/doc/doxygen/src/advanced-build-system-tricks.md @@ -1,211 +1,4 @@ Advanced build system tricks {#advanced-build-system-tricks} ============================ -[TOC] - -Introduction {#introduction} -============ - -This page describes some build systems tricks that can help developers but are -not part of the standard workflow. - -They are low level commands that should not be taken as part of a stable API -but better have a documentation than only having a description in the build -system code. - - -Customize the build system {#customize-build-system} -========================== - -+ `RIOT_MAKEFILES_GLOBAL_PRE`: files parsed before the body of - `$RIOTBASE/Makefile.include` -+ `RIOT_MAKEFILES_GLOBAL_POST`: files parsed after the body of - `$RIOTBASE/Makefile.include` - -The variables are a list of files that will be included by -`$RIOTBASE/Makefile.include`. -They will be handled as relative to the application directory if the path is -relative. - - -Usage ------ - -You can configure your own files that will be parsed by the build system main -`Makefile.include` file before or after its main body, examples usages can be: - -* Globally overwrite a variable, like `TERMPROG` -* Specify a hard written `PORT` / `DEBUG_ADAPTER_ID` for some BOARD values -* Define your custom targets -* Override default targets - -Speed-up builds with ccache {#ccache} -=========================== - -[`ccache`](https://ccache.samba.org/) is a compiler cache. It speeds up recompilation by caching previous compilations and detecting when the same compilation is being done again. - -Usually, the initial build takes a little (5% - 20%) longer, but repeated builds are up to ten times faster. -Using `ccache` is safe, as `ccache` tries very hard to not mess up things and falls back to a normal compile if it cannot ensure correct output. - -There's one drawback: without further tweaking, `gcc` stops emitting colored output. - -Setup ------ - -- Install using the package manager of your distribution, e.g., on Ubuntu or Debian: - -~~~~~~~~~~~~~~~~~~~ -# sudo apt-get install ccache -~~~~~~~~~~~~~~~~~~~ - -- Set `CCACHE` variable to `ccache`: - -~~~~~~~~~~~~~~~~~~~ -# export CCACHE=ccache -~~~~~~~~~~~~~~~~~~~ - -- (Optionally) add the above export line to your `~/.profile` - -Result ------- - -Build without `ccache`: - -~~~~~~~~~~~~~~~~~~~ -[kaspar@booze default (master)]$ time BOARD=samr21-xpro make clean all -Building application "default" for "samr21-xpro" with MCU "samd21". - -[...] - - text data bss dec hex filename - 37016 180 6008 43204 a8c4 /home/kaspar/src/riot/examples/basic/default/bin/samr21-xpro/default.elf - -real 0m12.321s -user 0m10.317s -sys 0m1.170s -[kaspar@booze default (master)]$ -~~~~~~~~~~~~~~~~~~~ - -First build with `ccache` enabled: - -~~~~~~~~~~~~~~~~~~~ -[kaspar@booze default (master)]$ time BOARD=samr21-xpro make clean all -Building application "default" for "samr21-xpro" with MCU "samd21". - -[...] - -text data bss dec hex filename -37016 180 6008 43204 a8c4 /home/kaspar/src/riot/examples/basic/default/bin/samr21-xpro/default.elf - -real 0m15.462s -user 0m12.410s -sys 0m1.597s -[kaspar@booze default (master)]$ -~~~~~~~~~~~~~~~~~~~ - -Subsequent build with `ccache` enabled: - -~~~~~~~~~~~~~~~~~~~ -[kaspar@booze default (master)]$ time BOARD=samr21-xpro make clean all -Building application "default" for "samr21-xpro" with MCU "samd21". - -[...] - - text data bss dec hex filename - 37016 180 6008 43204 a8c4 /home/kaspar/src/riot/examples/basic/default/bin/samr21-xpro/default.elf - -real 0m2.157s -user 0m1.213s -sys 0m0.327s -[kaspar@booze default (master)]$ -~~~~~~~~~~~~~~~~~~~ - -Analyze dependency resolution {#analyze-depedency-resolution} -============================= - -When refactoring dependency handling or modifying variables used for dependency -resolution, one may want to evaluate the impact on the existing applications. -This describe some debug targets to dump variables used during dependency -resolution. - -To analyze one board and application run the following commands in an -application directory. - -Generate the variables dump with the normal dependency resolution to a -`dependencies_info_board_name` file: - -~~~~~~~~~~~~~~~~~~~ -BOARD=board_name make dependency-debug -~~~~~~~~~~~~~~~~~~~ - -Or with the "quick" version used by murdock to know supported boards -(this is an incomplete resolution, details in `makefiles/dependencies_debug.inc.mk`) -to a `dependencies_info-boards-supported_board_name` file: - -~~~~~~~~~~~~~~~~~~~ -BOARDS=board_name DEPENDENCY_DEBUG=1 make info-boards-supported -~~~~~~~~~~~~~~~~~~~ - -For more configuration and usage details, see in the file defining the targets -`makefiles/dependencies_debug.inc.mk` - -To do a repository wide analysis, you can use the script -`dist/tools/buildsystem_sanity_check/save_all_dependencies_resolution_variables.sh` -that will generate the output for all boards and applications. -It currently take around 2 hours on an 8 cores machine with ssd. - -Generate Makefile.ci content {#generate-makefileci} -============================ - -Most applications and tests include a `Makefile.ci` to indicate which boards can -not compile the application or test. The content for these files can be -generated via the script in -~~~~~~~~~~~~~~~~~~~ -make -C $APPLICATION_DIRECTORY generate-Makefile.ci -~~~~~~~~~~~~~~~~~~~ -This will compile and link the application for every board available and record -the result in the Makefile.ci. This requires the toolchain for every target to -be available. The target supports using docker via the `BUILD_IN_DOCKER=1` -variable. - -Out of Tree Cache Directory {#out-of-tree-cache-dir} -=========================== - -By exporting the `BUILD_DIR` environment variable, a custom build / clone cache -directory can be created. This can be particularly useful when working with -multiple git work trees or clones of the RIOT repository. - -Comparing Build Sizes {#comparing-build-sizes} -===================== -There is a make target for build size comparison. It will automatically check -all the boards compiled in the `NEWBIN` and `OLDBIN` and compare them. -For boards that do not have a complementary partner, a warning is generated. -You can use it like that: - -~~~~~~~~~~~~~~~~~~~ -$ cd RIOT/test/test_something - -$ git checkout master -$ BINDIRBASE=master-bin BOARD=native64 make all - -$ git checkout my-branch -$ BINDIRBASE=my-branch-bin BOARD=native64 make all - -$ OLDBIN=master-bin NEWBIN=my-branch-bin make info-buildsizes-diff -text data bss dec BOARD/BINDIRBASE - -0 0 0 0 native64 **← this line contains the diff** -57356 1532 96769 155657 master-bin -57356 1532 96769 155657 my-branch-bin - -... -~~~~~~~~~~~~~~~~~~~ - -Check it out, the output contains colors. ;) - -RIOT-aware Completion in zsh {#zsh-completion-for-riot} -============================ - -For zsh users a RIOT-aware completion is provided in -`dist/tools/zsh-completion`. Refer to the `README.md` in there for more details -and installation instructions. +@deprecated See [Advanced Build System Tricks](https://guide.riot-os.org/build-system/advanced_build_system_tricks/) on the RIOT Guide Site for the latest information. This page will be removed in a future release. diff --git a/doc/doxygen/src/build-in-docker.md b/doc/doxygen/src/build-in-docker.md index d059acc97d..8d0e8d0fb6 100644 --- a/doc/doxygen/src/build-in-docker.md +++ b/doc/doxygen/src/build-in-docker.md @@ -1,125 +1,3 @@ # Build In Docker {#build-in-docker} -Some parts of RIOT's build process can be performed inside a Docker container, -which comes with the necessary compilers and toolchains and is fully managed by -the build system. It can be enabled by passing `BUILD_IN_DOCKER=1` to make. - -```shell -$ BUILD_IN_DOCKER=1 make -``` - -If your user does not have permissions to access the Docker daemon: - -```shell -$ BUILD_IN_DOCKER=1 DOCKER="sudo docker" make -``` - -to always use Docker for building, set `BUILD_IN_DOCKER=1` (and if necessary -`DOCKER="sudo docker"`) in the environment: - -```console -$ export BUILD_IN_DOCKER=1 -``` - -## Targets ran in Docker: DOCKER_MAKECMDGOALS_POSSIBLE - -Currently only build related targets are ran in the docker container, the exact -list is under `DOCKER_MAKECMDGOALS_POSSIBLE` variable. - -## Environment Variables: DOCKER_ENV_VARS - -When building in docker one might want for the command ran in docker to inherit -variables that might have been set in the command line. e.g.: - -```shell -BOARD=samr21-xpro USEMODULE=xtimer make -C examples/basic/hello-world -``` - -In `docker.ink.mk` the origin of a variable listed in `DOCKER_ENV_VARS` is checked -and if the origin is `environment` or `command` (for make command-line argument) -then those variables will be passed to the docker container. - -You can also set in `DOCKER_ENV_VARS` in the environment to add variables to the -list, e.g.: - -```shell -DOCKER_ENV_VARS=BEER_TYPE BEER_TYPE="imperial stout" BUILD_IN_DOCKER=1 make -C examples/basic/hello-world/ -docker run --rm -t -u "$(id -u)" \ - ... - -e 'BEER_TYPE=imperial stout' \ - -w '/data/riotbuild/riotbase/examples/basic/hello-world/' \ - 'riot/riotbuild:latest' make -``` - -Your application Makefile can also extend `DOCKER_ENV_VARS`. - -### Directly Define Environment Variables: DOCKER_ENVIRONMENT_CMDLINE - -`DOCKER_ENVIRONMENT_CMDLINE` can be used to add variables directly to the environment -but will need to be prefixed with `-e` (see [option-summary]). - -e.g.: - -``` -DOCKER_ENVIRONMENT_CMDLINE='-e BEER_TYPE="imperial stout"' BUILD_IN_DOCKER=1 make -C examples/basic/hello-world/ -docker run --rm -t -u "$(id -u)" \ - ... - -e 'BEER_TYPE=imperial stout' \ - -w '/data/riotbuild/riotbase/examples/basic/hello-world/' \ - 'riot/riotbuild:latest' make -``` - -## Command Line Variables: DOCKER_OVERRIDE_CMDLINE - -Command line arguments are variables that are passed after `make` e.g. -`make target FOO=bar`, but different to environment variables a variable defined -through the command line will take precedence over all assignments of `FOO` within -the makefile (same effect as adding `-e` for environment variables, see -[option-summary] for more details. - -To pass variables overriding the command-line to docker `DOCKER_OVERRIDE_CMDLINE` -may be used: - -```shell -DOCKER_OVERRIDE_CMDLINE="BEER_TYPE='imperial stout'" BUILD_IN_DOCKER=1 make -C examples/basic/hello-world/ RIOT_CI_BUILD=1 -Launching build container using image "riot/riotbuild:latest". -sudo docker run --rm -t -u "$(id -u)" \ - ... - -w '/data/riotbuild/riotbase/examples/basic/hello-world/' \ - 'riot/riotbuild:latest' make BEER_TYPE='imperial stout' 'RIOT_CI_BUILD=1' -``` - -### Redefined or Overridden Variables: DOCKER_ENV_VARS_ALWAYS - -There is a corner case for the handling of `DOCKER_ENV_VARS`. If a variable is -redefined (`+=`, `=`, `:=`) or overridden then the origin of the variable will be changed -to `file` and there is no way of detecting in Make how it was set. - -If this happens after `docker.ink.mk` this is not an issue, but for all variables -susceptible to be defined in the application `Makefile` this is indeed the case. - -A subset of these variables, namely variables relating to dependency resolution -are therefore unconditionally passed to docker. The complete list can be found -under `DOCKER_ENV_VARS_ALWAYS`. - -#### CFLAGS - -CFLAGS are not automatically passed to docker because they might contain spaces, -'"' or other characters that will require escaping. The solution is to pass it with -`DOCKER_ENVIRONMENT_CMDLINE` and escape every character as required. - -e.g: if wanting to override STRING_WITH_SPACES - -``` -# normal build -CFLAGS=-DSTRING_WITH_SPACES='\"with space\" make -# in docker -DOCKER_ENVIRONMENT_CMDLINE='-e CFLAGS=-DSTRING_WITH_SPACES=\'\\\"with\ space\\\"\'' \ - BUILD_IN_DOCKER=1 make -``` - -Alternatively, it is often easier to define the CFLAGS in the Makefile which gets -evaluated inside the Docker image again), conditional on a less complex environment -variable that gets added to `DOCKER_ENV_VARS` in the Makefile. - -[option-summary]: https://www.gnu.org/software/make/manual/html_node/Options-Summary.html +@deprecated This page is deprecated. See [Build in Docker](https://guide.riot-os.org/build-system/build-in-docker/) on the RIOT Guide Site for the latest information. This page will be removed in a future release. diff --git a/doc/doxygen/src/build-system-basics.md b/doc/doxygen/src/build-system-basics.md index 433c5c78fe..1c56853be2 100644 --- a/doc/doxygen/src/build-system-basics.md +++ b/doc/doxygen/src/build-system-basics.md @@ -1,217 +1,3 @@ # Build System Basics {#build-system-basics} -# BOARD, CPU & FEATURES {#board-cpu-features} - -## FEATURES {#features} - -### What is a FEATURE? - -A `FEATURE` is a mean of specifying valid/invalid dependencies and configurations. - -Whenever a `FEATURE` is used there should be at some level a hardware requirement, -whether this is a _radio_, a _bus_ of a specific core architecture. - -This is not a hard line, in some cases the line can be harder to establish than -others. There are complicated cases like `netif` since a network interface could -be fully implemented in software as a loop-back. - -It's also important to note that a `FEATURE` does not mean there is a `MODULE` -with the same name. There could be many implementations for the same `FEATURE`. -The fact that many `FEATURES` translate directly into a `MODULE` is only by -convenience. - -e.g. - - # all periph features correspond to a periph submodule - USEMODULE += $(filter periph_%,$(FEATURES_USED)) - -### Providing a FEATURE - -For a `FEATURE` to be provided by a `board` it must meet 2 criteria, and for -`periph_%` and other _hw_ (hardware) related `FEATURES` it must follow a 3rd criteria. - -- Needs the "hardware" or BSP support (toolchain, build system, flasher, etc.) - - e.g.: `stm32l152re` has an SPI peripheral - `riotboot` needs to be able to link and flash at an offset -- Needs support in RIOT, an implementation of an api to interact with the _hw_ - - e.g.: `cpu/stm32_common/periph/spi.c` is implemented for `stm32l1` - `riotboot` needs an implementation of `cpu_jump_to_image` -- Wiring between the _cpu/soc_(system on a chip) a _bus_ and other _cpu_/_hw_ components. - - e.g.: `nucleo-l152re/include/periph_conf.h` specified wiring between `PORT_Ax` - and `SPI1` - -### All the FEATURES_% - -- `FEATURES_PROVIDED` are available hardware (including BSP) features - (e.g.:`periph_hwrng`, `periph_uart`) or characteristics (e.g:`arch_32bits`) of - a board. - -- `FEATURES_CONFLICT` are a series of `FEATURES` that can't be used at the same - time for a particular `BOARD`. - -- `FEATURES_REQUIRED` are `FEATURES` that are needed by a `MODULE` or `APPLICATION` - to work. - -- `FEATURES_OPTIONAL` are "nice to have" `FEATURES`, not needed but useful. If - available they are always included. - -- `FEATURES_REQUIRED_ANY` are `FEATURES` of which (at least) one of - is needed by a `MODULE` or `APPLICATION`. Alternatives are separated by - a pipe (`|`) in order of preference, e.g.: - `FEATURES_REQUIRED_ANY += arch_avr8|arch_native` if both are provide then - `arch_avr8` will be used. - -- `FEATURES_BLACKLIST` are `FEATURES` that can't be used by a `MODULE` or `APPLICATION`. - They are usually used for _hw_ characteristics like `arch_` to easily resolve - unsupported configurations for a group. - -- `FEATURES_USED` are the final list of `FEATURES` that will be used by an `APPLICATION` - -### Where to define FEATURES_% - -- `FEATURES_PROVIDED`, `FEATURES_CONFLICT` and `FEATURES_CONFLICT_MSG ` are - defined in `Makefile.features` - -- `FEATURES_REQUIRED`, `FEATURES_OPTIONAL`, `FEATURES_REQUIRED_ANY`, - and `FEATURES_BLACKLIST` are defined by the application `Makefile` - (`examples/%/Makefile`, `tests/%/Makefile`, etc.) or in `Makefile.dep` - -## CPU/CPU_MODEL {#cpu} - - -`CPU` and `CPU_MODEL` refer to the _soc_ or _mcu_ (microcontroller) -present in a `BOARD`. The variables `CPU`, `CPU_FAM`, etc. are just arbitrary groupings -to avoid code duplication. How this grouping is done depends on every implementation -and the way each manufacturer groups there products. - -These variables allows declaring the `FEATURES` that the _mcu/soc_ provides as well -as resolving dependencies. - -`FEATURES` provided by a `CPU/CPU_MODEL` should not depend on the wiring of a -specific `BOARD` but be intrinsic to the _soc/mcu_. - -A `CPU/CPU_MODEL` might support `FEATURES` that will depend on the `BOARD` wiring, -e.g.: bus (`uart`, `spi`) mappings. In this cases the `FEATURE` should be provided -by the `BOARD.` - -## BOARD {#board} - -In RIOTs build-system, a `BOARD` is a grouping of: - -- _soc/mcu_ (`CPU/CPU_MODEL`) - - e.g.: `b-l072z-lrwan1` `stm32l072cz` -- _sensor/actuators_ (buttons and leds included) (`drivers`) - - e.g.: `b-l072z-lrwan1` leds and buttons -- _radios_, _ethernet_, etc. devices (`drivers`) - - e.g.: `b-l072z-lrwan1` `sx1276` -- _programming/debugging_ tools - - e.g.: `b-l072z-lrwan1` `stlink` -- configuration mapping cpu support capabilities to availability - - e.g.: `b-l072z-lrwan1` `periph_conf.h`, `gpio_params` - -A `board` can have all the required `FEATURES` to interact with a radio or -sensor/actuator, but it doesn't necessarily provide that `FEATURE`. - -e.g.: - - `samr21-xpro` provides a `at86rf233` radio as well as the necessary - `periph_*` features. - - `nucleo-*` provide all `periph_*` features to use `sx1272`, and - even a default configuration for the `SX1272MB2xA` shield, but not - doesn't provide the radio. - -If a `board` in `$(RIOTBASE)/boards` is connected to a radio shield, sensors, -actuators, etc. then it is a different `board` than the one provided by default. -Whenever you need to have a device mapping (in linux-arm, it would require -a different device tree), then it is a different board and would need a -different `board/periph_conf`. - -A `nucleo-*` with a `SX1272MB2xA` is a different board in RIOT sense. - -_note_: if `devicetree` is implemented this concept will change. - - -# Variables declaration guidelines {#variable-declaration-guidelines} - -This page contains basic guidelines about `make` variable declaration, it -summarizes some of the pros and cons as well as specifies good and bad patterns -in our build system. You might want to refer to `gnu make` documentation -regarding these subjects. - -## Avoid unnecessary export - -``` -export OUTPUT = $(shell some-command) -``` - -Exporting a variable means it will be evaluated on every `target` call, which -slows down the build system. Always avoid exporting a variable if unneeded. - -If an export is actually needed by a `sub-make` then export the variable only for -the needed targets using `target-export-variables` (more in -`makefiles/utils/variables.mk`). - -Exported variables ("global variable") are hard to remove, specially when badly -documented. If no one knows why it's there and no one knows where it can be used -then no one knows if it's safe to remove since it's present for every target. -This is why global variables need clear documentation. - -[gnumake doc](https://www.gnu.org/software/make/manual/html_node/Variables_002fRecursion.html) - -## Use memoized for variables referencing a function or command - -### recursively expanded variable: - -~~~~~~~~~~~~~~~~ -OUTPUT = $(shell some-command $(ANOTHER_VARIABLE)) -~~~~~~~~~~~~~~~~ - -- When using `=` the value of the variable is only declared, but not set, - therefore the variable will only be evaluated when expanded (used) somewhere - in the makefile. If `$(OUTPUT)` is never expanded, `some-command` - is never executed and `ANOTHER_VARIABLE` not expanded. - -- All variables or functions referenced by the declared variable will will be - evaluated every time the variable is expanded. - In the example `some-command` is executed every time `OUTPUT` is expanded, same for - `ANOTHER_VARIABLE`. If `some-command` is slow this introduced unneeded overhead. - -- If the variable expansion doesn't involve evaluating a function the overhead - is none. - -### simply expanded variable: - -~~~~~~~~~~~~~~~~ -OUTPUT := $(shell some-command $(ANOTHER_VARIABLE)) -~~~~~~~~~~~~~~~~ - -- When using `:=` the value is only expanded once, expanding any reference to - other variables or functions. If `OUTPUT` is always used at least once and - evaluates a costly function (`some command`) then use `:=`. - -- When using `:=` the variable will be evaluated even if not needed, which - introduces unnecessary delay, in particular `some command` or functions - evaluated by `ANOTHER_VARIABLE` are slow. - It can also cause a failure in a worst-case scenario (think what happens if a - tool is defined with `:=` but you don't have the tool and you don't need it either). - -- The values of variables declared with `:=` depend on the order of definition. - -### memoized: - -~~~~~~~~~~~~~~~~ -OUTPUT = $(call memoized,OUTPUT,$(shell some-command)) -~~~~~~~~~~~~~~~~ - -- `memoized` is a RIOT defined function that combines characteristics from - both `=` and `:=`. - The variable expansion will be deferred until its first usage, but further - usage will consider it as a simply expanded variable, so it will use the already - evaluated value. In the example `some-command` would be executed once or not - at all (more in `makefiles/utils/variables.mk`). - -[gnumake doc](https://www.gnu.org/software/make/manual/html_node/Flavors.html) - -## Additional documentation - -- Deferred vs. simple expansion: http://make.mad-scientist.net/deferred-simple-variable-expansion/ -- Tracking issue: [#10850](https://github.com/RIOT-OS/RIOT/issues/10850) +@deprecated See [Build System Basics](https://guide.riot-os.org/build-system/build_system_basics/) on the RIOT Guide Site for the latest information. This page will be removed in a future release. diff --git a/doc/doxygen/src/dev-best-practices.md b/doc/doxygen/src/dev-best-practices.md index fd666677b8..5c0485a337 100644 --- a/doc/doxygen/src/dev-best-practices.md +++ b/doc/doxygen/src/dev-best-practices.md @@ -3,7 +3,7 @@ [TOC] * Use the [methodology](#methodology) described below. -* Use [`ccache`](@ref ccache) to speedup compilation +* Use [`ccache`](https://guide.riot-os.org/build-system/advanced_build_system_tricks/#speed-up-builds-with-ccache) to speedup compilation ## Coding "Dos" and "Don'ts": {#coding-dos-and-donts} diff --git a/doc/doxygen/src/getting-started.md b/doc/doxygen/src/getting-started.md index 943efe2409..7c9fe46d51 100644 --- a/doc/doxygen/src/getting-started.md +++ b/doc/doxygen/src/getting-started.md @@ -160,60 +160,9 @@ For example, in Ubuntu the above tools can be installed with the following comma The build system {#the-build-system} ---------------- -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) +@deprecated See [The Build System](https://guide.riot-os.org/build-system/build_system/) on the RIOT Guide Site for the latest information. -Additionally it has to include the `Makefile.include`, located in RIOT's root -directory: - -~~~~~~~~ {.mk} -# 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: - -~~~~~~~~ {.sh} -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) Building and executing an example {#building-and-executing-an-example} --------------------------------- diff --git a/doc/guides/build-system/advanced_build_system_tricks.md b/doc/guides/build-system/advanced_build_system_tricks.md index 5d7052a49e..9f985f3ea7 100644 --- a/doc/guides/build-system/advanced_build_system_tricks.md +++ b/doc/guides/build-system/advanced_build_system_tricks.md @@ -23,6 +23,84 @@ You can configure your own files that will be parsed by the build system main `M - Define your custom targets - Override default targets +## Speed-up builds with ccache + +[`ccache`](https://ccache.samba.org/) is a compiler cache. It speeds up recompilation by caching previous compilations and detecting when the same compilation is being done again. + +Usually, the initial build takes a little (5% - 20%) longer, but repeated builds are up to ten times faster. +Using `ccache` is safe, as `ccache` tries very hard to not mess up things and falls back to a normal compile if it cannot ensure correct output. + +There's one drawback: without further tweaking, `gcc` stops emitting colored output. + +### Setup + +- Install using the package manager of your distribution, e.g., on Ubuntu or Debian: + +``` +sudo apt-get install ccache +``` + +- Set `CCACHE` variable to `ccache`: + +``` +export CCACHE=ccache +``` + +- (Optionally) add the above export line to your `~/.profile` + +### Result + +Build without `ccache`: + +```sh +[kaspar@booze default (master)]$ time BOARD=samr21-xpro make clean all +Building application "default" for "samr21-xpro" with MCU "samd21". + +[...] + + text data bss dec hex filename + 37016 180 6008 43204 a8c4 /home/kaspar/src/riot/examples/basic/default/bin/samr21-xpro/default.elf + +real 0m12.321s +user 0m10.317s +sys 0m1.170s +[kaspar@booze default (master)]$ +``` + +First build with `ccache` enabled: + +```sh +[kaspar@booze default (master)]$ time BOARD=samr21-xpro make clean all +Building application "default" for "samr21-xpro" with MCU "samd21". + +[...] + +text data bss dec hex filename +37016 180 6008 43204 a8c4 /home/kaspar/src/riot/examples/basic/default/bin/samr21-xpro/default.elf + +real 0m15.462s +user 0m12.410s +sys 0m1.597s +[kaspar@booze default (master)]$ +``` + +Subsequent build with `ccache` enabled: + +```sh +[kaspar@booze default (master)]$ time BOARD=samr21-xpro make clean all +Building application "default" for "samr21-xpro" with MCU "samd21". + +[...] + + text data bss dec hex filename + 37016 180 6008 43204 a8c4 /home/kaspar/src/riot/examples/basic/default/bin/samr21-xpro/default.elf + +real 0m2.157s +user 0m1.213s +sys 0m0.327s +[kaspar@booze default (master)]$ +``` + ## Analyze dependency resolution When refactoring dependency handling or modifying variables used for dependency resolution, one may want to evaluate the impact on the existing applications. This describe some debug targets to dump variables used during dependency resolution. @@ -59,6 +137,33 @@ This will compile and link the application for every board available and record By exporting the `BUILD_DIR` environment variable, a custom build / clone cache directory can be created. This can be particularly useful when working with multiple git work trees or clones of the RIOT repository. +## Comparing Build Sizes + +There is a make target for build size comparison. It will automatically check +all the boards compiled in the `NEWBIN` and `OLDBIN` and compare them. +For boards that do not have a complementary partner, a warning is generated. +You can use it like that: + +```sh +$ cd RIOT/test/test_something + +$ git checkout master +$ BINDIRBASE=master-bin BOARD=native64 make all + +$ git checkout my-branch +$ BINDIRBASE=my-branch-bin BOARD=native64 make all + +$ OLDBIN=master-bin NEWBIN=my-branch-bin make info-buildsizes-diff +text data bss dec BOARD/BINDIRBASE + +0 0 0 0 native64 **← this line contains the diff** +57356 1532 96769 155657 master-bin +57356 1532 96769 155657 my-branch-bin +... +``` + +Check it out, the output contains colors. ;) + ## RIOT-aware Completion in zsh For zsh users a RIOT-aware completion is provided in `dist/tools/zsh-completion`. Refer to the `README.md` in there for more details and installation instructions. diff --git a/doc/guides/build-system/build-in-docker.md b/doc/guides/build-system/build-in-docker.md index 6fef38ffd4..e654684b56 100644 --- a/doc/guides/build-system/build-in-docker.md +++ b/doc/guides/build-system/build-in-docker.md @@ -84,11 +84,11 @@ To pass variables overriding the command-line to docker `DOCKER_OVERRIDE_CMDLINE may be used: ```shell -DOCKER_OVERRIDE_CMDLINE="BEER_TYPE='imperial stout'" BUILD_IN_DOCKER=1 make -C examples/hello-world/ RIOT_CI_BUILD=1 +DOCKER_OVERRIDE_CMDLINE="BEER_TYPE='imperial stout'" BUILD_IN_DOCKER=1 make -C examples/basic/hello-world/ RIOT_CI_BUILD=1 Launching build container using image "riot/riotbuild:latest". sudo docker run --rm -t -u "$(id -u)" \ ... - -w '/data/riotbuild/riotbase/examples/hello-world/' \ + -w '/data/riotbuild/riotbase/examples/basic/hello-world/' \ 'riot/riotbuild:latest' make BEER_TYPE='imperial stout' 'RIOT_CI_BUILD=1' ``` From 3eda07e63dfd8828815cca6e61ce245b2c6f79e2 Mon Sep 17 00:00:00 2001 From: AnnsAnn Date: Tue, 1 Jul 2025 15:27:50 +0200 Subject: [PATCH 2/2] doc: move architecture dependencies into starlight guide fix: add note when sections will be removed --- .../src/advanced-build-system-tricks.md | 4 +- doc/doxygen/src/build-in-docker.md | 5 +- doc/doxygen/src/build-system-basics.md | 4 +- doc/doxygen/src/getting-started.md | 281 +----------------- doc/doxygen/src/mainpage.md | 30 +- .../advanced_build_system_tricks.md | 4 +- .../getting-started/img/06-Use_VS_Code-00.png | Bin 61728 -> 0 bytes .../getting-started/img/06-Use_VS_Code-01.png | Bin 27166 -> 61728 bytes doc/guides/getting-started/installing.mdx | 98 +++++- 9 files changed, 116 insertions(+), 310 deletions(-) delete mode 100644 doc/guides/getting-started/img/06-Use_VS_Code-00.png diff --git a/doc/doxygen/src/advanced-build-system-tricks.md b/doc/doxygen/src/advanced-build-system-tricks.md index 26c22fe5dd..897df4a832 100644 --- a/doc/doxygen/src/advanced-build-system-tricks.md +++ b/doc/doxygen/src/advanced-build-system-tricks.md @@ -1,4 +1,6 @@ Advanced build system tricks {#advanced-build-system-tricks} ============================ -@deprecated See [Advanced Build System Tricks](https://guide.riot-os.org/build-system/advanced_build_system_tricks/) on the RIOT Guide Site for the latest information. This page will be removed in a future release. +@deprecated See [Advanced Build System Tricks](https://guide.riot-os.org/build-system/advanced_build_system_tricks/) +on the RIOT Guide Site for the latest information. +This page will be removed after release 2025.11. diff --git a/doc/doxygen/src/build-in-docker.md b/doc/doxygen/src/build-in-docker.md index 8d0e8d0fb6..1511672329 100644 --- a/doc/doxygen/src/build-in-docker.md +++ b/doc/doxygen/src/build-in-docker.md @@ -1,3 +1,6 @@ # Build In Docker {#build-in-docker} -@deprecated This page is deprecated. See [Build in Docker](https://guide.riot-os.org/build-system/build-in-docker/) on the RIOT Guide Site for the latest information. This page will be removed in a future release. +@deprecated This page is deprecated. +See [Build in Docker](https://guide.riot-os.org/build-system/build-in-docker/) +on the RIOT Guide Site for the latest information. +This page will be removed after release 2025.11. diff --git a/doc/doxygen/src/build-system-basics.md b/doc/doxygen/src/build-system-basics.md index 1c56853be2..4210fc306e 100644 --- a/doc/doxygen/src/build-system-basics.md +++ b/doc/doxygen/src/build-system-basics.md @@ -1,3 +1,5 @@ # Build System Basics {#build-system-basics} -@deprecated See [Build System Basics](https://guide.riot-os.org/build-system/build_system_basics/) on the RIOT Guide Site for the latest information. This page will be removed in a future release. +@deprecated See [Build System Basics](https://guide.riot-os.org/build-system/build_system_basics/) +on the RIOT Guide Site for the latest information. +This page will be removed after release 2025.11. diff --git a/doc/doxygen/src/getting-started.md b/doc/doxygen/src/getting-started.md index 7c9fe46d51..eb1172e069 100644 --- a/doc/doxygen/src/getting-started.md +++ b/doc/doxygen/src/getting-started.md @@ -3,233 +3,17 @@ Getting started {#getting-started} [TOC] -Downloading RIOT code {#downloading-riot-code} -===================== -You can obtain the latest RIOT code from -our [Github](https://github.com/RIOT-OS/) repository either by -[downloading the latest tarball](https://github.com/RIOT-OS/RIOT/releases) or -by cloning the [git repository](https://github.com/RIOT-OS/RIOT). - -In order to clone the RIOT repository, you need the -[Git revision control system](http://git-scm.com/) and run the following -command: - -~~~~~~~~ {.sh} -git clone https://github.com/RIOT-OS/RIOT.git -~~~~~~~~ - -Compiling RIOT {#compiling-riot} -============== - -Required Software for Development {#setting-up-a-toolchain} ------------------------------------------------------------ - -A set of common tools and a toolchain for the hardware you target needs to be installed first. - -### Choosing an Operating System for the Development PC - -#### Linux - -Most of the RIOT OS developers are using Linux on their development PCs, so -you can expect the most streamlined experience here. -Not all distributions have packages for cross-compilation for microcontrollers -and non-x86 platforms such as ARM. -Ubuntu works well for cross-development, Fedora for example does not provide -the necessary packages. -However, with most distributions, you can use the -[RIOT Docker container](@ref build-in-docker) as an alternative. - -Other POSIX-compliant OSes such as the various BSD flavours -will also be fine - however, we rely on users to report bugs regarding tooling incompatibilities -here. So expect occasional issues for the development branch and please help testing during the -feature freeze period, if you develop on macOS or BSD. - -#### Windows - -Windows users can refer to [this guide][dev-setup-windows] to setup the -development environment on Windows which guides through the process of -setting up the -[Windows Subsystem for Linux (WSL)](https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux). - -[dev-setup-windows]: https://guide.riot-os.org/getting-started/install-wsl/ - -#### MacOS -Native development on macOS machines is not officially supported. -Some packages can be found in the homebrew repositories, but the installation -is not trivial, especially for different microcontroller platforms. -As an alternative, the [RIOT Docker Container](@ref build-in-docker) can be used -or a virtual machine running Linux. The latter option has a significant -performance reduction compared to Docker. - - -### Common Tools - -The following tools are required or useful regardless of the architecture and board you are -developing for: - -* Essential system development tools (GNU Make GCC, standard C library headers) -* git -* GDB in the multiarch variant (alternatively: install for each architecture you target the - corresponding GDB package) -* unzip or p7zip -* wget or curl -* python3 -* pyserial (linux distro package often named python3-serial or py3-serial) -* psutil (python3-psutil or py3-psutil) -* Doxygen for building the documentation - -@note For each architecture a default tool for flashing and on-chip debugging is listed below - in - most cases OpenOCD. However, some boards use different tools, e.g. because a bootloader is - installed that allows flashing via the serial interface. Check the board documentation for any - details on this. If that documentation contains no info about a flashing tool, the default - tool for its architecture is used. - -For example, in Ubuntu the above tools can be installed with the following command: - - sudo apt install git gcc-arm-none-eabi make gcc-multilib libstdc++-arm-none-eabi-newlib\ - openocd gdb-multiarch doxygen wget unzip python3-serial python3-psutil - -@details Running `BOARD= make info-programmers-supported` in your - application folder lists the programmers supported by RIOT for the given board. - -### Architecture: ARM7 and ARM Cortex M* - -* GCC, binutils, and newlib for `arm-none-eabi` - * Alternatively: Install docker and export `BUILD_IN_DOCKER=1` -* OpenOCD for debugging/flashing (most boards) - * Some boards use UF2 based bootloaders, which require auto-mounting to work with `make flash` - * Some boards default to using J-Link for flashing/debugging. Either install that or export - `PROGRAMMER=openocd` to just use OpenOCD instead - * installation instructions can be found [here](https://github.com/RIOT-OS/RIOT/wiki/OpenOCD) -* Optional: picolibc for `arm-none-eabi` to link against picolibc instead of newlib -* Optional: clang to build with `TOOLCHAIN=llvm` -* Optional: GDB multiarch for debugging - * If no multiarch package is available, use GDB for `arm-none-eabi` instead - -### Architecture: Xtensa - -#### ESP32 - -* @ref esp32_toolchain "Toolchain for ESP32" -* [esptool](https://github.com/espressif/esptool) for flashing -* Optional: OpenOCD and GDB (multiarch version) for @ref esp32_jtag_debugging "debugging via JTAG" - -#### ESP8266 - -* @ref esp8266_toolchain "Toolchain for ESP8266" -* [esptool](https://github.com/espressif/esptool) for flashing -* Optional: GDB (multiarch version) for @ref esp8266_esp_gdbstub "debugging via the gdbstub" - interface for the ESP8266 - -### Architecture: AVR - -* GCC and binutils for AVR and avrlibc - * Alternatively: Install docker and export `BUILD_IN_DOCKER=1` -* avrdude for flashing -* Optional: AVaRICE and GDB (multiarch version) for debugging - -### Architecture: RISC-V - -* GCC, binutils, and newlib for RISC-V (target triple should start with `riscv` and end with - `-none-elf` or `-unknown-elf`. Note that most packages are multilib, e.g. `riscv64-unknown-elf` - will likely work fine for 32 bit RISC-V boards) - * Alternatively: Install docker and export `BUILD_IN_DOCKER=1` -* OpenOCD for debugging/flashing (some new boards might require a patched version of OpenOCD or a - recent build from the git sources) -* Optional: picolibc to link against picolibc instead of newlib (recommended) -* Optional: clang to build with `TOOLCHAIN=llvm` -* Optional: GDB multiarch for debugging - -### Architecture: MSP430 - -* GCC, binutils, and newlib for MSP430 - * Alternatively: Install docker and export `BUILD_IN_DOCKER=1` -* [mspdebug](https://github.com/dlbeer/mspdebug) for flashing/debugging - * Optional: [MSP Debug Stack](https://www.ti.com/tool/download/MSPDS-OPEN-SOURCE) for additional - board support -* Optional: GDB multiarch for debugging - -### Architecture: native - -* On 64 bit systems: multilib versions for your host compilers, standard C library, and development - headers - * Alternatively: Compile with `BUILD_IN_DOCKER=1`. Note that for running the executable you - still need a multilib system (or 32 bit Linux) with glibc a standard C library. -* A C library supporting the deprecated POSIX.1-2001 ucontext library (e.g. glibc, FreeBSD's libc) -* Optional: GDB for debugging. (Prefer the multiarch version, this will also work for other boards) +@deprecated See [Setup Guide](https://guide.riot-os.org/getting-started/installing/#architecture-specific-requirements) on the RIOT Guide Site for the latest information. This section will be removed after release 2025.11. The build system {#the-build-system} ---------------- -@deprecated See [The Build System](https://guide.riot-os.org/build-system/build_system/) on the RIOT Guide Site for the latest information. +@deprecated See [The Build System](https://guide.riot-os.org/build-system/build_system/) on the RIOT Guide Site for the latest information. This section will be removed after release 2025.11. Building and executing an example {#building-and-executing-an-example} --------------------------------- -RIOT provides a number of examples in the `examples/` directory. Every example -has a README that documents its usage and its purpose. You can build them by -opening a shell, navigating to an example (e.g. `examples/basic/default`), and -running: - -~~~~~~~~ {.sh} -make BOARD=samr21-xpro -~~~~~~~~ - -or - -~~~~~~~~ {.sh} -make all BOARD=samr21-xpro -~~~~~~~~ - -To flash the application to a board just run: - -~~~~~~~~ {.sh} -make flash BOARD=samr21-xpro -~~~~~~~~ - -You can then access the board via the serial interface: - -~~~~~~~~ {.sh} -make term BOARD=samr21-xpro -~~~~~~~~ - -If you are using multiple boards you can use the `PORT` macro to specify the -serial interface: - -~~~~~~~~ {.sh} -make term BOARD=samr21-xpro PORT=/dev/ttyACM1 -~~~~~~~~ - -For flashing and accessing the board via the serial interface, the current user -needs to have the correct access rights on the serial device. -The easiest way to ensure this is to add the current user to the group that is -owning the serial device. For example, this can be achieved on Linux by issuing -the following line, logging out and logging in again: - -~~~~~~~~ {.sh} -sudo usermod -aG $(stat --format="%G" /dev/ttyACM0) $USER -~~~~~~~~ - -Note that the `PORT` macro has a slightly different semantic in `native`. Here -it is used to provide the name of the TAP interface you want to use for the -virtualized networking capabilities of RIOT. - -We use `pyterm` as the default terminal application. It is shipped with RIOT in -the `dist/tools/pyterm/` directory. If you choose to use another terminal -program you can set `TERMPROG` (and if need be the `TERMFLAGS`) macros: - -~~~~~~~~ {.sh} -make -C examples/networking/gnrc/gnrc_networking/ term \ - BOARD=samr21-xpro \ - TERMPROG=gtkterm \ - TERMFLAGS="-s 115200 -p /dev/ttyACM0 -e" -~~~~~~~~ - -You may not see the greeting - - main(): This is RIOT! - -when you flash the board. In this case, type `reboot` in the command line or reboot manually. +@deprecated See [Building and executing an example](https://guide.riot-os.org/getting-started/building_example/) on the RIOT Guide Site for the latest information. This section will be removed after release 2025.11. Configuring an application {#configuring-an-application} -------------------------- @@ -257,68 +41,13 @@ present in the target platform. Use Docker to build RIOT {#docker} ======================== -[Docker](https://www.docker.com/) is a platform that allows packaging software into containers that can easily be run on any Linux that has Docker installed. -You can download a RIOT Docker container from the Docker Hub and then use that to build your project making use of all toolchains that we've preinstalled in the container. - -It can be helpful to use Docker especially if you are working with ESP, since the -installation might be easier this way. - -Setup {#docker-setup} ------ - -### Installing docker - -To use the RIOT docker build image, the Docker application needs to be installed on your system. -To install Docker, depending on your operating system, use `sudo apt-get install docker` or a variant. - -The user on your computer requires permission to access and use docker. There are two ways to manage this: -- Your OS distribution may create a group called `docker`. If so, then adding yourself to that group (and logging out and in again) should grant you permission. -- Execute docker with sudo. This is in fact the most secure and recommended setup (see [here](https://docs.docker.com/install/linux/linux-postinstall/), [here](https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface), [here](https://www.projectatomic.io/blog/2015/08/why-we-dont-let-non-root-users-run-docker-in-centos-fedora-or-rhel/) and [here](https://fosterelli.co/privilege-escalation-via-docker.html)). No extra setup steps are needed. `make` should be instructed to use `sudo` by setting `DOCKER="sudo docker"` in the command line. - -Usage ------ - -The RIOT build system provides support for using a Docker container containing all necessary tools to build RIOT projects. -The latest image is automatically fetched from the Docker Hub, so you just have to execute the -build command like this: - -(**from the directory you would normally run make, e.g. examples/basic/default**) - -```console -$ make BUILD_IN_DOCKER=1 -``` - -If your user does not have permissions to access the Docker daemon: - -```console -$ make BUILD_IN_DOCKER=1 DOCKER="sudo docker" -``` - -to always use Docker for building, set `BUILD_IN_DOCKER=1` (and if necessary `DOCKER="sudo docker"`) in the environment: - -```console -$ export BUILD_IN_DOCKER=1 -``` - -running make without specifying `BUILD_IN_DOCKER=1` will still use Docker (because of the environment variable) - -Troubleshooting {#docker-troubleshooting} ---------------- - -On some Ubuntu versions a make with `BUILD_IN_DOCKER=1` can't resolve the host name of for example github.com. To fix this add the file `/etc/docker/daemon.json` with the address of your DNS Server. - -For more details see @ref build-in-docker. +@deprecated See [Setup Guide](https://guide.riot-os.org/getting-started/installing/) or [Build in Docker](https://guide.riot-os.org/build-system/build-in-docker/) on the RIOT Guide Site for the latest information. This section will be removed after release 2025.11. Generating compile_commands.json e.g. for code completion in IDEs ================================================================= -A `compile_commands.json` for the selected board can be generated by running inside the application -folder the following: - -```console -$ make compile-commands -``` +See [Setup Guide](https://guide.riot-os.org/getting-started/installing/#using-vs-code-for-development) for a guide on how to set up VS Code for RIOT development using the `compile_commands.json` file. This target will honor the variables controlling the build process such as `BOARD`, `TOOLCHAIN`, `DEVELHELP`, etc. just like the usual build process. This works without actual compilation. By diff --git a/doc/doxygen/src/mainpage.md b/doc/doxygen/src/mainpage.md index 98f7da3d08..df45adc281 100644 --- a/doc/doxygen/src/mainpage.md +++ b/doc/doxygen/src/mainpage.md @@ -48,33 +48,15 @@ RIOT is developed by an open community that anyone is welcome to join: [mastodon-link]: https://fosstodon.org/@RIOT_OS -The quickest start {#the-quickest-start} +Getting Started ================== -You can run RIOT on most IoT devices, on open-access testbed hardware (e.g. -IoT-lab), and also directly as a process on your Linux or FreeBSD machine (we -call this the `native` port). Try it right now in your terminal window: -~~~~~~~{.sh} -git clone https://github.com/RIOT-OS/RIOT.git # assumption: git is pre-installed -cd RIOT -git checkout -sudo ./dist/tools/tapsetup/tapsetup # create virtual Ethernet - # interfaces to connect multiple - # RIOT instances -cd examples/basic/default/ -make all -make term -~~~~~~~ +To get started with RIOT, you can follow the +[Setup Guide](https://guide.riot-os.org/getting-started/installing/) on +the RIOT Guide Site. This guide will help you to set up your development +environment, build and run your first application, and configure RIOT for +your specific hardware. -... and you are in the RIOT shell! -Type `help` to discover available commands. For further information see the -[README of the `default` example](https://github.com/RIOT-OS/RIOT/tree/master/examples/basic/default). - -To use RIOT directly on your embedded platform, and for more hands-on details -with RIOT, see @ref getting-started. - -Before that, skimming through the next section is recommended (but not -mandatory). Structure {#structure} ========= diff --git a/doc/guides/build-system/advanced_build_system_tricks.md b/doc/guides/build-system/advanced_build_system_tricks.md index 9f985f3ea7..4843f451f7 100644 --- a/doc/guides/build-system/advanced_build_system_tricks.md +++ b/doc/guides/build-system/advanced_build_system_tricks.md @@ -36,13 +36,13 @@ There's one drawback: without further tweaking, `gcc` stops emitting colored out - Install using the package manager of your distribution, e.g., on Ubuntu or Debian: -``` +```shell sudo apt-get install ccache ``` - Set `CCACHE` variable to `ccache`: -``` +```shell export CCACHE=ccache ``` diff --git a/doc/guides/getting-started/img/06-Use_VS_Code-00.png b/doc/guides/getting-started/img/06-Use_VS_Code-00.png deleted file mode 100644 index e3229de68022a4e3dc0c6dafc8d2e440ac71a975..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61728 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

~IDkLh$Fz8qo*(47z8pf)(K)i`G}|GlOH#e%G< z(t)33zWT;r@X(IohruG?W%!H$%1UeAuh_rK^1n431DY)6*&?nnCbEl==lB3U(mX^J zft^hcAomZw9*cLi0833OSk|Bb38zobe8Bj>_w!*>_88Plnv>gstyIQqKnj?APc|yZ z&lp^W*r>Ew+J?UZ2G&212J``(B|s~>#+W0KAR^udju+5l)q)Qd@c%)vvQrI`b&3I0 zy^bP0Hec(fT}e?9-r>lH=@A4k+k*b_aN0K(@0$;2(qjT7`mr#1mx%(^DIViC8|{>( zJ}hQE(!bwA#^Ogl5-eZ9i`Ki8zNOH9Wo|leeWgJt zZ*6*C4@8kmP1s}LDAMT~4CI}Y4om9Ez_rIyP#)EP<0CE532QOQi-o&!ZO`+puUrYb z{PQ7IC;$u&X>#5eQjntN(KK@*Mx?m|Hsi`;DiC5(76nARa72mHn4VchSj}78UjZ*q zkxGXtBv^S`d?Zf9K++`PB)8H|*d$zK(_2uFJWZ@M03Hdiin`R+YTLI=q=_R+|6!5s zZS$>lkz0S4X+pVw0_XoXv;0@LD!ro#ax`lg4F1h9lK@FL%xn{cjN#c7#yhYv&0LWN z82-=5LOgJb(tz1Bm>#&n7e%NM)(99^P;s~uM_9Kwt%)Usx2&!pPQp-`$rb@Th`zv0;)o=?07q6Mf=vC8JK~O8 zY*!kvQmv6k0K}HLkgGPx9X@7)Aw&{m>X(6BwWJFzz(N5~gs_tO#(vljowx+whtS32 z(Ghqef&fU4Aop9DBM=rro*1A{K1a+$Czvez%sDltC*EXquvr zfX`SnOD_U$Ja5)}R)I?ZjFL22`2ktk5!*SlgMRhI*Ix}{d5%I3YJ520iU3gfN%D_T zqU>IyAS~JBhiFJ?j8p;&uVAKdajOJ`PYDce8ID|_8@opML=^gBEgWAe?M8Wa0ZzDo}!Vi?mRr#@entUa5Mt&3gR zBH|w}YGPNm8?RE;p%YurEx@+_hAXmO)_1cvDR$*;$H7~~k$z2>>TR0_#ZJCz|MX3} z_Zf8mMO0;HS}?!_PmS1eO$o0TdT#J zYFgiv6*xBy)(#uBZJa*JX+0kq1wJt%@S`*aW9@gCMg8l7?akd_MgVMG%59US(?6lc zm|hZ&DA$0ES{M$`i>mYtI}Ry82Z1|$+bIhn_m{{zQW#T;Q(rk^=yg!R0NbV)ec-2y z({u(tw1$BLhb6O6{i9>)p8_`nuZ$6q8M8ucQ96{d6n$+*%gC)x& zfq#gkBricn8~>(6))B)1ZTP4h3~=2d@ZeMps7nsJi5Hc%x5!IY2wB>%V>x^|0WHsk zWBs&I5~gN2k?BBS586cVNf)%>fwQn!K?v-qc0vWZ2$L0Y==kUvP;%!8iQQ})_a3>Ha1u0Jn3u-Mm^3nr3!LlfE zk~n`F*>_Pc6W9Vs6!PaUqR$fw5zmAN1-vY=>q2n?q$a3FI-#`iP3;4SJuU${8v(Ly znT@2r9WVu@1i}!q3~UmmbhR~YnE;yp@ncL88wbK&A;7DV{}JBKNjkx}x9##3A?25kve)%d2!Bf znZ+J9>J(7S;-eriNlhHV24oOuq9W5uw;jxo<;eb zO_D6GY`z0qK6=7~!))Oq-Ov$_3jkBgRQ$DET zhH}dguv2mvmYj(rJ5=18srf)u+y0)8+OFGr!XO;}6Od8n|Y$F`UxBnztqO3>Ym zPd#*=VFr=EkpMfUkYodp(X)ygL7|BoIt3WDX=>AQ`BRl^`iRCsfr=sBr0$>tB{AiT zZV2CP(3~9d?D>mn3clx_C}Q=}Y*gQIx!LMG?l{`a1~d0)X^$`M?OP|{z7`)RQ)WEz zJE-a+aa4ijRINNynuSIZk=O}5<0y&Ekn9R@gaT4b!eyO+!I z(tx?wOF2!OKK+{6F)``N<=uDg#>1Hz}{KFS0Ayr$1d%ePD37wCb+D zNm(rW^tZK(W(M_(H|;IU6l9}vJfoxIbDmb`p6TOVYPrSk+jF>LVn#}KdQ3Oe%!|f6 zPHE=8^I(co+%xU}6Zp+*eiC`JarE1Bm-l#pK=m4<0+{ z$Mab#55(qUO-ka^H|jeq_3553NqeNZgnz*3xmIgkOp8tUKb=cXtJWH8nO1eGdLY^of5um1o+D9xZTGdyk7}Ks zj&S2`C@c%n(iOIB1_M{tGnEVu3uGVU`RSa}rTRhRBv)4oopd-krX!ho zOS_eHHDOf5jk%lhrNr@QZ*5glh|Mc6(fWNyMXg^wj%L;}t?x8yky4S=?r3;ap@8RfzVaJCR^@-8+9qw`Apb;0DgM znF)n5h2N0f<*$$^PSqb0{OWAC5yoEep;>{K<*Kkpf^puP`L3>~uYV+WJ&nEL`QeK= zcb+Qusu=b(XxU*tePV_UW!G3R%(0a<=nr6z84aj2u zpK;7QLoBX}L!ZgGsW%U)tWJ^ROm1Is>N-%|o|NJ{VVClm4=wZG4BzcjdAqhO0F(Ul zai*mQF&$WLL&fKe-A=K@Z(0hAX_Gj^jJ*<90)<{jw%DH;zJFfW#;E*ls0iMtVe;P8 z{jT8+0<%@au}}IXSxr4&pInBG{Rq#G^sL!`Cw?(VzS?HJx`ukP64yEBH%>a17cC4-1ETXka66HBcLZa=1p zU)n9IdVP-`?`gj7ZgM5--@lDA8vgW3N$2fdW_25y@i+NnG=uoSujfJyT^eVluw{q6 z8jn!wSbI6$4vR*Y*q;cgGt!gHeq1-E%I6rbFt2<{TrxR??~bHMvhKKOtKa&GCqJ!f V-t)cG4-zB>RmH1Nu7bt=e*soAr-c9j diff --git a/doc/guides/getting-started/installing.mdx b/doc/guides/getting-started/installing.mdx index 1a80842f00..7ffd900b66 100644 --- a/doc/guides/getting-started/installing.mdx +++ b/doc/guides/getting-started/installing.mdx @@ -47,7 +47,7 @@ This is especially useful if you want to avoid installing the required software Depending on the operation distribution you are using, the installation of the required software packages may vary. -##### Ubuntu +#### Ubuntu ```bash title="Ubuntu command to install required packages" sudo apt install make gcc-multilib python3-serial wget unzip git openocd gdb-multiarch esptool podman-docker clangd clang @@ -109,8 +109,6 @@ The app should behave the same when run on real hardware. ## Using VS Code for Development -![Ubuntu terminal running `make compile-commands` in the `hello-world` app](img/06-Use_VS_Code-00.png) - - If not already open, open the terminal - Confirm that the terminal is pointed to the folder `~/RIOT/examples/basic/hello-world` - The blue part left of the prompt (the `$` sign in the terminal) shows @@ -120,14 +118,14 @@ The app should behave the same when run on real hardware. - Inside `~/RIOT/examples/basic/hello-world` run the command `make compile-commands` - The output should look like above -![Launching VS Code from Ubuntu](img/06-Use_VS_Code-01.png) +![Ubuntu terminal running `make compile-commands` in the `hello-world` app](img/06-Use_VS_Code-01.png) - Navigate back to `~/RIOT` using the command `cd ~/RIOT` - run `code .` to launch VS Code - This will take a bit longer on the first launch - Eventually, a VS Code Window should pop up that looks like this: -![VS Code as opened from WSL](img/06-Use_VS_Code-02.png) +![VS Code opened via shell](img/06-Use_VS_Code-02.png) 1. Click on "Yes, I trust the authors" @@ -192,3 +190,93 @@ Re-run `make compile-commands` when: Congratulations! You just compiled your first RIOT application. To run RIOT on real hardware, proceed with the next to sections. + + +## Architecture Specific Requirements + +:::caution[Don't get lost] +If this section overwhelms you, don’t worry, you can always come back to it later. +This is only important if you want to develop for a specific architecture or board. +For now everything should work fine with the packages installed above. + +You can safely skip this section if you are just getting started with RIOT +and want to try out the examples or develop for the `native` board. +::: + + +For each architecture a default tool for flashing and on-chip debugging is listed below - in +most cases OpenOCD. However, some boards use different tools, e.g. because a bootloader is +installed that allows flashing via the serial interface. Check the board documentation for any +details on this. If that documentation contains no info about a flashing tool, the default +tool for its architecture is used. + +:::tip + Running `BOARD= make info-programmers-supported` in your + application folder lists the programmers supported by RIOT for the given board. +::: + +#### Architecture: ARM7 and ARM Cortex M* + +* GCC, binutils, and newlib for `arm-none-eabi` + * Alternatively: Install docker and export `BUILD_IN_DOCKER=1` +* OpenOCD for debugging/flashing (most boards) + * Some boards use UF2 based bootloaders, which require auto-mounting to work with `make flash` + * Some boards default to using J-Link for flashing/debugging. Either install that or export + `PROGRAMMER=openocd` to just use OpenOCD instead + * installation instructions can be found [here](https://github.com/RIOT-OS/RIOT/wiki/OpenOCD) +* Optional: picolibc for `arm-none-eabi` to link against picolibc instead of newlib +* Optional: clang to build with `TOOLCHAIN=llvm` +* Optional: GDB multiarch for debugging + * If no multiarch package is available, use GDB for `arm-none-eabi` instead + +#### Architecture: Xtensa + +##### ESP32 + +* [Toolchain for ESP32](https://doc.riot-os.org/group__cpu__esp32.html#esp32_toolchain) +* [esptool](https://github.com/espressif/esptool) for flashing +* Optional: OpenOCD and GDB (multiarch version) for [debugging via JTAG](https://doc.riot-os.org/group__cpu__esp32.html#esp32_jtag_debugging) + +##### ESP8266 + +* [Toolchain for ESP8266](https://doc.riot-os.org/group__cpu__esp8266.html#esp8266_toolchain) +* [esptool](https://github.com/espressif/esptool) for flashing +* Optional: GDB (multiarch version) for [debugging via the gdbstub](https://doc.riot-os.org/group__cpu__esp8266.html#esp8266_esp_gdbstub) + interface for the ESP8266 + +#### Architecture: AVR + +* GCC and binutils for AVR and avrlibc + * Alternatively: Install docker and export `BUILD_IN_DOCKER=1` +* avrdude for flashing +* Optional: AVaRICE and GDB (multiarch version) for debugging + +#### Architecture: RISC-V + +* GCC, binutils, and newlib for RISC-V (target triple should start with `riscv` and end with + `-none-elf` or `-unknown-elf`. Note that most packages are multilib, e.g. `riscv64-unknown-elf` + will likely work fine for 32 bit RISC-V boards) + * Alternatively: Install docker and export `BUILD_IN_DOCKER=1` +* OpenOCD for debugging/flashing (some new boards might require a patched version of OpenOCD or a + recent build from the git sources) +* Optional: picolibc to link against picolibc instead of newlib (recommended) +* Optional: clang to build with `TOOLCHAIN=llvm` +* Optional: GDB multiarch for debugging + +#### Architecture: MSP430 + +* GCC, binutils, and newlib for MSP430 + * Alternatively: Install docker and export `BUILD_IN_DOCKER=1` +* [mspdebug](https://github.com/dlbeer/mspdebug) for flashing/debugging + * Optional: [MSP Debug Stack](https://www.ti.com/tool/download/MSPDS-OPEN-SOURCE) for additional + board support +* Optional: GDB multiarch for debugging + +#### Architecture: native + +* On 64 bit systems: multilib versions for your host compilers, standard C library, and development + headers + * Alternatively: Compile with `BUILD_IN_DOCKER=1`. Note that for running the executable you + still need a multilib system (or 32 bit Linux) with glibc a standard C library. +* A C library supporting the deprecated POSIX.1-2001 ucontext library (e.g. glibc, FreeBSD's libc) +* Optional: GDB for debugging. (Prefer the multiarch version, this will also work for other boards)