Makefile.rump revision 1.68
1#	$NetBSD: Makefile.rump,v 1.68 2012/11/22 21:21:21 pooka Exp $
2#
3
4WARNS?=		3	# XXX: src/sys won't compile with -Wsign-compare yet
5NOLINT=		# kernel code
6
7.include <bsd.own.mk>
8
9# If RUMPKMOD is _not_ set (only on capable archs, from bsd.own.mk),
10# use rump ABI instead of the NetBSD kernel ABI.
11.ifndef RUMPKMOD
12CPPFLAGS:=	-I${RUMPTOP}/include ${CPPFLAGS}
13CPPFLAGS+=	-D_RUMPKERNEL
14.else
15CPPFLAGS+=	-D_RUMP_NATIVE_ABI
16.endif
17
18CPPFLAGS+=	-DMAXUSERS=32
19CPPFLAGS+=	-DCOMPAT_50=1
20
21CPPFLAGS+=	-nostdinc
22CFLAGS+=	-ffreestanding -fno-strict-aliasing
23
24CWARNFLAGS+=	-Wno-format-zero-length -Wno-pointer-sign
25CPPFLAGS+=	-D_KERNEL -DMULTIPROCESSOR -D_MODULE -DMODULAR
26CPPFLAGS+=	-DDEBUGPRINT
27CPPFLAGS+=	-I${.CURDIR} -I.
28CPPFLAGS+=	-I${RUMPTOP}/../../common/include
29CPPFLAGS+=	-I${RUMPTOP}/include
30CPPFLAGS+=	-I${RUMPTOP}/librump/rumpkern/opt
31
32.ifdef NEED_ISYSTEM
33CPPFLAGS+=	-isystem ${RUMPTOP}/../arch
34CPPFLAGS+=	-isystem ${RUMPTOP}/..
35.else
36CPPFLAGS+=	-I${RUMPTOP}/../arch
37CPPFLAGS+=	-I${RUMPTOP}/..
38.endif
39
40LDFLAGS+=	-Wl,-T ${RUMPTOP}/ldscript.rump
41
42RUMP_DIAGNOSTIC?=yes
43.if ${RUMP_DIAGNOSTIC} == "yes"
44CPPFLAGS+=	-DDIAGNOSTIC
45.endif
46
47.ifdef RUMP_DEBUG
48CPPFLAGS+=	-DDEBUG
49.endif
50
51.ifdef RUMP_LOCKDEBUG
52CPPFLAGS+=	-DLOCKDEBUG
53.endif
54
55# kernel libs should not get linked against libc
56# XXX: actually, we would like to enable this but cannot, since it
57# also leaves out libgcc, it causes problems on some platforms.
58# revisit some day.
59#LDFLAGS+=	-nodefaultlibs
60
61# make sure __NetBSD__ gets defined (for builds on non-NetBSD)
62# also, give those builds a way to undef the local compiler's macros
63CPPFLAGS+=	-D__NetBSD__ ${RUMPKERN_UNDEF}
64
65RUMPKERNEL=	This is NetBSD and I am the rump.  Good evening.
66
67# workaround: evbppc is not a well-defined arch
68.if (${MACHINE} == "evbppc")
69CPPFLAGS+=	-DPPC_OEA
70.endif
71
72# If this file changes, we need a full rebuild
73DPSRCS+=	${RUMPTOP}/Makefile.rump
74
75#
76# Rename library symbols before use.  If a symbol does not already belong
77# to a rump namespace ("rump" or "RUMP"), prefix it with "rumpns".  This
78# avoids accidentally linking any kernel symbol against host platform
79# libraries.  The only non-renamed symbols are linkset delimiters and
80# the GOT, which are more a property of the compiler than the kernel.
81#
82# Some toolchains generate unresolved symbols which are supposed to be
83# satisfied by the toolchain itself when the program is linked.
84# Unfortunately, we do not know which of the symbols are generated by
85# the toolchain.  Worse, they vary from platform to platform and
86# toolchain to toolchain.  The good news, however, is that this will
87# be detected by a compile-time failure, so we can fairly easily manage
88# a quirktable here.
89#
90# We also allow calling ourselves externally with e.g.:
91# make -f /sys/rump/Makefile.rump RUMP_SYMREN=ffs.kobj
92#
93.if ${MACHINE_CPU} == "mips"
94_SYMQUIRK='|_gp_disp'
95.elif ${MACHINE_CPU} == "hppa"
96_SYMQUIRK='|\$$\$$'
97.elif ${MACHINE_ARCH} == "powerpc64"
98_SYMQUIRK="|PF_funcs"
99.endif
100
101#
102# Prefix quirks.  At least one toolchain generates global
103# symbols with prefixes which really need to remain as prefixes
104# (i.e. the '.' on the front of some ppc64 globals).  The
105# way to know if you have the problem is if you get later
106# complaints about symbols like 'rumpns_XrumpBLAH' or 'XrumpBLAH';
107# the 'X' part was added by the toolchain and will need to
108# be mentioned here.
109# 
110.if ${MACHINE_ARCH} == "powerpc64"
111_PQ="\.?"
112.else
113_PQ=
114.endif
115
116rump_symren: __archivebuild
117.if !defined(RUMP_SYMREN)
118	@echo "Must supply RUMP_SYMREN for target rump_symren"
119	@false
120.endif
121
122# if we are called from lib build (RUMP_SYMREN is not specified),
123# build the arrrrchive.  otherwise just rename symbols.
124__archivebuild: .USE
125.if defined(RUMP_SYMREN) && defined(RUMPTOP)
126	@echo "ERROR: RUMP_SYMREN can only be used standalone"
127	@false
128.endif
129.if defined(RUMP_SYMREN)
130	${_MKMSG} " symbol rename " ${RUMP_SYMREN}
131.else
132	${_MKTARGET_BUILD}
133	rm -f ${.TARGET}
134	${AR} ${_ARFL} ${.TARGET} `NM=${NM} ${LORDER} ${.ALLSRC:M*o} | ${TSORT}`
135.endif
136	${NM} -go ${RUMP_SYMREN:U${.TARGET}} | ${TOOL_AWK} '	\
137	    $$NF!~/^'${_PQ}'(rump|RUMP|__|_GLOBAL_OFFSET_TABLE'${_SYMQUIRK}')/ \
138	      {s = $$NF; sub(/^'${_PQ}'/, "&rumpns_", s); print $$NF, s}' \
139	    | sort | uniq  > renametab.${.TARGET}
140	${OBJCOPY} --preserve-dates --redefine-syms \
141	    renametab.${.TARGET} ${RUMP_SYMREN:U${.TARGET}}
142	rm -f renametab.${.TARGET}
143.if !defined(RUMP_SYMREN)
144	${AR} ${_ARRANFL} ${.TARGET}
145.endif
146
147_BSD_IOCONF_MK_USER_=1
148.include <bsd.ioconf.mk>
149
150.-include "${NETBSDSRCDIR}/sys/arch/${MACHINE_CPU}/include/Makefile.inc"
151.-include "${NETBSDSRCDIR}/sys/arch/${MACHINE}/include/Makefile.inc"
152