guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 3/5] gnu: Add ovmf.


From: Marius Bakke
Subject: Re: [PATCH 3/5] gnu: Add ovmf.
Date: Fri, 10 Feb 2017 01:15:55 +0100
User-agent: Notmuch/0.23.5 (https://notmuchmail.org) Emacs/25.1.1 (x86_64-unknown-linux-gnu)

David Craven <address@hidden> writes:

> * gnu/packages/grub.scm (ovmf): New variable.

I would place this too in firmware.scm.

> ---
>  gnu/packages/grub.scm | 82 
> +++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 82 insertions(+)
>
> diff --git a/gnu/packages/grub.scm b/gnu/packages/grub.scm
> index a775e213c..4da01ceb9 100644
> --- a/gnu/packages/grub.scm
> +++ b/gnu/packages/grub.scm
> @@ -22,11 +22,14 @@
>  
>  (define-module (gnu packages grub)
>    #:use-module (guix download)
> +  #:use-module (guix git-download)
>    #:use-module (guix packages)
>    #:use-module (guix utils)
>    #:use-module ((guix licenses) #:prefix license:)
>    #:use-module (guix build-system gnu)
>    #:use-module (gnu packages)
> +  #:use-module (gnu packages admin)
> +  #:use-module (gnu packages assembly)
>    #:use-module (gnu packages flex)
>    #:use-module (gnu packages disk)
>    #:use-module (gnu packages bison)
> @@ -188,3 +191,82 @@ SeaBIOS can run in an emulator or it can run natively on 
> X86 hardware with the
>  use of coreboot.")
>      ;; Dual licensed.
>      (license (list license:gpl3+ license:lgpl3+))))
> +
> +;; OVMF is part of the edk2 source tree.
> +(define edk2-commit "13a50a6fe1dcfa6600c38456ee24e0f9ecf51b5f")
> +(define edk2-version (git-version "20170116" "1" edk2-commit))
> +(define edk2-origin
> +  (origin
> +    (method git-fetch)
> +    (uri (git-reference
> +          (url "https://github.com/tianocore/edk2";)
> +          (commit edk2-commit)))
> +    (file-name (git-file-name "edk2" edk2-version))
> +    (sha256
> +     (base32
> +      "1gy2332kdqk8bjzpcsripx10896rbvgl0ic7r344kmpiwdgm948b"))))
> +
> +(define-public ovmf
> +  (package
> +    (name "ovmf")
> +    (version edk2-version)
> +    (source edk2-origin)
> +    (build-system gnu-build-system)
> +    (native-inputs
> +     `(("acpica" ,acpica)
> +       ("nasm" ,nasm)
> +       ("python-2" ,python-2)
> +       ("util-linux" ,util-linux)))
> +    (arguments
> +     `(#:tests? #f ; No check target.
> +       #:phases
> +       (modify-phases %standard-phases
> +         (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 "PATH" (string-append (getenv "PATH") ":" bin))
> +               (system* "bash" "edksetup.sh" "BaseTools")
> +               (substitute* "Conf/target.txt"
> +                 (("^TARGET[ ]*=.*$") "TARGET = RELEASE\n")
> +                 (("^TOOL_CHAIN_TAG[ ]*=.*$") "TOOL_CHAIN_TAG = GCC49\n")
> +                 (("^MAX_CONCURRENT_THREAD_NUMBER[ ]*=.*$")
> +                  (format #f "MAX_CONCURRENT_THREAD_NUMBER = ~a~%"
> +                          (number->string (parallel-job-count)))))
> +               ;; Build build support.
> +               (setenv "BUILD_CC" "gcc")
> +               (zero? (system* "make" "-C" (string-append tools 
> "/Source/C"))))))
> +         (add-after 'build 'build-ia32

I would simply (replace 'build ...) here, instead of deleting it and
using add-after.

> +           (lambda _
> +             (substitute* "Conf/target.txt"
> +               (("^TARGET_ARCH[ ]*=.*$") "TARGET_ARCH = IA32\n")
> +               (("^ACTIVE_PLATFORM[ ]*=.*$")
> +                "ACTIVE_PLATFORM = OvmfPkg/OvmfPkgIa32.dsc\n"))
> +             (zero? (system* "build"))))
> +         (add-after 'build 'build-x64
> +           (lambda _
> +             (substitute* "Conf/target.txt"
> +               (("^TARGET_ARCH[ ]*=.*$") "TARGET_ARCH = X64\n")
> +               (("^ACTIVE_PLATFORM[ ]*=.*$")
> +                "ACTIVE_PLATFORM = OvmfPkg/OvmfPkgX64.dsc\n"))
> +             (zero? (system* "build"))))
> +         (delete 'build)
> +         (replace 'install
> +           (lambda* (#:key outputs #:allow-other-keys)
> +             (let* ((out (assoc-ref outputs "out"))
> +                    (fmw (string-append out "/share/firmware")))
> +               (mkdir-p fmw)
> +               (copy-file "Build/OvmfIa32/RELEASE_GCC49/FV/OVMF.fd"
> +                          (string-append fmw "/ovmf_ia32.bin"))
> +               (copy-file "Build/OvmfX64/RELEASE_GCC49/FV/OVMF.fd"
> +                          (string-append fmw "/ovmf_x64.bin")))
> +             #t)))))
> +    (supported-systems '("x86_64-linux" "i686-linux"))

Is it not possible to build this firmware on (not for) other archs?

> +    (home-page "http://www.tianocore.org";)
> +    (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 license:expat)))

There appears to also be a good number of bsd-{2,3,4} licensed files in
this distribution. I've tested both this and seabios with qemu, great
work! :-)

> -- 
> 2.11.0

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]