xref: /freebsd-13.1/libexec/rtld-elf/Makefile (revision b6b91760)
17f3dea24SPeter Wemm# $FreeBSD$
29d085703SBruce Evans
3d3b06cf2SKonstantin Belousov# Use the following command to build local debug version of dynamic
4d3b06cf2SKonstantin Belousov# linker:
5e3e21edbSKonstantin Belousov# make DEBUG_FLAGS=-g WITHOUT_TESTS=yes all
6d3b06cf2SKonstantin Belousov
7a4330302SBrooks DavisRTLD_ELF_DIR:=	${.PARSEDIR}
8a4330302SBrooks Davis
9c6063d0dSWarner Losh.include <src.opts.mk>
10c389411cSGlen BarberPACKAGE=	clibs
11bcf99d2dSEd MasteMK_PIE=		no # Always position independent using local rules
12d9ca85fcSRuslan ErmilovMK_SSP=		no
1300fb440cSDaniel Eischen
14*b6b91760SEmmanuel Vadot.if !defined(NEED_COMPAT)
159a537769SBrad DavisCONFS=		libmap.conf
16*b6b91760SEmmanuel Vadot.endif
17c905e45dSPeter WemmPROG?=		ld-elf.so.1
18c389411cSGlen Barber.if (${PROG:M*ld-elf32*} != "")
19c389411cSGlen BarberTAGS+=		lib32
20c389411cSGlen Barber.endif
21d49ca25dSKonstantin BelousovSRCS= \
22e9751a84SJohn Baldwin	crtbrand.S \
23d49ca25dSKonstantin Belousov	rtld_start.S \
24d49ca25dSKonstantin Belousov	reloc.c \
25d49ca25dSKonstantin Belousov	rtld.c \
26d49ca25dSKonstantin Belousov	rtld_lock.c \
27d49ca25dSKonstantin Belousov	rtld_malloc.c \
28d49ca25dSKonstantin Belousov	rtld_printf.c \
29d49ca25dSKonstantin Belousov	map_object.c \
30d49ca25dSKonstantin Belousov	xmalloc.c \
31d49ca25dSKonstantin Belousov	debug.c \
32d49ca25dSKonstantin Belousov	libmap.c
33a4330302SBrooks DavisMAN?=		rtld.1
34e9751a84SJohn BaldwinACFLAGS+=	-DLOCORE
354cce0e98SNathan WhitehornCFLAGS+=	-Wall -DFREEBSD_ELF -DIN_RTLD -ffreestanding
363c89d6b0SBryan DreweryCFLAGS+=	-I${SRCTOP}/lib/csu/common
3724faccc2SBrandon Bergren.if exists(${RTLD_ELF_DIR}/${MACHINE_ARCH:S/powerpc64le/powerpc64/})
3824faccc2SBrandon BergrenRTLD_ARCH=	${MACHINE_ARCH:S/powerpc64le/powerpc64/}
39789e8545SNathan Whitehorn.else
40789e8545SNathan WhitehornRTLD_ARCH=	${MACHINE_CPUARCH}
41789e8545SNathan Whitehorn.endif
42a4330302SBrooks DavisCFLAGS+=	-I${RTLD_ELF_DIR}/${RTLD_ARCH} -I${RTLD_ELF_DIR}
43903e0ffdSAlex Richardson
44903e0ffdSAlex RichardsonNO_WCAST_ALIGN=	yes
45dee651ebSRuslan ErmilovINSTALLFLAGS=	-C -b
46dee651ebSRuslan ErmilovPRECIOUSPROG=
47f31c1e3fSPawel Jakub DawidekBINDIR=		/libexec
48ce9f2d31SRodney W. GrimesSYMLINKS=	../..${BINDIR}/${PROG} ${LIBEXECDIR}/${PROG}
49051ed84fSBrooks DavisMLINKS?=	rtld.1 ld-elf.so.1.1 \
50d9943f16SAlexey Zelkin		rtld.1 ld.so.1
5113575fc4SDoug Rabson
527e3300e5SKonstantin BelousovCFLAGS+=	-fpic -DPIC $(DEBUG)
537838a782SMichal Meloun
547e3300e5SKonstantin BelousovLDFLAGS+=	-shared -Wl,-Bsymbolic -Wl,-z,defs -nostdlib -e ${RTLD_ENTRY}
55b54a59f3SAlex Richardson# Pull in the dependencies that we use from libc
56b54a59f3SAlex Richardson.include "rtld-libc/Makefile.inc"
57c0f5aeb0SBryan Drewery.if ${MK_TOOLCHAIN} == "no"
58c0f5aeb0SBryan DreweryLDFLAGS+=	-L${LIBCDIR}
59c0f5aeb0SBryan Drewery.endif
607ca8e6a6SAlexander Kabaev
613c89d6b0SBryan DreweryVERSION_DEF=	${LIBCSRCDIR}/Versions.def
62a4330302SBrooks DavisSYMBOL_MAPS=	${RTLD_ELF_DIR}/Symbol.map
637ca8e6a6SAlexander KabaevVERSION_MAP=	Version.map
647ca8e6a6SAlexander KabaevLDFLAGS+=	-Wl,--version-script=${VERSION_MAP}
657ca8e6a6SAlexander Kabaev
66a4330302SBrooks Davis.if exists(${RTLD_ELF_DIR}/${RTLD_ARCH}/Symbol.map)
67a4330302SBrooks DavisSYMBOL_MAPS+=	${RTLD_ELF_DIR}/${RTLD_ARCH}/Symbol.map
687ca8e6a6SAlexander Kabaev.endif
69d5b537d0SJohn Polstra
70a4330302SBrooks Davis.sinclude "${RTLD_ELF_DIR}/${RTLD_ARCH}/Makefile.inc"
717e3300e5SKonstantin BelousovRTLD_ENTRY?=	.rtld_start
723124c3e0SJohn Polstra
73a857d930SGordon Tetlow# Since moving rtld-elf to /libexec, we need to create a symlink.
74a857d930SGordon Tetlow# Fixup the existing binary that's there so we can symlink over it.
75a857d930SGordon Tetlowbeforeinstall:
761508ab98SBryan Drewery.if exists(${DESTDIR}/usr/libexec/${PROG}) && ${MK_STAGING} == "no"
77456b64c4SPawel Jakub Dawidek	-chflags -h noschg ${DESTDIR}/usr/libexec/${PROG}
781b1aa7e4SRuslan Ermilov.endif
79a857d930SGordon Tetlow
80e9751a84SJohn Baldwin.PATH: ${RTLD_ELF_DIR}/${RTLD_ARCH} ${SRCTOP}/lib/csu/common
813124c3e0SJohn Polstra
82a4330302SBrooks Davis.if ${.CURDIR} == ${RTLD_ELF_DIR}
83d511b20aSEnji CooperHAS_TESTS=
844b330699SEnji CooperSUBDIR.${MK_TESTS}+= tests
85a4330302SBrooks Davis.endif
866b22f423SJonathan Anderson
8763f93c7eSRyan Libby# Some of the required math functions (div & mod) are implemented in
8863f93c7eSRyan Libby# libcompiler_rt on some architectures.
8963f93c7eSRyan LibbyLIBADD+=	compiler_rt
9063f93c7eSRyan Libby
913124c3e0SJohn Polstra.include <bsd.prog.mk>
92e7debdcbSBryan Drewery${PROG_FULL}:	${VERSION_MAP}
93056b7d85SBryan Drewery.include <bsd.symver.mk>
94903e0ffdSAlex Richardson
953ab5b6bdSAlex Richardson.if ${COMPILER_TYPE} == "gcc"
963ab5b6bdSAlex Richardson# GCC warns about redeclarations even though they have __exported
973ab5b6bdSAlex Richardson# and are therefore not identical to the ones from the system headers.
983ab5b6bdSAlex RichardsonCFLAGS+=	-Wno-redundant-decls
993ab5b6bdSAlex Richardson.endif
100