[OE-core] [PATCH 1/3] recipes-bsp: Add gummiboot and gnu-efi recipes
Saul Wold
sgw at linux.intel.com
Sun Mar 9 08:00:13 UTC 2014
On 03/06/2014 10:15 AM, Stefan Stanacar wrote:
> gummiboot is is a simple UEFI boot manager (not a boot loader ;-) )
>
> These recipes are imported from meta-intel with these changes:
> - drop PR and update configure options
> - gummiboot was upgraded to latest version
>
> A couple of notes:
> - If you wish you can install the gummiboot package on the target and
> use 'gummiboot install' to add the payload to the ESP (see gummiboot --help,
> just make sure the ESP partition has the boot flag on as gummiboot won't accept it
> otherwise). However the point of this recipe is to be used by bootimg.bbclass and
> generate images with gummiboot instead of grub-efi.
> - You need a kernel which has CONFIG_EFI_STUB=y at least
> - The default linux-yocto kernel config does not enable that, easiest way
> to enable is to build with KERNEL_FEATURES_append = " cfg/efi-ext" in local.conf
>
> Signed-off-by: Stefan Stanacar <stefanx.stanacar at intel.com>
> ---
> .../gnu-efi/gnu-efi/parallel-make-archives.patch | 48 ++++++++++++++++++++++
> .../gnu-efi/gnu-efi/parallel-make.patch | 22 ++++++++++
> meta/recipes-bsp/gnu-efi/gnu-efi_3.0u.bb | 33 +++++++++++++++
> meta/recipes-bsp/gummiboot/gummiboot_git.bb | 25 +++++++++++
> 4 files changed, 128 insertions(+)
> create mode 100644 meta/recipes-bsp/gnu-efi/gnu-efi/parallel-make-archives.patch
> create mode 100644 meta/recipes-bsp/gnu-efi/gnu-efi/parallel-make.patch
> create mode 100644 meta/recipes-bsp/gnu-efi/gnu-efi_3.0u.bb
> create mode 100644 meta/recipes-bsp/gummiboot/gummiboot_git.bb
>
> diff --git a/meta/recipes-bsp/gnu-efi/gnu-efi/parallel-make-archives.patch b/meta/recipes-bsp/gnu-efi/gnu-efi/parallel-make-archives.patch
> new file mode 100644
> index 0000000..e5b47c1
> --- /dev/null
> +++ b/meta/recipes-bsp/gnu-efi/gnu-efi/parallel-make-archives.patch
> @@ -0,0 +1,48 @@
> +Fix parallel make failure for archives
> +
> +Upstream-Status: Pending
> +
> +The lib and gnuefi makefiles were using the lib.a() form which compiles
> +and ar's as a pair instead of compiling all and then ar'ing which can
> +parallelize better. This was resulting in build failures on larger values
> +of -j.
> +
> +See http://www.chemie.fu-berlin.de/chemnet/use/info/make/make_toc.html#TOC105
> +for details.
> +
> +Signed-off-by: Saul Wold <sgw at linux.intel.com>
> +Signed-off-by: Darren Hart <dvhart at linux.intel.com>
> +---
> +---
> + gnuefi/Makefile | 3 ++-
> + lib/Makefile | 3 ++-
> + 2 files changed, 4 insertions(+), 2 deletions(-)
> +
> +Index: gnu-efi-3.0/lib/Makefile
> +===================================================================
> +--- gnu-efi-3.0.orig/lib/Makefile
> ++++ gnu-efi-3.0/lib/Makefile
> +@@ -66,7 +66,8 @@ all: libsubdirs libefi.a
> + libsubdirs:
> + for sdir in $(SUBDIRS); do mkdir -p $$sdir; done
> +
> +-libefi.a: $(patsubst %,libefi.a(%),$(OBJS))
> ++libefi.a: $(OBJS)
> ++ $(AR) rv $@ $(OBJS)
> +
> + clean:
> + rm -f libefi.a *~ $(OBJS) */*.o
> +Index: gnu-efi-3.0/gnuefi/Makefile
> +===================================================================
> +--- gnu-efi-3.0.orig/gnuefi/Makefile
> ++++ gnu-efi-3.0/gnuefi/Makefile
> +@@ -51,7 +51,8 @@ TARGETS = crt0-efi-$(ARCH).o libgnuefi.a
> +
> + all: $(TARGETS)
> +
> +-libgnuefi.a: $(patsubst %,libgnuefi.a(%),$(OBJS))
> ++libgnuefi.a: $(OBJS)
> ++ $(AR) rv $@ $(OBJS)
> +
> + clean:
> + rm -f $(TARGETS) *~ *.o $(OBJS)
> diff --git a/meta/recipes-bsp/gnu-efi/gnu-efi/parallel-make.patch b/meta/recipes-bsp/gnu-efi/gnu-efi/parallel-make.patch
> new file mode 100644
> index 0000000..27c94e8
> --- /dev/null
> +++ b/meta/recipes-bsp/gnu-efi/gnu-efi/parallel-make.patch
> @@ -0,0 +1,22 @@
> +Fix parallel make failure
> +
> +Upstream-Status: Submitted [Maintainer directly]
> +
> +Add a missing dependency which resulted in a race leading to failure
> +on larger values of -j.
> +
> +Signed-off-by: Darren Hart <dvhart at linux.intel.com>
> +
> +Index: gnu-efi-3.0/Makefile
> +===================================================================
> +--- gnu-efi-3.0.orig/Makefile
> ++++ gnu-efi-3.0/Makefile
> +@@ -42,6 +42,8 @@ include $(SRCDIR)/Make.defaults
> +
> + SUBDIRS = lib gnuefi inc apps
> +
> ++gnuefi: lib
> ++
> + all: check_gcc $(SUBDIRS)
> +
> + $(SUBDIRS):
> diff --git a/meta/recipes-bsp/gnu-efi/gnu-efi_3.0u.bb b/meta/recipes-bsp/gnu-efi/gnu-efi_3.0u.bb
> new file mode 100644
> index 0000000..0dbdba2
> --- /dev/null
> +++ b/meta/recipes-bsp/gnu-efi/gnu-efi_3.0u.bb
> @@ -0,0 +1,33 @@
> +SUMMARY = "Libraries for producing EFI binaries"
> +HOMEPAGE = "http://sourceforge.net/projects/gnu-efi/"
> +SECTION = "devel"
> +LICENSE = "GPLv2+"
> +LIC_FILES_CHKSUM = "file://debian/copyright;md5=5fb358a180f484b285b0d99acdc29666"
> +
> +SRC_URI = "http://downloads.sourceforge.net/gnu-efi/gnu-efi_3.0u.orig.tar.gz \
> + file://parallel-make.patch \
> + file://parallel-make-archives.patch \
> + "
> +SRC_URI[md5sum] = "d15d3c700e79a1e2938544d73edc572d"
> +SRC_URI[sha256sum] = "3c0d450d5829204ca05dcb3b2aae772e52c379b7c7e09146759c6315606f934e"
> +
> +COMPATIBLE_HOST = "(x86_64.*|i.86.*)-linux"
> +
> +S = "${WORKDIR}/gnu-efi-3.0"
> +
> +def gnu_efi_arch(d):
> + import re
> + tarch = d.getVar("TARGET_ARCH", True)
> + if re.match("i[3456789]86", tarch):
> + return "ia32"
> + return tarch
> +
> +EXTRA_OEMAKE = "'ARCH=${@gnu_efi_arch(d)}' 'CC=${CC}' 'AS=${AS}' 'LD=${LD}' 'AR=${AR}' \
> + 'RANLIB=${RANLIB}' 'OBJCOPY=${OBJCOPY}' 'PREFIX=${prefix}'\
> + "
> +
> +do_install() {
> + oe_runmake install INSTALLROOT="${D}"
> +}
> +
> +FILES_${PN} += "${libdir}/*.lds"
> diff --git a/meta/recipes-bsp/gummiboot/gummiboot_git.bb b/meta/recipes-bsp/gummiboot/gummiboot_git.bb
> new file mode 100644
> index 0000000..b55064f
> --- /dev/null
> +++ b/meta/recipes-bsp/gummiboot/gummiboot_git.bb
> @@ -0,0 +1,25 @@
> +SUMMARY = "Gummiboot is a simple UEFI boot manager which executes configured EFI images."
> +HOMEPAGE = "http://freedesktop.org/wiki/Software/gummiboot"
> +
> +LICENSE = "LGPLv2.1"
> +LIC_FILES_CHKSUM = "file://LICENSE;md5=4fbd65380cdd255951079008b364516c"
> +
> +DEPENDS = "gnu-efi util-linux"
> +
> +inherit autotools
> +inherit deploy
> +
> +PV = "43+git${SRCPV}"
> +SRCREV = "4062c51075ba054d4949c714fe06123f9ad3097d"
> +SRC_URI = "git://anongit.freedesktop.org/gummiboot"
> +
> +S = "${WORKDIR}/git"
> +
> +EXTRA_OECONF = "--disable-manpages --with-efi-includedir=${STAGING_INCDIR} \
> + --with-efi-ldsdir=${STAGING_LIBDIR} \
> + --with-efi-libdir=${STAGING_LIBDIR}"
> +
> +do_deploy () {
> + install ${S}/gummiboot*.efi ${DEPLOYDIR}/
> +}
With the potential introduction of split source (S) and build (B)
directories, this should be ${B} not ${S}.
This should be 2 commit.
Sau!
> +addtask deploy before do_build after do_compile
>
More information about the Openembedded-core
mailing list