Hi Ludo, thanks for the hints.
> Ricardo Wurmus <rek...@elephly.net> skribis: > >> The latest version includes C++ sources for the firmware. >> Unfortunately, our “arm-none-eabi” cross-compiler package does not >> build libstdc++, nor does it come with any of the required C++ headers >> like “cmath”. >> >> So I tried to change our “arm-none-eabi” cross-compiler packages to also >> build and install libstdc++ but failed in a multitude of ways. The end >> result is always that either the compiler fails to build (e.g. when >> enabling libstdc++ via configure flags) or that the compiler fails to >> find the header files that are included via “#include_next” directives >> (e.g. when building libstdc++ as a separate package). >> >> Could someone with GCC experience give me a hint despite my vague >> problem description? > > libstdc++ itself can probably be cross-built with: > > guix build libstdc++ --target=arm-none-eabi I created a package variant like this: --8<---------------cut here---------------start------------->8--- (define-public libstdc++-arm-none-eabi (let* ((xgcc gcc-arm-none-eabi-6) (libstdc++ (make-libstdc++ xgcc))) (package (inherit libstdc++) (name "libstdc++-arm-none-eabi") (arguments (substitute-keyword-arguments (package-arguments libstdc++) ((#:configure-flags flags) ``("--target=arm-none-eabi" "--disable-libstdcxx-pch" ,(string-append "--with-gxx-include-dir=" (assoc-ref %outputs "out") "/arm-none-eabi/include")))))))) --8<---------------cut here---------------end--------------->8--- And adding it to the inputs for the Axoloti firmware seems to be fine for a while until it fails to find headers with “#include_next”. I’ll try to gather some better error messages. > The problem is getting a cross-g++. I suspect libstdc++ sorta relies on > having a “real” libc, which is why we normally do things like: > > (let ((triplet "arm-linux-gnueabihf")) > (cross-gcc triplet > (cross-binutils triplet) > (cross-libc triplet)))) > > where the final ‘cross-gcc’ has C++ support. I find this confusing because the binary release of the arm-none-eabi cross-compiler includes the libstdc++ headers — and it doesn’t appear to use the GNU libc at all. It includes two libc variants which were both derived from newlib (regular and “nano” configurations). > I’m not sure if it makes sense for the board you’re targeting, but maybe > you could try building with a full-blown cross-gcc like this? I can give it a try but I don’t think it makes sense for the board. It’s not supposed to use anything but the special implementations of newlib-nano. -- Ricardo GPG: BCA6 89B6 3655 3801 C3C6 2150 197A 5888 235F ACAC https://elephly.net