Makefile.inc revision 1.31
1#	$NetBSD: Makefile.inc,v 1.31 2016/05/10 10:23:09 martin Exp $
2
3.include <bsd.own.mk>
4
5# XXX: FIXME: This is defined in bsd.lib.mk
6PICFLAGS ?= -fPIC
7
8COMMON_DIR:=	${.CURDIR}/common
9.PATH:		${COMMON_DIR}
10
11CPPFLAGS+=	-I${NETBSDSRCDIR}/libexec/ld.elf_so -I${COMMON_DIR} -I.
12
13OBJS+=		crt0.o gcrt0.o crti.o crtn.o
14OBJS+=		crtbegin.o crtend.o
15OBJS+=		sysident.o
16
17.if ${MKPIC} == "yes"
18OBJS+=		crtbeginS.o
19CFLAGS.crtbegin.c+= -fPIE
20# XXXGCC5 - GCC 5 miscompiles crtbeginS.c on many platforms.  on SPARC it
21# XXXGCC5   emits "clr %g1; call %g1", which is effectively jumping to zero.
22. if defined(HAVE_GCC) && ${HAVE_GCC} == 53 && \
23     !exists(${ARCHDIR}/crtbegin.S)
24CFLAGS.crt0-common.c+=	-O1
25CFLAGS.crtbeginS.c+=	-O1
26CFLAGS.crtbegin.c+=	-O1
27. endif
28.endif
29
30.if ${MACHINE_ARCH} == "alpha"
31OBJS+=		crtfm.o
32.endif
33
34.if ${CSU_MACHINE_ARCH} == "sparc64"
35# create helper objects for the compiler to mark compiler memory models
36.for m in medlow medmid medany
37sparc_mc${m}.o:	compident.S sysident_assym.h
38	${CC} ${ASFLAGS} -I. -DCONTENT=\"${m}\\0\\0\" -DCONTENTLENGTH=8 -c \
39		-o $@ ${COMMON_DIR}/compident.S
40.endfor
41OBJS += sparc_mcmedlow.o sparc_mcmedmid.o sparc_mcmedany.o
42.endif
43
44realall: ${OBJS}
45
46.if exists(${ARCHDIR}/crtbegin.S)
47crtbegin.o: crtbegin.S
48	${_MKTARGET_COMPILE}
49	${COMPILE.S} ${ARCHDIR}/crtbegin.S -o ${.TARGET}.o
50.else
51crtbegin.o: crtbegin.c crtbegin.h
52	${_MKTARGET_COMPILE}
53	${COMPILE.c} ${CFLAGS.crtbegin.c} ${COMMON_DIR}/crtbegin.c -o ${.TARGET}.o
54.endif
55	${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET}.o ${.TARGET} 
56	rm -f ${.TARGET}.o
57.if ${MKSTRIPIDENT} != "no"
58	${OBJCOPY} -R .ident ${.TARGET}
59.endif
60
61.if exists(${ARCHDIR}/crtbegin.S)
62crtbeginS.o: crtbegin.S
63	${_MKTARGET_COMPILE}
64	${COMPILE.S} ${PICFLAGS} -DSHARED ${ARCHDIR}/crtbegin.S -o ${.TARGET}.o
65.else
66crtbeginS.o: crtbegin.c crtbegin.h
67	${_MKTARGET_COMPILE}
68	${COMPILE.c} ${CFLAGS.crtbeginS.c} ${PICFLAGS} -DSHARED ${COMMON_DIR}/crtbegin.c -o ${.TARGET}.o
69.endif
70	${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET}.o ${.TARGET} 
71	rm -f ${.TARGET}.o
72.if ${MKSTRIPIDENT} != "no"
73	${OBJCOPY} -R .ident ${.TARGET}
74.endif
75
76crtend.o: crtend.S
77	${_MKTARGET_COMPILE}
78	${COMPILE.S} ${ARCHDIR}/crtend.S -o ${.TARGET}.o
79	${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET}.o ${.TARGET} 
80	rm -f ${.TARGET}.o
81.if ${MKSTRIPIDENT} != "no"
82	${OBJCOPY} -R .ident ${.TARGET}
83.endif
84
85.if ${MKPIC} != "no"
86MY_PICFLAGS=	${PICFLAGS}
87.else
88MY_PICFLAGS=
89.endif
90
91crt0.o: crt0.S crt0-common.c
92	${_MKTARGET_COMPILE}
93	${COMPILE.S} ${ARCHDIR}/crt0.S -o ${.TARGET}.S.o
94	${COMPILE.c} ${CFLAGS.crt0-common.c} ${MY_PICFLAGS} ${COMMON_DIR}/crt0-common.c -o ${.TARGET}.c.o
95	${LD} -r -o ${.TARGET}.o ${.TARGET}.S.o ${.TARGET}.c.o
96	${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET}.o ${.TARGET} 
97	rm -f ${.TARGET}.S.o ${.TARGET}.c.o ${.TARGET}.o
98.if ${MKSTRIPIDENT} != "no"
99	${OBJCOPY} -R .ident ${.TARGET}
100.endif
101
102gcrt0.o: crt0.S crt0-common.c
103	${_MKTARGET_COMPILE}
104	${COMPILE.S} ${ARCHDIR}/crt0.S -o ${.TARGET}.S.o
105	${COMPILE.c} ${MY_PICFLAGS} -DMCRT0 ${COMMON_DIR}/crt0-common.c -o ${.TARGET}.c.o
106	${LD} -r -o ${.TARGET}.o ${.TARGET}.S.o ${.TARGET}.c.o
107	${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET}.o ${.TARGET} 
108	rm -f ${.TARGET}.S.o ${.TARGET}.c.o ${.TARGET}.o
109.if ${MKSTRIPIDENT} != "no"
110	${OBJCOPY} -R .ident ${.TARGET}
111.endif
112
113.if ${MACHINE_ARCH} == "alpha"
114# can't do this in Makefile.inc otherwise it will before realall:
115crtfm.o: crtfm.c
116	${_MKTARGET_COMPILE}
117	${COMPILE.c} ${.ALLSRC} -o ${.TARGET}.o
118	${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET}.o ${.TARGET} 
119	rm -f ${.TARGET}.o
120.endif
121
122GENASSYM_CONF=	${COMMON_DIR}/sysident_assym.cf 
123sysident_assym.h: ${GENASSYM_CONF} ${GENASSYM_EXTRAS} ${NETBSDSRCDIR}/sys/sys/param.h
124	${_MKTARGET_CREATE}
125	cat ${COMMON_DIR}/sysident_assym.cf | \
126	    ${TOOL_GENASSYM} -- ${CC} ${CFLAGS:N-Wa,*} ${CPPFLAGS} ${PROF} \
127	    ${GENASSYM_CPPFLAGS} > sysident_assym.h.tmp && \
128	mv -f sysident_assym.h.tmp sysident_assym.h
129
130CLEANFILES+=	sysident_assym.h
131
132crti.o: crti.S sysident_assym.h sysident.S
133crtn.o: crtn.S
134sysident.o:	sysident.S sysident_assym.h
135
136FILES=${OBJS}
137FILESDIR=${LIBDIR}
138CLEANFILES+=${OBJS}
139
140.if ${MKPIC} == "yes"
141SYMLINKS+=	crtbegin.o ${LIBDIR}/crtbeginT.o
142SYMLINKS+=	crtend.o ${LIBDIR}/crtendS.o
143.endif
144
145.include <bsd.prog.mk>
146