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