all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Efraim Flashner <efraim@flashner.co.il>
To: 70913@debbugs.gnu.org
Cc: Efraim Flashner <efraim@flashner.co.il>,
	Efraim Flashner <efraim@flashner.co.il>,
	Vagrant Cascadian <vagrant@debian.org>
Subject: [bug#70913] [PATCH 03/11] gnu: Add ovmf-x86-64.
Date: Mon, 13 May 2024 11:21:52 +0300	[thread overview]
Message-ID: <95a7a669b300c7f80a703e08c4027ed56fee47d0.1715588342.git.efraim@flashner.co.il> (raw)
In-Reply-To: <cover.1715588342.git.efraim@flashner.co.il>

* gnu/packages/firmware.scm (make-ovmf-firmware): New procedure.
(ovmf-x86-64): New variable.

Change-Id: I283065577b5507f3b7d695eaa67a6d248174bcf5
---
 gnu/packages/firmware.scm | 133 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 133 insertions(+)

diff --git a/gnu/packages/firmware.scm b/gnu/packages/firmware.scm
index f3bb51bcb1..40ca541437 100644
--- a/gnu/packages/firmware.scm
+++ b/gnu/packages/firmware.scm
@@ -869,6 +869,139 @@ (define-public edk2-tools
 @end itemize")
     (license license:bsd-2)))
 
