[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