From 7acba568178af4048135a858a7ca9c6fb9c00520 Mon Sep 17 00:00:00 2001 From: Irene Knapp Date: Sat, 26 Sep 2026 18:27:44 -0700 Subject: refactor the compilation harness it's more declarative now. however, at the moment it only produces the one type of executable, so it's only for building "evoke", not "hex". hopefully that can be fixed soon. Change-Id: Id970b9952fcd73ba6da4fa503ae2f784afe1b8a7 Force-Push: yes --- evoke.e | 92 ++++++++++++++++++++++++++++++----------------------------------- 1 file changed, 42 insertions(+), 50 deletions(-) (limited to 'evoke.e') diff --git a/evoke.e b/evoke.e index 64a4d92..40f996e 100644 --- a/evoke.e +++ b/evoke.e @@ -1,49 +1,42 @@ -~ cat evoke.e | ./evoke > evoke2 && chmod 755 evoke2 +~ echo 's" evoke.e" enchant' | ./evoke > evoke2 && chmod 755 evoke2 +~ echo 's" evoke.e" inscribe' | ./evoke > evoke.hex -: read-inputs +: define-inputs here @ dup - s" language/static/core.e" pack-file-contents - s" language/static/linux.e" pack-file-contents - s" language/static/output.e" pack-file-contents - s" language/static/amd64.e" pack-file-contents - s" language/static/execution-support.e" pack-file-contents - s" language/static/log-load.e" pack-file-contents + s" language/static/core.e" packstring + s" language/static/linux.e" packstring + s" language/static/output.e" packstring + s" language/static/amd64.e" packstring + s" language/static/execution-support.e" packstring + s" language/static/log-load.e" packstring 0 pack8 8 packalign here ! - s" source-to-precompile" variable + s" static-sources" variable here @ dup - s" language/static/core.e" pack-file-contents - s" language/static/linux.e" pack-file-contents - s" language/static/output.e" pack-file-contents - s" language/static/amd64.e" pack-file-contents - s" language/static/execution-support.e" pack-file-contents - s" language/static/log-load.e" pack-file-contents - s" language/dynamic/dynamic.e" pack-file-contents - s" language/dynamic/input.e" pack-file-contents - s" language/dynamic/interpret.e" pack-file-contents - s" language/dynamic/flow-control.e" pack-file-contents - s" language/dynamic/linux.e" pack-file-contents - s" language/dynamic/files.e" pack-file-contents + s" language/dynamic/dynamic.e" packstring + s" language/dynamic/input.e" packstring + s" language/dynamic/interpret.e" packstring + s" language/dynamic/flow-control.e" packstring + s" language/dynamic/linux.e" packstring + s" language/dynamic/files.e" packstring 0 pack8 8 packalign here ! - s" source-to-copy-to-log" variable + s" dynamic-sources" variable here @ dup - s" compilation/labels.e" pack-file-contents - s" compilation/elf.e" pack-file-contents - s" compilation/transform.e" pack-file-contents - s" compilation/execution.e" pack-file-contents - s" language/boot-source-footer.e" pack-file-contents + s" compilation/labels.e" packstring + s" compilation/elf.e" packstring + s" compilation/transform.e" packstring + s" compilation/execution.e" packstring + s" compilation/top-level.e" packstring + s" language/boot-source-footer.e" packstring 0 pack8 8 packalign here ! - s" source-to-textually-include" variable ; -read-inputs + s" boot-sources" variable ; +define-inputs ~ (output memory start, current output point ~ -- output memory start, current output point) -~ -~ Everything directly called by all-contents has this same interface. -~ -: all-contents +: compile-header ~ : This particular program is 'evoke', the compiler. If you already have ~ : a binary copy of 'hex', run this file through it and you'll have a ~ : working compiler. Pretty sweet, right? @@ -54,22 +47,11 @@ read-inputs ~ : readability but isn't easily reproduced in this form, though every ~ : effort has been made. ~ : blank-line - 0x08000000 L!' origin - - elf-file-header - elf-program-header - - output-cold-start - - output-warm-start-header - source-to-copy-to-log log-load-transform - output-warm-start-post-log-load-transform - output-warm-start-attach-boot-source - output-warm-start-footer - - source-to-precompile label-transform - source-to-textually-include output-boot-source + 0x08000000 L!' origin ; +~ (output memory start, current output point +~ -- output memory start, current output point) +: compile-footer ~ If we wanted words in the log to be able to call statically-linked ~ words, we could set this to something nonzero. We don't, so we leave it ~ alone. @@ -83,6 +65,16 @@ read-inputs ~ : This is the end of the hex dump. Thanks for reading! ; -' all-contents entry-to-execution-token label-loop -1 3unroll sys-write bye + +~ (-- static source filename list, dynamic source filename list, +~ boot source filename list, compile-header word name, +~ compile-footer word name) +: evoke-executable-data + static-sources + dynamic-sources + boot-sources + s" compile-header" + s" compile-footer" ; + +: latest-executable-data evoke-executable-data ; -- cgit 1.4.1