From: Mathieu Othacehe <othacehe@gnu.org>
To: guix-devel <guix-devel@gnu.org>
Cc: andrew@trop.in, bjoern.hoefling@bjoernhoefling.de,
guix@cbaines.net, efraim@flashner.co.il, julien@lepiller.eu,
cox.katherine.e+guix@gmail.com, lars@6xq.net,
liliana.prikler@gmail.com, rekado@elephly.net, jgart@dismail.de
Subject: Cross compilation status
Date: Sun, 10 Sep 2023 11:14:29 +0200 [thread overview]
Message-ID: <87lede2xvu.fsf@gnu.org> (raw)
[-- Attachment #1: Type: text/plain, Size: 2570 bytes --]
Hello,
In order for Guix to become an alternative to tools such as Yocto and
Buildroot, having most or all our packages cross-compiling is a
prerequisite.
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
while the rest of the build-systems do accept cross-compiling packages:
clojure, qt, copy, minetest-mod, tree-sitter, raw, linux-module, glib-or-gtk, asdf/source, go, cmake, minify, perl, trivial, guile, elm, font, gnu, asdf/ecl, asdf/sbcl, meson, mozilla, texlive
It does not mean that all the packages relying on those build-systems
will cross-compile OK. It just means that we will at least try to build
those.
In term of numbers, the attached script produces the following output:
--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---
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.
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?
Thanks,
Mathieu
[-- Attachment #2: cross.scm --]
[-- Type: application/octet-stream, Size: 1560 bytes --]
(use-modules (guix) (gnu))
(define bs-cross-ko
'(haskell
agda
waf
chicken
rakudo
julia
python
emacs
rebar
cargo
ruby
renpy
dub
android-ndk
scons
dune
ant
pyproject
maven
asdf
r
ocaml
node))
(define all-packages
(fold-packages (lambda (package result)
;; Ignore deprecated packages.
(if (package-superseded package)
result
(cons package result)))
'()
#:select? (const #t))) ;include hidden packages
(define %bs (make-hash-table))
(define cross-ok 0)
(define cross-ko 0)
(define total-packages 0)
(for-each (lambda (p)
(let* ((s (build-system-name
(package-build-system p)))
(ref (or (hash-ref %bs s) 1)))
(hash-set! %bs s (1+ ref))
(set! total-packages (1+ total-packages))))
all-packages)
(format #t "Total packages: ~a~%~%~%" total-packages)
(hash-for-each (lambda (k v)
(unless (memq k bs-cross-ko)
(set! cross-ok (+ cross-ok v))
(format #t "~a: ~a~%" k v)))
%bs)
(format #t "Cross-compilation OK: ~a~%~%~%~%~%" cross-ok)
(hash-for-each (lambda (k v)
(when (memq k bs-cross-ko)
(set! cross-ko (+ cross-ko v))
(format #t "~a: ~a~%" k v)))
%bs)
(format #t "Cross-compilation KO: ~a~%" cross-ko)
next reply other threads:[~2023-09-10 9:15 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-10 9:14 Mathieu Othacehe [this message]
2023-09-10 9:20 ` Cross compilation status Efraim Flashner
2023-09-10 9:27 ` Efraim Flashner
2023-09-10 12:55 ` Maxim Cournoyer
2023-09-10 14:59 ` Liliana Marie Prikler
2023-09-18 14:17 ` Efraim Flashner
2023-09-18 17:01 ` Liliana Marie Prikler
2023-09-11 16:19 ` Simon Tournier
2023-09-11 17:10 ` Liliana Marie Prikler
2023-09-12 15:05 ` Guillaume Le Vaillant
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=87lede2xvu.fsf@gnu.org \
--to=othacehe@gnu.org \
--cc=andrew@trop.in \
--cc=bjoern.hoefling@bjoernhoefling.de \
--cc=cox.katherine.e+guix@gmail.com \
--cc=efraim@flashner.co.il \
--cc=guix-devel@gnu.org \
--cc=guix@cbaines.net \
--cc=jgart@dismail.de \
--cc=julien@lepiller.eu \
--cc=lars@6xq.net \
--cc=liliana.prikler@gmail.com \
--cc=rekado@elephly.net \
/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).