boot: Fall back to objcopy if usable for EFI components
In commit b885643b63 ("boot: Always use ELF Tool Chain elfcopy for EFI
builds") I switched to using elfcopy for EFI_OBJCOPY, as llvm-objcopy
lacks support for translating ELF objects to PE32+. This broke building
on older releases with WITHOUT_ELFTOOLCHAIN_BOOTSTRAP set, as the host
did not provide elfcopy and it was not built as a bootstrap tool.
Now, if we're not bootstrapping ELF Tool Chain we check the output of
`${OBJCOPY} --version`, and will use that ${OBJCOPY} as long as it is
not llvm-objcopy.
Reviewed by: imp
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D49722
This commit is contained in:
@@ -1,3 +1,5 @@
|
|||||||
|
.include <src.opts.mk>
|
||||||
|
|
||||||
# Options used when building app-specific efi components
|
# Options used when building app-specific efi components
|
||||||
# See conf/kern.mk for the correct set of these
|
# See conf/kern.mk for the correct set of these
|
||||||
CFLAGS+= -Wformat
|
CFLAGS+= -Wformat
|
||||||
@@ -26,7 +28,20 @@ EFI_TARGET= efi-app-x86_64
|
|||||||
.else
|
.else
|
||||||
EFI_TARGET= binary
|
EFI_TARGET= binary
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
|
# GNU or ELF Tool Chain objcopy is usable for building EFI objects.
|
||||||
|
# LLVM objcopy is not. Use elfcopy if we've bootstrapped it (and thus
|
||||||
|
# known to be available) or objcopy is LLVM's.
|
||||||
|
.if ${MK_ELFTOOLCHAIN_BOOTSTRAP} != "no"
|
||||||
EFI_OBJCOPY?= elfcopy
|
EFI_OBJCOPY?= elfcopy
|
||||||
|
.else
|
||||||
|
_v!= ${OBJCOPY} --version
|
||||||
|
.if ${_v:Mllvm-objcopy*} == ""
|
||||||
|
EFI_OBJCOPY?= ${OBJCOPY}
|
||||||
|
.else
|
||||||
|
EFI_OBJCOPY?= elfcopy
|
||||||
|
.endif
|
||||||
|
.endif
|
||||||
|
|
||||||
# Arbitrarily set the PE/COFF header timestamps to 1 Jan 2024 00:00:00
|
# Arbitrarily set the PE/COFF header timestamps to 1 Jan 2024 00:00:00
|
||||||
# for build reproducibility.
|
# for build reproducibility.
|
||||||
|
|||||||
Reference in New Issue
Block a user