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
|
||||
# See conf/kern.mk for the correct set of these
|
||||
CFLAGS+= -Wformat
|
||||
@@ -26,7 +28,20 @@ EFI_TARGET= efi-app-x86_64
|
||||
.else
|
||||
EFI_TARGET= binary
|
||||
.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
|
||||
.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
|
||||
# for build reproducibility.
|
||||
|
||||
Reference in New Issue
Block a user