unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
* bootstrap integration strategies
@ 2018-07-09 20:55 Jan Nieuwenhuizen
  2018-07-11 13:13 ` Ludovic Courtès
  0 siblings, 1 reply; 13+ messages in thread
From: Jan Nieuwenhuizen @ 2018-07-09 20:55 UTC (permalink / raw)
  To: guix-devel; +Cc: Rutger van Beusekom

Hi!

With Mes 0.16 released I felt that after two years of straight hacking
I was pretty much done.  Hmm...

On the wip-bootstrap branch we have these packages

    binutils-2.20.1, gcc-2.95.3, and glibc-2.2.5

built without using any of these 3 main tools from the bootstrap
binaries.

Using these we have built gcc-4.1.0 and glibc-2.3.6.

We do however, use all these bootstrap binaries/binary seeds

    bash, bison, coreutils, diffutils, file, flex, gawk, grep, gzip,
    make, sed, tar

...and guile.

Also: this Mes bootstrap is currently x86-linux only.

And the above is an over-simplification, here's the list of seeds and
packages in order:

    %mescc-tools-seed
    %mes-seed
    %tinycc-seed
    mescc-tools-boot
    mes-boot
    nyacc-boot
    tcc-boot-0@0.9.26
    tcc-boot@0.9.27
    binutils-mesboot@2.20.1a
    gcc-core-mesboot@2.95.3
    glibc-mesboot@2.2.5
    gcc-mesboot0@2.95.3
    binutils-mesboot@2.20.1a
    gcc-mesboot@4.1.0
    [glibc-mesboot@2.3.6]

I hoped to get gcc-4.7.4 packaged easily but haven't succeeded in two
weeks.  That means I'm stuck[0].  Much has happened: I'm helping to get
mescc-tools, Nyacc and Mes packaged in Debian, am writing some
documentation[1], got a preliminary hello-world on Hurd, worked on Gash[2]
to get it on par with bournish, applied for a GNU evaluation of Mes...

If we get gcc-4.7.4 built for x86 that's nice, but can we bootstrap
other architectures from that?  Do we want that?  We probably do not
want different bootstrap paths for different architectures.  What
about the Hurd?

Let's say we have gcc-4.7.4, then it would be nice to eliminate other
bootstrap binaries.  Obvious places to start are bash and make.  As
Guix we depend on the Guile bootstrap binary most.

That is why I've also been working on Gash--Guile As SHell--by
Rutger[cc] lately.  If we make Gash powerful enough to replace bash to
build make and some of the other bootstrap binaries, that would be
nice.  After a promising re-start it now proved that the heart of
Gash, the SH grammar in PEG and its subsequent transformations needs
an overhaul.  That's being worked on but there is not much visible
progress.

So, where to go?  Integrate the Mes x86 bootstrap and build other
architectures on top of that (is that even possible)?  Add the Mes
bootstrap as an additional, weird `x86-linux' architecture to mature
first?  Add other architectures to Mes and keep one bootstrap path in
Guix?  Finish the x86 bootstrap/gcc-4.7.4 (I need help!)?

Lots I haven't mentioned, hoping to get a discussion going and to create
something of a plan.  Thoughts?

Greetings,
janneke

[0] https://gcc.gnu.org/ml/gcc-help/2018-07/msg00060.html
[1] http://lilypond.org/janneke/mes
[2] http://gitlab.com/rutger.van.beusekom/gash
    friendly fork with bournish commands: http://gitlab.com/janneke/gash

-- 
Jan Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond http://lilypond.org
Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com

^ permalink raw reply	[flat|nested] 13+ messages in thread
* Re: bootstrap integration strategies
@ 2018-07-12 12:16 Orians, Jeremiah (DTMB)
  2018-07-12 16:15 ` Ludovic Courtès
  2018-07-12 17:44 ` Jan Nieuwenhuizen
  0 siblings, 2 replies; 13+ messages in thread
From: Orians, Jeremiah (DTMB) @ 2018-07-12 12:16 UTC (permalink / raw)
  To: ludo@gnu.org, guix-devel@gnu.org

