* Re: A different way to build GCC to overcome issues, especially with C++ for embedded systems @ 2024-05-18 12:45 Sergio Pastor Pérez 2024-05-19 22:06 ` Stefan 0 siblings, 1 reply; 9+ messages in thread From: Sergio Pastor Pérez @ 2024-05-18 12:45 UTC (permalink / raw) To: stefan-guix; +Cc: guix-devel Hello. I'm very interested in the code for ZMK provided in this thread[1]. I've tried it locally and it compiles successfully. Does anyone know if this is available in a public repository? Or if it has been moved forward? Anyone here have tried to do something with ZMK? I'm interested in what would be the Guix approach for ZMK development. The blog post of Zephyr[2] was a very interesting read, does anyone know of other resources regarding this topic? Have a great day! Sergio. [1]: https://lists.gnu.org/archive/html/guix-devel/2023-10/msg00014.html [2]: https://guix.gnu.org/en/blog/2023/building-toolchains-with-guix ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: A different way to build GCC to overcome issues, especially with C++ for embedded systems 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-11-23 23:20 ` A different way to bootstrap and build GCC Stefan 0 siblings, 2 replies; 9+ messages in thread From: Stefan @ 2024-05-19 22:06 UTC (permalink / raw) To: Sergio Pastor Pérez; +Cc: guix-devel, Attila Lendvai [-- Attachment #1: Type: text/plain, Size: 1558 bytes --] Hi Sergio! > I'm very interested in the code for ZMK provided in this thread[1]. > > I've tried it locally and it compiles successfully. That's nice to hear! > Does anyone know if this is available in a public repository? Or if it has been moved forward? There is no public repository for it. I moved it a bit further. There is now a GCC with picolibc. GCC in general is more self-contained and is completely usable by itself (including paths to specs; Attila, this may solve the issue you were facing). There is no real need for GCC-toolchain packages anymore. However, as some projects invoke programs of Binutils directly and because of locales, there are still GCC-toolchain packages. The Binutils for arm-none-eabi get build separately as well now, as the one from Guix has failing tests (if activated) due to the selected configure flags. GCC is bumped to 13.2.0. Zephyr is updated to 3.5 and ZMK to end of April. There is also more ZMK support for combos, conditional-layers and a bit more. A problem I figured for arm-none-eabi-g++ is that it always links the generic libstdc++.a, instead of the existing CPU and FPU specific multilib variant from a sub-directory. I'd appreciate any GCC configuration hint to solve this. > Anyone here have tried to do something with ZMK? I'm interested in what would be the Guix approach for ZMK development. > > The blog post of Zephyr[2] was a very interesting read, does anyone know of other resources regarding this topic? I'm not aware of anything else regarding ZMK or Zephyr in Guix. Bye Stefan [-- Attachment #2: embedded.tar.gz --] [-- Type: application/gzip, Size: 29929 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: A different way to build GCC to overcome issues, especially with C++ for embedded systems 2024-05-19 22:06 ` Stefan @ 2024-05-20 6:59 ` Attila Lendvai 2024-05-24 15:48 ` Sergio Pastor Pérez 2024-11-23 23:20 ` A different way to bootstrap and build GCC Stefan 1 sibling, 1 reply; 9+ messages in thread From: Attila Lendvai @ 2024-05-20 6:59 UTC (permalink / raw) To: Stefan; +Cc: Sergio Pastor Pérez, guix-devel hi Stefan, > > Does anyone know if this is available in a public repository? Or if it has been moved forward? > > > There is no public repository for it. this is a much more valuable piece of contribution than to allow it to hang in the void indefinitely! if the only reason that you have not made a channel for this yet is that you've never done it before, then i'd be happy to walk you through it off list. or i can help you setting up a guix fork where you can push your own signed commits, and guix pull from. or if you don't mind that the initial commit will be signed by me, then i can even set up a guix channel on codeberg, give you commit access, and then you can push any further changes there. just let me know. -- • attila lendvai • PGP: 963F 5D5F 45C7 DFCD 0A39 -- “Fear is not in the habit of speaking truth; when perfect sincerity is expected, perfect freedom must be allowed; nor has anyone, who is apt to be angry when he hears the truth, any cause to wonder that he does not hear it.” — Cornelius Tacitus (ca. 56–117) ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: A different way to build GCC to overcome issues, especially with C++ for embedded systems 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 0 siblings, 1 reply; 9+ messages in thread From: Sergio Pastor Pérez @ 2024-05-24 15:48 UTC (permalink / raw) To: Attila Lendvai, Stefan; +Cc: guix-devel Hi both of you. I want to echo Attila's sentiments. This is a valuable contribution, and creating a channel would serve as a central hub for other contributors. Thanks for sharing, Stefan. Have nice day. Sergio. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: A different way to build GCC to overcome issues, especially with C++ for embedded systems 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 0 siblings, 1 reply; 9+ messages in thread From: Jean-Pierre De Jesus Diaz @ 2024-05-24 17:05 UTC (permalink / raw) To: Sergio Pastor Pérez; +Cc: Attila Lendvai, Stefan, guix-devel Hello, Adding to this conversation I have been making a arm-none-eabi toolchain with Newlib included as the default C standard library like in the official Arm toolchain but I'm not quite happy with the patches yet.[1] I haven't contributed it yet because it has been a bit hard adapting axoloti-* packages to use a modern toolchain because I'm also intending to remove the old toolchains in `gnu/packages/embedded.scm' eventually and instead use the ones in `cross-gcc-toolchain'. [1]: https://github.com/Foundation-Devices/guix-mirror/compare/master...wip/arm-none-eabi On Fri, May 24, 2024 at 3:53 PM Sergio Pastor Pérez <sergio.pastorperez@outlook.es> wrote: > > Hi both of you. > > I want to echo Attila's sentiments. This is a valuable contribution, and > creating a channel would serve as a central hub for other contributors. > > Thanks for sharing, Stefan. > > Have nice day. > Sergio. > ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: A different way to build GCC to overcome issues, especially with C++ for embedded systems 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 0 siblings, 1 reply; 9+ messages in thread From: Ricardo Wurmus @ 2024-05-25 22:20 UTC (permalink / raw) To: Jean-Pierre De Jesus Diaz Cc: Sergio Pastor Pérez, Attila Lendvai, Stefan, guix-devel Jean-Pierre De Jesus Diaz <jean@foundation.xyz> writes: > I haven't contributed it yet because it has been a bit hard adapting axoloti-* > packages to use a modern toolchain because I'm also intending to remove > the old toolchains in `gnu/packages/embedded.scm' eventually and > instead use the ones in `cross-gcc-toolchain'. Could you explain why it is difficult to adjust the axoloti/ksoloti packages? They only need an arm-none-eabi cross-compiler with newlib. Since I have axoloti boards here, I could test your changes. -- Ricardo ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: A different way to build GCC to overcome issues, especially with C++ for embedded systems 2024-05-25 22:20 ` Ricardo Wurmus @ 2024-05-27 10:48 ` Jean-Pierre De Jesus Diaz 0 siblings, 0 replies; 9+ messages in thread From: Jean-Pierre De Jesus Diaz @ 2024-05-27 10:48 UTC (permalink / raw) To: Ricardo Wurmus Cc: Sergio Pastor Pérez, Attila Lendvai, Stefan, guix-devel >> I haven't contributed it yet because it has been a bit hard adapting axoloti-* >> packages to use a modern toolchain because I'm also intending to remove >> the old toolchains in `gnu/packages/embedded.scm' eventually and >> instead use the ones in `cross-gcc-toolchain'. > >Could you explain why it is difficult to adjust the axoloti/ksoloti >packages? They only need an arm-none-eabi cross-compiler with newlib. >Since I have axoloti boards here, I could test your changes. I'm mostly having issues with refactoring cross-base to use the gcc 4.9 branch for ARM to compile one of the axoloti packages that need a 4.9 toolchain as trying to use a newer one gave me some errors and the default gcc 4.9 doesn't have all of the multilib targets that axoloti needs IIRC. On Sat, May 25, 2024 at 10:20 PM Ricardo Wurmus <rekado@elephly.net> wrote: > > Jean-Pierre De Jesus Diaz <jean@foundation.xyz> writes: > > > I haven't contributed it yet because it has been a bit hard adapting axoloti-* > > packages to use a modern toolchain because I'm also intending to remove > > the old toolchains in `gnu/packages/embedded.scm' eventually and > > instead use the ones in `cross-gcc-toolchain'. > > Could you explain why it is difficult to adjust the axoloti/ksoloti > packages? They only need an arm-none-eabi cross-compiler with newlib. > Since I have axoloti boards here, I could test your changes. > > -- > Ricardo ^ permalink raw reply [flat|nested] 9+ messages in thread
* A different way to bootstrap and build GCC 2024-05-19 22:06 ` Stefan 2024-05-20 6:59 ` Attila Lendvai @ 2024-11-23 23:20 ` Stefan 2024-11-23 23:46 ` Ekaitz Zarraga 1 sibling, 1 reply; 9+ messages in thread From: Stefan @ 2024-11-23 23:20 UTC (permalink / raw) To: guix-devel Cc: Attila Lendvai, Sergio Pastor Pérez, ekaitz, Efraim Flashner, Timothy Sample, janneke 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 ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: A different way to bootstrap and build GCC 2024-11-23 23:20 ` A different way to bootstrap and build GCC Stefan @ 2024-11-23 23:46 ` Ekaitz Zarraga 0 siblings, 0 replies; 9+ messages in thread From: Ekaitz Zarraga @ 2024-11-23 23:46 UTC (permalink / raw) To: Stefan, guix-devel Cc: Attila Lendvai, Sergio Pastor Pérez, Efraim Flashner, Timothy Sample, janneke 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! Ekaitz ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2024-11-23 23:47 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 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
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).