Three papercuts a visitor would hit first
Found by a review, all three confirmed by trying them rather than by reading. 1. THE STRICT BUILD CLAIM WAS FALSE. The README says the sources build clean under -std=c11 -pedantic with -Wall -Wextra, and they did not: realpath is an XSI interface, and _POSIX_C_SOURCE=200809L does not reach it, so the assembler would not compile. The ordinary -Os build never saw it, because without -std=c11 the compiler's own default declares realpath anyway. _XOPEN_SOURCE=700 is POSIX.1-2008 plus XSI, and covers every file on its own. Narrowed by compiling each source with each candidate macro rather than by adding one and hoping. And 'make strict' now checks it, as part of 'make test'. The README makes a claim somebody may check by typing it, so the suite types it. Verified the check bites by putting the old macro back. 2. THE COSMOS README HAD NOT CAUGHT UP WITH THIS WEEK. It said there were no breakpoints and proposed writing a spare byte over an instruction - two commits after SWI osBreak was built, which does it without overwriting anything and is described correctly further down the same file. Its Current Scope said there was no native assembler and that self-hosting was the intended long-term milestone. And the streaming section spoke of a machine "one day going to assemble itself". All three now say what is true. Self-hosting is described as done, with what is left of it named: a linker, and an editor that knows what assembly is. 3. 'make run-hello' DID NOT WORK, and it is the one command the makefile's own header advertises. It was a pattern rule against $(BUILD)/%.bin, which worked while every program sat at the top of Programs/ and broke the moment they were filed into Examples/ - which I did, four commits ago, without trying it. The name is looked up among the programs now, so it is the program's name rather than its path, and an unknown one lists what there is instead of saying "No rule to make target". The same sweep was run across all four documents for other claims this week invalidated. The remaining "not yet" phrases are about faults that genuinely are not defined yet. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E2JrLzFvuFX9fgi1LDRjrW
This commit is contained in:
co-authored by
Claude Opus 5
parent
7e8639489b
commit
3f95056eec
+14
-2
@@ -49,8 +49,20 @@ $(BUILD)/%.bin: %.asm
|
||||
$(ASM) $(INCLUDES) -M $(@:.bin=.d) -o $@ $<
|
||||
|
||||
# Assemble and run a single program, as in 'make run-hello'.
|
||||
run-%: $(BUILD)/%.bin
|
||||
$(EMU) $<
|
||||
#
|
||||
# THE NAME IS THE PROGRAM'S, NOT ITS PATH. This used to be a pattern rule against
|
||||
# $(BUILD)/%.bin, which worked while every program sat at the top of this directory and
|
||||
# stopped working the moment they were filed into Examples/ - 'make run-hello' had nothing
|
||||
# to match. Somebody trying the one command the header advertises should not be the way
|
||||
# that is discovered, so the name is now looked up among the programs instead.
|
||||
run-%:
|
||||
@target=`echo $(BINARIES) | tr ' ' '\n' | grep -E "(^|/)$*\.bin$$" | head -1`; \
|
||||
if [ -z "$$target" ]; then \
|
||||
echo "There is no program called '$*'. What there is:"; \
|
||||
echo $(PROGRAMS) | tr ' ' '\n' | sed 's|.*/||;s|\.asm$$||;s|^| |'; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
$(MAKE) --no-print-directory "$$target" && $(EMU) "$$target"
|
||||
|
||||
# ---- CosmOS ----
|
||||
#
|
||||
|
||||
Reference in New Issue
Block a user