From 71e4f3812982dba2efb471283d310224e8db363e Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Wed, 3 Mar 2021 22:09:50 -0800 Subject: 7842 - new directory organization Baremetal is now the default build target and therefore has its sources at the top-level. Baremetal programs build using the phase-2 Mu toolchain that requires a Linux kernel. This phase-2 codebase which used to be at the top-level is now under the linux/ directory. Finally, the phase-2 toolchain, while self-hosting, has a way to bootstrap from a C implementation, which is now stored in linux/bootstrap. The bootstrap C implementation uses some literate programming tools that are now in linux/bootstrap/tools. So the whole thing has gotten inverted. Each directory should build one artifact and include the main sources (along with standard library). Tools used for building it are relegated to sub-directories, even though those tools are often useful in their own right, and have had lots of interesting programs written using them. A couple of things have gotten dropped in this process: - I had old ways to run on just a Linux kernel, or with a Soso kernel. No more. - I had some old tooling for running a single test at the cursor. I haven't used that lately. Maybe I'll bring it back one day. The reorg isn't done yet. Still to do: - redo documentation everywhere. All the README files, all other markdown, particularly vocabulary.md. - clean up how-to-run comments at the start of programs everywhere - rethink what to do with the html/ directory. Do we even want to keep supporting it? In spite of these shortcomings, all the scripts at the top-level, linux/ and linux/bootstrap are working. The names of the scripts also feel reasonable. This is a good milestone to take stock at. --- test_apps_emulated | 313 ----------------------------------------------------- 1 file changed, 313 deletions(-) delete mode 100755 test_apps_emulated (limited to 'test_apps_emulated') diff --git a/test_apps_emulated b/test_apps_emulated deleted file mode 100755 index 23c91997..00000000 --- a/test_apps_emulated +++ /dev/null @@ -1,313 +0,0 @@ -#!/bin/sh -# Build and test all included SubX programs on non-Linux platforms: -# translate them into ELF binaries -# compare the generated binaries with what's already in git -# run/test the ELF binaries in emulated mode -# -# Example usage: -# test_apps_emulated -# test_apps_emulated record # don't compare with what's in git -# -# This script is slow. 20+ times slower than running natively on Linux. - -set -e -cd `dirname $0` - -./build - -echo "== translating using the bootstrap C++ translator" - -# example programs - -echo ex1 -./bootstrap_bin translate init.linux apps/ex1.subx -o apps/ex1 -test "$1" = 'record' || git diff --exit-code apps/ex1 -{ - ./bootstrap_bin run apps/ex1 || ret=$? - test $ret -eq 42 # life, the universe and everything -} - -echo ex2 -./bootstrap_bin translate init.linux apps/ex2.subx -o apps/ex2 -test "$1" = 'record' || git diff --exit-code apps/ex2 -{ - ./bootstrap_bin run apps/ex2 || ret=$? - test $ret -eq 7 # 3 + 4 -} - -echo ex3 -./bootstrap_bin translate init.linux apps/ex3.subx -o apps/ex3 -test "$1" = 'record' || git diff --exit-code apps/ex3 -{ - ./bootstrap_bin run apps/ex3 || ret=$? - test $ret -eq 55 # 1 + 2 + ... + 10 -} - -echo ex4 -./bootstrap_bin translate init.linux apps/ex4.subx -o apps/ex4 -test "$1" = 'record' || git diff --exit-code apps/ex4 -{ - echo a | ./bootstrap_bin run apps/ex4 >ex4.out || true - test `cat ex4.out` = 'a' -} - -echo ex5 -./bootstrap_bin translate init.linux apps/ex5.subx -o apps/ex5 -test "$1" = 'record' || git diff --exit-code apps/ex5 -{ - echo a | ./bootstrap_bin run apps/ex5 >ex5.out || true - test `cat ex5.out` = 'a' -} - -echo ex6 -./bootstrap_bin translate init.linux apps/ex6.subx -o apps/ex6 -test "$1" = 'record' || git diff --exit-code apps/ex6 -{ - ./bootstrap_bin run apps/ex6 >ex6.out || true - test "`cat ex6.out`" = 'Hello, world!' -} - -echo ex7 -./bootstrap_bin translate init.linux apps/ex7.subx -o apps/ex7 -test "$1" = 'record' || git diff --exit-code apps/ex7 -{ - ./bootstrap_bin run apps/ex7 || ret=$? - test $ret -eq 97 # 'a' -} - -echo ex8 -./bootstrap_bin translate init.linux apps/ex8.subx -o apps/ex8 -test "$1" = 'record' || git diff --exit-code apps/ex8 -{ - ./bootstrap_bin run apps/ex8 abcd || ret=$? - test $ret -eq 4 # length('abcd') -} - -echo ex9 -./bootstrap_bin translate init.linux apps/ex9.subx -o apps/ex9 -test "$1" = 'record' || git diff --exit-code apps/ex9 -{ - ./bootstrap_bin run apps/ex9 z x || ret=$? - test $ret -eq 2 # 'z' - 'x' -} - -echo ex10 -./bootstrap_bin translate init.linux apps/ex10.subx -o apps/ex10 -test "$1" = 'record' || git diff --exit-code apps/ex10 -{ - ./bootstrap_bin run apps/ex10 abc abc || ret=$? - test $ret -eq 1 # equal - ./bootstrap_bin run apps/ex10 abc abcd # 0; not equal -} - -echo ex11 -./bootstrap_bin translate init.linux apps/ex11.subx -o apps/ex11 -test "$1" = 'record' || git diff --exit-code apps/ex11 -{ - ./bootstrap_bin run apps/ex11 - echo -} - -echo ex12 -./bootstrap_bin translate init.linux apps/ex12.subx -o apps/ex12 -test "$1" = 'record' || git diff --exit-code apps/ex12 -test $EMULATED && ./bootstrap_bin run apps/ex12 # final byte of mmap'd address is well-nigh guaranteed to be 0 -test $NATIVE && apps/ex12 - -echo ex13 -./bootstrap_bin translate init.linux apps/ex13.subx -o apps/ex13 -test "$1" = 'record' || git diff --exit-code apps/ex13 -{ - ./bootstrap_bin run apps/ex13 || ret=$? - test $ret -eq 1 # 3 == 3 -} - -# Larger apps that use the standard library. - -echo factorial -./bootstrap_bin translate init.linux [01]*.subx apps/factorial.subx -o apps/factorial -test "$1" = 'record' || git diff --exit-code apps/factorial -{ - ./bootstrap_bin run apps/factorial || ret=$? - test $ret -eq 120 # factorial(5) - ./bootstrap_bin run apps/factorial test - echo -} - -echo crenshaw2-1 -./bootstrap_bin translate init.linux [01]*.subx apps/crenshaw2-1.subx -o apps/crenshaw2-1 -test "$1" = 'record' || git diff --exit-code apps/crenshaw2-1 -{ - ./bootstrap_bin run apps/crenshaw2-1 test - echo -} - -echo crenshaw2-1b -./bootstrap_bin translate init.linux [01]*.subx apps/crenshaw2-1b.subx -o apps/crenshaw2-1b -test "$1" = 'record' || git diff --exit-code apps/crenshaw2-1b -{ - ./bootstrap_bin run apps/crenshaw2-1b test - echo -} - -echo random -./bootstrap_bin translate init.linux [01]*.subx apps/random.subx -o apps/random -test "$1" = 'record' || git diff --exit-code apps/random -# don't run - -# Phases of the self-hosted SubX translator. - -for phase in hex survey_elf pack assort dquotes tests -do - echo $phase - ./bootstrap_bin translate init.linux [01]*.subx apps/subx-params.subx apps/$phase.subx -o apps/$phase - test "$1" = 'record' || git diff --exit-code apps/$phase - { - ./bootstrap_bin run apps/$phase test - echo - } -done - -# One phase variant for translating SubX to baremetal. (Other phases are reused.) - -for phase in survey_baremetal -do - echo $phase - ./bootstrap_bin translate init.linux [01]*.subx apps/subx-params.subx apps/$phase.subx -o apps/$phase - test "$1" = 'record' || git diff --exit-code apps/$phase - { - ./bootstrap_bin run apps/$phase test - echo - } -done - -# Higher-level syntax. - -# Certain phases of translation run native beyond this point. We're starting -# to go beyond functionality of the C++ bootstrap_bin. - -echo sigils -./bootstrap_bin translate init.linux [012]*.subx apps/subx-params.subx apps/sigils.subx -o apps/sigils -test "$1" = 'record' || git diff --exit-code apps/sigils -{ - ./bootstrap_bin run apps/sigils test - echo -} - -echo calls -cat init.linux [012]*.subx apps/subx-params.subx apps/calls.subx | ./bootstrap_bin run apps/sigils > a.sigils -./bootstrap_bin translate a.sigils -o apps/calls -test "$1" = 'record' || git diff --exit-code apps/calls -{ - ./bootstrap_bin run apps/calls test - echo -} - -echo braces -cat init.linux [012]*.subx apps/subx-params.subx apps/braces.subx | ./bootstrap_bin run apps/calls | ./bootstrap_bin run apps/sigils > a.sigils -./bootstrap_bin translate a.sigils -o apps/braces -test "$1" = 'record' || git diff --exit-code apps/braces -{ - ./bootstrap_bin run apps/braces test - echo -} - -echo mu -cat init.linux [0-2]*.subx apps/mu.subx | ./bootstrap_bin run apps/braces | ./bootstrap_bin run apps/calls | ./bootstrap_bin run apps/sigils > a.sigils -./bootstrap_bin translate a.sigils -o apps/mu -test "$1" = 'record' || git diff --exit-code apps/mu -{ - ./bootstrap_bin run apps/mu test - echo -} - -echo "== translating using the self-hosted translator" - -# example programs - -for n in `seq 1 12` -do - echo ex$n - ./translate_subx_emulated init.linux apps/ex$n.subx - diff apps/ex$n a.elf -done - -# Larger apps that use the standard library. - -for app in factorial crenshaw2-1 crenshaw2-1b -do - echo $app - ./translate_subx_emulated init.linux [01]*.subx apps/$app.subx - diff apps/$app a.elf -done - -# Phases of the self-hosted SubX translator. - -for app in hex survey_elf pack assort dquotes tests -do - echo $app - ./translate_subx_emulated init.linux [01]*.subx apps/subx-params.subx apps/$app.subx - diff apps/$app a.elf -done - -# One phase variant for translating SubX to baremetal. (Other phases are reused.) - -for app in survey_baremetal -do - echo $app - ./translate_subx_emulated init.linux [01]*.subx apps/subx-params.subx apps/$app.subx - diff apps/$app a.elf -done - -for app in sigils calls braces -do - echo $app - ./translate_subx_emulated init.linux [012]*.subx apps/subx-params.subx apps/$app.subx - diff apps/$app a.elf -done - -# Mu translator -echo mu -./translate_subx_emulated init.linux [0-2]*.subx apps/mu.subx -diff apps/mu a.elf - -# Mu programs - -echo ex1.mu -./translate_mu_emulated apps/ex1.mu -{ - ./bootstrap_bin run a.elf || ret=$? - test $ret -eq 42 # life, the universe and everything -} - -echo ex2.mu -./translate_mu_emulated apps/ex2.mu -{ - ./bootstrap_bin run a.elf || ret=$? - test $ret -eq 7 -} - -echo ex3.mu -./translate_mu_emulated apps/ex3.mu -{ - ./bootstrap_bin run a.elf || ret=$? - test $ret -eq 55 -} - -echo ex3.2.mu -./translate_mu_emulated apps/ex3.2.mu -{ - ./bootstrap_bin run a.elf || ret=$? - test $ret -eq 55 -} - -echo factorial.mu -./translate_mu_emulated apps/factorial.mu -{ - ./bootstrap_bin run a.elf || ret=$? - test $ret -eq 120 - ./bootstrap_bin run a.elf test - echo -} - -exit 0 -- cgit 1.4.1-2-gfad0