This is the shortest path from source files to a runnable .mstro artifact.

Build

Build the runtime and tool binaries:

make runtime
make tools
make examples

Or build everything:

make

Compile Sources

Use ../build/maestroc to compile one or more .mstr files into a single linked .mstro bundle.

Examples:

build/maestroc -f app/main.mstr app/lib.mstr
build/maestroc -d examples/modules -o build/examples/modules.mstro
build/maestroc -m custom-magic -c 7 -d src -o app.mstro

Useful options:

  • -h, --help
  • -v, --version
  • -m, --magic
  • -c, --capabilities
  • -f, --files
  • -d, --directory
  • -o, --output

-f and -d are additive and may be combined.

Inspect Required Externals

Before embedding a bundle, inspect its required external function bindings:

build/maestroexts build/examples/external.mstro

Run a Program

Use ../build/maestrovm to compile or load an artifact, validate it, and optionally run a module:

build/maestrovm -d examples/modules -r "app caller" ""

For extension-driven runs, load .so libraries with -l or -d:

build/maestrovm \
  -l build/tests/dll/plugin_ok.so \
  -d tests/mstr/dll \
  -r "tests dll describe" "42 2.5 \"hi\" 'sym {\"user\":{\"name\":\"Ada\"}}"

If -r is omitted, maestrovm stays in validate-only mode and reports success to stderr.

Run Source Suites

The repository also contains categorized .mstr suites under ../tests/mstr/.

Run them all:

make test-mstr

Run only selected modules:

python3 tests/run_tests.py "tests modules caller" "tests json parse"

More Reading