+(define* (make-ovmf-firmware arch)
+  (let ((toolchain "GCC")
+        (arch-string (match arch
+                           ("x86_64" "X64")
+                           ("i686" "IA32")
+                           ("aarch64" "AARCH64")
+                           ("armhf" "ARM")
+                           ("riscv64" "RISCV64")
+                           ("loongarch64" "LOONGARCH64")
+                           (_ "NONE"))))
+    (package
+      (inherit edk2-tools)
+      (name (string-append "ovmf-" arch))
+      (arguments
+       (list
+        #:tests? #f                     ; No check target.
+        #:target #f                     ; Package produces firmware.
+        #:modules '((guix build gnu-build-system)
+                    (guix build utils)
+                    (ice-9 match))
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-after 'unpack 'patch-source
+              (lambda _
+                (substitute* "edksetup.sh"
+                  (("^return \\$\\?")
+                   "exit $?"))))
+            (add-before 'configure 'set-env
+              (lambda _
+                (unless (string-prefix? #$arch #$(%current-system))
+                  (setenv (string-append #$toolchain "_X64_PREFIX")
+                          "x86_64-linux-gnu-")
+                  (setenv (string-append #$toolchain "_IA32_PREFIX")
+                          "i686-linux-gnu-")
+                  (setenv (string-append #$toolchain "_AARCH64_PREFIX")
+                          "aarch64-linux-gnu-")
+                  (setenv (string-append #$toolchain "_ARM_PREFIX")
+                          "arm-linux-gnueabihf-")
+                  (setenv (string-append #$toolchain "_RISCV64_PREFIX")
+                          "riscv64-linux-gnu-")
+                  (setenv (string-append #$toolchain "_LOONGARCH64_PREFIX")
+                          "loongarch64-linux-gnu-"))))
+            (replace 'configure
+              (lambda _
+                (let* ((cwd (getcwd))
+                       (tools (string-append cwd "/BaseTools"))
+                       (bin (string-append tools "/BinWrappers/PosixLike")))
+                  (setenv "WORKSPACE" cwd)
+                  (setenv "EDK_TOOLS_PATH" tools)
+                  (setenv "PYTHON3_ENABLE" "TRUE")
+                  (setenv "PYTHON_COMMAND" "python3")
+                  (setenv "PATH" (string-append (getenv "PATH") ":" bin))
+                  (invoke "bash" "edksetup.sh")
+                  (substitute* "Conf/target.txt"
+                    (("^TARGET[ ]*=.*$") "TARGET = RELEASE\n")
+                    (("^TOOL_CHAIN_TAG[ ]*=.*$")
+                     (string-append "TOOL_CHAIN_TAG = " #$toolchain "\n"))
+                    (("^TARGET_ARCH[ ]*=.*$")
+                     (string-append "TARGET_ARCH = " #$arch-string
+                                    "\n"))
+                    (("^MAX_CONCURRENT_THREAD_NUMBER[ ]*=.*$")
+                     (format #f "MAX_CONCURRENT_THREAD_NUMBER = ~a~%"
+                             (number->string (parallel-job-count)))))
+                  ;; Build build support.
+                  (setenv "CC" "gcc")
+                  (invoke "make" "-C" tools))))
+            (replace 'build
+              (lambda _
+                (invoke "build" "-a" #$arch-string "-t" #$toolchain "-p"
+                        (match #$arch
+                               ("x86_64"
+                                "OvmfPkg/OvmfPkgX64.dsc")
+                               ("i686"
+                                "OvmfPkg/OvmfPkgIa32.dsc")
+                               ((or "aarch64" "armhf")
+                                "ArmVirtPkg/ArmVirtQemu.dsc")
+                               ("riscv64"
+                                "OvmfPkg/RiscVVirt/RiscVVirtQemu.dsc")
+                               (_ #t)))))
+            (add-before 'install 'install-efi-shell
+              (lambda _
+                (let ((fmw (string-append #$output "/share/firmware")))
+                  (mkdir-p fmw)
+                  (for-each
+                    (lambda (file)
+                      (copy-file file
+                                 (string-append fmw "/Shell_"
+                                                (string-downcase #$arch-string)
+                                                ".efi")))
+                    (find-files "Build" "Shell\\.efi"))))))))
+      (native-inputs
+       (append
+         (list acpica
+               nasm
+               perl
+               python-3
+               (list util-linux "lib"))
+         (if (not (string-prefix? arch (%current-system)))
+             (if (string=? arch "armhf")
+                 (list (cross-gcc "arm-linux-gnueabihf")
+                       (cross-binutils "arm-linux-gnueabihf"))
+                 (list (cross-gcc (string-append arch "-linux-gnu"))
+                       (cross-binutils (string-append arch "-linux-gnu"))))
+             '())))
+      (synopsis "UEFI firmware for QEMU")
+      (description "OVMF is an EDK II based project to enable UEFI support for
+Virtual Machines.  OVMF contains a sample UEFI firmware for QEMU and KVM.")
+      (license (list license:expat
+                     license:bsd-2 license:bsd-3 license:bsd-4)))))
+
+(define-public ovmf-x86-64
+  (let ((base (make-ovmf-firmware "x86_64")))
+    (package
+      (inherit base)
+      (name "ovmf-x86-64")
+      (arguments
+        (substitute-keyword-arguments (package-arguments base)
+          ((#:phases phases)
+           #~(modify-phases #$phases
+               (replace 'install
+                 (lambda _
+                   (let ((fmw (string-append #$output "/share/firmware")))
+                     (mkdir-p fmw)
+                     (for-each
+                       (lambda (file)
+                         (copy-file
+                           (string-append "Build/OvmfX64/RELEASE_GCC"
+                                          "/FV/" file ".fd")
+                           (string-append fmw "/" (string-downcase file) "_x64.bin")))
+                       (list "OVMF"
+                             "OVMF_CODE"
+                             "OVMF_VARS"))))))))))))
+
 (define-public ovmf
   (let ((toolchain-ver "GCC5"))
     (package
-- 
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





  parent reply	other threads:[~2024-05-13  8:26 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-05-13  8:19 [bug#70913] [PATCH 00/11] Combine edk2-tools and ovmf firmware Efraim Flashner
2024-05-13  8:21 ` [bug#70913] [PATCH 01/11] gnu: edk2-tools: Update to 202402 Efraim Flashner
2024-05-13  8:21 ` [bug#70913] [PATCH 02/11] gnu: edk2-tools: Enable submodules Efraim Flashner
2024-05-13  8:21 ` Efraim Flashner [this message]
2024-05-13  8:21 ` [bug#70913] [PATCH 04/11] gnu: Add ovmf-i686 Efraim Flashner
2024-05-13  8:21 ` [bug#70913] [PATCH 05/11] gnu: ovmf-aarch64: Update to 202402 Efraim Flashner
2024-05-13  8:21 ` [bug#70913] [PATCH 06/11] gnu: ovmf-arm: " Efraim Flashner
2024-05-13  8:21 ` [bug#70913] [PATCH 07/11] gnu: ovmf-riscv64: " Efraim Flashner
2024-05-13  8:21 ` [bug#70913] [PATCH 08/11] gnu: Use new ovmf firmware packages Efraim Flashner
2024-05-13  8:21 ` [bug#70913] [PATCH 09/11] tests: install: Add support for aarch64 UEFI tests Efraim Flashner
2024-05-13  8:21 ` [bug#70913] [PATCH 10/11] gnu: ovmf: Deprecate in favor of ovmf-x86-64 Efraim Flashner
2024-05-13  8:22 ` [bug#70913] [PATCH 11/11] tests: install: Use a default qemu machine for arm architectures Efraim Flashner
     [not found] ` <handler.70913.B.17155884115327.ack@debbugs.gnu.org>
2024-05-27  8:44   ` bug#70913: Acknowledgement ([PATCH 00/11] Combine edk2-tools and ovmf firmware) Efraim Flashner

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

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=95a7a669b300c7f80a703e08c4027ed56fee47d0.1715588342.git.efraim@flashner.co.il \
    --to=efraim@flashner.co.il \
    --cc=70913@debbugs.gnu.org \
    --cc=vagrant@debian.org \
    /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 external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.