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