From: Matt Birkholz <matt@birkholz.chandler.az.us>
Date: Sun, 13 Oct 2013 01:17:44 +0000 (-0700)
Subject: Fix new build to cross from 9.1.1.
X-Git-Tag: release-9.2.0~67
X-Git-Url: https://birchwood-abbey.net/git?a=commitdiff_plain;h=13b5bca2b7981cf00afb8308a73aa5adfa34548d;p=mit-scheme.git

Fix new build to cross from 9.1.1.

On a 9.1.1 host, the new build dies while compiling the compiler.

    ;  Generating SCode for file: "fggen/canon.scm" => "fggen/canon.bin"...
    ;MICROCODE-TYPE: Unknown name sequence

The usual remedies did not suffice.  In fact now the temporary code in
cref/make.scm is not needed.  The compiler is compiled with a cross
runtime that provides the necessary patch via its utabs.scm, where
access to type-aliases and returns-aliases is easy, though
insufficient to train the host.  9.1.1 still needs the training in
runtime.sf.

Unlike a cross compile, a cross runtime was not used by this build(?).
Use a new compile-cross-runtime target and --fasl make.com to make
tools/syntaxer.com.  Make syntax-cross-cref and syntax-cross-sf
dependent on syntax-cross-runtime for its runtime.pkd (pinching off a
little parallelism, but allowing them to proceed while the runtime
compiles).  Did not try to syntax anything but the new compiler with
the new star-parser.
---

diff --git a/src/Makefile.tools.in b/src/Makefile.tools.in
index 7b3a50700..bb787b2c8 100644
--- a/src/Makefile.tools.in
+++ b/src/Makefile.tools.in
@@ -1,3 +1,4 @@
+# -*-makefile-*-
 # Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
 #     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 #     2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
@@ -62,13 +63,9 @@ mkinstalldirs = $(SHELL) $(top_srcdir)/microcode/mkinstalldirs
 
 MIT_SCHEME_EXE = @MIT_SCHEME_EXE@
 
-HOST_COMPILER = $(HOST_TOOLCHAIN)
-HOST_RUNTIME = '$(MIT_SCHEME_EXE)' --batch-mode --band runtime.com
-HOST_SYNTAXER = '$(MIT_SCHEME_EXE)' --batch-mode --band runtime.com \
-	--eval '(load-option (quote CREF))' \
-	--eval '(load-option (quote SF))'
-HOST_TOOLCHAIN = '$(MIT_SCHEME_EXE)' --batch-mode \
-	--eval '(load-option (quote CREF))'
+HOST_COMPILER = $(MIT_SCHEME_EXE) --batch-mode
+CROSS_SYNTAXER = '$(MIT_SCHEME_EXE)' --batch-mode --band ./tools/syntaxer.com
+HOST_SYNTAXER = '$(MIT_SCHEME_EXE)' --batch-mode
 
 SUBDIRS = compiler cref runtime sf star-parser
 
@@ -120,33 +117,25 @@ restore:
 
 tools/compiler.com: tools/syntaxer.com
 tools/compiler.com: compile-cross-compiler
-tools/compiler.com: compile-cross-cref
-tools/compiler.com: compile-cross-sf
-tools/compiler.com: compile-kludgerous-star-parser
 	(echo '(begin' && \
-	 echo '  (with-working-directory-pathname "cref"' && \
-	 echo '    (lambda () (load "make")))' && \
-	 echo '  (with-working-directory-pathname "sf"' && \
-	 echo '    (lambda () (load "make")))' && \
-	 echo '  (with-working-directory-pathname "star-parser"' && \
-	 echo '    (lambda () (load "load")))' && \
 	 echo '  (with-working-directory-pathname "compiler"' && \
 	 echo '    (lambda () (load "make")))' && \
 	 echo '  (disk-save "$@"))') \
-	| $(HOST_RUNTIME)
+	| $(CROSS_SYNTAXER)
 
+tools/syntaxer.com: compile-cross-runtime
 tools/syntaxer.com: compile-cross-cref
 tools/syntaxer.com: compile-cross-sf
