1# $FreeBSD$ 2 3# Use the following command to build local debug version of dynamic 4# linker: 5# make DEBUG_FLAGS=-g WITHOUT_TESTS=yes all 6 7RTLD_ELF_DIR:= ${.PARSEDIR} 8 9.include <src.opts.mk> 10PACKAGE= clibs 11MK_PIE= no # Always position independent using local rules 12MK_SSP= no 13 14CONFS= libmap.conf 15PROG?= ld-elf.so.1 16.if (${PROG:M*ld-elf32*} != "") 17TAGS+= lib32 18.endif 19SRCS= \ 20 crtbrand.S \ 21 rtld_start.S \ 22 reloc.c \ 23 rtld.c \ 24 rtld_lock.c \ 25 rtld_malloc.c \ 26 rtld_printf.c \ 27 map_object.c \ 28 xmalloc.c \ 29 debug.c \ 30 libmap.c 31MAN?= rtld.1 32ACFLAGS+= -DLOCORE 33CFLAGS+= -Wall -DFREEBSD_ELF -DIN_RTLD -ffreestanding 34CFLAGS+= -I${SRCTOP}/lib/csu/common 35.if exists(${RTLD_ELF_DIR}/${MACHINE_ARCH:S/powerpc64le/powerpc64/}) 36RTLD_ARCH= ${MACHINE_ARCH:S/powerpc64le/powerpc64/} 37.else 38RTLD_ARCH= ${MACHINE_CPUARCH} 39.endif 40CFLAGS+= -I${RTLD_ELF_DIR}/${RTLD_ARCH} -I${RTLD_ELF_DIR} 41 42NO_WCAST_ALIGN= yes 43WARNS?= 6 44INSTALLFLAGS= -C -b 45PRECIOUSPROG= 46BINDIR= /libexec 47SYMLINKS= ../..${BINDIR}/${PROG} ${LIBEXECDIR}/${PROG} 48MLINKS?= rtld.1 ld-elf.so.1.1 \ 49 rtld.1 ld.so.1 50 51CFLAGS+= -fpic -DPIC $(DEBUG) 52 53LDFLAGS+= -shared -Wl,-Bsymbolic -Wl,-z,defs -nostdlib -e ${RTLD_ENTRY} 54# Pull in the dependencies that we use from libc 55.include "rtld-libc/Makefile.inc" 56.if ${MK_TOOLCHAIN} == "no" 57LDFLAGS+= -L${LIBCDIR} 58.endif 59 60VERSION_DEF= ${LIBCSRCDIR}/Versions.def 61SYMBOL_MAPS= ${RTLD_ELF_DIR}/Symbol.map 62VERSION_MAP= Version.map 63LDFLAGS+= -Wl,--version-script=${VERSION_MAP} 64 65.if exists(${RTLD_ELF_DIR}/${RTLD_ARCH}/Symbol.map) 66SYMBOL_MAPS+= ${RTLD_ELF_DIR}/${RTLD_ARCH}/Symbol.map 67.endif 68 69.sinclude "${RTLD_ELF_DIR}/${RTLD_ARCH}/Makefile.inc" 70RTLD_ENTRY?= .rtld_start 71 72# Since moving rtld-elf to /libexec, we need to create a symlink. 73# Fixup the existing binary that's there so we can symlink over it. 74beforeinstall: 75.if exists(${DESTDIR}/usr/libexec/${PROG}) && ${MK_STAGING} == "no" 76 -chflags -h noschg ${DESTDIR}/usr/libexec/${PROG} 77.endif 78 79.PATH: ${RTLD_ELF_DIR}/${RTLD_ARCH} ${SRCTOP}/lib/csu/common 80 81.if ${.CURDIR} == ${RTLD_ELF_DIR} 82HAS_TESTS= 83SUBDIR.${MK_TESTS}+= tests 84.endif 85 86.include <bsd.prog.mk> 87${PROG_FULL}: ${VERSION_MAP} 88.include <bsd.symver.mk> 89 90.if ${COMPILER_TYPE} == "gcc" 91# GCC warns about redeclarations even though they have __exported 92# and are therefore not identical to the ones from the system headers. 93CFLAGS+= -Wno-redundant-decls 94.endif 95