mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2025-12-13 16:43:52 +01:00
doc/guide: Introduce a Guide Site
doc/guides: How to Doc fix: add starlight to base makefile
This commit is contained in:
parent
ec94a3cd72
commit
e82ada6358
33
.github/workflows/deploy_docs.yml
vendored
Normal file
33
.github/workflows/deploy_docs.yml
vendored
Normal file
@ -0,0 +1,33 @@
|
||||
name: Build Docs
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
paths:
|
||||
- 'doc/guides/**'
|
||||
- 'doc/starlight/**'
|
||||
|
||||
jobs:
|
||||
build-docs:
|
||||
runs-on: ubuntu-latest
|
||||
defaults:
|
||||
run:
|
||||
working-directory: doc/starlight
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
- name: Set up Node.js
|
||||
uses: actions/setup-node@v4
|
||||
- name: Build documentation
|
||||
run: make build
|
||||
# This step will probably need to be changed to use the actual service RIOT is using
|
||||
# This makes it more convenient to deploy while still in development though
|
||||
- name: Deploy documentation
|
||||
uses: peaceiris/actions-gh-pages@v3
|
||||
with:
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
publish_dir: doc/starlight/dist
|
||||
publish_branch: gh-pages
|
||||
cname: guide.riot-os.org
|
||||
commit_message: "Deploy documentation"
|
||||
6
Makefile
6
Makefile
@ -1,6 +1,6 @@
|
||||
.all:
|
||||
|
||||
.PHONY: all doc doc-man doc-latex docclean print-versions welcome
|
||||
.PHONY: all doc doc-man doc-latex docclean doc-starlight print-versions welcome
|
||||
|
||||
all: welcome
|
||||
@echo ""
|
||||
@ -12,8 +12,12 @@ doc doc-man doc-latex doc-ci:
|
||||
--output-md doc/doxygen/src/feature_list.md
|
||||
"$(MAKE)" -C doc/doxygen $@
|
||||
|
||||
doc-starlight:
|
||||
"$(MAKE)" -C doc/starlight dev
|
||||
|
||||
docclean:
|
||||
"$(MAKE)" -BC doc/doxygen clean
|
||||
"$(MAKE)" -C doc/starlight clean
|
||||
|
||||
pkg-clean:
|
||||
@echo "Cleaning all package sources"
|
||||
|
||||
1
dist/tools/ci/static_tests.sh
vendored
1
dist/tools/ci/static_tests.sh
vendored
@ -131,6 +131,7 @@ run ./dist/tools/codespell/check.sh
|
||||
run ./dist/tools/cargo-checks/check.sh
|
||||
run ./dist/tools/examples_check/check_has_readme.sh
|
||||
run ./dist/tools/examples_check/check_in_readme.sh
|
||||
run ./dist/tools/code_in_guides_check/check_for_code.sh
|
||||
if [ -z "${GITHUB_RUN_ID}" ]; then
|
||||
run ./dist/tools/uncrustify/uncrustify.sh --check
|
||||
else
|
||||
|
||||
101
dist/tools/code_in_guides_check/check_for_code.sh
vendored
Executable file
101
dist/tools/code_in_guides_check/check_for_code.sh
vendored
Executable file
@ -0,0 +1,101 @@
|
||||
#!/bin/bash
|
||||
# This script checks if the code blocks in markdown files under the guides directory
|
||||
# are present in the corresponding source files. It looks for code blocks marked with
|
||||
# ```c and checks if the code exists in the source files defined by the code_folder
|
||||
# variable in the markdown file. If the code block is not found, it will print an error
|
||||
# message and exit with a non-zero status.
|
||||
|
||||
# Define the guides directory
|
||||
BASE_DIR="$(git rev-parse --show-toplevel)"
|
||||
GUIDES_DIR="$BASE_DIR/doc/guides"
|
||||
|
||||
# Check if directory exists
|
||||
if [ ! -d "$GUIDES_DIR" ]; then
|
||||
echo "Error: Guides directory not found at $GUIDES_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
exit_code=0
|
||||
|
||||
# Parses code blocks from within a file
|
||||
# Args: $1 -> Line number of the code block
|
||||
# $2 -> The file path
|
||||
# Returns:
|
||||
# 0 -> On found or skipped block
|
||||
# 1 -> Not found
|
||||
parse_code_block() {
|
||||
start_line=$1
|
||||
file_path=$2
|
||||
# Check whether there is a <!--skip ci--> comment in the line before the code block
|
||||
skip_ci=$(sed -n "$((start_line - 1))p" "$file_path" | grep -c '<!--skip ci-->')
|
||||
if [ "$skip_ci" -gt 0 ]; then
|
||||
echo " ✔️ Line $start_line: Code block is skipped due to <!--skip ci--> comment"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Extract the code block content until the ending ```
|
||||
code_block=$(awk -v start="$start_line" 'NR>start{if(/^```$/){exit}; print}' "$file_path")
|
||||
|
||||
# Check if this code exists in any file in the source directory
|
||||
found=0
|
||||
for src_file in "$SOURCE_DIR"/*; do
|
||||
# Skip if not a regular file
|
||||
[ -f "$src_file" ] || continue
|
||||
|
||||
# Read the file content
|
||||
src_content=$(cat "$src_file")
|
||||
|
||||
# Check if the code block exists in the current source file
|
||||
if [[ "$src_content" == *"$code_block"* ]]; then
|
||||
found=1
|
||||
echo " ✔️ Found Line $start_line in $(basename "$src_file")"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ $found -eq 0 ]; then
|
||||
echo " ❌ Line $start_line: Code block not found in any source file"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
markdown_files=$(find "$GUIDES_DIR" -type f \( -name "*.md" -o -name "*.mdx" \))
|
||||
|
||||
# Find and process all .md and .mdx files
|
||||
for file in $markdown_files; do
|
||||
echo "🧐 Processing file: $file"
|
||||
|
||||
# Check if there is a code_folder defined in the markdown file
|
||||
code_folder=$(grep -oP -m1 'code_folder:\s*\K.+' "$file")
|
||||
if [ -z "$code_folder" ]; then
|
||||
echo " ✔️ File does not specify code_folder, skipping ..."
|
||||
continue
|
||||
fi
|
||||
SOURCE_DIR="$BASE_DIR/$code_folder"
|
||||
|
||||
echo "🔍 Looking for code in $SOURCE_DIR"
|
||||
|
||||
# Get all code block start lines
|
||||
code_block_starts=$(grep -n '```[cC]' "$file" | cut -d':' -f1)
|
||||
|
||||
if [ -z "$code_block_starts" ]; then
|
||||
echo " ❌ No code blocks found in this file even though code_folder was specified."
|
||||
exit_code=1
|
||||
fi
|
||||
|
||||
# Process each code block
|
||||
for start_line in $code_block_starts; do
|
||||
parse_code_block "$start_line" "$file"
|
||||
if [ "$?" -eq "1" ]; then
|
||||
exit_code=1
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
if [ $exit_code -eq 0 ]; then
|
||||
echo "👍 All code blocks found in the source files."
|
||||
else
|
||||
echo "👎 Some code blocks were not found in the source files. See the output above."
|
||||
fi
|
||||
|
||||
exit $exit_code
|
||||
64
doc/guides/build-system/advanced_build_system_tricks.md
Normal file
64
doc/guides/build-system/advanced_build_system_tricks.md
Normal file
@ -0,0 +1,64 @@
|
||||
---
|
||||
title: Advanced Build System Tricks
|
||||
description: This page describes some build systems tricks that can help developers but are not part of the standard workflow.
|
||||
---
|
||||
|
||||
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
|
||||
|
||||
- `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
|
||||
|
||||
## 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.
|
||||
|
||||
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:
|
||||
|
||||
```sh
|
||||
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:
|
||||
|
||||
```sh
|
||||
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
|
||||
|
||||
Most applications and tests include a `Makefile.ci` to indicate which boards cannot compile the application or test. The content for these files can be generated via the script in:
|
||||
|
||||
```sh
|
||||
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
|
||||
|
||||
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.
|
||||
|
||||
## 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.
|
||||
128
doc/guides/build-system/build-in-docker.md
Normal file
128
doc/guides/build-system/build-in-docker.md
Normal file
@ -0,0 +1,128 @@
|
||||
---
|
||||
title: Build in Docker
|
||||
description: Building RIOT in a Docker container
|
||||
---
|
||||
|
||||
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/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/hello-world/
|
||||
docker run --rm -t -u "$(id -u)" \
|
||||
...
|
||||
-e 'BEER_TYPE=imperial stout' \
|
||||
-w '/data/riotbuild/riotbase/examples/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/hello-world/
|
||||
docker run --rm -t -u "$(id -u)" \
|
||||
...
|
||||
-e 'BEER_TYPE=imperial stout' \
|
||||
-w '/data/riotbuild/riotbase/examples/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/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/' \
|
||||
'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
|
||||
58
doc/guides/build-system/build_system.mdx
Normal file
58
doc/guides/build-system/build_system.mdx
Normal file
@ -0,0 +1,58 @@
|
||||
---
|
||||
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)
|
||||
214
doc/guides/build-system/build_system_basics.md
Normal file
214
doc/guides/build-system/build_system_basics.md
Normal file
@ -0,0 +1,214 @@
|
||||
---
|
||||
title: Build System Basics
|
||||
description: This page describes the basic concepts of the RIOT build system.
|
||||
---
|
||||
|
||||
## 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` 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
|
||||
|
||||
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
|
||||
|
||||
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)
|
||||
156
doc/guides/general/structure.mdx
Normal file
156
doc/guides/general/structure.mdx
Normal file
@ -0,0 +1,156 @@
|
||||
---
|
||||
title: Structure
|
||||
description: This section walks you through RIOT's structure. Once you understand this structure, you will easily find your way around in RIOT's code base.
|
||||
---
|
||||
|
||||
This section walks you through RIOT's structure. Once you understand this
|
||||
structure, you will easily find your way around in RIOT's code base.
|
||||
|
||||

|
||||
|
||||
RIOT's code base is structured into five groups.
|
||||
|
||||
- The kernel (`core`)
|
||||
- Platform specific code (`cpu`; `boards`)
|
||||
- Device drivers (`drivers`)
|
||||
- Libraries and network code (`sys`; `pkg`)
|
||||
- Applications for demonstrating features and for testing (`examples`;
|
||||
`tests`)
|
||||
|
||||
In addition RIOT includes a collection of scripts for various tasks (`dist`) as
|
||||
well as a predefined environment for generating this documentation (`doc`).
|
||||
|
||||
The structural groups are projected onto the directory structure of RIOT, where
|
||||
each of these groups resides in one or two directories in the main RIOT
|
||||
directory.
|
||||
|
||||
The following list gives a more detailed description of each of RIOT's
|
||||
top-level directories:
|
||||
|
||||
core
|
||||
----
|
||||
This directory contains the actual kernel. The kernel consists of the scheduler,
|
||||
inter-process-communication (messaging), threading, and thread
|
||||
synchronization, as well as supporting data-structures and type definitions.
|
||||
|
||||
See @ref core for further information and API documentations.
|
||||
|
||||
boards
|
||||
------
|
||||
The platform dependent code is split into two logic elements: CPUs and boards,
|
||||
while maintaining a strict 1-to-n relationship, a board has exactly one CPU,
|
||||
while a CPU can be part of n boards. The CPU part contains all generic, CPU
|
||||
specific code (see below).
|
||||
|
||||
The board part contains the specific configuration for the CPU it contains.
|
||||
This configuration mainly includes the peripheral configuration and
|
||||
pin-mapping, the configuration of on-board devices, and the CPU's clock
|
||||
configuration.
|
||||
|
||||
On top of the source and header files needed for each board, this directory
|
||||
additionally may include some script and configuration files needed for
|
||||
interfacing with the board. These are typically custom flash/debug scripts or
|
||||
e.g. OpenOCD configuration files. For most boards, these files are located in a
|
||||
`dist` sub-directory of the board.
|
||||
|
||||
See here @ref boards for further information.
|
||||
|
||||
cpu
|
||||
---
|
||||
For each supported CPU this directory contains a sub-directory with the name of
|
||||
the CPU. These directories then contain all CPU specific configurations, such
|
||||
as implementations of power management (LPM), interrupt handling and vectors,
|
||||
startup code, clock initialization code and thread handling (e.g. context
|
||||
switching) code. For most CPUs you will also find the linker scripts in the
|
||||
`ldscripts` sub-directory.
|
||||
|
||||
In the `periph` sub-directory of each CPU you can find the implementations of
|
||||
the CPU's peripheral drivers like SPI, UART, GPIO, etc. See @ref drivers_periph
|
||||
for their API documentation.
|
||||
|
||||
Many CPUs share a certain amount of their code (e.g. all ARM Cortex-M based
|
||||
CPUs share the same code for task switching and interrupt handling). This
|
||||
shared code is put in its own directories, following a `xxxxx_common` naming
|
||||
scheme. Examples for this is code shared across architectures (e.g.
|
||||
`cortexm_common`, `msp430_comon`) or code shared among vendors (e.g.
|
||||
`stm32_common`).
|
||||
|
||||
See @ref cpu for more detailed information.
|
||||
|
||||
drivers
|
||||
-------
|
||||
This directory contains the drivers for external devices such as network
|
||||
interfaces, sensors and actuators. Each device driver is put into its own
|
||||
sub-directory with the name of that device.
|
||||
|
||||
All of RIOT's device drivers are based on the peripheral driver API (e.g. SPI,
|
||||
GPIO, etc.) and other RIOT modules like the `xtimer`. This way the drivers are
|
||||
completely platform agnostic and they don't have any dependencies into the CPU
|
||||
and board code.
|
||||
|
||||
See @ref drivers for more details.
|
||||
|
||||
sys
|
||||
---
|
||||
RIOT follows a modular design paradigm where everything is supposed to
|
||||
be a module. All of these modules that are not part of the hardware abstraction
|
||||
nor device drivers can be found in this directory. The libraries include data
|
||||
structures (e.g. bloom, color), crypto libraries (e.g. hashes, AES) ,
|
||||
high-level APIs (e.g. Posix implementations), memory management (e.g. malloc),
|
||||
the RIOT shell and many more.
|
||||
|
||||
See @ref sys for a complete list of available libraries
|
||||
|
||||
sys/net
|
||||
-------
|
||||
The `sys/net` sub-directory needs to be explicitly mentioned, as this is where
|
||||
all the networking code in RIOT resides. Here you can find the network stack
|
||||
implementations (e.g. the @ref net_gnrc "GNRC" stack) as well as network stack agnostic code as
|
||||
header definitions or network types.
|
||||
|
||||
See @ref net for more details on networking code.
|
||||
|
||||
pkg
|
||||
---
|
||||
RIOT comes with support for a number of external libraries (e.g.
|
||||
[ccn-lite](https://github.com/cn-uofbasel/ccn-lite),
|
||||
[microcoap](https://github.com/1248/microcoap)). The way they are included is
|
||||
that RIOT ships with a custom Makefile for each supported library that
|
||||
downloads the library and optionally applies a number of patches to make it
|
||||
work with RIOT. These Makefiles and patches can be found in the `pkg`
|
||||
directory.
|
||||
|
||||
See @ref pkg for a detailed description on how this works.
|
||||
|
||||
examples
|
||||
--------
|
||||
Here you find a number of example applications that demonstrate certain
|
||||
features of RIOT. The default example found in this directory is a good
|
||||
starting point for anyone who is new to RIOT.
|
||||
|
||||
For more information best browse that directory and have a look at the
|
||||
`README.md` files that ship with each example.
|
||||
|
||||
To create your own application - here or anywhere else - see @ref creating-an-application
|
||||
|
||||
tests
|
||||
-----
|
||||
Many features/modules in RIOT come with their own test application, which are
|
||||
located in this directory. In contrary to the examples these tests are mostly
|
||||
focusing on a single aspect than on a set of features. Despite for testing, you
|
||||
might consider these tests also for insights on understanding RIOT.
|
||||
|
||||
dist & doc
|
||||
----------
|
||||
All the tooling around RIOT can be found in these two folders.
|
||||
|
||||
`doc` contains the doxygen configuration and also contains the compiled doxygen
|
||||
output after running `make doc`.
|
||||
|
||||
Lastly, the `dist` directory contains tools to help you with RIOT. These
|
||||
include
|
||||
the serial terminal application `pyterm`, generic scripts for flashing,
|
||||
debugging, resetting (e.g. support for [OpenOCD](http://openocd.org/),
|
||||
[Jlink](https://www.segger.com/jlink_base.html)), as well as code enabling easy
|
||||
integration to open testbeds such as the [IoT-LAB](https://www.iot-lab.info/).
|
||||
Furthermore you can find here scripts to do all kind of code and style checks.
|
||||
BIN
doc/guides/img/riot-logo-large.png
Normal file
BIN
doc/guides/img/riot-logo-large.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 19 KiB |
537
doc/guides/img/riot-structure.svg
Normal file
537
doc/guides/img/riot-structure.svg
Normal file
@ -0,0 +1,537 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg version="1.1" width="640" height="430"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<title>RIOT's structure</title>
|
||||
<metadata>
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="Provides a general overview over RIOT's general structure">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>RIOT Overview</dc:title>
|
||||
<cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" />
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Martine Lenders</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
</cc:Work>
|
||||
<cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/">
|
||||
<cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction" />
|
||||
<cc:permits rdf:resource="http://creativecommons.org/ns#Distribution" />
|
||||
<cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
|
||||
<cc:requires rdf:resource="http://creativecommons.org/ns#Notice" />
|
||||
<cc:requires rdf:resource="http://creativecommons.org/ns#Attribution" />
|
||||
<cc:requires rdf:resource="http://creativecommons.org/ns#ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs>
|
||||
<style type="text/css">
|
||||
<![CDATA[
|
||||
@font-face {
|
||||
font-family: 'Miso';
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
src: url('miso.eot'); /* IE 9 Compatibility Mode */
|
||||
src: url('miso.eot?#iefix') format('embedded-opentype'), /* IE < 9 */
|
||||
url('data:application/x-font-woff;charset=utf-8;base64, \
|
||||
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 \
|
||||
') format('woff'), /* Firefox >= 3.6, any other modern browser */
|
||||
url('miso.ttf') format('truetype'), /* Safari, Android, iOS */
|
||||
url('miso.svg#Miso') format('svg'); /* Chrome < 4, Legacy iOS */
|
||||
}
|
||||
.modbox-text {
|
||||
line-height: 125%;
|
||||
fill: #ffffff;
|
||||
font-family: 'Miso';
|
||||
font-size: 28px;
|
||||
text-anchor: middle;
|
||||
}
|
||||
.modbox {
|
||||
fill: #275a4b;
|
||||
stroke: #3fa687;
|
||||
stroke-linecap: round;
|
||||
stroke-linejoin: round;
|
||||
stroke-miterlimit: 4;
|
||||
stroke-width: 3;
|
||||
}
|
||||
.outer-text {
|
||||
line-height: 125%;
|
||||
fill: #3fa687;
|
||||
font-family: 'Miso';
|
||||
font-size: 32px;
|
||||
text-anchor: middle;
|
||||
}
|
||||
.outer-text-netapi {
|
||||
line-height: 125%;
|
||||
fill: #3fa687;
|
||||
font-family: 'Miso';
|
||||
font-size: 28px;
|
||||
text-anchor: start;
|
||||
}
|
||||
.outer-stroke {
|
||||
fill: none;
|
||||
stroke: #3fa687;
|
||||
stroke-linecap: round;
|
||||
stroke-linejoin: miter;
|
||||
stroke-miterlimit: 4;
|
||||
stroke-width: 3;
|
||||
}
|
||||
#gnrc-detail-conn {
|
||||
fill: none;
|
||||
stroke: url(#outer-gradient-conn);
|
||||
stroke-linecap: round;
|
||||
stroke-linejoin: miter;
|
||||
stroke-miterlimit: 4;
|
||||
stroke-width: 3;
|
||||
}
|
||||
#gnrc-detail-netdev {
|
||||
fill: none;
|
||||
stroke: url(#outer-gradient-netdev);
|
||||
stroke-linecap: round;
|
||||
stroke-linejoin: miter;
|
||||
stroke-miterlimit: 4;
|
||||
stroke-width: 3;
|
||||
}
|
||||
.outer-stroke-dashed {
|
||||
fill: none;
|
||||
stroke: #3fa687;
|
||||
stroke-dasharray: 9, 9;
|
||||
stroke-linecap: round;
|
||||
stroke-linejoin: miter;
|
||||
stroke-miterlimit: 4;
|
||||
stroke-width: 3;
|
||||
}
|
||||
.outer-stroke-dotted {
|
||||
fill: none;
|
||||
stroke: #3fa687;
|
||||
stroke-dasharray: 1, 5;
|
||||
stroke-linecap: round;
|
||||
stroke-linejoin: miter;
|
||||
stroke-miterlimit: 4;
|
||||
stroke-width: 3;
|
||||
}
|
||||
.outer-stroke-arrow {
|
||||
fill: none;
|
||||
marker-start: url(#arrow-start);
|
||||
marker-end: url(#arrow-end);
|
||||
stroke: #3fa687;
|
||||
stroke-linecap: round;
|
||||
stroke-linejoin: miter;
|
||||
stroke-miterlimit: 4;
|
||||
stroke-width: 3;
|
||||
}
|
||||
.outer-arrow-head {
|
||||
fill: #3fa687;
|
||||
fill-rule: evenodd;
|
||||
stroke: #3fa687;
|
||||
stroke-width: 1pt;
|
||||
}
|
||||
]]>
|
||||
</style>
|
||||
<linearGradient id="outer-gradient-conn" x1="0%" y1="0%" x2="0%" y2="100%">
|
||||
<stop style="stop-color: #3fa687; stop-opacity: 0;" offset="0" />
|
||||
<stop style="stop-color: #3fa687; stop-opacity: 0;" offset="0.1" />
|
||||
<stop style="stop-color: #3fa687; stop-opacity: 1;" offset="0.9" />
|
||||
<stop style="stop-color: #3fa687; stop-opacity: 1;" offset="1" />
|
||||
</linearGradient>
|
||||
<linearGradient id="outer-gradient-netdev" x1="0%" y1="0%" x2="0%" y2="100%">
|
||||
<stop style="stop-color: #3fa687; stop-opacity: 1;" offset="0" />
|
||||
<stop style="stop-color: #3fa687; stop-opacity: 1;" offset="0.1" />
|
||||
<stop style="stop-color: #3fa687; stop-opacity: 0;" offset="0.9" />
|
||||
<stop style="stop-color: #3fa687; stop-opacity: 0;" offset="1" />
|
||||
</linearGradient>
|
||||
<marker style="overflow: visible" id="arrow-start" orient="auto">
|
||||
<path class="outer-arrow-head" d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
|
||||
transform="matrix(0.2,0,0,0.2,1.2,0)" />
|
||||
</marker>
|
||||
<marker style="overflow: visible" id="arrow-end" orient="auto">
|
||||
<path class="outer-arrow-head" d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
|
||||
transform="matrix(-0.2,0,0,-0.2,-1.2,0)" />
|
||||
</marker>
|
||||
</defs>
|
||||
<text id="os-overview-hardware-indep"
|
||||
class="outer-text" x="125" y="189"><tspan>Hardware-independent</tspan></text>
|
||||
<path id="hardware-divider" d="m 5,215 635,0" class="outer-stroke-dotted" />
|
||||
<text id="os-overview-hardware-dep"
|
||||
class="outer-text" x="125" y="259"><tspan>Hardware-dependent</tspan></text>
|
||||
<g id="os-overview" transform="translate(255, 0)">
|
||||
<path id="application-divider" d="m -5,70 390,0" class="outer-stroke-dashed" />
|
||||
<text id="os-overview-application"
|
||||
class="outer-text" x="190" y="43"><tspan>Application</tspan></text>
|
||||
<path id="hardware-divider" d="m -5,360 390,0" class="outer-stroke-dashed" />
|
||||
<text id="os-overview-hardware"
|
||||
class="outer-text" x="190" y="399"><tspan>Hardware</tspan></text>
|
||||
<g id="pkg">
|
||||
<rect id="pkg-box" class="modbox" x="0" y="80" rx="4" ry="4" width="120" height="60" />
|
||||
<text id="pkg-label" class="modbox-text" x="60" y="119"><tspan>pkg</tspan></text>
|
||||
</g>
|
||||
<g id="sys">
|
||||
<rect id="sys-box" class="modbox" x="130" y="80" rx="4" ry="4" width="120" height="60" />
|
||||
<text id="sys-label" class="modbox-text" x="190" y="119"><tspan>sys</tspan></text>
|
||||
</g>
|
||||
<g id="sys-net">
|
||||
<rect id="sys-net-box" class="modbox" x="260" y="80" rx="4" ry="4" width="120" height="60" />
|
||||
<text id="sys-net-label" class="modbox-text" x="320" y="119"><tspan>sys/net</tspan></text>
|
||||
</g>
|
||||
<g id="core">
|
||||
<rect id="core-box" class="modbox" x="0" y="150" rx="4" ry="4" width="230" height="60" />
|
||||
<text id="core-label" class="modbox-text" x="115" y="189"><tspan>core (kernel)</tspan></text>
|
||||
</g>
|
||||
<g id="core">
|
||||
<rect id="core-box" class="modbox" x="240" y="150" rx="4" ry="4" width="140" height="60" />
|
||||
<text id="core-label" class="modbox-text" x="310" y="189"><tspan>drivers</tspan></text>
|
||||
</g>
|
||||
<g id="periph">
|
||||
<rect id="periph-box" class="modbox" x="0" y="220" rx="4" ry="4" width="380" height="60" />
|
||||
<text id="periph-label"
|
||||
class="modbox-text" x="190" y="259"><tspan>drivers/periph</tspan></text>
|
||||
</g>
|
||||
<g id="cpu">
|
||||
<rect id="cpu-box" class="modbox" x="0" y="290" rx="4" ry="4" width="185" height="60" />
|
||||
<text id="cpu-label" class="modbox-text" x="92.5" y="329"><tspan>cpu</tspan></text>
|
||||
</g>
|
||||
<g id="board">
|
||||
<rect id="board-box" class="modbox" x="195" y="290" rx="4" ry="4" width="185" height="60" />
|
||||
<text id="board-label" class="modbox-text" x="287.5" y="329"><tspan>boards</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 40 KiB |
52
doc/guides/index.md
Normal file
52
doc/guides/index.md
Normal file
@ -0,0 +1,52 @@
|
||||
---
|
||||
title: RIOT in a nutshell
|
||||
description: Welcome to the RIOT documentation
|
||||
---
|
||||
|
||||

