src/etc/compile-svm.sh: Use max heap to cross-compile on i386.
authorMatt Birkholz <puck@birchwood-abbey.net>
Thu, 4 Feb 2016 04:25:08 +0000 (21:25 -0700)
committerMatt Birkholz <puck@birchwood-abbey.net>
Thu, 4 Feb 2016 04:25:08 +0000 (21:25 -0700)
Running the secondary GC daemons after compiling a directory helps,
but 10000KiW is still too small.  Cross-compilation of edwin/snr hangs
unless 12000KiW can be had.

src/etc/compile-svm.sh
src/etc/compile.scm

index a14de03cf06223d10b8f958586d65298f3f24d76..e438fdc5430b6154635d2e93dcced651fdd1ce16 100755 (executable)
@@ -30,10 +30,13 @@ set -e
 
 . etc/functions.sh
 
+HOST_ARCH=`echo "(display microcode-id/compiled-code-type)" \
+                | ${@} --batch-mode`
+
 # To avoid miscuing GNU Emacs's compilation-mode.
 mydate ()
 {
-  date "+%Y-%m-%d %H-%M-%S"
+  date "+%Y-%m-%d %H.%M.%S"
 }
 
 echo "# `mydate`: Remove the cross-compiler's bands and stash its products."
@@ -107,15 +110,15 @@ if [ "${FAST}" ]; then
     # the host system is native, this will be much faster than using the
     # svm but will not compile by-procedures.
 
-    # Compilation of edwin/snr.bin aborted "out of memory" with --heap
-    # 9000 on i386.  That is as large a heap as can be allocated with
-    # all.com onboard, but HEAP is for x-compiler.com which is a
-    # megaword smaller.
-    HEAP=10000
+    if [ "$HOST_ARCH" = "i386" ]; then
+       HEAP="--heap 12000"
+    else
+       HEAP=""
+    fi
 
     echo "# `mydate`: Re-cross-compile everything."
     run_cmd "${@}" --batch-mode --library lib \
-                  --band x-compiler.com --heap ${HEAP} <<EOF
+                  --band x-compiler.com ${HEAP} <<EOF
 (begin
   (load "etc/compile")
   (fluid-let ((compiler:generate-lap-files? #t)
@@ -133,7 +136,7 @@ EOF
     # Use a large heap for all that s-code!
     run_cmd_in_dir runtime \
        ../microcode/scheme --batch-mode --library ../lib \
-                           --fasl make.bin --heap ${HEAP} <<EOF
+                           --fasl make.bin ${HEAP} <<EOF
 (begin
   (load "../compiler/base/crsend")
   (finish-cross-compilation:directory ".."))
@@ -150,11 +153,15 @@ fi
 
 # Compilation of machines/svm/assembler-db.bin aborted "out of
 # memory" with --heap 8000 on i386 and x86-64.
-HEAP=9000
+if [ "$HOST_ARCH" = "i386" ]; then
+    HEAP="--heap 9000"
+else
+    HEAP=""
+fi
 
 echo "# `mydate`: Re-cross-compile boot-dirs."
 run_cmd "${@}" --batch-mode --library lib \
-    --band x-compiler.com --heap ${HEAP} <<EOF
+    --band x-compiler.com ${HEAP} <<EOF
 (begin
   (load "etc/compile")
   (fluid-let ((compiler:generate-lap-files? #f)
@@ -192,7 +199,7 @@ run_cmd ./Stage.sh make-clean 0
 
 echo "# `mydate`: Use the new machine and compiler to re-compile everything."
 run_cmd ./microcode/scheme --batch-mode --library lib \
-    --band boot-compiler.com --heap ${HEAP} <<EOF
+    --band boot-compiler.com ${HEAP} <<EOF
 (begin
   (load "etc/compile")
   (fluid-let ((compiler:generate-lap-files? #f)
index 1f67382ff0c94dbb89b9877b508dfd064cdd3e93..9631ba232415585fded4c7dadbb5177ea25146b3 100644 (file)
@@ -62,7 +62,9 @@ USA.
            (load (pathname-new-type name "sf"))
            (echo-cref-output name)
            (load (pathname-new-type name "cbf")))
-         (load "compile")))))
+         (load "compile"))))
+  ;; Run secondary GC daemons and whatnot.
+  (gc-clean))
 
 (define (echo-cref-output name)
   (let ((cref-output-file (pathname-new-type (package-set-pathname name) "crf")))