nuttx-apps/interpreters
chao an 4f11f38c38 interpreters/wamr: add compile role of WebAssembly
Add compilation rules to support WebAssembly(WASM/WAMR):

1. Compile Toolchain
 1> Download WASI sdk and export the WASI_SDK_PATH path:

$ wget https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-19/wasi-sdk-19.0-linux.tar.gz
$ tar xf wasi-sdk-19.0-linux.tar.gz
Put wasi-sdk-19.0 to your host WASI_SDK_PATH environment variable, like:
$ export WASI_SDK_PATH=`pwd`/wasi-sdk-19.0

 2> Download Wamr "wamrc" AOT compiler and export to the PATH:
$ mkdir wamrc
$ wget https://github.com/bytecodealliance/wasm-micro-runtime/releases/download/WAMR-1.1.2/wamrc-1.1.2-x86_64-ubuntu-20.04.tar.gz
$ tar xf wamrc-1.1.2-x86_64-ubuntu-20.04.tar.gz
$ export PATH=$PATH:$PWD

2. Configuring and running

 1> Configuring sim/wamr and compile:

nuttx$ ./tools/configure.sh  sim/wamr
nuttx$ make
...
Wamrc Generate AoT: /home/archer/code/nuttx/n5/apps/wasm/hello.aot
Wamrc Generate AoT: /home/archer/code/nuttx/n5/apps/wasm/coremark.aot
LD:  nuttx

 2> Copy the generated wasm file(Interpreter/AoT)

nuttx$ cp ../apps/wasm/hello.aot .
nuttx$ cp ../apps/wasm/hello.wasm .
nuttx$ cp ../apps/wasm/coremark.wasm .

 3> Run iwasm

nuttx$ ./nuttx
NuttShell (NSH) NuttX-10.4.0
nsh> iwasm /data/hello.wasm
Hello, World!!
nsh> iwasm /data/hello.aot
Hello, World!!
nsh> iwasm /data/coremark.wasm
2K performance run parameters for coremark.
CoreMark Size    : 666
Total ticks      : 12000
Total time (secs): 12.000000
Iterations/Sec   : 5.000000
Iterations       : 60
Compiler version : Clang 15.0.7
Compiler flags   : Using NuttX compilation options
Memory location  : Defined by the NuttX configuration
seedcrc          : 0xe9f5
[0]crclist       : 0xe714
[0]crcmatrix     : 0x1fd7
[0]crcstate      : 0x8e3a
[0]crcfinal      : 0xa14c
Correct operation validated. See README.md for run and reporting rules.
CoreMark 1.0 : 5.000000 / Clang 15.0.7 Using NuttX compilation options / Defined by the NuttX configuration

Co-Authored-By: Huang Qi <huangqi3@xiaomi.com>
Signed-off-by: chao an <anchao@xiaomi.com>
2023-03-06 13:23:44 +02:00
..
bas interpreters/bas: Fix the nxstyle warning 2023-02-24 08:36:58 +02:00
duktape Makefile: replace INCDIR to INCDIR_PREFIX 2022-11-10 02:38:58 +08:00
ficl Remove the unnecessary "return;" at the end of function 2022-11-27 22:36:40 +01:00
lua interpreters/lua: fix unpack on incremental build 2022-12-21 17:48:29 +08:00
luamodules luamodules: fix compile warning in cjson 2022-12-22 13:39:35 +08:00
minibasic change strcpy to strlcpy 2023-02-22 23:09:55 +08:00
quickjs Makefile: replace INCDIR to INCDIR_PREFIX 2022-11-10 02:38:58 +08:00
toywasm interpreter/toywasm: Update toywasm version 2023-01-11 17:05:01 +02:00
wamr interpreters/wamr: add compile role of WebAssembly 2023-03-06 13:23:44 +02:00
wasm3 Makefile: replace INCDIR to INCDIR_PREFIX 2022-11-10 02:38:58 +08:00
.gitignore Remove extra whitespace from files (#43) 2020-01-31 08:29:24 -06:00
Make.defs Makefiles: Gregory Nutt: update licenses to Apache 2021-06-07 21:35:33 -05:00
Makefile Makefiles: Gregory Nutt: update licenses to Apache 2021-06-07 21:35:33 -05:00
README.md interpreters: add Lua support 2022-03-21 13:49:42 +08:00
Wasm.mk interpreters/wamr: add compile role of WebAssembly 2023-03-06 13:23:44 +02:00

Interpreters

This apps/ directory is set aside to hold interpreters that may be incorporated into NuttX.

Ficl

This is DIY port of Ficl (the Forth Inspired Command Language). See http://ficl.sourceforge.net/. It is a DIY port because the Ficl source is not in that directory, only an environment and instructions that will let you build Ficl under NuttX. The rest is up to you.

Lua

Fetch and build a Lua interpreter. Versions 5.2 through 5.4 are supported. The lua command will be added to NSH. Lua can run a script for a given path, execute a string of code, or open a readline compatible REPL on the NSH console. The <lua.h> and <lauxlib.h> headers are available to start a new embedded interpreter or extend Lua with C modules. See the luamod_hello example for how to include a built-in module.

A math library is required to build. Enable the LIBM config or use a toolchain provided math library.

The following configs are recommended for a full featured Lua interpreter:

  • LIBC_FLOATINGPOINT
  • SYSTEM_READLINE

Mini Basic

The Mini Basic implementation at apps/interpreters derives from version 1.0 by Malcolm McLean, Leeds University, and was released under the Creative Commons Attibution license. I am not legal expert, but this license appears to be compatible with the NuttX BSD license see: https://creativecommons.org/licenses/. I, however, cannot take responsibility for any actions that you might take based on my understanding. Please use your own legal judgement.