1#         $NetBSD: Makefile.rumpkern,v 1.192 2024/12/22 23:24:20 riastradh Exp $
2#
3
4IOCONFDIR:=         ${.PARSEDIR}
5IOCONF=             MAINBUS.ioconf
6
7LIB=                rump
8COMMENT=  Rump kernel base
9
10MAN=                rump.3 rump_lwproc.3
11
12.PATH:    ${RUMPTOP}/librump/rumpkern                                 \
13          ${RUMPTOP}/librump/rumpkern/arch/generic                    \
14          ${RUMPTOP}/../kern                                          \
15          ${RUMPTOP}/../uvm                                           \
16          ${RUMPTOP}/../conf                                          \
17          ${RUMPTOP}/../dev                                           \
18          ${RUMPTOP}/../crypto/blake2                                 \
19          ${RUMPTOP}/../crypto/chacha                                 \
20          ${RUMPTOP}/../crypto/cprng_fast                                       \
21          ${RUMPTOP}/../crypto/nist_hash_drbg                         \
22          ${RUMPTOP}/../secmodel                                                \
23          ${RUMPTOP}/../secmodel/extensions                           \
24          ${RUMPTOP}/../secmodel/suser                                \
25          ${RUMPTOP}/../compat/common
26
27#
28# Source modules, first the ones specifically implemented for librump.
29#
30SRCS+=    rump.c rumpcopy.c cons.c emul.c etfs_wrap.c intr.c          \
31          lwproc.c klock.c kobj_rename.c ltsleep.c scheduler.c        \
32          signals.c sleepq.c threads.c vm.c hyperentropy.c  \
33          accessors.c
34
35SRCS+=    rump_autoconf.c rumpkern_syscalls.c
36
37# autogenerated into the correct namespace
38RUMPOBJ_NORENAME= rump_syscalls.o rump_syscalls.pico rump_syscalls.po
39
40.ifdef RUMP_KERNEL_IS_LIBC
41CPPFLAGS+= -DRUMP_KERNEL_IS_LIBC
42.endif
43
44# Multiprocessor or uniprocessor locking.  TODO: select right
45# locking at runtime.
46.if ${RUMP_LOCKS_UP:Uno} == "yes"
47SRCS+=    locks_up.c
48.else
49SRCS+=    locks.c
50.endif
51
52vers.c: ${RUMPTOP}/../conf/newvers.sh ${RUMPTOP}/../conf/osrelease.sh \
53                    ${RUMPTOP}/../sys/param.h ${_NETBSD_VERSION_DEPENDS}
54          ${_MKMSG_CREATE} vers.c
55          ${HOST_SH} ${RUMPTOP}/../conf/newvers.sh -i RUMP-ROAST -n -R
56SRCS+=              vers.c
57CLEANFILES+=        vers.c version
58
59# autogenerated
60#
61SRCS+=    rump_syscalls.c rumpkern_if_wrappers.c
62
63# "auto"generated
64SRCS+=    devsw.c
65
66#
67# std kernel sources
68#
69# sys/kern
70SRCS+=    init_sysctl_base.c  \
71          compat_stub.c                 \
72          kern_auth.c                   \
73          kern_cfglock.c                \
74          kern_clock.c                  \
75          kern_descrip.c                \
76          kern_entropy.c                \
77          kern_event.c                  \
78          kern_hook.c                   \
79          kern_ksyms.c                  \
80          kern_malloc.c                 \
81          kern_module.c                 \
82          kern_module_hook.c  \
83          kern_mutex_obj.c    \
84          kern_ntptime.c                \
85          kern_proc.c                   \
86          kern_prot.c                   \
87          kern_rate.c                   \
88          kern_reboot.c                 \
89          kern_resource.c               \
90          kern_rwlock_obj.c   \
91          kern_scdebug.c                \
92          kern_stub.c                   \
93          kern_ssp.c                    \
94          kern_syscall.c                \
95          kern_sysctl.c                 \
96          kern_tc.c           \
97          kern_threadpool.c   \
98          kern_time.c                   \
99          kern_timeout.c                \
100          kern_uidinfo.c                \
101          param.c                       \
102          subr_autoconf.c               \
103          subr_callback.c               \
104          subr_copy.c                   \
105          subr_cprng.c                  \
106          subr_cpu.c                    \
107          subr_device.c                 \
108          subr_devsw.c                  \
109          subr_evcnt.c                  \
110          subr_extent.c                 \
111          subr_hash.c                   \
112          subr_humanize.c               \
113          subr_iostat.c                 \
114          subr_kcpuset.c                \
115          subr_kmem.c                   \
116          subr_kobj.c                   \
117          subr_localcount.c   \
118          subr_log.c                    \
119          subr_lwp_specificdata.c       \
120          subr_once.c                   \
121          subr_pcq.c                    \
122          subr_percpu.c                 \
123          subr_pool.c                   \
124          subr_prf.c                    \
125          subr_pserialize.c   \
126          subr_psref.c                  \
127          subr_specificdata.c \
128          subr_time.c                   \
129          subr_time_arith.c   \
130          subr_thmap.c                  \
131          subr_vmem.c                   \
132          subr_workqueue.c    \
133          subr_xcall.c                  \
134          sys_descrip.c                 \
135          sys_generic.c                 \
136          sys_getrandom.c               \
137          sys_module.c                  \
138          sys_pipe.c                    \
139          sys_select.c                  \
140          syscalls.c                    \
141          uipc_sem.c
142
143# sys/uvm
144SRCS+=    uvm_aobj.c uvm_readahead.c uvm_object.c uvm_swapstub.c
145SRCS+=    uvm_page_array.c uvm_page_status.c
146
147# 4.4BSD secmodel.  selection is hardcoded for now
148SRCS+=    secmodel.c
149SRCS+=    secmodel_suser.c
150SRCS+=    secmodel_extensions.c
151SRCS+=    secmodel_extensions_rump.c    # stubs
152
153# sys/dev
154SRCS+=    clock_subr.c
155
156# sys/crypto
157# Note: these are here only for cprng.  More crypto algos for drivers
158# are available from the rumpkern_crypto component
159SRCS+=    nist_hash_drbg.c
160SRCS+=    cprng_fast.c
161SRCS+=    chacha_impl.c
162SRCS+=    chacha_ref.c
163SRCS+=    chacha_selftest.c
164
165# BLAKE2
166# for hash_address
167SRCS+=    blake2s.c
168
169.include "${RUMPTOP}/Makefile.rump"
170.include <bsd.own.mk>
171
172# compat
173.if !empty(RUMP_NBCOMPAT:M50)
174SRCS+=    kern_select_50.c
175SRCS+=    kern_time_50.c
176SRCS+=    rndpseudo_50.c
177.endif
178
179
180.ifdef RUMP_LOCKDEBUG
181SRCS+=              subr_lockdebug.c
182.endif
183
184.if ${RUMP_KTRACE} == "yes"
185SRCS+=              kern_ktrace.c
186.endif
187
188CPPFLAGS+=          -I${RUMPTOP}/librump/rumpkern
189AFLAGS+=  -D_LOCORE -Wa,--fatal-warnings
190
191#
192# If archdir exists, it is required to provide:
193# 1) kobj_reloc() and kobj_machdep()
194# 2) rump_cpu_bootstrap()
195# 3) ...?
196# 4) PROFIT!
197#
198
199#
200# Check if we are building compat.  In compat mode we need to provide
201# the kernel of our compat target (amd64->i386 & sparc64->sparc), so
202# take MD stuff from the right arch.
203#
204.if defined(COMPAT_MACHINE_CPU) \
205    && exists(${RUMPTOP}/librump/rumpkern/arch/${COMPAT_MACHINE_CPU})
206ARCHDIR=  ${RUMPTOP}/librump/rumpkern/arch/${COMPAT_MACHINE_CPU}
207LIBKERN_ARCH=       ${COMPAT_MACHINE_CPU}
208.elif defined(MLIBDIR)
209ARCHDIR=  ${RUMPTOP}/librump/rumpkern/arch/${MLIBDIR}
210LIBKERN_ARCH=       ${MLIBDIR}
211.elif exists(${RUMPTOP}/librump/rumpkern/arch/${MACHINE_CPU})
212ARCHDIR=  ${RUMPTOP}/librump/rumpkern/arch/${MACHINE_CPU}
213.else
214ARCHDIR=  ${RUMPTOP}/librump/rumpkern/arch/${MACHINE_ARCH}
215.endif
216.if !exists(${ARCHDIR})
217ARCHDIR=  ${RUMPTOP}/librump/rumpkern/arch/generic
218.endif
219
220.include "${ARCHDIR}/Makefile.inc"
221.PATH:    ${ARCHDIR}
222
223.if ${MACHINE} == "sun3"
224CPPFLAGS+=          -Dsun3
225.endif
226
227# include libkern source files
228KERNDIR=${RUMPTOP}/../lib/libkern
229.if "${_RUMP_NATIVEABI}" == "yes"
230KERNMISCCPPFLAGS+=  -D_RUMPKERNEL
231.endif
232.include "${RUMPTOP}/../lib/libkern/Makefile.libkern"
233
234# Some architectures require a little special massage with atomic
235# compare-and-swap.  This is because the kernel version is using
236# instructions or routines unavailable to us in userspace.
237#
238.if (${MACHINE_CPU} == "arm" && "${FEAT_LDREX}" != "yes") \
239    || ${MACHINE_ARCH} == "coldfire" || ${MACHINE_CPU} == "hppa" \
240    || ${MACHINE_CPU} == "mips" || ${MACHINE_CPU} == "sh3" \
241    || ${MACHINE_ARCH} == "vax" || ${MACHINE_ARCH} == "m68000"
242CPPFLAGS+=          -I${RUMPTOP}/../../common/lib/libc/atomic
243SRCS+=              atomic_cas_generic.c
244#SRCS+=             rump_atomic_cas_up.c
245.endif
246
247COPTS.if_ethersubr.c+=                  ${CC_WNO_CAST_FUNCTION_TYPE}
248COPTS.kern_hook.c+=           ${CC_WNO_CAST_FUNCTION_TYPE}
249COPTS.subr_vmem.c+=           ${CC_WNO_CAST_FUNCTION_TYPE}
250COPTS.subr_pool.c+=           ${CC_WNO_CAST_FUNCTION_TYPE}
251COPTS.rump.c+=                          ${CC_WNO_CAST_FUNCTION_TYPE}
252
253.include <bsd.lib.mk>
254.include <bsd.klinks.mk>
255