xref: /freebsd/share/mk/bsd.linker.mk (revision 125902b6af2f80381f628c8610785f5d1bb05bd6)
1*125902b6SBryan Drewery# $FreeBSD$
2*125902b6SBryan Drewery
3*125902b6SBryan Drewery# Setup variables for the linker.
4*125902b6SBryan Drewery#
5*125902b6SBryan Drewery# LINKER_TYPE is the major type of linker. Currently binutils and lld support
6*125902b6SBryan Drewery# automatic detection.
7*125902b6SBryan Drewery#
8*125902b6SBryan Drewery# LINKER_VERSION is a numeric constant equal to:
9*125902b6SBryan Drewery#     major * 10000 + minor * 100 + tiny
10*125902b6SBryan Drewery# It too can be overridden on the command line.
11*125902b6SBryan Drewery#
12*125902b6SBryan Drewery# This file may be included multiple times, but only has effect the first time.
13*125902b6SBryan Drewery#
14*125902b6SBryan Drewery
15*125902b6SBryan Drewery.if !target(__<bsd.linker.mk>__)
16*125902b6SBryan Drewery__<bsd.linker.mk>__:
17*125902b6SBryan Drewery
18*125902b6SBryan Drewery_ld_version!=	${LD} --version 2>/dev/null | head -n 1 || echo none
19*125902b6SBryan Drewery.if ${_ld_version} == "none"
20*125902b6SBryan Drewery.error Unable to determine linker type from LD=${LD}
21*125902b6SBryan Drewery.endif
22*125902b6SBryan Drewery.if ${_ld_version:[1..2]} == "GNU ld"
23*125902b6SBryan DreweryLINKER_TYPE=	binutils
24*125902b6SBryan Drewery_v=	${_ld_version:[3]}
25*125902b6SBryan Drewery.elif ${_ld_version:[1]} == "LLD"
26*125902b6SBryan DreweryLINKER_TYPE=	lld
27*125902b6SBryan Drewery_v=	${_ld_version:[2]}
28*125902b6SBryan Drewery.else
29*125902b6SBryan Drewery.error Unknown linker from LD=${LD}: ${_ld_version}
30*125902b6SBryan Drewery.endif
31*125902b6SBryan DreweryLINKER_VERSION!=echo "${_v:M[1-9].[0-9]*}" | awk -F. '{print $$1 * 10000 + $$2 * 100 + $$3;}'
32*125902b6SBryan Drewery
33*125902b6SBryan Drewery.endif	# !target(__<bsd.linker.mk>__)
34