On 2012-04-12, at 4:55 PM, Bakul Shah wrote:
On Thu, 12 Apr 2012 15:46:21 EDT Marc Feeley feeley@iro.umontreal.ca wrote:
This "direct bootstrap" is not possible because the .c files generated by the Gambit compiler from the .scm files when compiling itself are not stored on the github repository. The generated .c files are very large and including a ll versions would make the repository considerably larger.
I am proposing to include the generated .c files in the repo, but only commit changes occasionally. Basically, every time a new release would be published (i.e. a .tar.gz with a new version number) the new .c files would be commited to the repository.
I think the key idea is that bootstrap .c files must not be in the same place as generated .c files otherwise If/when you make local changes there will be conficts when you later do a git pull. I'v seen a similar problem in OS projects (where you need an initial set of binaries to get anything done but later you want to install locally built binaries in the same place).
Can you explain this more? Do you mean manual changes to the generated .c files? That should *never* be done! The .c files are not meant for human consumption.
Separating them also helps when you don't catch your mistake until after the buggy compiler generates a new set of .c file (and you have already installed it)!
That's not a problem because when you do a "make" it builds the Gambit compiler executable in gsc/gsc . The compiler that is used to generate the .c files is ./gsc-comp (which will be renamed gsc-boot in the near future) which is the bootstrapped compiler. The executable gsc/gsc is copied to gsc-boot by a "make bootstrap", but this is done infrequently (basically when a new release is created). Note that because we are using git, it is easy to checkout the previous working version, build it and copy it to gsc-boot, and move back to the head to fix things (and only do a "make bootstrap" after proper testing).
How about if `make bootstrap' fetches .c files from a gambit-bootstrap repo strictly for bootstrapping?
"make commit-major" can then copy generated files to the separate gambit-bootstrap repo and commit them there. I like a separate repo because you can then blow it away once bootstrapped -- typical users won't want it beyond the initial bootstrap. Also note that what you really want is an initial gambit binary -- generated .c files is just one way to get it. I'd be happy to just start with a signed binary for my platform!
Binaries are not a good idea since they are not portable (and it is a pain to maintain a fairly complete set). The closest to that model, but completely portable, is what we have currently, i.e. the .tar.gz releases that are self-contained (you grab the latest one, then "make", then pull the latest sources from the repo, and "make" again). But that's not the model people expect. I want a "clone + make" model.
Marc