# $NetBSD: Makefile.rumpkern,v 1.192 2024/12/22 23:24:20 riastradh Exp $ # IOCONFDIR:= ${.PARSEDIR} IOCONF= MAINBUS.ioconf LIB= rump COMMENT= Rump kernel base MAN= rump.3 rump_lwproc.3 .PATH: ${RUMPTOP}/librump/rumpkern \ ${RUMPTOP}/librump/rumpkern/arch/generic \ ${RUMPTOP}/../kern \ ${RUMPTOP}/../uvm \ ${RUMPTOP}/../conf \ ${RUMPTOP}/../dev \ ${RUMPTOP}/../crypto/blake2 \ ${RUMPTOP}/../crypto/chacha \ ${RUMPTOP}/../crypto/cprng_fast \ ${RUMPTOP}/../crypto/nist_hash_drbg \ ${RUMPTOP}/../secmodel \ ${RUMPTOP}/../secmodel/extensions \ ${RUMPTOP}/../secmodel/suser \ ${RUMPTOP}/../compat/common # # Source modules, first the ones specifically implemented for librump. # SRCS+= rump.c rumpcopy.c cons.c emul.c etfs_wrap.c intr.c \ lwproc.c klock.c kobj_rename.c ltsleep.c scheduler.c \ signals.c sleepq.c threads.c vm.c hyperentropy.c \ accessors.c SRCS+= rump_autoconf.c rumpkern_syscalls.c # autogenerated into the correct namespace RUMPOBJ_NORENAME= rump_syscalls.o rump_syscalls.pico rump_syscalls.po .ifdef RUMP_KERNEL_IS_LIBC CPPFLAGS+= -DRUMP_KERNEL_IS_LIBC .endif # Multiprocessor or uniprocessor locking. TODO: select right # locking at runtime. .if ${RUMP_LOCKS_UP:Uno} == "yes" SRCS+= locks_up.c .else SRCS+= locks.c .endif vers.c: ${RUMPTOP}/../conf/newvers.sh ${RUMPTOP}/../conf/osrelease.sh \ ${RUMPTOP}/../sys/param.h ${_NETBSD_VERSION_DEPENDS} ${_MKMSG_CREATE} vers.c ${HOST_SH} ${RUMPTOP}/../conf/newvers.sh -i RUMP-ROAST -n -R SRCS+= vers.c CLEANFILES+= vers.c version # autogenerated # SRCS+= rump_syscalls.c rumpkern_if_wrappers.c # "auto"generated SRCS+= devsw.c # # std kernel sources # # sys/kern SRCS+= init_sysctl_base.c \ compat_stub.c \ kern_auth.c \ kern_cfglock.c \ kern_clock.c \ kern_descrip.c \ kern_entropy.c \ kern_event.c \ kern_hook.c \ kern_ksyms.c \ kern_malloc.c \ kern_module.c \ kern_module_hook.c \ kern_mutex_obj.c \ kern_ntptime.c \ kern_proc.c \ kern_prot.c \ kern_rate.c \ kern_reboot.c \ kern_resource.c \ kern_rwlock_obj.c \ kern_scdebug.c \ kern_stub.c \ kern_ssp.c \ kern_syscall.c \ kern_sysctl.c \ kern_tc.c \ kern_threadpool.c \ kern_time.c \ kern_timeout.c \ kern_uidinfo.c \ param.c \ subr_autoconf.c \ subr_callback.c \ subr_copy.c \ subr_cprng.c \ subr_cpu.c \ subr_device.c \ subr_devsw.c \ subr_evcnt.c \ subr_extent.c \ subr_hash.c \ subr_humanize.c \ subr_iostat.c \ subr_kcpuset.c \ subr_kmem.c \ subr_kobj.c \ subr_localcount.c \ subr_log.c \ subr_lwp_specificdata.c \ subr_once.c \ subr_pcq.c \ subr_percpu.c \ subr_pool.c \ subr_prf.c \ subr_pserialize.c \ subr_psref.c \ subr_specificdata.c \ subr_time.c \ subr_time_arith.c \ subr_thmap.c \ subr_vmem.c \ subr_workqueue.c \ subr_xcall.c \ sys_descrip.c \ sys_generic.c \ sys_getrandom.c \ sys_module.c \ sys_pipe.c \ sys_select.c \ syscalls.c \ uipc_sem.c # sys/uvm SRCS+= uvm_aobj.c uvm_readahead.c uvm_object.c uvm_swapstub.c SRCS+= uvm_page_array.c uvm_page_status.c # 4.4BSD secmodel. selection is hardcoded for now SRCS+= secmodel.c SRCS+= secmodel_suser.c SRCS+= secmodel_extensions.c SRCS+= secmodel_extensions_rump.c # stubs # sys/dev SRCS+= clock_subr.c # sys/crypto # Note: these are here only for cprng. More crypto algos for drivers # are available from the rumpkern_crypto component SRCS+= nist_hash_drbg.c SRCS+= cprng_fast.c SRCS+= chacha_impl.c SRCS+= chacha_ref.c SRCS+= chacha_selftest.c # BLAKE2 # for hash_address SRCS+= blake2s.c .include "${RUMPTOP}/Makefile.rump" .include # compat .if !empty(RUMP_NBCOMPAT:M50) SRCS+= kern_select_50.c SRCS+= kern_time_50.c SRCS+= rndpseudo_50.c .endif .ifdef RUMP_LOCKDEBUG SRCS+= subr_lockdebug.c .endif .if ${RUMP_KTRACE} == "yes" SRCS+= kern_ktrace.c .endif CPPFLAGS+= -I${RUMPTOP}/librump/rumpkern AFLAGS+= -D_LOCORE -Wa,--fatal-warnings # # If archdir exists, it is required to provide: # 1) kobj_reloc() and kobj_machdep() # 2) rump_cpu_bootstrap() # 3) ...? # 4) PROFIT! # # # Check if we are building compat. In compat mode we need to provide # the kernel of our compat target (amd64->i386 & sparc64->sparc), so # take MD stuff from the right arch. # .if defined(COMPAT_MACHINE_CPU) \ && exists(${RUMPTOP}/librump/rumpkern/arch/${COMPAT_MACHINE_CPU}) ARCHDIR= ${RUMPTOP}/librump/rumpkern/arch/${COMPAT_MACHINE_CPU} LIBKERN_ARCH= ${COMPAT_MACHINE_CPU} .elif defined(MLIBDIR) ARCHDIR= ${RUMPTOP}/librump/rumpkern/arch/${MLIBDIR} LIBKERN_ARCH= ${MLIBDIR} .elif exists(${RUMPTOP}/librump/rumpkern/arch/${MACHINE_CPU}) ARCHDIR= ${RUMPTOP}/librump/rumpkern/arch/${MACHINE_CPU} .else ARCHDIR= ${RUMPTOP}/librump/rumpkern/arch/${MACHINE_ARCH} .endif .if !exists(${ARCHDIR}) ARCHDIR= ${RUMPTOP}/librump/rumpkern/arch/generic .endif .include "${ARCHDIR}/Makefile.inc" .PATH: ${ARCHDIR} .if ${MACHINE} == "sun3" CPPFLAGS+= -Dsun3 .endif # include libkern source files KERNDIR=${RUMPTOP}/../lib/libkern .if "${_RUMP_NATIVEABI}" == "yes" KERNMISCCPPFLAGS+= -D_RUMPKERNEL .endif .include "${RUMPTOP}/../lib/libkern/Makefile.libkern" # Some architectures require a little special massage with atomic # compare-and-swap. This is because the kernel version is using # instructions or routines unavailable to us in userspace. # .if (${MACHINE_CPU} == "arm" && "${FEAT_LDREX}" != "yes") \ || ${MACHINE_ARCH} == "coldfire" || ${MACHINE_CPU} == "hppa" \ || ${MACHINE_CPU} == "mips" || ${MACHINE_CPU} == "sh3" \ || ${MACHINE_ARCH} == "vax" || ${MACHINE_ARCH} == "m68000" CPPFLAGS+= -I${RUMPTOP}/../../common/lib/libc/atomic SRCS+= atomic_cas_generic.c #SRCS+= rump_atomic_cas_up.c .endif COPTS.if_ethersubr.c+= ${CC_WNO_CAST_FUNCTION_TYPE} COPTS.kern_hook.c+= ${CC_WNO_CAST_FUNCTION_TYPE} COPTS.subr_vmem.c+= ${CC_WNO_CAST_FUNCTION_TYPE} COPTS.subr_pool.c+= ${CC_WNO_CAST_FUNCTION_TYPE} COPTS.rump.c+= ${CC_WNO_CAST_FUNCTION_TYPE} .include .include