-tools/syntaxer.com: compile-kludgerous-star-parser
+tools/syntaxer.com: compile-cross-star-parser
 	(echo '(begin' && \
-	 echo '  (with-working-directory-pathname "cref"' && \
+	 echo '  (with-working-directory-pathname "../cref"' && \
 	 echo '    (lambda () (load "make")))' && \
-	 echo '  (with-working-directory-pathname "sf"' && \
+	 echo '  (with-working-directory-pathname "../sf"' && \
 	 echo '    (lambda () (load "make")))' && \
-	 echo '  (with-working-directory-pathname "star-parser"' && \
+	 echo '  (with-working-directory-pathname "../star-parser"' && \
 	 echo '    (lambda () (load "load")))' && \
-	 echo '  (disk-save "$@"))') \
-	| $(HOST_RUNTIME)
+	 echo '  (disk-save "../$@"))') \
+	| (cd runtime && '$(MIT_SCHEME_EXE)' --batch-mode --fasl make.com)
 
 # Compiler (LIAR)
 
@@ -191,28 +180,29 @@ compile-cross-compiler-rtlgen: syntax-cross-compiler
 compile-cross-compiler-rtlopt: syntax-cross-compiler
 	echo '(compile-directory "compiler/rtlopt")' | $(HOST_COMPILER)
 
-# Must use HOST_SYNTAXER here because compiler.sf's (and, more
-# generally, CREF's) host/target distinction is bollocksed up, and will
-# do the wrong thing if there is already a compiler loaded into the
-# image.
 .PHONY: syntax-cross-compiler
+syntax-cross-compiler: tools/syntaxer.com
 @IF_SVM@syntax-cross-compiler: compiler/machines/svm/assembler-db.scm
-syntax-cross-compiler: cref-cross-compiler
 	(echo '(with-working-directory-pathname "compiler"' && \
 	 echo '  (lambda () (load "compiler.sf")))') \
-	| $(HOST_SYNTAXER)
+	| $(CROSS_SYNTAXER)
 
 compiler/machines/svm/assembler-db.scm:
 	(cd compiler/machines/svm && \
 	 '$(MIT_SCHEME_EXE)' --batch-mode --load compile-assembler </dev/null)
 
-.PHONY: cref-cross-compiler
-cref-cross-compiler: cref-cross-cref
-cref-cross-compiler: cref-cross-sf
-cref-cross-compiler: cref-kludgerous-runtime
-	(echo '(with-working-directory-pathname "compiler"' && \
-	 echo '  (lambda ()' && \
-	 echo '    (cref/generate-trivial-constructor "compiler")))') \
+# RUNTIME
+
+.PHONY: compile-cross-runtime
+compile-cross-runtime: syntax-cross-runtime
+	(echo '(with-working-directory-pathname "runtime"' && \
+	 echo '  (lambda () (load "runtime.cbf")))') \
+	| $(HOST_COMPILER)
+
+.PHONY: syntax-cross-runtime
+syntax-cross-runtime:
+	(echo '(with-working-directory-pathname "runtime"' && \
+	 echo '  (lambda () (load "runtime.sf")))') \
 	| $(HOST_SYNTAXER)
 
 # CREF
@@ -224,18 +214,11 @@ compile-cross-cref: syntax-cross-cref
 	| $(HOST_COMPILER)
 
 .PHONY: syntax-cross-cref
-syntax-cross-cref: cref-cross-cref
+syntax-cross-cref: compile-cross-runtime # for runtime.pkd
 	(echo '(with-working-directory-pathname "cref"' && \
 	 echo '  (lambda () (load "cref.sf")))') \
 	| $(HOST_SYNTAXER)
 
-.PHONY: cref-cross-cref
-cref-cross-cref: cref-kludgerous-runtime
-	(echo '(with-working-directory-pathname "cref"' && \
-	 echo '  (lambda ()' && \
-	 echo '    (cref/generate-trivial-constructor "cref")))') \
-	| $(HOST_SYNTAXER)
-
 # SF
 
 .PHONY: compile-cross-sf
