From: Efraim Flashner <efraim@flashner.co.il>
To: Ekaitz Zarraga <ekaitz@elenq.tech>
Cc: Stefan <stefan-guix@vodafonemail.de>,
guix-devel@gnu.org, "Attila Lendvai" <attila@lendvai.name>,
"Sergio Pastor Pérez" <sergio.pastorperez@outlook.es>,
"Timothy Sample" <samplet@ngyro.com>,
janneke@gnu.org
Subject: Re: A different way to bootstrap and build GCC
Date: Sun, 24 Nov 2024 10:27:45 +0200 [thread overview]
Message-ID: <Z0LjgTlJdm1-VVMY@3900XT> (raw)
In-Reply-To: <0264411c-437d-4e3e-a5ea-20ea4886b3ef@elenq.tech>
[-- Attachment #1: Type: text/plain, Size: 5521 bytes --]
On Sun, Nov 24, 2024 at 12:46:21AM +0100, Ekaitz Zarraga wrote:
> Hi!
>
> On 2024-11-24 00:20, Stefan wrote:
> > Hi!
> >
> > I got a step further with the different way to build GCC. The problem
> > not using the proper multilib variant for embedded systems is solved now
> > and I updated to GCC 14.2.
> >
> > To cite myself, my gut feeling is that the whole GCC version chain
> > starting in (gnu packages commencement) should be build this way. So I
> > started to play around with the bootstrapping of GCC.
> >
> > Starting with only few packages from (gnu packages commencement) I so
> > far managed to build a static GCC 10.4.0 using a static musl 1.2.5.
> >
> > The initial packages I reuse are:
> >
> > %bootstrap-guile
> > gash-boot
> > bootar
> > gash-utils-boot
> > tcc-boot0
> > gnu-make-mesboot0
> > gmp-boot
> > mpfr-boot
> > mpc-boot
> >
> >
> > Using only these I build a recent TCC from 2024-08-20 with Mes from
> > tcc-boot0 as C library, and then MUSL 1.2.5. Then (only) three
> > iterations of TCC with musl are needed to get a stable TCC with working
> > floating point support.
> >
> > The chain continues with GNU Make 4.4.1, Binutils 2.42, Findutils
> > 4.10.0, GCC 4.6.4 with gmp-boot, mpfr-boot, mpc-boot (the version with
> > the RISC-V patches may just work), M4 1.4.19, GMP 6.3.0, MPFR 4.2.1, MPC
> > 1.3.1, GCC 10.4.0.
> >
> > These are all static builds so far. I'm using latest versions of all
> > packages, except Binutils, whose version 2.43 does not link the object
> > files from TCC. I avoid to use --build=i686-unknown-linux-gnu to make
> > it possible to build for other architectures as well.
> >
> > I think the next step should be GCC 14, then glibc with shared library
> > support and GCC 14 again.
> >
> > I need several small patches to work around shortcomings in Mes, gash,
> > gash-utils, missing functionality of version 3.8.0 of gnu-make-mesboot0
> > (version 3.81 would have it), bugs in TCC. They are all described in
> > the comments. Maybe gash and gash-utils could be improved in future.
> > The most annoying thing is that only one core can be used for the
> > builds, otherwise they hang. I guess it is related to gash in
> > combination with %bootstrap-guile, at least using Make 4.4.1 makes no
> > difference.
> >
> > I published a git repository at
> > <https://git.pub.solar/stefan/embedded-channel>. Unfortunately it's not
> > a proper channel yet. If someone likes to give that bootstrap path a
> > try, use this command:
> >
> > guix build --cores=1 -L <your-checkout-here> GCC-10-bootstrap
> >
> > The working GCCs can be build with
> >
> > guix build -L <your-checkout-here> GCC GCC-cross-picolibc-arm-none-eabi,
> > GCC-cross-newlib-arm-none-eabi
> >
> > There are GCC…-toolchain package as well, which propagate ld and all the
> > other tools from Binutils. But if these tools are only used indirectly
> > through the gcc or g++ drivers, these GCC…-toolchain packages are not
> > needed at all, as the GCC packages are standalone. There are also
> > GCC…-c-toolchain variables for use with package-with-c-toolchain. There
> > is no separate libstdc++ package yet, the library is just part of GCC.
> > A separate package will only be needed for Clang or other compilers
> > (maybe Zig), but I'm not sure yet, if clang actually needs a dependency
> > to GCC.
> >
> > I hope this will be useful, maybe it can help the RISC-V bootstrap
> > effort. I'm open for suggestions how to proceed from here.
> >
> >
> > Bye
> >
> > Stefan
>
>
> Very interesting work. I'll read it with more detail tomorrow but at the
> moment it feels very similar to what we did for RISC-V (which is more or
> less what live-bootstrap does):
>
> https://github.com/ekaitz-zarraga/commencement.scm
>
> Is there any obvious difference in the beginning of the chain that I'm
> missing?
>
> We also agreed in the RISC-V port that using musl makes everything easier,
> mostly because of the RISC-V support is a complicated in glibc+gcc couples,
> but also because Musl is very easy to compile (and also read and patch, when
> needed).
>
> We also went straight for a modern GCC and left many other packages in the
> way.
>
> Efraim is working adapt that into Guix so he probably would have more to say
> about it.
>
> Interesting work, thanks for sharing!
Indeed, thank you very much!
In terms of integrating the riscv64 bootstrap work I had gotten stuck
building gcc-7 using Ekaitz's gcc-4.6.4 with riscv64 support patched in.
In terms of what I've seen so far from your repo and reading your email
I would suggest just trying to bump make from 3.80 to 3.82, it Just
Worked™ for me, even on riscv64.
Also I had been using musl-1.1.24 as an intermediate step, but with some
of your code I currently have 1.2.5 built and am testing that out.
I'd also recommend checking out the wip-riscv-bootstrap branch on
savannah https://git.savannah.gnu.org/cgit/guix.git/log/?h=wip-riscv-bootstrap
or one of my mirrors https://git.sr.ht/~efraim/guix/tree/wip-riscv-bootstrap
to see some of the changes I've made to commencement.scm. For example I
ended up rewriting the musl install phase.
--
Efraim Flashner <efraim@flashner.co.il> אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2024-11-24 8:28 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-18 12:45 A different way to build GCC to overcome issues, especially with C++ for embedded systems Sergio Pastor Pérez
2024-05-19 22:06 ` Stefan
2024-05-20 6:59 ` Attila Lendvai
2024-05-24 15:48 ` Sergio Pastor Pérez
2024-05-24 17:05 ` Jean-Pierre De Jesus Diaz
2024-05-25 22:20 ` Ricardo Wurmus
2024-05-27 10:48 ` Jean-Pierre De Jesus Diaz
2024-11-23 23:20 ` A different way to bootstrap and build GCC Stefan
2024-11-23 23:46 ` Ekaitz Zarraga
2024-11-24 8:27 ` Efraim Flashner [this message]
2024-11-24 12:02 ` Stefan
2024-11-24 12:02 ` Stefan
2024-11-24 12:02 ` Rutherther
2024-11-24 21:13 ` Stefan
2024-11-24 12:36 ` Ekaitz Zarraga
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Z0LjgTlJdm1-VVMY@3900XT \
--to=efraim@flashner.co.il \
--cc=attila@lendvai.name \
--cc=ekaitz@elenq.tech \
--cc=guix-devel@gnu.org \
--cc=janneke@gnu.org \
--cc=samplet@ngyro.com \
--cc=sergio.pastorperez@outlook.es \
--cc=stefan-guix@vodafonemail.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).