Makefile revision 1.119
1#	$NetBSD: Makefile,v 1.119 2013/05/08 15:33:45 christos Exp $
2#
3# NOTE: when changing ld.so, ensure that ldd still compiles.
4#
5
6WARNS?=4
7
8LDELFSO_MACHINE_ARCH?= ${MACHINE_ARCH}
9
10# This needs to be before bsd.init.mk
11.if defined(BSD_MK_COMPAT_FILE)
12.include <${BSD_MK_COMPAT_FILE}>
13.endif
14
15# We are not building this with PIE
16PIE_CFLAGS=
17PIE_LDFLAGS=
18.include <bsd.init.mk>			# for MKPIC definition
19.include <bsd.shlib.mk>			# for SHLINKINSTALLDIR definition
20
21.if defined(LDELFSO_MACHINE_CPU) && !empty(LDELFSO_MACHINE_CPU) && \
22    exists(${.CURDIR}/arch/${LDELFSO_MACHINE_CPU})
23ARCHSUBDIR=	${LDELFSO_MACHINE_CPU}
24.else
25ARCHSUBDIR=	${MACHINE_CPU}
26.endif
27M=		${.CURDIR}/arch/${ARCHSUBDIR}
28
29.if ((${LDELFSO_MACHINE_ARCH} == "alpha") ||				\
30     (${MACHINE_CPU} == "arm") ||					\
31     (${LDELFSO_MACHINE_ARCH} == "hppa") ||				\
32     (${LDELFSO_MACHINE_ARCH} == "i386") ||				\
33     (${LDELFSO_MACHINE_ARCH} == "m68k") ||				\
34     (${MACHINE_CPU} == "mips") ||					\
35     (${LDELFSO_MACHINE_ARCH} == "powerpc") ||				\
36     (${MACHINE_CPU} == "sh3") ||					\
37     (${LDELFSO_MACHINE_ARCH} == "sparc") ||				\
38     (${LDELFSO_MACHINE_ARCH} == "sparc64") ||				\
39     (${LDELFSO_MACHINE_ARCH} == "x86_64") ||				\
40     (${LDELFSO_MACHINE_ARCH} == "vax")) &&				\
41    ${MKPIC} != "no"
42
43LDFLAGS+=	${${ACTIVE_CC} == "clang":? -Wl,-Bsymbolic : -symbolic} \
44		-shared -nostartfiles -nodefaultlibs
45LDFLAGS+=	-Wl,-static
46LDFLAGS+=	-Wl,--warn-shared-textrel
47
48COPTS+=		-fvisibility=hidden
49
50# Adds SRCS, CPPFLAGS, LDFLAGS, etc.  Must go first so MD startup source
51# is first.
52.if exists($M/Makefile.inc)
53.include "$M/Makefile.inc"
54.endif
55
56# Support compat ld.elf_so.
57.if defined(MLIBDIR)
58PROG=		ld.elf_so-${MLIBDIR}
59CPPFLAGS+=	-DRTLD_ARCH_SUBDIR=\"${MLIBDIR}\"
60.else
61PROG=		ld.elf_so
62.endif
63
64CLIBOBJ!=	cd ${NETBSDSRCDIR}/lib/libc && ${PRINTOBJDIR}
65
66SRCS+=		rtld.c reloc.c symbol.c xmalloc.c xprintf.c debug.c \
67		map_object.c load.c search.c headers.c paths.c expand.c \
68		tls.c symver.c diagassert.c
69
70.if ${USE_FORT} == "yes"
71.PATH.c: ${NETBSDSRCDIR}/lib/libc/misc
72SRCS+=		stack_protector.c
73.endif
74
75.PATH.c: ${NETBSDSRCDIR}/lib/libc/stdlib
76SRCS+=		exit.c
77
78errlist_concat.h: ${NETBSDSRCDIR}/lib/libc/gen/errlist.awk ${NETBSDSRCDIR}/sys/sys/errno.h
79	${TOOL_AWK} -v concat=1 -f ${.ALLSRC} > ${.TARGET}.tmp && \
80	mv -f ${.TARGET}.tmp ${.TARGET}
81
82xprintf.c: errlist_concat.h
83
84CLEANFILES+=	errlist_concat.h
85
86BINDIR=		${SHLINKINSTALLDIR}
87
88CPPFLAGS+=	-DLIBDIR=\"${LIBDIR}\" -D_PATH_RTLD=\"${BINDIR}/${PROG}\"
89CPPFLAGS+=	-I${.CURDIR} -I.
90CPPFLAGS+=	-DRTLD_LOADER
91CPPFLAGS+=	-D_RTLD_SOURCE
92CPPFLAGS+=	-DCOMBRELOC
93#CPPFLAGS+=	-DDEBUG
94#CPPFLAGS+=	-DRTLD_DEBUG
95#CPPFLAGS+=	-DRTLD_DEBUG_RELOC
96.if !empty(LDELFSO_MACHINE_ARCH:Mearm*)
97CPPFLAGS+=	-I${NETBSDSRCDIR}/lib/libexecinfo
98.endif
99#DBG=		-g
100COPTS+=		-O3 -fomit-frame-pointer
101
102.if ${LDELFSO_MACHINE_ARCH} == "i386" || ${LDELFSO_MACHINE_ARCH} == "x86_64"
103COPTS+=		-mno-3dnow -mno-mmx -mno-sse -mno-sse2 -mno-sse3
104.endif
105
106
107.if ${SHLIBDIR} != ${LIBDIR}
108CPPFLAGS+=	-DRTLD_DEFAULT_LIBRARY_PATH=\"${SHLIBDIR}:${LIBDIR}\"
109.endif
110
111# rtld.c and symbol.c use alloca, so disable SSP warnings.
112COPTS.rtld.c+=	-Wno-stack-protector
113COPTS.symbol.c+=-Wno-stack-protector
114
115LDADD+=		-L${CLIBOBJ} -L${DESTDIR}${LIBDIR}
116.if ${MKPICLIB} != "no"
117LDADD+=		-lc_pic
118.if ${MKPICINSTALL} != "no"
119DPADD+=		${LIBC_PIC}
120.endif
121DPADD+=		${CLIBOBJ}/libc_pic.a
122.else
123LDADD+=		-lc
124DPADD+=		${CLIBOBJ}/libc.a
125.endif
126
127.if ${MACHINE_CPU} == "hppa" || ${MACHINE_CPU} == "sh3"
128# for $$divU, $$remU etc. (millicode)
129LDADD+=		-lgcc
130DPADD+=		${LIBGCC}
131.endif
132
133STRIPFLAG=
134
135.PATH: $M
136
137
138${PROG}: ${OBJS} ${DPADD}
139	${_MKMSG_LINK} ${PROG}
140	${CC} ${LDFLAGS} -o ${PROG} ${OBJS} ${LDADD}
141.if ${MKDEBUG} != "no"
142	(  ${OBJCOPY} --only-keep-debug ${.TARGET} ${.TARGET}.debug \
143	   && ${OBJCOPY} --strip-debug -p -R .gnu_debuglink \
144	   --add-gnu-debuglink=${.TARGET}.debug ${.TARGET} \
145	) || (rm -f ${.TARGET}.debug; false)
146
147_PROGDEBUG.${PROG} := ${PROG}.debug
148.endif
149
150
151.if ${SHLINKINSTALLDIR} != "/usr/libexec"
152SYMLINKS+=	${SHLINKINSTALLDIR}/${PROG} /usr/libexec/${PROG}
153.if ${MKDEBUG} != "no"
154SYMLINKS+=	${DESTDIR}${DEBUGDIR}${BINDIR}/${PROG}.debug \
155		${DESTDIR}${DEBUGDIR}/usr${BINDIR}/${PROG}.debug
156.endif
157.endif
158
159.include <bsd.prog.mk>
160.else
161
162MAN=		ld.elf_so.1
163
164.include <bsd.man.mk>
165.endif
166