> I think that's the main difficulty.  I think we'd rather not have
> separate bootstrap paths for Intel GNU/Linux on one hand, and everything
> else on the other hand.

Well, due to the design of mescc-tools; the bootstrap paths only have to be divergent up to the M1-macro level.
After that, we could simply use flags make the source work on different platforms

> Yet, we know that porting what you already did on x86-linux-gnu to
> GNU/Hurd and ARMv7 and AArch64 etc. is going to be a lot of non-trivial
> work (especially since historical versions of the GNU toolchain did not
> support AArch64, for instance.)
Nor RISC-V but that is likely to be a much bigger issue in terms of bootstrapping

> Waiting for this to be "solved" (and we don't even know how) would
> equate to a status quo.  But obviously, it'd be sad to have all this
> work already done on Intel and not be able to benefit from it.
Actually the work for the stage0 bootstrap steps have already been done on non-x86 hardware (Knight platform to be precise)
And the engineering decisions involved where explicitly selected to minimize porting and cross-platform bootstrapping effort.
M1-macro and hex2-linker only need flags to be set to build for all of the different supported platforms

> So perhaps we'll have to get over it and have a different bootstrap path
> on x86-linux-gnu.
A multiway bootstrap path that exceeds the requirements of DDC actually

> (BTW, I suspect we can get away with using 32-bit bootstrap binaries on
> both i686/x86_64 and armv7/aarch64, no?)
For AMD64, absolutely, ARM however I am not familiar enough to say

> Gash seems to be a low-hanging fruit and a relatively easy thing,
> because it's architecture-independent.  How
> far is it from being able to run typical 'configure' scripts?
Well we would have to replace the parser at a bare minimum

> I think the day it's able to run 'configure' scripts, we can switch to
> it right away without further ado, and then incrementally improve it as
> we stumble upon limitations and bugs.
Well we only need Gash to get to the build make and bash level, after that its scope can be limited.
In theory, someone could hand replace the make build script with a custom version that gash can use right now instead of us enhancing gash

> There's also another option you didn't mention: ditching the 2.0
> bootstrap Guile in favor of Mes.  That can be done in several steps:

>  1. Replace the guile-2.0.*.xz binary tarballs with Mes, and add a step
>      that builds Guile 2.x using our big bootstrap GCC binary.
Slow but possible

>   2. Same, but build Guile 2.x, libgc, etc. using MesCC.
MesCC can't directly build Guile yet but I do enjoy that ambition ;-)

> This could allow us to remove quite a lot of MiBs from our binary seeds.
FTFY

At this point, we effectively have a rope bridge to full bootstrappability
But we still have a lot of details to hammer out, like getting basic ARM support and having the ARM and x86 binaries verify each other's bootstrap;
Finding 6502, z80, 8051, 68K, VAX, pdp11, Alpha, MIPS, SPARC and PowerPC/Power Developer(s) to do stage0 work for their platforms and perform the cross verify steps.
Hammer out cross-platform build details for MesCC and M2-Planet

Jeremiah Orians
Cell phone: (517) 896-2948

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2018-07-16 21:38 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-07-09 20:55 bootstrap integration strategies Jan Nieuwenhuizen
2018-07-11 13:13 ` Ludovic Courtès
  -- strict thread matches above, loose matches on Subject: below --
2018-07-12 12:16 Orians, Jeremiah (DTMB)
2018-07-12 16:15 ` Ludovic Courtès
2018-07-12 17:10   ` Orians, Jeremiah (DTMB)
2018-07-12 17:40   ` Jan Nieuwenhuizen
2018-07-12 19:52     ` Jan Nieuwenhuizen
2018-07-13 12:20     ` Ludovic Courtès
2018-07-13 14:19       ` Jan Nieuwenhuizen
2018-07-13 18:23       ` Ricardo Wurmus
2018-07-16 11:11         ` Orians, Jeremiah (DTMB)
2018-07-16 21:37           ` Brett Gilio
2018-07-12 17:44 ` Jan Nieuwenhuizen

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).