[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
59/61: system: vm: Add arm64 support.
From: |
guix-commits |
Subject: |
59/61: system: vm: Add arm64 support. |
Date: |
Wed, 21 Aug 2019 04:24:58 -0400 (EDT) |
mothacehe pushed a commit to branch wip-cross-system
in repository guix.
commit fbec504a6f9579ead4ec4dbbcc560940c03d50d6
Author: Mathieu Othacehe <address@hidden>
Date: Tue Aug 20 18:00:40 2019 +0200
system: vm: Add arm64 support.
* gnu/build/vm.scm (load-in-linux-vm): Add target-arm64? argument and use it
to pass correct arguments to qemu.
* gnu/system/vm.scm (expression->derivation-in-linux-vm): Pass the new
target-arm64? argument added above. Do not add ESP partition on all ARM
targets. Do not pass grub-efi package to initialize-hard-disk on ARM
targets.
---
gnu/build/vm.scm | 22 +++++++++++++++++-----
gnu/system/vm.scm | 17 +++++++++++------
2 files changed, 28 insertions(+), 11 deletions(-)
diff --git a/gnu/build/vm.scm b/gnu/build/vm.scm
index a5d9fef..6a1c164 100644
--- a/gnu/build/vm.scm
+++ b/gnu/build/vm.scm
@@ -82,6 +82,7 @@
make-disk-image?
single-file-output?
target-arm32?
+ target-arm64?
(disk-image-size (* 100 (expt 2 20)))
(disk-image-format "qcow2")
(references-graphs '()))
@@ -97,16 +98,27 @@ access it via /dev/hda.
REFERENCES-GRAPHS can specify a list of reference-graph files as produced by
the #:references-graphs parameter of 'derivation'."
+ (define target-arm? (or target-arm32? target-arm64?))
+
(define arch-specific-flags
`(;; On ARM, a machine has to be specified. Use "virt" machine to avoid
;; hardware limits imposed by other machines.
- ,@(if target-arm32? '("-M" "virt") '())
+ ,@(if target-arm?
+ '("-M" "virt")
+ '())
+
+ ;; On ARM64, we have to specify the CPU. "max" behaves as "host" when
+ ;; KVM is enabled, and like a system CPU with the maximum possible
+ ;; feature set otherwise.
+ ,@(if target-arm64?
+ '("-cpu" "max")
+ '())
;; Only enable kvm if we see /dev/kvm exists. This allows users without
;; hardware virtualization to still use these commands. KVM support is
- ;; still buggy on some ARM32 boards. Do not use it even if available.
+ ;; still buggy on some ARM boards. Do not use it even if available.
,@(if (and (file-exists? "/dev/kvm")
- (not target-arm32?))
+ (not target-arm?))
'("-enable-kvm")
'())
@@ -117,11 +129,11 @@ the #:references-graphs parameter of 'derivation'."
;; The serial port name differs between emulated
;; architectures/machines.
" console="
- (if target-arm32? "ttyAMA0" "ttyS0"))
+ (if target-arm? "ttyAMA0" "ttyS0"))
;; NIC is not supported on ARM "virt" machine, so use a user mode
;; network stack instead.
- ,@(if target-arm32?
+ ,@(if target-arm?
'("-device" "virtio-net-pci,netdev=mynet"
"-netdev" "user,id=mynet")
'("-net" "nic,model=virtio"))))
diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm
index ac6e4de..07cee2d 100644
--- a/gnu/system/vm.scm
+++ b/gnu/system/vm.scm
@@ -235,10 +235,12 @@ made available under the /xchg CIFS share."
#:memory-size #$memory-size
#:make-disk-image? #$make-disk-image?
#:single-file-output? #$single-file-output?
- ;; FIXME: ‘target-arm32?’ may not operate on
- ;; the right system/target values. Rewrite
+ ;; FIXME: ‘target-arm32?’ and
+ ;; ‘target-arm64?’ may not operate on the
+ ;; right system/target values. Rewrite
;; using ‘let-system’ when available.
#:target-arm32? #$(target-arm32?)
+ #:target-arm64? #$(target-arm64?)
#:disk-image-format #$disk-image-format
#:disk-image-size size
#:references-graphs graphs))))))
@@ -452,10 +454,10 @@ system."
;; bootloaders if we are not targeting ARM because UEFI
;; support in U-Boot is experimental.
;;
- ;; FIXME: ‘target-arm32?’ may be not operate on the right
+ ;; FIXME: ‘target-arm?’ may be not operate on the right
;; system/target values. Rewrite using ‘let-system’ when
;; available.
- (if #$(target-arm32?)
+ (if #$(target-arm?)
'()
(list (partition
;; The standalone grub image is about 10MiB,
but
@@ -466,10 +468,13 @@ system."
;; when mounting. The actual FAT-ness is based
;; on file system size (16 in this case).
(file-system "vfat")
- (flags '(esp))))))))
+ (flags '(esp)))))))
+ (grub-efi #$@(if (target-arm?)
+ '(#f)
+ #~(#$grub-efi))))
(initialize-hard-disk "/dev/vda"
#:partitions partitions
- #:grub-efi #$grub-efi
+ #:grub-efi grub-efi
#:bootloader-package
#$(bootloader-package bootloader)
#:bootcfg #$bootcfg-drv
- 26/61: gnu: tcsh: Fix cross-compilation., (continued)
- 26/61: gnu: tcsh: Fix cross-compilation., guix-commits, 2019/08/21
- 32/61: gnu: boost: Fix cross-compilation., guix-commits, 2019/08/21
- 30/61: gnu: icu4c: Fix cross-compilation., guix-commits, 2019/08/21
- 41/61: gnu: doxygen: Fix cross-compilation., guix-commits, 2019/08/21
- 42/61: gnu: guile-sqlite3: Fix cross-compilation., guix-commits, 2019/08/21
- 48/61: gnu: guile-xcb: Fix cross-compilation., guix-commits, 2019/08/21
- 51/61: gnu: console-setup: Fix cross-compilation., guix-commits, 2019/08/21
- 53/61: gnu: grub: Fix cross-compilation., guix-commits, 2019/08/21
- 43/61: gnu: guile-gcrypt: Fix cross-compilation., guix-commits, 2019/08/21
- 56/61: gexp: Use cross extensions when cross-compiling., guix-commits, 2019/08/21
- 59/61: system: vm: Add arm64 support.,
guix-commits <=
- 61/61: scripts: system: Add --target option., guix-commits, 2019/08/21
- 25/61: gnu: libarchive: Fix cross-compilation., guix-commits, 2019/08/21
- 29/61: gnu: alsa-utils: Fix cross-compilation., guix-commits, 2019/08/21
- 21/61: gnu: mit-krb5: Fix cross-compilation., guix-commits, 2019/08/21
- 20/61: gnu: libsamplerate: Fix aarch64 cross-compilation., guix-commits, 2019/08/21
- 23/61: gnu: help2man: Fix cross-compilation., guix-commits, 2019/08/21
- 33/61: gnu: eudev: Fix cross-compilation., guix-commits, 2019/08/21
- 35/61: gnu: nghttp2: Fix cross-compilation., guix-commits, 2019/08/21
- 36/61: gnu: openldap: Fix cross-compilation., guix-commits, 2019/08/21
- 37/61: gnu: swig: Fix cross-compilation., guix-commits, 2019/08/21