https://sourceforge.net/projects/gnu-efi/ is dead and stuck at version
3.0.18. At https://sourceforge.net/p/gnu-efi/feature-requests/11/ the
upstream maintainer has indicated that the project is now maintained
at https://github.com/ncroxon/gnu-efi/, so let's use this as upstream.
We can drop patches 0002 and 0003 since they are upstream. Patch 0001
is just slightly refreshed.
Changes 3.0.18 -> 3.0.19:
https://github.com/ncroxon/gnu-efi/releases/tag/3.0.19
Changes 3.0.19 -> 4.0.0:
https://github.com/ncroxon/gnu-efi/releases/tag/4.0.0
The licensing files have changed:
- A LICENSE file has been added, with the text of the GPLv2
- The README.efilib file has been moved, unchanged to
licenses/LICENSE.efilib
- A new file containing the EDK2 license has been added at
licenses/LICENSE.edk2. This requires an update in the list of
licenses
Tested with the following defconfigs:
ARM defconfig testing gnu-efi + fwupd-efi
BR2_arm=y
BR2_cortex_a9=y
BR2_ARM_ENABLE_VFP=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV7_EABIHF_MUSL_STABLE=y
BR2_INIT_NONE=y
BR2_SYSTEM_BIN_SH_NONE=y
# BR2_PACKAGE_BUSYBOX is not set
BR2_PACKAGE_FWUPD_EFI=y
# BR2_TARGET_ROOTFS_TAR is not set
RISC-V defconfig testing gnu-efi + fwupd-efi
BR2_riscv=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_RISCV64_LP64D_MUSL_STABLE=y
BR2_INIT_NONE=y
BR2_SYSTEM_BIN_SH_NONE=y
# BR2_PACKAGE_BUSYBOX is not set
BR2_PACKAGE_FWUPD_EFI=y
# BR2_TARGET_ROOTFS_TAR is not set
x86-64 defconfig testing gnu-efi + fwupd-efi + systemd-boot
BR2_x86_64=y
BR2_x86_corei7=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_X86_64_CORE_I7_GLIBC_BLEEDING_EDGE=y
BR2_INIT_SYSTEMD=y
BR2_SYSTEM_BIN_SH_NONE=y
BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin"
# BR2_PACKAGE_BUSYBOX is not set
BR2_PACKAGE_SYSTEMD_BOOT=y
# BR2_TARGET_ROOTFS_TAR is not set
BR2_TARGET_SYSLINUX=y
BR2_TARGET_SYSLINUX_EFI=y
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Signed-off-by: Julien Olivain <ju.o@free.fr>
The gnu-efi code base is so far built with -fshort-wchar:
‘-fshort-wchar’
Override the underlying type for ‘wchar_t’ to be ‘short unsigned
int’ instead of the default for the target. This option is useful
for building programs to run under WINE.
*Warning:* the ‘-fshort-wchar’ switch causes GCC to generate code
that is not binary compatible with code generated without that
switch. Use it to conform to a non-default application binary
interface.
However, this is highly incompatible with the definitions of wchar_t
by musl, causing build issues:
/workdir/instance-0/output-1/build/gnu-efi-3.0.18//lib/console.c:84:68: error: passing argument 2 of 'ConOut->OutputString' from incompatible pointer type [-Werror=incompatible-pointer-types]
[...]
/workdir/instance-0/output-1/build/gnu-efi-3.0.18//lib/console.c:84:68: note: expected 'CHAR16 *' {aka 'int *'} but argument is of type 'short unsigned int *'
These have been addressed upstream by simply not using -fshort-wchar
anymore, so we backport the relevant patches.
The patch 0003-Use-char16_t-literals.patch was directly backported, it
was "redone" (it's a very mechanical patch) as backporting the patch
and fixing the conflicts was more effort than redoing the patch from
scratch. But in essence, it is the same patch as what is upstream.
Fixes:
http://autobuild.buildroot.net/results/8b2f5b38284e70dde8c5619e5050e7f201a0bcc3/
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
[Julien: fix patch 0003 EOL modified by the mailing list]
Signed-off-by: Julien Olivain <ju.o@free.fr>
lib/print.c in gnu-efi contains some floating point computation. On
ARM soft-float configurations, these floating point operations
generate calls to __eabi_*() functions that are provided by
gcc. However, gnu-efi builds some freestanding code, so it doesn't
link with libgcc, and therefore the build fails with:
arm-buildroot-linux-gnueabi-ld: /output-1/build/gnu-efi-3.0.18//lib/print.c:1431:(.text+0x78c): undefined reference to `__aeabi_i2d'
arm-buildroot-linux-gnueabi-ld: /output-1/build/gnu-efi-3.0.18//lib/print.c:1431:(.text+0x7a0): undefined reference to `__aeabi_dsub'
arm-buildroot-linux-gnueabi-ld: /output-1/build/gnu-efi-3.0.18//lib/print.c:1431:(.text+0x7a4): undefined reference to `__aeabi_d2f'
arm-buildroot-linux-gnueabi-ld: /output-1/build/gnu-efi-3.0.18//lib/print.c:1432:(.text+0x7b4): undefined reference to `__aeabi_fcmplt'
arm-buildroot-linux-gnueabi-ld: /output-1/build/gnu-efi-3.0.18//lib/print.c:1438:(.text+0x7c8): undefined reference to `__aeabi_fmul'
arm-buildroot-linux-gnueabi-ld: /output-1/build/gnu-efi-3.0.18//lib/print.c:1440:(.text+0x7d4): undefined reference to `__aeabi_fcmpeq'
arm-buildroot-linux-gnueabi-ld: /output-1/build/gnu-efi-3.0.18//lib/print.c:1444:(.text+0x7f8): undefined reference to `__aeabi_fmul'
arm-buildroot-linux-gnueabi-ld: /output-1/build/gnu-efi-3.0.18//lib/print.c:1440:(.text+0x808): undefined reference to `__aeabi_fcmpeq'
arm-buildroot-linux-gnueabi-ld: /output-1/build/gnu-efi-3.0.18//lib/print.c:1440:(.text+0x818): undefined reference to `__aeabi_f2iz'
arm-buildroot-linux-gnueabi-ld: /output-1/build/gnu-efi-3.0.18//lib/print.c:1451:(.text+0x834): undefined reference to `__aeabi_i2f'
arm-buildroot-linux-gnueabi-ld: /output-1/build/gnu-efi-3.0.18//lib/print.c:1451:(.text+0x840): undefined reference to `__aeabi_fcmpeq'
arm-buildroot-linux-gnueabi-ld: /output-1/build/gnu-efi-3.0.18//lib/print.c:1453:(.text+0x858): undefined reference to `__aeabi_fmul'
arm-buildroot-linux-gnueabi-ld: /output-1/build/gnu-efi-3.0.18//lib/print.c:1451:(.text+0x860): undefined reference to `__aeabi_f2iz'
arm-buildroot-linux-gnueabi-ld: /output-1/build/gnu-efi-3.0.18//lib/print.c:1451:(.text+0x868): undefined reference to `__aeabi_i2f'
arm-buildroot-linux-gnueabi-ld: /output-1/build/gnu-efi-3.0.18//lib/print.c:1451:(.text+0x870): undefined reference to `__aeabi_fcmpeq'
arm-buildroot-linux-gnueabi-ld: /output-1/build/gnu-efi-3.0.18//lib/print.c:1451:(.text+0x89c): undefined reference to `__aeabi_f2iz'
Since we don't care about gnu-efi support on ARM soft-float
configurations, let's disable such configurations.
Note that we have chosen to use BR2_ARM_SOFT_FLOAT as we're for now
making this specific to ARM as we're not sure what is the situation on
other CPU architectures (for example RISC-V without FPU maybe). This
can be revisited once we get more data on the behavior on other CPU
architectures that can support soft-float.
Fixes:
http://autobuild.buildroot.net/results/98d955fd2fcf4a3db1ab46e4f553447031a23b92/
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Since commit
1f7c581454 ("package/gnu-efi: enable on
RISC-V 64-bit"), we allow building on RISC-V... and that includes
noMMU RISC-V. This unfortunately fails badly with:
/home/autobuild/autobuild/instance-2/output-1/host/bin/../riscv64-buildroot-linux-uclibc/bin/ld.real: unrecognized option '-Wl,-elf2flt=-r'
/home/autobuild/autobuild/instance-2/output-1/host/bin/../riscv64-buildroot-linux-uclibc/bin/ld.real: use the --help option for usage information
Since we're anyway not interested in gnu-efi on noMMU platforms, let's
not even spend time on trying to fix this and make MMU support a
requirement for gnu-efi.
Fixes:
http://autobuild.buildroot.net/results/8b4a503939bdbe773ceee69e01a3ea16873a75fa/
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Since the bump of gnu-efi to version 3.0.17 in Buildroot commit
fa9893ad8f, the build of gnu-efi fails
on ARM big endian and AArch64 big endian.
Indeed, since that bump, gnu-efi builds some "apps", using a special
linker file part of gnu-efi that explicitly sets the architecture:
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_FORMAT("elf64-littleaarch64", "elf64-littleaarch64", "elf64-littleaarch64")
Due to this, big endian builds are now failing:
armeb-buildroot-linux-gnueabi-ld: ../gnuefi/crt0-efi-arm.o: compiled for a big endian system and target is little endian
armeb-buildroot-linux-gnueabi-ld: failed to merge target specific data of file ../gnuefi/crt0-efi-arm.o
Since we are not really interested in supporting gnu-efi on ARM big
endian and AArch64 big endian and it is not supported upstream, let's
disabled on those architectures.
Fixes:
http://autobuild.buildroot.org/results/4d385d6759346e19664d0bded1e419f004f82b47/ (ARM big endian)
http://autobuild.buildroot.net/results/b6df43408ca4cd469962c96d49d9ac7935b6dbe9/ (AArch64 big endian)
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
The gnu-efi package was enabled on mips64el by commit
11b347c03a ("package/gnu-efi: add
mips64el support"). However, it has been failing to build for a long
time, and nobody bothered fixing it:
gnu-efi-3.0.15//gnuefi/crt0-efi-mips64el.S:71: Error: cannot represent BFD_RELOC_16 relocation in this object file format
Even reverting back to gnu-efi 3.0.10, which was the version used at
the time of 11b347c03a, does not fix the
issue. We tested updating to the latest gnu-efi version, 3.0.17, and
the problem still exists.
Since EFI on MIPS is extremely niche, we don't really want to invest
the time to fix this issue, so let's disable it again. If someone
cares enough, it can be fixed and re-enabled.
Fixes:
http://autobuild.buildroot.net/results/d5938edcf50ebb7fdcec148d73f402845079779d/
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Changes from 3.0.14 to 3.0.15:
8b018e67212957de176292f95718df48f49a418b Bump revision to VERSION = 3.0.15
803b49c40bb0b720b90d9c31d372911f1b946aa7 */*.S: add non-executable GNU stack marking on ELF-linux
2ed6486834634130fe7bc9b8803b0113767fc7c1 lib/Makefile: add .o file dependency on libsubdirs targets
6b28563584edd08ab9c94a746a8061434c165837 Handle __mips64
The patch
0002-inc-efi-.h-also-support-__mips64-to-recognize-mips64.patch is
dropped as it is equivalent to upstream commit
6b28563584edd08ab9c94a746a8061434c165837 ("Handle __mips64")
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Patch 0001-Make.defaults-don-t-override-ARCH-when-cross-compili.patch
is refreshed to accommodate with conflicting upstream changes.
Patch 0002-Revert-efilink-fix-build-with-gcc-4.8.patch is dropped as
it is upstream as of commit
8b2da2c2247af28bd681a9c8e3231559964c80a6 ("Revert "efilink: fix build
with gcc 4.8"").
A new patch is needed to fix the build on mips64.
While at it, fix the hash file to use the new spacing convention.
Fixes:
http://autobuild.buildroot.net/results/a9a7372615e3fbe4b8abda946706d1ccadf28931/
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
This fixes the problem with undeclared intptr_t type for builds not including
stdint.h, without breaking builds using -nostdinc.
Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
This will be used in packages that depend on gnu-efi, and we take this
opportunity to propagate this dependency where it was missing in
gummiboot and syslinux. In practice, it was not a problem because
gummiboot and syslinux are only available on i386 and x86-64, which is
a subset of the architectures supported by gnu-efi.
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Adds support for StrnCat, needed by shim.
Also add a hash for the license file.
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Pass TARGET_CONFIGURE_OPTS in the environment instead of on the make command
line, so 'CFLAGS +=' does the right thing in the Makefile without patching.
TARGET_CONFIGURE_OPTS includes TARGET_MAKE_ENV, so drop that.
This does require us to pass CROSS_COMPILE to ensure the native tools are
not used though.
Add a GNU_EFI_MAKE_OPTS and use in both the build and install steps, instead
of repeating the various arguments.
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
We need BR2_ARM_CPU_HAS_ARM, otherwise build for cortex-m4 breaks with
"target CPU does not support ARM mode".
We only enable arm/aarch64 support for now, mips support is broken:
test-pkg/br-mips64-n64-full/build/gnu-efi-3.0.5/lib/mips64el/setjmp.S:40:
Error: opcode not supported on this processor: mips64 (mips64) `ext $v0,$v0,29,1'
Tested by test-pkg using this defconfig
BR2_PACKAGE_GNU_EFI=y
with the following results:
armv5-ctng-linux-gnueabi [ 1/49]: OK
armv7-ctng-linux-gnueabihf [ 2/49]: OK
br-aarch64-glibc [ 3/49]: OK
br-arcle-hs38 [ 4/49]: SKIPPED
br-arm-basic [ 5/49]: OK
br-arm-cortex-a9-glibc [ 6/49]: OK
br-arm-cortex-a9-musl [ 7/49]: OK
br-arm-cortex-m4-full [ 8/49]: SKIPPED
br-arm-full [ 9/49]: OK
br-arm-full-nothread [10/49]: OK
br-arm-full-static [11/49]: OK
br-bfin-full [12/49]: SKIPPED
br-i386-pentium4-full [13/49]: OK
br-i386-pentium-mmx-musl [14/49]: OK
br-m68k-5208-full [15/49]: SKIPPED
br-m68k-68040-full [16/49]: SKIPPED
br-microblazeel-full [17/49]: SKIPPED
br-mips32r6-el-hf-glibc [18/49]: SKIPPED
br-mips64-n64-full [19/49]: SKIPPED
br-mips64r6-el-hf-glibc [20/49]: SKIPPED
br-mipsel-o32-full [21/49]: SKIPPED
br-nios2-glibc [22/49]: SKIPPED
br-openrisc-uclibc [23/49]: SKIPPED
br-powerpc-603e-basic-cpp [24/49]: SKIPPED
br-powerpc64le-power8-glibc [25/49]: SKIPPED
br-powerpc64-power7-glibc [26/49]: SKIPPED
br-powerpc-e500mc-full [27/49]: SKIPPED
br-sh4-full [28/49]: SKIPPED
br-sparc64-glibc [29/49]: SKIPPED
br-sparc-uclibc [30/49]: SKIPPED
br-x86-64-core2-full [31/49]: OK
br-x86-64-musl [32/49]: OK
br-xtensa-full [33/49]: SKIPPED
i686-ctng-linux-gnu [34/49]: OK
linaro-aarch64 [35/49]: OK
linaro-arm [36/49]: OK
mips64el-ctng_n32-linux-gnu [37/49]: SKIPPED
mips64el-ctng_n64-linux-gnu [38/49]: SKIPPED
powerpc-ctng_e500v2-linux-gnuspe [39/49]: SKIPPED
sourcery-arm-armv4t [40/49]: OK
sourcery-arm [41/49]: OK
sourcery-arm-thumb2 [42/49]: OK
sourcery-mips64 [43/49]: SKIPPED
sourcery-mips [44/49]: SKIPPED
sourcery-nios2 [45/49]: SKIPPED
sourcery-sh [46/49]: SKIPPED
sourcery-x86-64 [47/49]: OK
sourcery-x86 [48/49]: OK
x86_64-ctng_locales-linux-gnu [49/49]: OK
49 builds, 27 skipped, 0 build failed, 0 legal-info failed
Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
We want to use SPDX identifier for license string as much as possible.
SPDX short identifier for BSD-3c is BSD-3-Clause.
This change is done using following command.
find . -name "*.mk" | xargs sed -ri '/LICENSE( )?[\+:]?=/s/BSD-3c/BSD-3-Clause/g'
Signed-off-by: Rahul Bedarkar <rahulbedarkar89@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
We want to use SPDX identifier for license strings as much as possible.
SPDX short identifier for GPLv2/GPLv2+ is GPL-2.0/GPL-2.0+.
This change is done by using following command.
find . -name "*.mk" | xargs sed -ri '/LICENSE( )?[\+:]?=/s/\<GPLv2\>/GPL-2.0/g'
Signed-off-by: Rahul Bedarkar <rahulbedarkar89@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Fix a bunch of deficiencies:
- 'debian/copyright' does not exist.
- gnuefi is not GPLv2+. Only one AArch64 file has GPLv2+ headers,
all others have BSD-3c
- efilib is BSD-2c
Change the licensing information to include BSD-3c for the gnuefi parts,
and keep refernce to GPLv2+ as the Main README.gnuefi references it.
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
The Buildroot coding style defines one space around make assignments and
does not align the assignment symbols.
This patch does a bulk fix of offending packages. The package
infrastructures (or more in general assignments to calculated variable
names, like $(2)_FOO) are not touched.
Alignment of line continuation characters (\) is kept as-is.
The sed command used to do this replacement is:
find * -name "*.mk" | xargs sed -i \
-e 's#^\([A-Z0-9a-z_]\+\)\s*\([?:+]\?=\)\s*$#\1 \2#'
-e 's#^\([A-Z0-9a-z_]\+\)\s*\([?:+]\?=\)\s*\([^\\]\+\)$#\1 \2 \3#'
-e 's#^\([A-Z0-9a-z_]\+\)\s*\([?:+]\?=\)\s*\([^\\ \t]\+\s*\\\)\s*$#\1 \2 \3#'
-e 's#^\([A-Z0-9a-z_]\+\)\s*\([?:+]\?=\)\(\s*\\\)#\1 \2\3#'
Brief explanation of this command:
^\([A-Z0-9a-z_]\+\) a regular variable at the beginning of the line
\([?:+]\?=\) any assignment character =, :=, ?=, +=
\([^\\]\+\) any string not containing a line continuation
\([^\\ \t]\+\s*\\\) string, optional whitespace, followed by a
line continuation character
\(\s*\\\) optional whitespace, followed by a line
continuation character
Hence, the first subexpression handles empty assignments, the second
handles regular assignments, the third handles regular assignments with
line continuation, and the fourth empty assignments with line
continuation.
This expression was tested on following test text: (initial tab not
included)
FOO = spaces before
FOO = spaces before and after
FOO = tab before
FOO = tab and spaces before
FOO = tab after
FOO = tab and spaces after
FOO = spaces and tab after
FOO = \
FOO = bar \
FOO = bar space \
FOO = \
GENIMAGE_DEPENDENCIES = host-pkgconf libconfuse
FOO += spaces before
FOO ?= spaces before and after
FOO :=
FOO =
FOO =
FOO =
FOO =
$(MAKE1) CROSS_COMPILE=$(TARGET_CROSS) -C
AT91BOOTSTRAP3_DEFCONFIG = \
AXEL_DISABLE_I18N=--i18n=0
After this bulk change, following manual fixups were done:
- fix line continuation alignment in cegui06 and spice (the sed
expression leaves the number of whitespace between the value and line
continuation character intact, but the whitespace before that could have
changed, causing misalignment.
- qt5base was reverted, as this package uses extensive alignment which
actually makes the code more readable.
Finally, the end result was manually reviewed.
Signed-off-by: Thomas De Schampheleire <thomas.de.schampheleire@gmail.com>
Cc: Yann E. Morin <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
Since the trailing slash is stripped from $($(PKG)_SITE) by pkg-generic.mk:
$(call DOWNLOAD,$($(PKG)_SITE:/=)/$($(PKG)_SOURCE))
so it is redundant.
This patch removes it from $(PKG)_SITE variable for BR consistency.
Signed-off-by: Jerzy Grzegorek <jerzy.grzegorek@trzebnica.net>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>