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