Sonata simulator run through xmake Instead of having a separate section to run examples in CI, this is now done in xmake instead using the newly created sonata-simulator board file.
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 01cf3c3..5036f0d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml
@@ -20,8 +20,9 @@ build-flags: --debug-loader=y --debug-scheduler=y --debug-allocator=y -m debug - build-type: release build-flags: --debug-loader=n --debug-scheduler=n --debug-allocator=n -m release --stack-usage-check-allocator=y --stack-usage-check-scheduler=y - - board: sonata-prerelease + - board: sonata-simulator build-type: release + build-flags: --debug-loader=n --debug-scheduler=n --debug-allocator=n -m release --stack-usage-check-allocator=y --stack-usage-check-scheduler=y --testing-model-output=y sonata: true fail-fast: false runs-on: ubuntu-latest @@ -54,8 +55,6 @@ xmake done - name: Run examples - # Currently xmake run tries to run Sonata on FPGA. - if: ${{ !matrix.sonata }} run: | set -e for example_dir in $PWD/examples/*/; do @@ -63,16 +62,6 @@ echo Running $example_dir xmake run done - - name: Sonata simulator examples - if: ${{ matrix.sonata }} - run: | - set -e - for example_dir in $PWD/examples/*/; do - directory=$(basename $example_dir) - elf_name=${directory##*.} - echo Running $elf_name - scripts/run-sonata-sim.sh $example_dir/build/cheriot/cheriot/${{ matrix.build-type }}/$elf_name scripts/model_output/sonata-simulator/examples/$elf_name.txt - done - name: Build benchmarks run: | set -e
diff --git a/sdk/xmake.lua b/sdk/xmake.lua index 0f26d6e..07a37c5 100644 --- a/sdk/xmake.lua +++ b/sdk/xmake.lua
@@ -51,6 +51,17 @@ stackCheckOption("allocator") stackCheckOption("scheduler") +function testCheckOption(name) + option("testing-" .. name) + set_default(false) + set_description("Enable testing feature " .. name .. ". Do not enable this in builds that don't produce a UART log!") + set_showmenu(true) + set_category("Debugging") + option_end() +end + +testCheckOption("model-output") + -- Force -Oz irrespective of build config. At -O0, we blow out our stack and -- require much stronger alignment. set_optimize("Oz") @@ -284,7 +295,18 @@ local directory = path.directory(firmware) firmware = path.filename(firmware) local run = function(simulator) - os.execv(simulator, { firmware }, { curdir = directory }) + local simargs = { firmware } + if get_config("testing-model-output") then + modeldir = path.join(scriptdir, + "..", + "scripts", + "model_output", + path.basename(target:values("board")), + "examples") + local modelout = path.join(modeldir, firmware .. ".txt") + simargs[#simargs+1] = modelout + end + os.execv(simulator, simargs, { curdir = directory }) end -- Try executing the simulator from the sdk directory, if it's there. local tools_directory = config.get("sdk")