Allow ELF Tool Chain elfcopy to be installed as objcopy

ELF Tool Chain elfcopy is nearly a drop-in replacement for GNU objcopy,
but does not currently support PE output which is needed for building
x86 UEFI bits.

Add a src.conf knob to allow installing it as objcopy and set it by
default for aarch64 only, where we don't have a native binutils.

Reviewed by:	bapt
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D2887
This commit is contained in:
Ed Maste 2015-07-29 18:45:38 +00:00
parent 2d83b16bd4
commit 5ea9e83e2f
6 changed files with 31 additions and 4 deletions

View File

@ -11,7 +11,7 @@ SUBDIR= doc\
as \
ld \
${_nm} \
objcopy \
${_objcopy} \
objdump \
${_readelf} \
${_size} \
@ -26,5 +26,8 @@ _size= size
_strings= strings
_strip= strip
.endif
.if ${MK_ELFTOOLCHAIN_TOOLS} == "no" || ${MK_ELFCOPY_AS_OBJCOPY} == "no"
_objcopy= objcopy
.endif
.include <bsd.subdir.mk>

View File

@ -234,6 +234,9 @@ __DEFAULT_NO_OPTIONS+=CLANG CLANG_BOOTSTRAP CLANG_FULL CLANG_IS_CC
.endif
.if ${__T} == "aarch64"
BROKEN_OPTIONS+=BINUTILS BINUTILS_BOOTSTRAP GCC GCC_BOOTSTRAP GDB
__DEFAULT_YES_OPTIONS+=ELFCOPY_AS_OBJCOPY
.else
__DEFAULT_NO_OPTIONS+=ELFCOPY_AS_OBJCOPY
.endif
# LLVM lacks support for FreeBSD 64-bit atomic operations for ARMv4/ARMv5
.if ${__T} == "arm" || ${__T} == "armeb"

View File

@ -184,7 +184,9 @@ OLD_DIRS+=usr/share/examples/bhyve
.if ${MK_BINUTILS} == no
OLD_FILES+=usr/bin/as
OLD_FILES+=usr/bin/ld
.if ${MK_ELFTOOLCHAIN_TOOLS} != no && ${MK_ELFCOPY_AS_OBJCOPY} == no
OLD_FILES+=usr/bin/objcopy
.endif
OLD_FILES+=usr/bin/objdump
OLD_FILES+=usr/libdata/ldscripts/elf_x86_64_fbsd.x
OLD_FILES+=usr/libdata/ldscripts/elf_x86_64_fbsd.xbn
@ -201,7 +203,9 @@ OLD_FILES+=usr/libdata/ldscripts/elf_x86_64_fbsd.xu
OLD_FILES+=usr/libdata/ldscripts/elf_x86_64_fbsd.xw
OLD_FILES+=usr/share/man/man1/as.1.gz
OLD_FILES+=usr/share/man/man1/ld.1.gz
.if ${MK_ELFTOOLCHAIN_TOOLS} != no && ${MK_ELFCOPY_AS_OBJCOPY} == no
OLD_FILES+=usr/share/man/man1/objcopy.1.gz
.endif
OLD_FILES+=usr/share/man/man1/objdump.1.gz
OLD_FILES+=usr/share/man/man7/as.7.gz
OLD_FILES+=usr/share/man/man7/ld.7.gz
@ -1646,7 +1650,8 @@ OLD_FILES+=usr/share/nls/ru_RU.KOI8-R/ee.cat
OLD_FILES+=usr/share/nls/uk_UA.KOI8-U/ee.cat
.endif
.if ${MK_ELFTOOLCHAIN_TOOLS} == no
.if ${MK_ELFTOOLCHAIN_TOOLS} == no || \
(${MK_ELFTOOLCHAIN_TOOLS} != no && MK_ELFCOPY_AS_OBJCOPY != no)
OLD_FILES+=usr/bin/elfcopy
OLD_FILES+=usr/share/man/man1/elfcopy.1.gz
.endif

View File

@ -0,0 +1,4 @@
.\" $FreeBSD$
Set to build and install
.Xr objcopy 1
from GNU Binutils, instead of the one from ELF Tool Chain.

View File

@ -0,0 +1,4 @@
.\" $FreeBSD$
Set to build and install ELF Tool Chain's elfcopy as
.Xr objcopy 1 ,
instead of the one from GNU Binutils.

View File

@ -7,7 +7,15 @@ ELFCOPYDIR= ${ELFTCDIR}/elfcopy
.PATH: ${ELFCOPYDIR}
.if ${MK_ELFCOPY_AS_OBJCOPY} != "no"
PROG= objcopy
objcopy.1: elfcopy.1
sed -e 's/\.Dt ELFCOPY 1/.Dt OBJCOPY 1/' \
-e 's/\.Nm elfcopy/.Nm objcopy/' < ${.ALLSRC} > ${.TARGET}
CLEANFILES+= objcopy.1
.else
PROG= elfcopy
.endif
SRCS= archive.c ascii.c binary.c main.c sections.c segments.c symbols.c
@ -17,8 +25,8 @@ LIBADD= archive elftc elf
CFLAGS+=-I${ELFTCDIR}/libelftc -I${ELFTCDIR}/common
MAN= elfcopy.1 strip.1
MAN= ${PROG}.1 strip.1
LINKS= ${BINDIR}/elfcopy ${BINDIR}/strip
LINKS= ${BINDIR}/${PROG} ${BINDIR}/strip
.include <bsd.prog.mk>