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