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