@@ -245,38 +228,15 @@ compile-cross-sf: syntax-cross-sf
 	| $(HOST_COMPILER)
 
 .PHONY: syntax-cross-sf
-syntax-cross-sf: cref-cross-sf
+syntax-cross-sf: compile-cross-runtime # for runtime.pkd
 	(echo '(with-working-directory-pathname "sf"' && \
 	 echo '  (lambda () (load "sf.sf")))') \
 	| $(HOST_SYNTAXER)
 
-.PHONY: cref-cross-sf
-cref-cross-sf: cref-kludgerous-runtime
-	(echo '(with-working-directory-pathname "sf"' && \
-	 echo '  (lambda ()' && \
-	 echo '    (cref/generate-trivial-constructor "sf")))') \
-	| $(HOST_SYNTAXER)
-
-# Kludges
+# *PARSER
 
-# XXX This is a kludge that should be abolished.  The compiler should
-# be able to load and run macros for the target even if we are cross-
-# compiling, but currently that's not doable.
-.PHONY: compile-kludgerous-star-parser
-compile-kludgerous-star-parser: cref-kludgerous-runtime
+.PHONY: compile-cross-star-parser
+compile-cross-star-parser: compile-cross-runtime # for runtime.pkd
 	(echo '(with-working-directory-pathname "star-parser"' && \
-	 echo '  (lambda () (load "compile")))') \
-	| $(HOST_TOOLCHAIN)
-
-# XXX This is a mega-kludge that should be abolished.  Parser.pkg has
-# (global-definitions "../../runtime"), which should refer to the
-# host's runtime packaging -- but that doesn't get installed anywhere!
-# So instead we pretend it refers to the target's runtime packaging
-# (which may be completely wrong for something we want to load into the
-# host).
-.PHONY: cref-kludgerous-runtime
-cref-kludgerous-runtime:
-	(echo '(with-working-directory-pathname "runtime"' && \
-	 echo '  (lambda ()' && \
-	 echo '    (cref/generate-trivial-constructor "runtime")))') \
-	| $(HOST_TOOLCHAIN)
+	 echo '  (lambda () (load "compile.scm")))') \
+	| $(HOST_COMPILER)
diff --git a/src/cref/make.scm b/src/cref/make.scm
index fe4110746..6d77735a2 100644
--- a/src/cref/make.scm
+++ b/src/cref/make.scm
@@ -28,14 +28,6 @@ USA.
 
 (declare (usual-integrations))
 
-;; Temporarily: ensure host knows new type code SEQUENCE.  Older hosts
-;; have an equivalent SEQUENCE-2 and type-aliases.
-(if (not (microcode-type/name->code 'sequence))
-    (let ((env (->environment '(runtime microcode-tables))))
-      (set! (access type-aliases env)
-	    (cons '(sequence-2 sequence)
-		  (access type-aliases env)))))
-
 (with-loader-base-uri (system-library-uri "cref/")
   (lambda ()
     (load-package-set "cref")))
diff --git a/src/runtime/utabs.scm b/src/runtime/utabs.scm
index 002b261c4..8dd0737ef 100644
--- a/src/runtime/utabs.scm
+++ b/src/runtime/utabs.scm
@@ -68,6 +68,17 @@ USA.
 	(microcode-identification-item 'CONSOLE-WIDTH))
   (set! microcode-id/tty-y-size
 	(microcode-identification-item 'CONSOLE-HEIGHT))
+
+  ;; Temporarily: ensure host knows new type code SEQUENCE.  Older hosts
+  ;; have an equivalent SEQUENCE-2 and type-aliases.
+  (if (not (microcode-type/name->code 'sequence))
+      (set! type-aliases
+	    (cons '(SEQUENCE-2 SEQUENCE)
+		  type-aliases)))
+  (if (not (microcode-return/name->code 'sequence-continue))
+      (set! returns-aliases
+	    (cons '(SEQUENCE-2-SECOND SEQUENCE-CONTINUE)
+		  returns-aliases)))
   unspecific)
 
 (define (intern string)