mirror of
https://github.com/opnsense/src.git
synced 2026-04-15 14:29:58 -04:00
ld(1) uses the /usr/libdata/ldscripts when linking. These scripts add in the
default search paths of /lib and /usr/lib via 'SEARCH_DIR("DIR")'. These
need to be prefixed by '=' so that the --sysroot flag is respected. This
is not a problem with buildworld since the TOOLS_PREFIX is baked into the
cross-ld. However it is a problem when trying to use ld(1) with --sysroot
anywhere else as it ends up still reading /lib and /usr/lib despite --sysroot.
The default --sysroot (TARGET_SYSTEM_ROOT) is '/' for /usr/bin/ld.
I found this while building with META MODE with uses only --sysroot with
/usr/bin/ld, and found that libraries that I had not built in its sysroot
directory were leaking in. This didn't happen with ports binutils either. This
would also impact external compiler support.
Reviewed by: bapt, brooks
MFC after: 2 weeks
Sponsored by: EMC / Isilon Storage Division
Differential Revision: https://reviews.freebsd.org/D4262
75 lines
1.7 KiB
Makefile
75 lines
1.7 KiB
Makefile
# $FreeBSD$
|
|
|
|
ELF_SCR_EXT= x xbn xc xd xdc xdw xn xr xs xsc xsw xu xw
|
|
.include "../Makefile.inc0"
|
|
.include <src.opts.mk>
|
|
|
|
.PATH: ${SRCDIR}/ld
|
|
|
|
PROG= ld
|
|
SCRIPTDIR= /usr/libdata/ldscripts
|
|
SRCS+= ldcref.c \
|
|
ldctor.c \
|
|
ldemul-list.h \
|
|
ldemul.c \
|
|
ldexp.c \
|
|
ldfile.c \
|
|
ldgram.y \
|
|
ldlang.c \
|
|
ldlex.l \
|
|
ldmain.c \
|
|
ldmisc.c \
|
|
ldver.c \
|
|
ldwrite.c \
|
|
lexsup.c \
|
|
mri.c
|
|
|
|
CFLAGS+= -DTARGET=\"${TARGET_TUPLE}\"
|
|
CFLAGS+= -DDEFAULT_EMULATION=\"${NATIVE_EMULATION}\"
|
|
CFLAGS+= -DSCRIPTDIR=\"${TOOLS_PREFIX}/usr/libdata\"
|
|
CFLAGS+= -DBFD_VERSION_STRING=\"${VERSION}\"
|
|
CFLAGS+= -DBINDIR=\"${BINDIR}\"
|
|
.if defined(TOOLS_PREFIX)
|
|
CFLAGS+= -DTARGET_SYSTEM_ROOT=\"${TOOLS_PREFIX}\"
|
|
.else
|
|
CFLAGS+= -DTARGET_SYSTEM_ROOT=\"/\"
|
|
.endif
|
|
CFLAGS+= -DTOOLBINDIR=\"${TOOLS_PREFIX}/${BINDIR}/libexec\"
|
|
CFLAGS+= -D_GNU_SOURCE
|
|
CFLAGS+= -I${SRCDIR}/ld -I${SRCDIR}/bfd
|
|
.if ${MK_SHARED_TOOLCHAIN} == "no"
|
|
NO_SHARED?= yes
|
|
.endif
|
|
DPADD= ${RELTOP}/libbfd/libbfd.a
|
|
DPADD+= ${RELTOP}/libiberty/libiberty.a
|
|
LDADD= ${DPADD}
|
|
CLEANDIRS+= ldscripts
|
|
CLEANFILES+= ldemul-list.h stringify.sed
|
|
|
|
FILES= ${LDSCRIPTS:S|^|ldscripts/|}
|
|
FILESDIR= ${SCRIPTDIR}
|
|
|
|
HOST= ${TARGET_TUPLE}
|
|
LIBSEARCHPATH= \"=/lib\":\"=/usr/lib\"
|
|
.for ext in ${ELF_SCR_EXT}
|
|
LDSCRIPTS+= ${NATIVE_EMULATION}.${ext}
|
|
ldscripts/${NATIVE_EMULATION}.${ext}: e${NATIVE_EMULATION}.c
|
|
.endfor
|
|
|
|
EMXFR=
|
|
EMLST=
|
|
.for _e in ${NATIVE_EMULATION} ${EMS}
|
|
EMXFR+= extern ld_emulation_xfer_type ld_${_e}_emulation;
|
|
EMLST+= &ld_${_e}_emulation,
|
|
.endfor
|
|
|
|
ldemul-list.h:
|
|
echo "${EMXFR}" > ${.TARGET}
|
|
echo "#define EMULATION_LIST ${EMLST} 0" >> ${.TARGET}
|
|
|
|
stringify.sed:
|
|
ln -sf ${SRCDIR}/ld/emultempl/astring.sed ${.TARGET}
|
|
|
|
GENDIRDEPS_FILTER.host+= Nusr.bin/yacc
|
|
|
|
.include <bsd.prog.mk>
|