mit-scheme-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [MIT-Scheme-devel] A tale of four builds.


From: Taylor R Campbell
Subject: Re: [MIT-Scheme-devel] A tale of four builds.
Date: Fri, 4 Oct 2013 13:41:41 +0000
User-agent: IMAIL/1.21; Edwin/3.116; MIT-Scheme/9.1.99

   Date: Thu, 3 Oct 2013 13:55:36 -0700
   From: Matt Birkholz <address@hidden>

   I don't know about converting compile-svm.sh to a set of
   parallelizable makefile rules.  The need for Stage.sh makes it... not
   obvious to me.  My only example is the pair of scripts
   make-lairc-dist.sh and make-liarc.sh.

One thing we ought to be able to do is use different source and object
trees.  That way, we could have one object tree for a (cross-compiler)
toolchain, and one object tree for the target, and a single makefile
to regenerate everything.

However, until then, I think we ought to have one makefile for a
toolchain, say Makefile.boot, with rules like:

.PHONY: all
all: boot/toolchain.com
        # Get the bootstrap objects out of the way.  (This is a little
        # sleazy.  Could save them with Stage.sh, alternatively, or do
        # this outside of make.)
        $(MAKE) clean

boot/toolchain.com: compile-cross-compiler
boot/toolchain.com:
        (echo '(begin' && \
         echo '  (with-working-directory-pathname "compiler"' && \
         echo '    (lambda () (load "make")))' && \
         echo '  (disk-save "boot/toolchain.com"))') \
        | '$(MIT_SCHEME_EXE)' --batch-mode --band runtime.com

The target Makefile would have rules like:

boot/toolchain.com:
        @echo 'You need to run `make -f Makefile.boot\'' first!' && exit 1

BOOTSTRAP_TOOLCHAIN = \
  '$(MIT_SCHEME_EXE)' --band ./boot/toolchain.com --batch-mode

.PHONY: compile-runtime
compile-runtime: boot/toolchain.com
compile-runtime: syntax-runtime
compile-runtime:
        (echo '(with-working-directory-pathname "runtime"' && \
         echo '  (lambda () (load "runtime.cbf")))') \
        | $(BOOTSTRAP_TOOLCHAIN)

This could be done right now, without any cross-compilation changes in
the code like you mentioned under `Scheme48ish Cross Compilation', to
fix the bug with star-parser, actually.  (The up-to-date star-parser
would get included in toolchain.com, as a provisional measure until we
fix the macro system.)  I might even find time this afternoon to throw
together a prototype.

   I would work on a cross-fasdumper, but I will need some really cool
   heap format changes to motivate me... "really cool" like eliminating
   SEQUENCE-3.

I wrote one back in June.  Can't remember whether I published it, but
I just uploaded it to

http://mumble.net/~campbell/tmp/mit-fasdump.scm

I don't seem to have any automatic tests for it, and it won't handle
compiled code, but it works and it's a start.

What it should do for compiled code is basically what crsend.scm does,
but with machine-independent I/O instead of doing machine-dependent
(object-set-type (ucode-type COMPILED-ENTRY) ...) and fasdumping that.

   LIAR/C and separate compilation can stay limited, bootstrapping
   techniques.  I drool for a modern luser's "just load it" build
   abstraction where compilation is just part of loading/evaluating.
   Autoloading pre-compiled "options" is so... last millenium.

I would like to be able to run a program without a macro expander,
compiler, &c., in the address space, and I would like all the code we
distribute to have been run through the macro expander and a static
analyzer (which for the moment is just sf and liar).  Fixing the
system so that loading without compiling and loading after compiling
have the same semantics is worthwhile; eliminating support for a
distinct compilation step altogether is not.

   If there is any objection to moving the star-parser into runtime/, now
   is the time to stop me. :-)

We ought to be moving stuff *out* of runtime/, not into it.  There's
already too much crap there.  Only stuff that is an important part of
a running Scheme program should go in there, really.

If something about the build system has the consequence that putting
star-parser/ into runtime/ is the only way to compile runtime/ with an
up-to-date star-parser/, then we ought to fix whatever it is about the
build system causes that.

                               And if there is any pressing need for a
   working make-native.sh, now is the time to ask.

If by `a working make-native.sh' you mean `a working way to build a
native system given a liarc system', then yes, I think there is a need
for that, unless everything above (which, as I said, I have not yet
read fully) supports cross-compilation already.  make-native.sh is
exactly how I brought up MIT Scheme on amd64 in the first place.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]