|
||||
|
||||
### Welcome to the friendly Operating System for the Internet of Things.
|
||||
|
||||
RIOT is an open-source microcontroller operating system, designed to match
|
||||
the requirements of Internet of Things (IoT) devices and other embedded
|
||||
devices. These requirements include a very low memory footprint (on the order
|
||||
of a few kilobytes), high energy efficiency, real-time capabilities, support
|
||||
for a wide range of low-power hardware, communication stacks for wireless and
|
||||
communication stacks for wired networks.
|
||||
|
||||
RIOT provides threading, multiple network stacks, and utilities which
|
||||
include cryptographic libraries, data structures (bloom filters, hash tables,
|
||||
priority queues), a shell and more. RIOT supports a wide range of
|
||||
microcontroller architectures, radio drivers, sensors, and configurations for
|
||||
entire platforms, e.g. Atmel SAM R21 Xplained Pro, Zolertia Z1, STM32 Discovery
|
||||
Boards etc. (see the list of
|
||||
[supported boards](https://www.riot-os.org/boards.html).
|
||||
Across all supported hardware (32-bit, 16-bit, and 8-bit platforms), RIOT
|
||||
provides a consistent API and enables C and C++ application programming,
|
||||
with multithreading, IPC, system timers, mutexes etc.
|
||||
|
||||
A good high-level overview can be found in the article
|
||||
[RIOT: An Open Source Operating System for Low-End Embedded Devices in
|
||||
the IoT](https://www.riot-os.org/assets/pdfs/riot-ieeeiotjournal-2018.pdf)
|
||||
(IEEE Internet of Things Journal, December 2018).
|
||||
|
||||
## Contribute to RIOT
|
||||
|
||||
RIOT is developed by an open community that anyone is welcome to join:
|
||||
|
||||
- Download and contribute your code on
|
||||
[GitHub](https://github.com/RIOT-OS/RIOT). You can read about how to
|
||||
contribute [in our contributing
|
||||
document](https://github.com/RIOT-OS/RIOT/blob/master/CONTRIBUTING.md).
|
||||
- Sign-up to our [forum](https://forum.riot-os.org/) to ask for help using RIOT
|
||||
or writing an application for RIOT, discuss kernel and network stack
|
||||
development as well as hardware support, or to show-case your latest project.
|
||||
- Follow us on [Mastodon][mastodon-link] for news from the RIOT
|
||||
community.
|
||||
- Regarding critical vulnerabilities we would appreciate if you give us a
|
||||
90-days head-start by reporting to security@riot-os.org, before making your
|
||||
information publicly available
|
||||
- Contact us on Matrix for live support and discussions:
|
||||
[riot-os:matrix.org](https://matrix.to/#/#riot-os:matrix.org)
|
||||
|
||||
[mastodon-link]: https://fosstodon.org/@RIOT_OS
|
||||
@ -1,3 +1,8 @@
|
||||
---
|
||||
title: Managing a Release
|
||||
description: This page describes the process of managing a release.
|
||||
---
|
||||
|
||||
# Contents
|
||||
|
||||
1. [Checklist](https://github.com/RIOT-OS/RIOT/wiki/Managing-a-Release#1-checklist)
|
||||
|
||||
181
doc/guides/misc/how_to_doc.md
Normal file
181
doc/guides/misc/how_to_doc.md
Normal file
@ -0,0 +1,181 @@
|
||||
---
|
||||
title: Creating Guides & How Starlight Works
|
||||
description: Explanation on how the starlight "build system works and how to create guides
|
||||
code_folder: examples/basic/hello-world/
|
||||
---
|
||||
|
||||
## What is Starlight?
|
||||
|
||||
[Starlight](https://starlight.astro.build/) is a documentation site generator built on top of [Astro](https://astro.build/), a popular modern web framework, by the Astro team itself.
|
||||
Starlight is designed to be fast, flexible, and easy to use, making it a great choice for creating documentation sites. It supports Markdown and MDX, allowing you to write content in a familiar format while also enabling extensive access to the entire modern web ecosystem if needed.
|
||||
|
||||
For RIOT Starlight is meant to exclusively host guides while the API documentation is generated by Doxygen and hosted on the [RIOT API documentation](https://doc.riot-os.org/) site.
|
||||
Where Doxygen has a very automated approach to generating documentation, Starlight is meant to be more flexible and allow for a more human touch that is needed for tutorials and guides,
|
||||
which means that we both have the control over the content and layout but at the same time have to put more active effort into the UX of the documentation itself. At the same time writing guides in Markdown allows us to keep the guides readable in the repository itself, which is a big plus.
|
||||
|
||||
## How to run the site locally
|
||||
|
||||
To run the site locally, you need to have [Node.js](https://nodejs.org/) installed.
|
||||
It is highly recommended to use a version manager such as [NVM](https://github.com/nvm-sh/nvm) to manage your Node.js versions.
|
||||
|
||||
Please make sure to use a fairly recent version of Node.js, some distributions (such as Ubuntu) ship with a very old version of Node.js that is not compatible with Starlight.
|
||||
Generally, the latest LTS version should work fine (As of writing v22), as specified in the [Astro documentation](https://docs.astro.build/en/install-and-setup/#prerequisites).
|
||||
|
||||
Once installed you should be able to install the dependencies and run the site locally with the following command, making sure to be within the root of the repository:
|
||||
|
||||
```bash title="Running the site locally (within the root of the repository)"
|
||||
make doc-starlight
|
||||
```
|
||||
|
||||
This will start a local development server and open the site in your default web browser. The resulting output should look like this:
|
||||
|
||||
```bash title="Output of running the site locally"
|
||||
(3.12.8) [user@computer RIOT]$ make doc-starlight
|
||||
Installing starlight...
|
||||
|
||||
Starlight installed successfully.
|
||||
Starting starlight live server...
|
||||
|
||||
> guide@0.0.1 dev
|
||||
> astro dev
|
||||
|
||||
13:32:10 [types] Generated 0ms
|
||||
13:32:10 [content] Syncing content
|
||||
13:32:10 [content] Synced content
|
||||
|
||||
astro v5.6.1 ready in 1490 ms
|
||||
|
||||
┃ Local http://localhost:4321/
|
||||
┃ Network use --host to expose
|
||||
|
||||
13:32:10 watching for file changes...
|
||||
```
|
||||
|
||||
You can then browse the site at the URL shown in the output, which is usually `http://localhost:4321/`.
|
||||
|
||||
One big advantage of Starlight is that it supports hot reloading, which means that any changes you make to the content will be reflected in the browser immediately without needing to refresh the page. This makes it easy to see how your changes affect the site in real-time.
|
||||
|
||||
You can also use the `make build` command within the `doc/starlight` folder to build the site for production. This will create a static version of the site in the `dist` directory, which can be deployed to any static file hosting service.
|
||||
|
||||
```bash title="Building the site for production"
|
||||
cd doc/starlight && make build
|
||||
```
|
||||
|
||||
### Folder Structure
|
||||
|
||||
Generally, there are two folders that are important for the guides:
|
||||
|
||||
- `doc/guides/`: This folder contains the actual guides. Each guide is a Markdown file with a specific structure that Starlight uses to generate the navigation and other metadata for the guide.
|
||||
- `doc/starlight/`: This folder contains the Starlight configuration files. The most important file is `astro.config.mjs`, which contains the configuration for the site, including the navigation structure and other settings.
|
||||
|
||||
We will go into more detail about how to create a new guide in the next section, but for now, it is important to understand that the guides are located in the `doc/guides/` folder and the configuration files are located in the `doc/starlight/` folder.
|
||||
|
||||
## How to create a new guide
|
||||
|
||||
Now that we understand how to run the site locally, let's look at how to create a new guide.
|
||||
The first step is to create a Markdown file within `doc/guides/` with the following structure:
|
||||
|
||||
```markdown title="doc/guides/test/hello_world.md"
|
||||
---
|
||||
title: My New Guide
|
||||
description: This is a description of my new guide
|
||||
---
|
||||
|
||||
Hello World!
|
||||
```
|
||||
|
||||
Starlight uses the frontmatter of the Markdown file to generate the navigation and other metadata for the guide. On Github this will appear as a small table at the top of the file so your guide will still be readable in the repository.
|
||||
|
||||
Now you can add content to the guide using Markdown. Starlight supports all the standard Markdown features, including headings, lists, links, images, and code blocks. You can also use MDX to embed JavaScript, Components, and other features directly into your Markdown files. This allows you to create interactive components and dynamic content within your guides.
|
||||
|
||||
You can see a full list of the supported features in the [Starlight documentation](https://starlight.astro.build/guides/authoring-content/).
|
||||
|
||||
:::danger[Keep it simple]
|
||||
Please always keep in mind that the more non-standard Markdown you write, the more it will worsen the readability of the guide in the repository itself.
|
||||
|
||||
If you are targeting an experienced audience, a lot of them will be reading the guides locally within their IDE and not in a browser.
|
||||
:::
|
||||
|
||||
### Placing the guide
|
||||
|
||||
One last manual step is to add the new guide to the navigation. This is done in the `doc/starlight/astro.config.mjs` file.
|
||||
|
||||
Compared to the Doxygen output we want to be extremely careful about the navigation and only show the guides that are relevant to the user and in a logical order that does not overwhelm the user with too many options at once.
|
||||
|
||||
Generally, the less information you declare within the config the better, given that ideally your frontmatter information is enough to generate the navigation.
|
||||
|
||||
You can either add your guide to an existing section or create a new section. In the event that you want to simply append your guide to an existing section, you can simply add the file name to the list of files in the section. The root of the so called `slug` of your file is the guides folder itself, so a guide under `doc/guides/test/hello_world.md` will have the slug `test/hello_world.md`.
|
||||
|
||||
:::note
|
||||
There is one exception to this rule, if your file is called index.md, the slug will be the name of the folder it is in. For example `doc/guides/test/index.md` will have the slug `test`.
|
||||
:::
|
||||
|
||||
### Creating a new section
|
||||
|
||||
Generally, we want to avoid creating new sections unless absolutely necessary. For example, if you create a totally new tutorial that spans multiple files, it might make sense to create a new section.
|
||||
In this case, you can create a new section by adding a new entry to the `sidebar` array in the `astro.config.mjs` file. The entry should look like this:
|
||||
|
||||
```javascript title="doc/starlight/astro.config.mjs"
|
||||
sidebar: [
|
||||
{
|
||||
label: "The Best Tutorial",
|
||||
items: [
|
||||
"tutorial/best_tutorial",
|
||||
],
|
||||
},
|
||||
],
|
||||
```
|
||||
|
||||
:::tip
|
||||
Sections can also be nested, so you can create a section within a section by adding another array to the `items` array. This is useful for organizing your guides into sub-sections.
|
||||
:::
|
||||
|
||||
### Code Block Testing
|
||||
|
||||
If you are writing a guide that includes code blocks it is important to test them to make sure they work as expected.
|
||||
To facilitate this, we have a small script that runs over the code blocks in the guide and compares them to a specified example folder.
|
||||
|
||||
You can also utilize this script to test your code blocks locally before pushing them to the repository. To do this, you need to run the following command:
|
||||
|
||||
```bash title="Running the code block testing script"
|
||||
./dist/tools/code_in_guides_check/check_for_code.sh
|
||||
```
|
||||
|
||||
For example, let's say that we have a tutorial that explains the hello world example.
|
||||
This example is located in `examples/basic/hello-world/` and the guide is located in `doc/guides/test/hello_world.md`.
|
||||
|
||||
First we have to tell the script where to find the example folder. This is done by adding the `code_folder` key to the frontmatter of the guide. The value should be the path to the example folder relative to the root of the repository.
|
||||
|
||||
```markdown title="Example guide with code_folder"
|
||||
---
|
||||
title: Tutorial Hello World
|
||||
description: This is a description of my new guide
|
||||
code_folder: examples/basic/hello-world/
|
||||
---
|
||||
```
|
||||
|
||||
Then we can add the code blocks to the guide. The script will automatically detect the code blocks and run them against the example folder.
|
||||
|
||||
|
||||
````markdown title="This code block will be tested against the hello world example"
|
||||
```c
|
||||
int main(void)
|
||||
{
|
||||
puts("Hello World!");
|
||||
```
|
||||
````
|
||||
|
||||
In the case that you want to skip the code block testing, you can add the `<!--skip ci-->` comment one line above the code block. The script will ignore this code block and not run it against the example folder.
|
||||
|
||||
````markdown title="This code block will be ignored by the script"
|
||||
<!--skip ci-->
|
||||
```c
|
||||
int not_main(void)
|
||||
{
|
||||
puts("Goodbye World!");
|
||||
```
|
||||
````
|
||||
|
||||
:::note
|
||||
The script will only run the code blocks that are in C, it will ignore any other code blocks written in other languages.
|
||||
:::
|
||||
@ -1,3 +1,8 @@
|
||||
---
|
||||
title: Getting Started with RIOT on Windows
|
||||
description: This guide will help you to set up RIOT on Windows using WSL
|
||||
---
|
||||
|
||||
# Getting Started on Windows
|
||||
|
||||
> [!NOTE]
|
||||
|
||||
42
doc/guides/test/hello_world/hello_world.md
Normal file
42
doc/guides/test/hello_world/hello_world.md
Normal file
@ -0,0 +1,42 @@
|
||||
---
|
||||
title: Test Code Block CI
|
||||
description: Test Code Block CI
|
||||
code_folder: examples/basic/hello-world/
|
||||
---
|
||||
|
||||
# Test Code Block CI
|
||||
|
||||
```c
|
||||
int main(void)
|
||||
{
|
||||
puts("Hello World!");
|
||||
```
|
||||
|
||||
# Skip CI
|
||||
|
||||
<!--skip ci-->
|
||||
```c
|
||||
int not_main(void)
|
||||
{
|
||||
puts("Goodbye World!");
|
||||
```
|
||||
|
||||
# Non C Code
|
||||
|
||||
```bash
|
||||
cowsay "Hello World!"
|
||||
```
|
||||
|
||||
# Non C Code with Skip CI
|
||||
|
||||
<!--skip ci-->
|
||||
```bash
|
||||
cowsay "Goodbye World!"
|
||||
```
|
||||
|
||||
# Second C Code Block
|
||||
|
||||
```c
|
||||
printf("You are running RIOT on a(n) %s board.\n", RIOT_BOARD);
|
||||
printf("This board features a(n) %s CPU.\n", RIOT_CPU);
|
||||
```
|
||||
21
doc/starlight/.gitignore
vendored
Normal file
21
doc/starlight/.gitignore
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
# build output
|
||||
dist/
|
||||
# generated types
|
||||
.astro/
|
||||
|
||||
# dependencies
|
||||
node_modules/
|
||||
|
||||
# logs
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
|
||||
|
||||
# environment variables
|
||||
.env
|
||||
.env.production
|
||||
|
||||
# macOS-specific files
|
||||
.DS_Store
|
||||
4
doc/starlight/.vscode/extensions.json
vendored
Normal file
4
doc/starlight/.vscode/extensions.json
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"recommendations": ["astro-build.astro-vscode"],
|
||||
"unwantedRecommendations": []
|
||||
}
|
||||
11
doc/starlight/.vscode/launch.json
vendored
Normal file
11
doc/starlight/.vscode/launch.json
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"command": "./node_modules/.bin/astro dev",
|
||||
"name": "Development server",
|
||||
"request": "launch",
|
||||
"type": "node-terminal"
|
||||
}
|
||||
]
|
||||
}
|
||||
22
doc/starlight/Makefile
Normal file
22
doc/starlight/Makefile
Normal file
@ -0,0 +1,22 @@
|
||||
RIOTBASE ?= $(shell git rev-parse --show-toplevel)
|
||||
RIOTMAKE ?= $(RIOTBASE)/makefiles
|
||||
RIOTTOOLS ?= $(RIOTBASE)/dist/tools
|
||||
|
||||
.PHONY: install
|
||||
install:
|
||||
@echo "Installing starlight..."
|
||||
@npm install --prefix $(CURDIR) --prefer-offline
|
||||
@echo "Starlight installed successfully."
|
||||
|
||||
.PHONY: build
|
||||
build: install
|
||||
@npm run build --prefix $(CURDIR)
|
||||
@echo "RIOT documentation successfully generated at file://$(RIOTBASE)/doc/starlight/dist/index.html"
|
||||
|
||||
.PHONY: dev
|
||||
dev: install
|
||||
@echo "Starting starlight live server..."
|
||||
@npm run dev --prefix $(CURDIR)
|
||||
|
||||
clean:
|
||||
-@rm -rf node_modules .astro dist
|
||||
76
doc/starlight/astro.config.mjs
Normal file
76
doc/starlight/astro.config.mjs
Normal file
@ -0,0 +1,76 @@
|
||||
// @ts-check
|
||||
import { defineConfig } from "astro/config";
|
||||
import starlight from "@astrojs/starlight";
|
||||
|
||||
// https://astro.build/config
|
||||
export default defineConfig({
|
||||
site: "https://guide.riot-os.org",
|
||||
integrations: [
|
||||
starlight({
|
||||
title: "Riot Documentation",
|
||||
social: [
|
||||
{
|
||||
icon: "github",
|
||||
label: "GitHub",
|
||||
href: "https://github.com/riot-os/riot",
|
||||
},
|
||||
{
|
||||
icon: "mastodon",
|
||||
label: "Mastodon",
|
||||
href: "https://fosstodon.org/@RIOT_OS",
|
||||
},
|
||||
{
|
||||
icon: "matrix",
|
||||
label: "Matrix",
|
||||
href: "https://matrix.to/#/#riot-os:matrix.org",
|
||||
},
|
||||
],
|
||||
sidebar: [
|
||||
{
|
||||
label: "External Documentation",
|
||||
items: [
|
||||
{
|
||||
label: "API Documentation",
|
||||
link: "https://doc.riot-os.org",
|
||||
badge: { text: "Doxygen", variant: "tip" },
|
||||
},
|
||||
{
|
||||
label: "Rust Documentation",
|
||||
link: "https://doc.riot-os.org/rustdoc/latest/riot_doc_helpers/",
|
||||
badge: { text: "Rustdoc", variant: "tip" },
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
label: "RIOT in a Nutshell",
|
||||
items: [
|
||||
{ label: "Introduction", slug: "index" },
|
||||
"general/structure",
|
||||
],
|
||||
},
|
||||
{
|
||||
label: "Build System",
|
||||
items: [
|
||||
"build-system/build_system",
|
||||
"build-system/build_system_basics",
|
||||
"build-system/build-in-docker",
|
||||
"build-system/advanced_build_system_tricks",
|
||||
],
|
||||
},
|
||||
{
|
||||
label: "Miscellaneous",
|
||||
items: ["misc/how_to_doc"],
|
||||
},
|
||||
],
|
||||
customCss: [],
|
||||
logo: {
|
||||
src: "./src/assets/riot-logo.svg",
|
||||
replacesTitle: true,
|
||||
},
|
||||
plugins: [],
|
||||
editLink: {
|
||||
baseUrl: "https://github.com/RIOT-OS/RIOT/tree/master/doc/guides",
|
||||
},
|
||||
}),
|
||||
],
|
||||
});
|
||||
6660
doc/starlight/package-lock.json
generated
Normal file
6660
doc/starlight/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
17
doc/starlight/package.json
Normal file
17
doc/starlight/package.json
Normal file
@ -0,0 +1,17 @@
|
||||
{
|
||||
"name": "guide",
|
||||
"type": "module",
|
||||
"version": "0.0.1",
|
||||
"scripts": {
|
||||
"dev": "astro dev",
|
||||
"start": "astro dev",
|
||||
"build": "astro build",
|
||||
"preview": "astro preview",
|
||||
"astro": "astro"
|
||||
},
|
||||
"dependencies": {
|
||||
"@astrojs/starlight": "^0.33.1",
|
||||
"astro": "^5.5.3",
|
||||
"sharp": "^0.32.5"
|
||||
}
|
||||
}
|
||||
BIN
doc/starlight/public/favicon.png
Normal file
BIN
doc/starlight/public/favicon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.4 KiB |
85
doc/starlight/public/favicon.svg
Normal file
85
doc/starlight/public/favicon.svg
Normal file
@ -0,0 +1,85 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
id="svg3004"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
width="54.691921"
|
||||
height="54.691921"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="favicon.svg"><metadata
|
||||
id="metadata3010"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs3008"><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath3018"><path
|
||||
d="M 0,600 600,600 600,0 0,0 0,600 Z"
|
||||
id="path3020"
|
||||
inkscape:connector-curvature="0" /></clipPath></defs><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1678"
|
||||
inkscape:window-height="1029"
|
||||
id="namedview3006"
|
||||
showgrid="false"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:zoom="8.9386664"
|
||||
inkscape:cx="39.337153"
|
||||
inkscape:cy="13.422083"
|
||||
inkscape:window-x="1920"
|
||||
inkscape:window-y="27"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="g3012" /><g
|
||||
id="g3012"
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="Logo"
|
||||
transform="matrix(1.25,0,0,-1.25,-310.18681,421.9234)"><g
|
||||
id="g3014"
|
||||
transform="matrix(0.20267583,0,0,0.20267583,230.15405,251.68491)"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"
|
||||
inkscape:export-filename="/home/oleg/git/RIOT/doc/doxygen/src/riot-logo.png"><g
|
||||
id="g3016"
|
||||
clip-path="url(#clipPath3018)"><g
|
||||
id="g3022"
|
||||
transform="translate(304.752,236.6328)" /><g
|
||||
id="g3026"
|
||||
transform="translate(359.3184,306.5493)" /><g
|
||||
id="g3030"
|
||||
transform="translate(458.877,331.4756)" /><g
|
||||
id="g3034"
|
||||
transform="translate(304.752,236.6328)" /><g
|
||||
id="g3038"
|
||||
transform="translate(359.3184,306.5493)" /><g
|
||||
id="g3042"
|
||||
transform="translate(458.877,331.4756)" /><g
|
||||
id="g3046"
|
||||
transform="translate(254.7153,234.0664)"><path
|
||||
d="m 0,0 -22.582,42.81 c -2.415,4.578 -0.661,10.247 3.917,12.662 4.381,2.31 9.777,0.777 12.348,-3.368 L 19.102,10.914 C 22.293,5.741 20.688,-1.04 15.515,-4.231 10.342,-7.424 3.561,-5.818 0.369,-0.646 0.243,-0.441 0.111,-0.209 0,0"
|
||||
style="fill:#be353c;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path3048"
|
||||
inkscape:connector-curvature="0" /></g><g
|
||||
id="g3050"
|
||||
transform="translate(226.0498,329.0859)"><path
|
||||
d="m 0,0 c 0,0 0.409,0.107 1.2,0.315 0.147,0.042 0.312,0.088 0.495,0.139 0.211,0.064 0.443,0.133 0.694,0.209 0.504,0.156 1.09,0.348 1.755,0.578 2.644,0.939 6.628,2.567 11.243,5.425 4.567,2.839 9.85,6.956 13.865,12.546 4.01,5.6 6.417,12.409 5.113,20.32 -0.303,1.98 -0.86,4.03 -1.613,6.125 -0.085,0.262 -0.2,0.524 -0.299,0.787 l -0.154,0.395 -0.076,0.199 c 0.159,-0.341 -0.411,0.903 0.347,-0.74 l -0.062,0.121 -0.495,0.965 -0.249,0.485 -0.123,0.239 -0.092,0.154 c -0.26,0.422 -0.433,0.794 -0.748,1.276 -0.297,0.464 -0.578,0.95 -0.9,1.388 -2.474,3.637 -5.601,6.492 -9.327,8.243 -3.716,1.754 -8.159,2.413 -12.918,1.777 -4.745,-0.615 -9.708,-2.563 -14.111,-5.536 -4.412,-2.965 -8.258,-6.983 -10.858,-11.573 -1.318,-2.287 -2.291,-4.721 -2.946,-7.212 -0.316,-1.249 -0.538,-2.514 -0.681,-3.79 -0.076,-0.637 -0.111,-1.278 -0.142,-1.921 l -0.055,-2.586 c -0.059,-1.836 0.005,-3.515 0.005,-5.279 0.014,-1.746 0.028,-3.495 0.042,-5.246 -0.01,-3.462 0.132,-7.105 0.243,-10.72 0.113,-3.618 0.225,-7.243 0.338,-10.871 0.121,-3.629 0.196,-7.254 0.408,-10.905 0.365,-7.29 0.729,-14.58 1.093,-21.842 0.181,-3.631 0.362,-7.255 0.543,-10.868 l 0.135,-2.708 0.096,-3.002 -0.013,-3.282 c -0.046,-1.043 -0.077,-2.08 -0.143,-3.123 -0.548,-8.322 -2.527,-16.92 -6.72,-24.735 -2.104,-3.885 -4.713,-7.55 -7.812,-10.744 -3.081,-3.207 -6.62,-5.949 -10.406,-8.117 -7.589,-4.365 -16.066,-6.424 -24.257,-6.492 -8.207,-0.069 -16.232,1.801 -23.332,5.443 -7.094,3.615 -13.227,9.161 -17.295,15.809 -1.003,1.664 -1.913,3.368 -2.666,5.117 -0.202,0.432 -0.372,0.874 -0.544,1.315 l -0.554,1.446 c -0.232,0.684 -0.464,1.364 -0.695,2.041 -0.261,0.843 -0.538,1.839 -0.789,2.748 -0.251,0.925 -0.395,1.719 -0.59,2.58 -0.2,0.841 -0.304,1.687 -0.447,2.526 -0.149,0.839 -0.24,1.676 -0.323,2.508 -1.382,13.357 2.091,25.477 7.548,34.735 2.702,4.665 5.965,8.607 9.338,11.851 3.38,3.248 6.894,5.778 10.222,7.734 1.657,1 3.294,1.795 4.833,2.548 0.776,0.354 1.542,0.665 2.276,0.979 0.732,0.322 1.449,0.603 2.148,0.839 1.392,0.505 2.684,0.955 3.885,1.276 1.196,0.356 2.285,0.658 3.268,0.861 0.982,0.217 1.848,0.434 2.598,0.569 0.751,0.127 1.383,0.233 1.891,0.319 1.018,0.169 1.543,0.255 1.543,0.255 5.101,0.843 9.919,-2.609 10.762,-7.71 0.834,-5.051 -2.543,-9.825 -7.562,-10.735 l -0.546,-0.099 c 0,0 -0.378,-0.068 -1.111,-0.201 -0.366,-0.064 -0.821,-0.144 -1.362,-0.239 -0.538,-0.1 -1.143,-0.269 -1.838,-0.426 -0.702,-0.144 -1.457,-0.369 -2.284,-0.626 -0.842,-0.224 -1.721,-0.551 -2.669,-0.904 -0.483,-0.161 -0.967,-0.358 -1.456,-0.584 -0.494,-0.217 -1.004,-0.441 -1.531,-0.672 -1.018,-0.523 -2.114,-1.053 -3.196,-1.73 -4.349,-2.617 -9.13,-6.734 -12.658,-12.928 -0.914,-1.52 -1.66,-3.208 -2.385,-4.955 -0.688,-1.767 -1.252,-3.64 -1.716,-5.59 -0.851,-3.911 -1.2,-8.173 -0.681,-12.449 0.057,-0.535 0.115,-1.072 0.221,-1.601 0.102,-0.527 0.157,-1.073 0.298,-1.592 0.126,-0.506 0.234,-1.103 0.365,-1.541 0.128,-0.451 0.257,-0.904 0.386,-1.358 0.237,-0.675 0.475,-1.352 0.715,-2.033 0.027,-0.079 -0.068,0.193 -0.011,0.038 l 0.036,-0.087 0.072,-0.175 0.141,-0.35 c 0.092,-0.235 0.181,-0.472 0.296,-0.697 0.404,-0.925 0.901,-1.809 1.43,-2.682 2.172,-3.447 5.452,-6.436 9.604,-8.509 4.133,-2.077 9.085,-3.211 14.11,-3.109 5.023,0.089 10.09,1.42 14.408,3.969 4.332,2.541 7.891,6.288 10.36,10.993 2.468,4.708 3.827,10.369 4.166,16.428 l 0.083,2.291 -0.005,2.148 -0.094,2.432 -0.161,2.731 c -0.214,3.644 -0.429,7.299 -0.644,10.961 -0.43,7.325 -0.862,14.678 -1.294,22.031 -0.246,3.669 -0.356,7.375 -0.511,11.066 -0.147,3.692 -0.294,7.381 -0.441,11.063 -0.144,3.684 -0.32,7.325 -0.346,11.132 -0.03,1.882 -0.06,3.762 -0.09,5.638 -0.016,1.858 -0.091,3.796 -0.048,5.568 l 0.039,2.821 c 0.045,1.157 0.112,2.311 0.239,3.46 0.245,2.296 0.642,4.57 1.198,6.792 1.133,4.434 2.841,8.66 5.035,12.515 4.373,7.741 10.468,14.066 17.43,18.803 6.971,4.726 14.882,7.962 23.265,9.114 4.183,0.567 8.475,0.632 12.712,0.036 4.235,-0.567 8.401,-1.789 12.247,-3.573 7.742,-3.572 13.875,-9.412 18.058,-15.548 0.548,-0.763 1.025,-1.545 1.516,-2.321 0.486,-0.751 0.987,-1.682 1.464,-2.515 l 0.179,-0.321 0.127,-0.245 0.251,-0.483 0.499,-0.964 0.062,-0.12 c 0.8,-1.722 0.257,-0.565 0.45,-0.989 l 0.122,-0.304 0.24,-0.609 c 0.157,-0.409 0.325,-0.807 0.468,-1.222 1.198,-3.281 2.136,-6.669 2.688,-10.124 C 56.985,36.11 56.575,29.015 54.83,22.748 53.109,16.457 50.242,11.023 47.056,6.545 43.857,2.05 40.356,-1.578 36.93,-4.58 c -3.433,-3.003 -6.801,-5.399 -9.945,-7.367 -6.294,-3.925 -11.697,-6.166 -15.513,-7.536 -0.957,-0.337 -1.814,-0.621 -2.561,-0.854 -0.375,-0.115 -0.722,-0.22 -1.037,-0.316 -0.348,-0.098 -0.661,-0.187 -0.941,-0.266 -0.925,-0.248 -1.403,-0.375 -1.403,-0.375 -5.87,-1.566 -11.898,1.923 -13.464,7.793 -1.566,5.87 1.923,11.897 7.793,13.464 l 0.037,0.01 L 0,0 Z"
|
||||
style="fill:#be353c;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path3052"
|
||||
inkscape:connector-curvature="0" /></g></g></g></g></svg>
|
||||
|
After Width: | Height: | Size: 8.0 KiB |
109
doc/starlight/src/assets/riot-logo.svg
Normal file
109
doc/starlight/src/assets/riot-logo.svg
Normal file
@ -0,0 +1,109 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
id="svg3004"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.5 r10040"
|
||||
width="101"
|
||||
height="54.691921"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="riot-logo.svg"><metadata
|
||||
id="metadata3010"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs3008"><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath3018"><path
|
||||
d="M 0,600 600,600 600,0 0,0 0,600 z"
|
||||
id="path3020"
|
||||
inkscape:connector-curvature="0" /></clipPath></defs><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1678"
|
||||
inkscape:window-height="1029"
|
||||
id="namedview3006"
|
||||
showgrid="false"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:zoom="1.1173333"
|
||||
inkscape:cx="-144.61402"
|
||||
inkscape:cy="7.7685189"
|
||||
inkscape:window-x="1920"
|
||||
inkscape:window-y="19"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="g3012" /><g
|
||||
id="g3012"
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="Logo"
|
||||
transform="matrix(1.25,0,0,-1.25,-310.18681,421.9234)"><g
|
||||
id="g3014"
|
||||
transform="matrix(0.20267583,0,0,0.20267583,230.06745,251.68491)"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"
|
||||
inkscape:export-filename="/home/oleg/git/RIOT/doc/doxygen/src/riot-logo.png"><g
|
||||
id="g3016"
|
||||
clip-path="url(#clipPath3018)"><g
|
||||
id="g3022"
|
||||
transform="translate(304.752,236.6328)"><path
|
||||
d="m 0,0 0,88.155 c 0,3.952 3.344,7.296 7.295,7.296 4.104,0 7.297,-3.344 7.297,-7.296 L 14.592,0 c 0,-4.104 -3.193,-7.297 -7.297,-7.297 C 3.344,-7.297 0,-4.104 0,0"
|
||||
style="fill:#4da98c;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path3024"
|
||||
inkscape:connector-curvature="0" /></g><g
|
||||
id="g3026"
|
||||
transform="translate(359.3184,306.5493)"><path
|
||||
d="m 0,0 0,-51.678 c 0,-6.08 4.863,-10.944 10.943,-10.944 6.08,0 10.944,4.864 10.944,10.944 l 0,51.678 c 0,6.079 -4.864,10.943 -10.944,10.943 C 4.863,10.943 0,6.079 0,0 m -14.592,-51.678 0,51.678 c 0,14.135 11.401,25.534 25.535,25.534 14.136,0 25.536,-11.399 25.536,-25.534 l 0,-51.678 c 0,-14.135 -11.4,-25.535 -25.536,-25.535 -14.134,0 -25.535,11.4 -25.535,25.535"
|
||||
style="fill:#4da98c;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path3028"
|
||||
inkscape:connector-curvature="0" /></g><g
|
||||
id="g3030"
|
||||
transform="translate(458.877,331.4756)"><path
|
||||
d="m 0,0 c 4.104,0 7.296,-3.344 7.296,-7.295 0,-4.104 -3.192,-7.296 -7.296,-7.296 l -12.463,0 0,-80.252 c 0,-4.103 -3.192,-7.297 -7.297,-7.297 -3.951,0 -7.295,3.194 -7.295,7.297 l 0,80.252 -12.463,0 c -3.952,0 -7.296,3.192 -7.296,7.296 0,3.951 3.344,7.295 7.296,7.295 L 0,0 z"
|
||||
style="fill:#4da98c;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path3032"
|
||||
inkscape:connector-curvature="0" /></g><g
|
||||
id="g3034"
|
||||
transform="translate(304.752,236.6328)"><path
|
||||
d="m 0,0 0,88.155 c 0,3.952 3.344,7.296 7.295,7.296 4.104,0 7.297,-3.344 7.297,-7.296 L 14.592,0 c 0,-4.104 -3.193,-7.297 -7.297,-7.297 C 3.344,-7.297 0,-4.104 0,0"
|
||||
style="fill:#4da98c;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path3036"
|
||||
inkscape:connector-curvature="0" /></g><g
|
||||
id="g3038"
|
||||
transform="translate(359.3184,306.5493)"><path
|
||||
d="m 0,0 0,-51.678 c 0,-6.08 4.863,-10.944 10.943,-10.944 6.08,0 10.944,4.864 10.944,10.944 l 0,51.678 c 0,6.079 -4.864,10.943 -10.944,10.943 C 4.863,10.943 0,6.079 0,0 m -14.592,-51.678 0,51.678 c 0,14.135 11.401,25.534 25.535,25.534 14.136,0 25.536,-11.399 25.536,-25.534 l 0,-51.678 c 0,-14.135 -11.4,-25.535 -25.536,-25.535 -14.134,0 -25.535,11.4 -25.535,25.535"
|
||||
style="fill:#4da98c;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path3040"
|
||||
inkscape:connector-curvature="0" /></g><g
|
||||
id="g3042"
|
||||
transform="translate(458.877,331.4756)"><path
|
||||
d="m 0,0 c 4.104,0 7.296,-3.344 7.296,-7.295 0,-4.104 -3.192,-7.296 -7.296,-7.296 l -12.463,0 0,-80.252 c 0,-4.103 -3.192,-7.297 -7.297,-7.297 -3.951,0 -7.295,3.194 -7.295,7.297 l 0,80.252 -12.463,0 c -3.952,0 -7.296,3.192 -7.296,7.296 0,3.951 3.344,7.295 7.296,7.295 L 0,0 z"
|
||||
style="fill:#4da98c;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path3044"
|
||||
inkscape:connector-curvature="0" /></g><g
|
||||
id="g3046"
|
||||
transform="translate(254.7153,234.0664)"><path
|
||||
d="m 0,0 -22.582,42.81 c -2.415,4.578 -0.661,10.247 3.917,12.662 4.381,2.31 9.777,0.777 12.348,-3.368 L 19.102,10.914 C 22.293,5.741 20.688,-1.04 15.515,-4.231 10.342,-7.424 3.561,-5.818 0.369,-0.646 0.243,-0.441 0.111,-0.209 0,0"
|
||||
style="fill:#be353c;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path3048"
|
||||
inkscape:connector-curvature="0" /></g><g
|
||||
id="g3050"
|
||||
transform="translate(226.0498,329.0859)"><path
|
||||
d="m 0,0 c 0,0 0.409,0.107 1.2,0.315 0.147,0.042 0.312,0.088 0.495,0.139 0.211,0.064 0.443,0.133 0.694,0.209 0.504,0.156 1.09,0.348 1.755,0.578 2.644,0.939 6.628,2.567 11.243,5.425 4.567,2.839 9.85,6.956 13.865,12.546 4.01,5.6 6.417,12.409 5.113,20.32 -0.303,1.98 -0.86,4.03 -1.613,6.125 -0.085,0.262 -0.2,0.524 -0.299,0.787 l -0.154,0.395 -0.076,0.199 c 0.159,-0.341 -0.411,0.903 0.347,-0.74 l -0.062,0.121 -0.495,0.965 -0.249,0.485 -0.123,0.239 -0.092,0.154 c -0.26,0.422 -0.433,0.794 -0.748,1.276 -0.297,0.464 -0.578,0.95 -0.9,1.388 -2.474,3.637 -5.601,6.492 -9.327,8.243 -3.716,1.754 -8.159,2.413 -12.918,1.777 -4.745,-0.615 -9.708,-2.563 -14.111,-5.536 -4.412,-2.965 -8.258,-6.983 -10.858,-11.573 -1.318,-2.287 -2.291,-4.721 -2.946,-7.212 -0.316,-1.249 -0.538,-2.514 -0.681,-3.79 -0.076,-0.637 -0.111,-1.278 -0.142,-1.921 l -0.055,-2.586 c -0.059,-1.836 0.005,-3.515 0.005,-5.279 0.014,-1.746 0.028,-3.495 0.042,-5.246 -0.01,-3.462 0.132,-7.105 0.243,-10.72 0.113,-3.618 0.225,-7.243 0.338,-10.871 0.121,-3.629 0.196,-7.254 0.408,-10.905 0.365,-7.29 0.729,-14.58 1.093,-21.842 0.181,-3.631 0.362,-7.255 0.543,-10.868 l 0.135,-2.708 0.096,-3.002 -0.013,-3.282 c -0.046,-1.043 -0.077,-2.08 -0.143,-3.123 -0.548,-8.322 -2.527,-16.92 -6.72,-24.735 -2.104,-3.885 -4.713,-7.55 -7.812,-10.744 -3.081,-3.207 -6.62,-5.949 -10.406,-8.117 -7.589,-4.365 -16.066,-6.424 -24.257,-6.492 -8.207,-0.069 -16.232,1.801 -23.332,5.443 -7.094,3.615 -13.227,9.161 -17.295,15.809 -1.003,1.664 -1.913,3.368 -2.666,5.117 -0.202,0.432 -0.372,0.874 -0.544,1.315 l -0.554,1.446 c -0.232,0.684 -0.464,1.364 -0.695,2.041 -0.261,0.843 -0.538,1.839 -0.789,2.748 -0.251,0.925 -0.395,1.719 -0.59,2.58 -0.2,0.841 -0.304,1.687 -0.447,2.526 -0.149,0.839 -0.24,1.676 -0.323,2.508 -1.382,13.357 2.091,25.477 7.548,34.735 2.702,4.665 5.965,8.607 9.338,11.851 3.38,3.248 6.894,5.778 10.222,7.734 1.657,1 3.294,1.795 4.833,2.548 0.776,0.354 1.542,0.665 2.276,0.979 0.732,0.322 1.449,0.603 2.148,0.839 1.392,0.505 2.684,0.955 3.885,1.276 1.196,0.356 2.285,0.658 3.268,0.861 0.982,0.217 1.848,0.434 2.598,0.569 0.751,0.127 1.383,0.233 1.891,0.319 1.018,0.169 1.543,0.255 1.543,0.255 5.101,0.843 9.919,-2.609 10.762,-7.71 0.834,-5.051 -2.543,-9.825 -7.562,-10.735 l -0.546,-0.099 c 0,0 -0.378,-0.068 -1.111,-0.201 -0.366,-0.064 -0.821,-0.144 -1.362,-0.239 -0.538,-0.1 -1.143,-0.269 -1.838,-0.426 -0.702,-0.144 -1.457,-0.369 -2.284,-0.626 -0.842,-0.224 -1.721,-0.551 -2.669,-0.904 -0.483,-0.161 -0.967,-0.358 -1.456,-0.584 -0.494,-0.217 -1.004,-0.441 -1.531,-0.672 -1.018,-0.523 -2.114,-1.053 -3.196,-1.73 -4.349,-2.617 -9.13,-6.734 -12.658,-12.928 -0.914,-1.52 -1.66,-3.208 -2.385,-4.955 -0.688,-1.767 -1.252,-3.64 -1.716,-5.59 -0.851,-3.911 -1.2,-8.173 -0.681,-12.449 0.057,-0.535 0.115,-1.072 0.221,-1.601 0.102,-0.527 0.157,-1.073 0.298,-1.592 0.126,-0.506 0.234,-1.103 0.365,-1.541 0.128,-0.451 0.257,-0.904 0.386,-1.358 0.237,-0.675 0.475,-1.352 0.715,-2.033 0.027,-0.079 -0.068,0.193 -0.011,0.038 l 0.036,-0.087 0.072,-0.175 0.141,-0.35 c 0.092,-0.235 0.181,-0.472 0.296,-0.697 0.404,-0.925 0.901,-1.809 1.43,-2.682 2.172,-3.447 5.452,-6.436 9.604,-8.509 4.133,-2.077 9.085,-3.211 14.11,-3.109 5.023,0.089 10.09,1.42 14.408,3.969 4.332,2.541 7.891,6.288 10.36,10.993 2.468,4.708 3.827,10.369 4.166,16.428 l 0.083,2.291 -0.005,2.148 -0.094,2.432 -0.161,2.731 c -0.214,3.644 -0.429,7.299 -0.644,10.961 -0.43,7.325 -0.862,14.678 -1.294,22.031 -0.246,3.669 -0.356,7.375 -0.511,11.066 -0.147,3.692 -0.294,7.381 -0.441,11.063 -0.144,3.684 -0.32,7.325 -0.346,11.132 -0.03,1.882 -0.06,3.762 -0.09,5.638 -0.016,1.858 -0.091,3.796 -0.048,5.568 l 0.039,2.821 c 0.045,1.157 0.112,2.311 0.239,3.46 0.245,2.296 0.642,4.57 1.198,6.792 1.133,4.434 2.841,8.66 5.035,12.515 4.373,7.741 10.468,14.066 17.43,18.803 6.971,4.726 14.882,7.962 23.265,9.114 4.183,0.567 8.475,0.632 12.712,0.036 4.235,-0.567 8.401,-1.789 12.247,-3.573 7.742,-3.572 13.875,-9.412 18.058,-15.548 0.548,-0.763 1.025,-1.545 1.516,-2.321 0.486,-0.751 0.987,-1.682 1.464,-2.515 l 0.179,-0.321 0.127,-0.245 0.251,-0.483 0.499,-0.964 0.062,-0.12 c 0.8,-1.722 0.257,-0.565 0.45,-0.989 l 0.122,-0.304 0.24,-0.609 c 0.157,-0.409 0.325,-0.807 0.468,-1.222 1.198,-3.281 2.136,-6.669 2.688,-10.124 C 56.985,36.11 56.575,29.015 54.83,22.748 53.109,16.457 50.242,11.023 47.056,6.545 43.857,2.05 40.356,-1.578 36.93,-4.58 c -3.433,-3.003 -6.801,-5.399 -9.945,-7.367 -6.294,-3.925 -11.697,-6.166 -15.513,-7.536 -0.957,-0.337 -1.814,-0.621 -2.561,-0.854 -0.375,-0.115 -0.722,-0.22 -1.037,-0.316 -0.348,-0.098 -0.661,-0.187 -0.941,-0.266 -0.925,-0.248 -1.403,-0.375 -1.403,-0.375 -5.87,-1.566 -11.898,1.923 -13.464,7.793 -1.566,5.87 1.923,11.897 7.793,13.464 l 0.037,0.01 L 0,0 z"
|
||||
style="fill:#be353c;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path3052"
|
||||
inkscape:connector-curvature="0" /></g></g></g></g></svg>
|
||||
|
After Width: | Height: | Size: 11 KiB |
10
doc/starlight/src/content.config.ts
Normal file
10
doc/starlight/src/content.config.ts
Normal file
@ -0,0 +1,10 @@
|
||||
import { defineCollection } from "astro:content";
|
||||
import { glob } from "astro/loaders";
|
||||
import { docsSchema } from "@astrojs/starlight/schema";
|
||||
|
||||
export const collections = {
|
||||
docs: defineCollection({
|
||||
loader: glob({ pattern: "**/*.(md|mdx)", base: "../guides" }),
|
||||
schema: docsSchema(),
|
||||
}),
|
||||
};
|
||||
5
doc/starlight/tsconfig.json
Normal file
5
doc/starlight/tsconfig.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"extends": "astro/tsconfigs/strict",
|
||||
"include": [".astro/types.d.ts", "**/*"],
|
||||
"exclude": ["dist"]
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user