@iitm_shakti/templates
Version:
An xPack with templates to generate Shakti Core Complex projects
497 lines (408 loc) • 21.3 kB
Markdown
To Do
## Templates to generate Shakti Core Complex projects
These are the Liquid templates used to generate the projects for the
**Shakti Core complex** devices/boards, like **E-Arty35T**.
The package is both an xPack (used by `xpm`) and a Node.js module (for
running tests).
`@iitm_shakti/templates` is an open source project, hosted as
[micro-os-plus/shakti-templates-xpack](https://gitlab.com/shaktiproject/software/shakti-templates-xpack.git)
on GitLab.
## How to use
This section is intended for developers who plan to use this package to
create projects for Shakti Core Complex.
### Prerequisites
The only requirement is a recent
`xpm`, which is a portable
[Node.js](https://nodejs.org) command line application. To install it,
follow the instructions from the
[`xpm`](https://www.npmjs.com/package/xpm) page.
### Template instantiation
Instantiating the template can be done via the `xpm init` command,
pointing to this xPack:
```console
$ xpm init --template @iitm_shakti/templates
```
This command must be invoked in an empty folder, where the project
will be generated.
There are two modes, interactive and non interactive (from a script).
Starting the tool without any command line options will select the
interactive mode and the user can manually enter each choice.
```console
$ rm -rf /tmp/carty100T-blinky-cpp
$ mkdir -p /tmp/carty100T-blinky-cpp
$ cd /tmp/carty100T-blinky-cpp
$ xpm init --template @iitm_shakti/templates
xPack manager - create an xPack, empty or from a template
Processing @iitm_shakti/templates@1.0.1...
Programming language? (c, cpp, ?) [cpp]:
Board? (artix-7) [artix-7]:
Content? (empty, blinky, ?) [blinky]:
Use system calls? (none, retarget, semihosting, ?) [retarget]:
Trace output? (none, uart0ftdi, stdout, debug, ?) [uart0ftdi]:
Check some warnings? (true, false, ?) [true]:
Check most warnings? (true, false, ?) [false]:
Enable -Werror? (true, false, ?) [false]:
Use -Og on debug? (true, false, ?) [false]:
Use newlib nano? (true, false, ?) [true]:
Creating the C++ project 'carty100T-blinky-cpp'...
File 'LICENSE' generated.
File 'oocd.launch' generated.
File 'jlink.launch' generated.
File 'package.json' generated.
File 'README.md' generated.2
File 'xmake.json' generated.
File 'include/led.h' generated.
File 'include/sysclock.h' copied.
File 'ldscripts/libs.ld' copied.
File 'ldscripts/mem.ld' copied.
File 'ldscripts/sections.ld' copied.
File 'src/initialize-hardware.cpp' generated.
File 'src/interrupts-handlers.cpp' generated.
File 'src/led.cpp' copied.
File 'src/main.cpp' generated.
File 'src/newlib-syscalls.c' copied.
File 'src/sysclock.cpp' copied.
'xpm init' completed in 77 ms.
$
```
When used in scripts, it is possible to pass all required data on the
command line. The only mandatory property is `boardName`, all other
have defaults.
```console
$ cd /tmp/carty100T-blinky-cpp
$ xpm init --template @iitm_shakti/templates --property boardName=carty100T
xPack manager - create an xPack, empty or from a template
Processing @iitm_shakti/templates@1.0.1...
Creating the C++ project 'carty100T-blinky-cpp'...
- boardName=carty100T
- content=blinky
- syscalls=retarget
- trace=uart0ftdi
- useSomeWarnings=true
- useMostWarnings=false
- useWerror=false
- useOg=false
- useNano=true
File 'LICENSE' generated.
File 'oocd.launch' generated.
File 'jlink.launch' generated.
File 'package.json' generated.
File 'README.md' generated.
File 'xmake.json' generated.
File 'include/led.h' generated.
File 'include/sysclock.h' copied.
File 'ldscripts/libs.ld' copied.
File 'ldscripts/mem.ld' copied.
File 'ldscripts/sections.ld' copied.
File 'src/initialize-hardware.cpp' generated.
File 'src/interrupts-handlers.cpp' generated.
File 'src/led.cpp' copied.
File 'src/main.cpp' generated.
File 'src/newlib-syscalls.c' copied.
File 'src/sysclock.cpp' copied.
'xpm init' completed in 1.144 sec.
$
```
### Satisfy dependencies
The next step is to install all packages required, either source packages or
binary tools.
This is done by issuing the `xpm install` command in the project folder:
```console
$ cd /tmp/carty100T-blinky-cpp
$ xpm install
xPack manager - install package(s)
Installing dependencies for 'carty100T-blinky-cpp'...
Folder 'micro-os-plus-diag-trace' linked to '@micro-os-plus/diag-trace/1.0.6'.
Folder 'shakti-devices' linked to '@iitm_shakti/devices/1.0.2'.
Folder 'micro-os-plus-riscv-arch' linked to '@micro-os-plus/riscv-arch/1.0.2'.
Folder 'micro-os-plus-startup' linked to '@micro-os-plus/startup/1.0.7'.
Folder 'micro-os-plus-c-libs' linked to '@micro-os-plus/c-libs/1.0.6'.
Folder 'micro-os-plus-cpp-libs' linked to '@micro-os-plus/cpp-libs/1.0.4'.
Folder 'xmake' linked to 'xmake/0.3.8'.
File 'xmake' linked to 'xmake/bin/xmake.js'
Folder 'gnu-mcu-eclipse-riscv-none-gcc' linked to '@gnu-mcu-eclipse/riscv-none-gcc/7.2.0-2.1'.
File 'riscv-none-embed-addr2line' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-addr2line'
File 'riscv-none-embed-ar' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-ar'
File 'riscv-none-embed-as' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-as'
File 'riscv-none-embed-c++' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-c++'
File 'riscv-none-embed-c++filt' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-c++filt'
File 'riscv-none-embed-cpp' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-cpp'
File 'riscv-none-embed-elfedit' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-elfedit'
File 'riscv-none-embed-g++' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-g++'
File 'riscv-none-embed-gcc' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-gcc'
File 'riscv-none-embed-gcc-7.2.0' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-gcc-7.2.0'
File 'riscv-none-embed-gcc-ar' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-gcc-ar'
File 'riscv-none-embed-gcc-nm' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-gcc-nm'
File 'riscv-none-embed-gcc-ranlib' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-gcc-ranlib'
File 'riscv-none-embed-gcov' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-gcov'
File 'riscv-none-embed-gcov-dump' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-gcov-dump'
File 'riscv-none-embed-gcov-tool' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-gcov-tool'
File 'riscv-none-embed-gdb' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-gdb'
File 'riscv-none-embed-gprof' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-gprof'
File 'riscv-none-embed-ld' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-ld'
File 'riscv-none-embed-ld.bfd' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-ld.bfd'
File 'riscv-none-embed-nm' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-nm'
File 'riscv-none-embed-objcopy' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-objcopy'
File 'riscv-none-embed-objdump' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-objdump'
File 'riscv-none-embed-ranlib' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-ranlib'
File 'riscv-none-embed-readelf' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-readelf'
File 'riscv-none-embed-run' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-run'
File 'riscv-none-embed-size' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-size'
File 'riscv-none-embed-strings' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-strings'
File 'riscv-none-embed-strip' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-strip'
Folder 'gnu-mcu-eclipse-openocd' linked to '@gnu-mcu-eclipse/openocd/0.10.0-7.1'.
File 'openocd' linked to 'gnu-mcu-eclipse-openocd/.content/bin/openocd'
Folder 'gnu-mcu-eclipse-windows-build-tools' linked to '@gnu-mcu-eclipse/windows-build-tools/2.10.1'.
'xpm install' completed in 6.086 sec.
$
```
### Build
The generated projects include some additional metadata that can be used
to automatically create a build configuration.
For example, this metadata can be directly consumed by
[`xmake`](https://www.npmjs.com/package/xmake), to
generate `make` files.
Based on the xPack `devDependencies`, the toolchain and all other tools
are automatically installed and
their locations are automatically added to the internal path, so
none of the tools need to be in the global path.
```console
$ cd /tmp/carty100T-blinky-cpp
$ xpm run build
```
## Developer info
### The xPack git repo
```console
$ git clone https://gitlab.com/shaktiproject/software/shakti-templates-xpack.git shakti-templates-xpack.git
$ cd shakti-templates-xpack.git
$ npm install
```
### Tests
Given the large number of configuration properties, there may be
more than 200 different projects.
The tests address generating and building either a selection of
these projects, or all of them.
As for any `npm` package, the standard way to run the project tests is
via `npm run test`:
```console
$ cd shakti-templates-xpack.git
$ npm install
$ npm run test
```
To test all possible combinations, use `test-all`:
```console
$ npm run test-all
```
A typical test result looks like:
```console
$ npm run test
> @iitm_shakti/templates@1.0.1 test /Users/shakti/My Files/MacBookPro Projects/uOS/xpacks/shakti-templates-xpack.git
> ./test/test.js
Testing selected cases...
Testing '001-carty100T-blinky-retarget-uart0ftdi-c'...
Generate a Shakti Core Complex C/C++ project
Creating the C project '001-carty100T-blinky-retarget-uart0ftdi-c'...
- boardName=carty100T
- content=blinky
- syscalls=retarget
- trace=uart0ftdi
- useSomeWarnings=true
- useMostWarnings=true
- useWerror=true
- useOg=false
- useNano=true
File 'LICENSE' generated.
File 'oocd.launch' generated.
File 'jlink.launch' generated.
File 'package.json' generated.
File 'README.md' generated.
File 'xmake.json' generated.
File 'include/led.h' generated.
File 'include/sysclock.h' copied.
File 'ldscripts/libs.ld' copied.
File 'ldscripts/mem.ld' copied.
File 'ldscripts/sections.ld' copied.
File 'src/initialize-hardware.c' generated.
File 'src/interrupts-handlers.c' generated.
File 'src/led.c' copied.
File 'src/main.c' generated.
File 'src/newlib-syscalls.c' copied.
File 'src/sysclock.c' copied.
'xpm-init-shakti-project' completed in 77 ms.
xPack manager - install package(s)
Installing dependencies for '001-carty100T-blinky-retarget-uart0ftdi-c'...
Checking '@micro-os-plus/diag-trace@1.0.6'...
Checking '@iitm_shakti/devices@1.0.2'...
Checking '@micro-os-plus/riscv-arch@1.0.2'...
Checking '@micro-os-plus/startup@1.0.7'...
Checking '@micro-os-plus/diag-trace@1.0.6'...
Checking '@micro-os-plus/c-libs@1.0.6'...
Checking '@micro-os-plus/cpp-libs@1.0.4'...
Checking 'xmake@0.3.9'...
Checking '@gnu-mcu-eclipse/riscv-none-gcc@7.2.0-2.1'...
Checking '@gnu-mcu-eclipse/openocd@0.10.0-7.1'...
Checking '@gnu-mcu-eclipse/windows-build-tools@2.10.1'...
Folder 'micro-os-plus-diag-trace' linked to '@micro-os-plus/diag-trace/1.0.6'.
Folder 'shakti-devices' linked to '@iitm_shakti/devices/1.0.2'.
Folder 'micro-os-plus-riscv-arch' linked to '@micro-os-plus/riscv-arch/1.0.2'.
Folder 'micro-os-plus-startup' linked to '@micro-os-plus/startup/1.0.7'.
Folder 'micro-os-plus-c-libs' linked to '@micro-os-plus/c-libs/1.0.6'.
Folder 'micro-os-plus-cpp-libs' linked to '@micro-os-plus/cpp-libs/1.0.4'.
Folder 'xmake' linked to 'xmake/0.3.9'.
File 'xmake' linked to 'xmake/bin/xmake.js'
Folder 'gnu-mcu-eclipse-riscv-none-gcc' linked to '@gnu-mcu-eclipse/riscv-none-gcc/7.2.0-2.1'.
File 'riscv-none-embed-addr2line' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-addr2line'
File 'riscv-none-embed-ar' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-ar'
File 'riscv-none-embed-as' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-as'
File 'riscv-none-embed-c++' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-c++'
File 'riscv-none-embed-c++filt' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-c++filt'
File 'riscv-none-embed-cpp' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-cpp'
File 'riscv-none-embed-elfedit' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-elfedit'
File 'riscv-none-embed-g++' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-g++'
File 'riscv-none-embed-gcc' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-gcc'
File 'riscv-none-embed-gcc-7.2.0' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-gcc-7.2.0'
File 'riscv-none-embed-gcc-ar' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-gcc-ar'
File 'riscv-none-embed-gcc-nm' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-gcc-nm'
File 'riscv-none-embed-gcc-ranlib' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-gcc-ranlib'
File 'riscv-none-embed-gcov' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-gcov'
File 'riscv-none-embed-gcov-dump' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-gcov-dump'
File 'riscv-none-embed-gcov-tool' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-gcov-tool'
File 'riscv-none-embed-gdb' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-gdb'
File 'riscv-none-embed-gprof' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-gprof'
File 'riscv-none-embed-ld' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-ld'
File 'riscv-none-embed-ld.bfd' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-ld.bfd'
File 'riscv-none-embed-nm' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-nm'
File 'riscv-none-embed-objcopy' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-objcopy'
File 'riscv-none-embed-objdump' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-objdump'
File 'riscv-none-embed-ranlib' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-ranlib'
File 'riscv-none-embed-readelf' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-readelf'
File 'riscv-none-embed-run' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-run'
File 'riscv-none-embed-size' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-size'
File 'riscv-none-embed-strings' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-strings'
File 'riscv-none-embed-strip' linked to 'gnu-mcu-eclipse-riscv-none-gcc/.content/bin/riscv-none-embed-strip'
Folder 'gnu-mcu-eclipse-openocd' linked to '@gnu-mcu-eclipse/openocd/0.10.0-7.1'.
File 'openocd' linked to 'gnu-mcu-eclipse-openocd/.content/bin/openocd'
Folder 'gnu-mcu-eclipse-windows-build-tools' linked to '@gnu-mcu-eclipse/windows-build-tools/2.10.1'.
'xpm install' completed in 7.062 sec.
xPack manager - run package specific script
Changing current folder to '/private/var/folders/n7/kxqjc5zs4qs0nb44v1l2r2j00000gn/T/iitm_shakti-templates/001-carty100T-blinky-retarget-uart0ftdi-c'...
Invoking 'xmake build -- all'...
xmake - build project configuration(s)
Generating the build files for '001-carty100T-blinky-retarget-uart0ftdi-c', target 'carty100T', toolchain 'riscv-none-gcc', profile 'debug'...
Generating 'make' files...
'make' files generated in 81 ms.
Changing current folder to 'build/001-carty100T-blinky-retarget-uart0ftdi-c-carty100T-riscv-none-gcc-debug'...
Invoking builder: 'make all'...
[riscv-none-embed-gcc]: src/initialize-hardware.c
[riscv-none-embed-gcc]: src/interrupts-handlers.c
[riscv-none-embed-gcc]: src/led.c
[riscv-none-embed-gcc]: src/main.c
[riscv-none-embed-gcc]: src/newlib-syscalls.c
[riscv-none-embed-gcc]: src/sysclock.c
[riscv-none-embed-gcc]: xpacks/micro-os-plus-c-libs/src/_sbrk.c
[riscv-none-embed-g++]: xpacks/micro-os-plus-c-libs/src/c-syscalls-empty.cpp
[riscv-none-embed-gcc]: xpacks/micro-os-plus-c-libs/src/stdlib/assert.c
[riscv-none-embed-gcc]: xpacks/micro-os-plus-c-libs/src/stdlib/exit.c
[riscv-none-embed-gcc]: xpacks/micro-os-plus-c-libs/src/stdlib/init-fini.c
[riscv-none-embed-g++]: xpacks/micro-os-plus-c-libs/src/stdlib/atexit.cpp
[riscv-none-embed-g++]: xpacks/micro-os-plus-cpp-libs/src/cxx.cpp
[riscv-none-embed-g++]: xpacks/micro-os-plus-diag-trace/src/trace.cpp
[riscv-none-embed-g++]: xpacks/micro-os-plus-riscv-arch/src/arch-functions.cpp
[riscv-none-embed-g++]: xpacks/micro-os-plus-riscv-arch/src/traps.cpp
[riscv-none-embed-gcc]: xpacks/micro-os-plus-riscv-arch/src/reset-entry.S
[riscv-none-embed-gcc]: xpacks/micro-os-plus-riscv-arch/src/trap-entry.S
[riscv-none-embed-g++]: xpacks/micro-os-plus-startup/src/startup.cpp
[riscv-none-embed-g++]: xpacks/shakti-devices/src/device-functions.cpp
[riscv-none-embed-g++]: xpacks/shakti-devices/src/plic-functions.cpp
[riscv-none-embed-g++]: xpacks/shakti-devices/src/arty/carty100T/device-interrupts.cpp
[riscv-none-embed-g++]: 001-carty100T-blinky-retarget-uart0ftdi-c.elf
'make all' completed in 5.894 sec.
Generating the build files for '001-carty100T-blinky-retarget-uart0ftdi-c', target 'carty100T', toolchain 'riscv-none-gcc', profile 'release'...
Generating 'make' files...
'make' files generated in 80 ms.
Changing current folder to 'build/001-carty100T-blinky-retarget-uart0ftdi-c-carty100T-riscv-none-gcc-release'...
Invoking builder: 'make all'...
[riscv-none-embed-gcc]: src/initialize-hardware.c
[riscv-none-embed-gcc]: src/interrupts-handlers.c
[riscv-none-embed-gcc]: src/led.c
[riscv-none-embed-gcc]: src/main.c
[riscv-none-embed-gcc]: src/newlib-syscalls.c
[riscv-none-embed-gcc]: src/sysclock.c
[riscv-none-embed-gcc]: xpacks/micro-os-plus-c-libs/src/_sbrk.c
[riscv-none-embed-g++]: xpacks/micro-os-plus-c-libs/src/c-syscalls-empty.cpp
[riscv-none-embed-gcc]: xpacks/micro-os-plus-c-libs/src/stdlib/assert.c
[riscv-none-embed-gcc]: xpacks/micro-os-plus-c-libs/src/stdlib/exit.c
[riscv-none-embed-gcc]: xpacks/micro-os-plus-c-libs/src/stdlib/init-fini.c
[riscv-none-embed-g++]: xpacks/micro-os-plus-c-libs/src/stdlib/atexit.cpp
[riscv-none-embed-g++]: xpacks/micro-os-plus-cpp-libs/src/cxx.cpp
[riscv-none-embed-g++]: xpacks/micro-os-plus-diag-trace/src/trace.cpp
[riscv-none-embed-g++]: xpacks/micro-os-plus-riscv-arch/src/arch-functions.cpp
[riscv-none-embed-g++]: xpacks/micro-os-plus-riscv-arch/src/traps.cpp
[riscv-none-embed-gcc]: xpacks/micro-os-plus-riscv-arch/src/reset-entry.S
[riscv-none-embed-gcc]: xpacks/micro-os-plus-riscv-arch/src/trap-entry.S
[riscv-none-embed-g++]: xpacks/micro-os-plus-startup/src/startup.cpp
[riscv-none-embed-g++]: xpacks/shakti-devices/src/device-functions.cpp
[riscv-none-embed-g++]: xpacks/shakti-devices/src/plic-functions.cpp
[riscv-none-embed-g++]: xpacks/shakti-devices/src/arty/carty100T/device-interrupts.cpp
[riscv-none-embed-g++]: 001-carty100T-blinky-retarget-uart0ftdi-c.elf
'make all' completed in 5.400 sec.
'xmake build' completed in 11.528 sec.
'xpm run build' completed in 12.261 sec.
Testing '002-carty100T-blinky-retarget-uart0ftdi-cpp'...
Generate a Shakti Core Complex C/C++ project
Creating the C++ project '002-carty100T-blinky-retarget-uart0ftdi-cpp'...
- boardName=carty100T
- content=blinky
- syscalls=retarget
- trace=uart0ftdi
- useSomeWarnings=true
- useMostWarnings=true
- useWerror=true
- useOg=false
- useNano=true
File 'LICENSE' generated.
File 'oocd.launch' generated.
File 'jlink.launch' generated.
File 'package.json' generated.
File 'README.md' generated.
File 'xmake.json' generated.
File 'include/led.h' generated.
File 'include/sysclock.h' copied.
File 'ldscripts/libs.ld' copied.
File 'ldscripts/mem.ld' copied.
File 'ldscripts/sections.ld' copied.
File 'src/initialize-hardware.cpp' generated.
File 'src/interrupts-handlers.cpp' generated.
File 'src/led.cpp' copied.
File 'src/main.cpp' generated.
File 'src/newlib-syscalls.c' copied.
File 'src/sysclock.cpp' copied.
'xpm-init-shakti-project' completed in 77 ms.
...
```
### Coverage tests
- none so far.
### Documentation metadata
The documentation metadata follows the [JSdoc](http://usejsdoc.org) tags.
To enforce checking at file level, add the following comments right after
the `use strict`:
```js
'use strict'
/* eslint valid-jsdoc: "error" */
/* eslint max-len: [ "error", 80, { "ignoreUrls": true } ] */
```
Note: be sure C style comments are used, C++ styles are not parsed by
[ESLint](http://eslint.org).
## Maintainer info
### How to publish
To check the last commits:
```console
$ git log --pretty='%cd * %h %s' --date=short
```
* commit all changes
* update `CHANGELOG.md`; commit with a message like _CHANGELOG: prepare v0.1.2_
* `npm version patch`
* push all changes to GitLab
* `npm publish`
## License
TODO