unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
* [bug#41074] [PATCH] gnu: qemu-minimal: Only build for the host's architecture.
@ 2020-05-04 10:25 Efraim Flashner
  2020-05-05 16:10 ` Leo Famulari
  2020-05-08 10:01 ` Mathieu Othacehe
  0 siblings, 2 replies; 5+ messages in thread
From: Efraim Flashner @ 2020-05-04 10:25 UTC (permalink / raw)
  To: 41074; +Cc: Efraim Flashner

* gnu/packages/virtualization.scm (qemu-minimal)[arguments]: Adjust
configure-flags so that each architecture only builds for its native
architectures.
[synopsis]: Adjust to clarify it's only for the host's architecture.
---

I tested this with building grub and a vm-image and both seem to have
worked without any regressions.

---
 gnu/packages/virtualization.scm | 31 +++++++++++++++++++++++++------
 1 file changed, 25 insertions(+), 6 deletions(-)

diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm
index b9ac18820f..e5d678e685 100644
--- a/gnu/packages/virtualization.scm
+++ b/gnu/packages/virtualization.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2020 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015, 2016, 2017, 2018 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2016, 2017, 2018. 2019 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2018. 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2017 Andy Patterson <ajpatter@uwaterloo.ca>
@@ -99,7 +99,8 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix utils)
-  #:use-module (srfi srfi-1))
+  #:use-module (srfi srfi-1)
+  #:use-module (ice-9 match))
 
 (define (qemu-patch commit file-name sha256)
   "Return an origin for COMMIT."
@@ -274,15 +275,33 @@ server and embedded PowerPC, and S390 guests.")
     (supported-systems (delete "mips64el-linux" %supported-systems))))
 
 (define-public qemu-minimal
-  ;; QEMU without GUI support.
+  ;; QEMU without GUI support, only supporting the host's architecture
   (package (inherit qemu)
     (name "qemu-minimal")
-    (synopsis "Machine emulator and virtualizer (without GUI)")
+    (synopsis
+     "Machine emulator and virtualizer (without GUI) for the host architecture")
     (arguments
      (substitute-keyword-arguments (package-arguments qemu)
        ((#:configure-flags _ '(list))
-        ;; Restrict to the targets supported by Guix.
-        ''("--target-list=i386-softmmu,x86_64-softmmu,mips64el-softmmu,arm-softmmu,aarch64-softmmu"))))
+        ;; Restrict to the host's architecture.
+        `(,@(match (or (%current-system)
+                       (%current-target-system))
+             ("x86-64-linux"
+              ''("--target-list=i386-softmmu,x86_64-softmmu"))
+             ("i686-linux"
+              ''("--target-list=i386-softmmu"))
+             ("mips64el-linux"
+              ''("--target-list=mips64el-softmmu"))
+             ("aarch64-linux"
+              ''("--target-list=arm-softmmu,aarch64-softmmu"))
+             ("armhf-linux"
+              ''("--target-list=arm-softmmu"))
+             ((or "powerpc64-linux" "powerpc64le-linux")
+              ''("--target-list=ppc-softmmu,ppc64-softmmu"))
+             ("powerpc-linux"
+              ''("--target-list=ppc-softmmu"))
+             (_ ; An empty list actually builds all the targets.
+              ''()))))))
 
     ;; Remove dependencies on optional libraries, notably GUI libraries.
     (native-inputs (fold alist-delete (package-native-inputs qemu)
-- 
2.26.2





^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [bug#41074] [PATCH] gnu: qemu-minimal: Only build for the host's architecture.
  2020-05-04 10:25 [bug#41074] [PATCH] gnu: qemu-minimal: Only build for the host's architecture Efraim Flashner
@ 2020-05-05 16:10 ` Leo Famulari
  2020-05-06  7:16   ` Efraim Flashner
  2020-05-08 10:01 ` Mathieu Othacehe
  1 sibling, 1 reply; 5+ messages in thread
From: Leo Famulari @ 2020-05-05 16:10 UTC (permalink / raw)
  To: Efraim Flashner; +Cc: 41074

On Mon, May 04, 2020 at 01:25:15PM +0300, Efraim Flashner wrote:
> * gnu/packages/virtualization.scm (qemu-minimal)[arguments]: Adjust
> configure-flags so that each architecture only builds for its native
> architectures.
> [synopsis]: Adjust to clarify it's only for the host's architecture.

I admit I don't understand the impact or motivation of this change. What
will be different from what currently happens?




^ permalink raw reply	[flat|nested] 5+ messages in thread

* [bug#41074] [PATCH] gnu: qemu-minimal: Only build for the host's architecture.
  2020-05-05 16:10 ` Leo Famulari
@ 2020-05-06  7:16   ` Efraim Flashner
  0 siblings, 0 replies; 5+ messages in thread
From: Efraim Flashner @ 2020-05-06  7:16 UTC (permalink / raw)
  To: Leo Famulari; +Cc: 41074

[-- Attachment #1: Type: text/plain, Size: 1841 bytes --]

On Tue, May 05, 2020 at 12:10:55PM -0400, Leo Famulari wrote:
> On Mon, May 04, 2020 at 01:25:15PM +0300, Efraim Flashner wrote:
> > * gnu/packages/virtualization.scm (qemu-minimal)[arguments]: Adjust
> > configure-flags so that each architecture only builds for its native
> > architectures.
> > [synopsis]: Adjust to clarify it's only for the host's architecture.
> 
> I admit I don't understand the impact or motivation of this change. What
> will be different from what currently happens?

Currently every architecutre building qemu-minimal builds targets for
each of the architectures we support, x86_64, i686, mips64el, armhf,
aarch64. With this change armhf only builds for armhf, x86_64 builds for
x86_64 and i686, etc. Looking through the code with a 'git grep
qemu-minimal', qemu-minimal is only used for tests for grub and system
tests and for (gnu system vm) and on core-updates a bit more similar
places. Basically it's only used for running tests and creating VMs,
which means it only needs to target the host architecture. Every other
place where we provide support for other architectures, like the binfmt
service, uses full qemu by default.

Overall it doesn't save as much space as I'd hoped, each target
architecture only costs about 16MiB, but it does save a fair amount of
time building each target architecture. Currently qemu-minimal is
303MiB, dropping the 3 architectures for x86_64 would drop it down to
~258MiB. Some more work would need to be done to trim the share/qemu
folder to only have the relevant bits. Currently there's about 200MiB of
edk2 stuff for arm/aarch64.

-- 
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 --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [bug#41074] [PATCH] gnu: qemu-minimal: Only build for the host's architecture.
  2020-05-04 10:25 [bug#41074] [PATCH] gnu: qemu-minimal: Only build for the host's architecture Efraim Flashner
  2020-05-05 16:10 ` Leo Famulari
@ 2020-05-08 10:01 ` Mathieu Othacehe
  2020-05-14 14:24   ` bug#41074: " Efraim Flashner
  1 sibling, 1 reply; 5+ messages in thread
From: Mathieu Othacehe @ 2020-05-08 10:01 UTC (permalink / raw)
  To: Efraim Flashner; +Cc: 41074


Hello Efraim,

> +        `(,@(match (or (%current-system)
> +                       (%current-target-system))

If cross-compiling for aarch64, %current-system will be #f and
%current-target-system will be "aarch64-linux-gnu" which does not match
anything below.

I think "system->linux-architecture" could help you here. Otherwise,
this seems fine.

Thanks,

Mathieu




^ permalink raw reply	[flat|nested] 5+ messages in thread

* bug#41074: [PATCH] gnu: qemu-minimal: Only build for the host's architecture.
  2020-05-08 10:01 ` Mathieu Othacehe
@ 2020-05-14 14:24   ` Efraim Flashner
  0 siblings, 0 replies; 5+ messages in thread
From: Efraim Flashner @ 2020-05-14 14:24 UTC (permalink / raw)
  To: Mathieu Othacehe; +Cc: 41074-done

[-- Attachment #1: Type: text/plain, Size: 783 bytes --]

On Fri, May 08, 2020 at 12:01:22PM +0200, Mathieu Othacehe wrote:
> 
> Hello Efraim,
> 
> > +        `(,@(match (or (%current-system)
> > +                       (%current-target-system))
> 
> If cross-compiling for aarch64, %current-system will be #f and
> %current-target-system will be "aarch64-linux-gnu" which does not match
> anything below.
> 
> I think "system->linux-architecture" could help you here. Otherwise,
> this seems fine.
> 

Thanks for the tip. I integrated the system->linux-architecture code
into qemu-minimal and it works nicely.

-- 
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 --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2020-05-14 14:52 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-05-04 10:25 [bug#41074] [PATCH] gnu: qemu-minimal: Only build for the host's architecture Efraim Flashner
2020-05-05 16:10 ` Leo Famulari
2020-05-06  7:16   ` Efraim Flashner
2020-05-08 10:01 ` Mathieu Othacehe
2020-05-14 14:24   ` bug#41074: " Efraim Flashner

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).