Hi Mathieu, On Sun, 10 Sep 2023 at 11:14, Mathieu Othacehe <othac...@gnu.org> wrote:
> Here is a status of cross-compilation in Guix. For cross-compilation to > work, the build-system needs to support cross-compilation. > > The following build-systems explicitly refuse cross-compiling packages: > > haskell, agda, waf, chicken, rakudo, julia, python, emacs, rebar, cargo, > ruby, renpy, dub, android-ndk, scons, dune, ant, pyproject, maven, asdf, r, > ocaml, node > [...] > --8<---------------cut here---------------start------------->8--- > Total packages: 28076 > > clojure: 13 > qt: 317 > copy: 134 > minetest-mod: 22 > tree-sitter: 35 > raw: 2 > linux-module: 17 > glib-or-gtk: 139 > asdf/source: 794 > go: 632 > cmake: 1278 > minify: 12 > perl: 839 > trivial: 250 > guile: 49 > elm: 30 > font: 101 > gnu: 4178 > asdf/ecl: 753 > asdf/sbcl: 814 > meson: 504 > mozilla: 2 > texlive: 4150 > Cross-compilation OK: 15065 > > ocaml: 61 > haskell: 812 > maven: 2 > chicken: 12 > node: 57 > emacs: 1370 > dune: 289 > android-ndk: 12 > waf: 21 > julia: 300 > pyproject: 433 > r: 2441 > cargo: 3535 > ruby: 597 > rebar: 22 > scons: 15 > rakudo: 22 > agda: 6 > ant: 559 > python: 2488 > Cross-compilation KO: 13054 > --8<---------------cut here---------------end--------------->8--- The build-systems renpy, dub is listed in “refuse“ but not then in Cross-compilation KO. Is it expected? The build-system asdf is listed as refuse but appears in the list Cross-compilation OK. Is it expected? > Over the 28076 packages in Guix, 15065 are part of build-systems with > cross-compilation support and 13054 are part of build-systems without > cross-compilation support. > > Overall 46.5% of our packages will refuse to cross-compile with errors > such as: > > --8<---------------cut here---------------start------------->8--- > mathieu@meije ~$ guix build --target=aarch64-linux-gnu librsvg > guix build: error: gnu/packages/gnome.scm:3500:2: librsvg@2.54.5: build > system `cargo' does not support cross builds > --8<---------------cut here---------------end--------------->8--- > > I'd like to help converge towards the situation where all build-systems > support cross-compilation. Considering Julia, the “julia compiler” support of upstream [1] reads: + ARMv8 (64-bit): Tier 2 + ARMv7 (32-bit): Tier 3 + PowerPC (64-bit): Tier 3 + then stuff about CUDA, ROCM, oneAPI where: + Tier 2: Julia is guaranteed to build from source using the default build options, but may or may not pass all tests. Official binaries are available on a case-by-case basis. + Tier 3: Julia may or may not build. If it does, it is unlikely to pass tests. Binaries may be available in some cases. When they are, they should be considered experimental. Ongoing support is dependent on community efforts. But I guess, these are about native compilation. To my tiny knowledge on that topic, Julia supports some cross-compilation. However, Julia depends on heavy packages as ’suitesparse’ or ’openblas’ and I do not know if we already cross-compile them. Since Julia is used for scientific computations, I do not know if the effort is worth. 1: https://julialang.org/downloads/ > I have CC'ed members of the python, java, ruby, rust, r, haskell and > emacs teams. Any plans adding cross-compilation support to your > build-system, barriers to overcome? About Haskell, from experience, we are already not able to maintain an usable ecosystem for i686, but that’s another story. :-) Well, I do not know if cross-compilation is well-supported by the Haskell compiler GHC. Maybe some resources seems there: https://github.com/input-output-hk/haskell.nix About R, similarly as Julia, since they are mainly used for scientific computations, I do not know if supporting cross-compilation is worth our effort. Cheers, simon