README.compileopts revision 1.10
1	$NetBSD: README.compileopts,v 1.10 2015/06/03 10:49:14 pooka Exp $
2
3This file describes compile-time options for rump kernels.  Additionally,
4NetBSD build options will have an effect.  See src/share/mk/bsd.README
5for a desciption of NetBSD build options.
6
7Note: after changing an option, do a clean build.
8
9Global options:
10
11
12    RUMP_DIAGNOSTIC
13
14values:	yes|no
15defval:	yes
16effect:	Iff "yes", build with -DDIAGNOSTIC.
17
18
19    RUMP_DEBUG
20
21values:	defined / not defined
22effect:	Iff defined, build with -DDEBUG.
23
24
25    RUMP_LOCKDEBUG
26
27values:	defined / not defined
28effect:	Iff defined, build with -DLOCKDEBUG.
29
30
31    RUMP_KTRACE
32
33values:	yes|no
34defval:	yes
35effect:	Iff "yes", build with -DKTRACE.
36
37
38    RUMP_LOCKS_UP
39
40values: yes|no
41defval:	no
42effect: If "yes", build rump kernel with uniprocess-optimized locking.
43	An implication of this is that RUMP_NCPU==1 is required at
44	runtime.  If "no", build with multiprocessor-capable locking.
45
46
47    RUMP_UNREAL_ALLOCATORS
48
49values: yes|no
50defval:	no
51effect: If "yes", build version of kmem_alloc, pool and pool_cache
52	that directly relegate allocation to a hypercall.  If "no",
53	build the regular NetBSD memory allocators which use
54	page-sized memory allocation hypercalls.
55
56
57    RUMP_VIRTIF
58
59values:	yes|no
60defval:	yes
61effect:	Iff "yes", build the virt(4) network interface.  Turning this
62	off may be necessary on systems that lack the necessary headers,
63	e.g. musl libc based Linux.
64
65
66    RUMP_CURLWP
67
68values: hypercall/__thread/register or <undefined>
69defval: <undefined>
70effect: Control how curlwp is obtained in a rump kernel.  This is
71	a very frequently accessed thread-local variable, and optimizing
72	access has a significant performance impact.  Note that all
73	options are not available on hosts/machine architectures.
74	<undefined> - use default implementation (currently "hypercall")
75	hypercall   - use a hypercall to fetch the value
76	__thread    - use the __thread feature to fetch value via TLS
77	register    - use a dedicated register (implies -ffixed)
78
79
80    RUMP_NBCOMPAT
81
82values: comma-separated list of releases; e.g. "60,70"; or "all" or "none"
83defval:	all
84effect:	Builds NetBSD COMPAT_nn code for each of the elements in the list.
85	This option is useful only when building rump kernels for
86	NetBSD userspace, and an empty value may be supplied elsewhere.
87
88
89================================================================================
90
91Rumpuser options:
92
93    RUMPUSER_THREADS
94
95values: pthread/none/fiber or <undefined>
96defval: <undefined>
97effect: Define the way threading is implemented in the rumpuser hypercall
98	implmentation.
99	<undefined> - use default implementation (currently "pthread")
100	pthread     - use pthreads to implement threading
101	none        - do not support kernel threads at all
102	fiber       - user a fiber interface, cooperatively scheduled contexts
103
104
105================================================================================
106
107Per-component options:
108
109    RUMP_SYM_NORENAME
110
111values: regexp matching symbol names
112defval: <undefined>
113effect: Causes matching symbols from the component to not be renamed
114	into the rump kernel symbol namespace (rumpns_).  This option
115	can only be used in embedded environments where there is full
116	control over the platform's namespace.	Conversely, this option
117	cannot be used in kernel components which are not meant to be
118	tied to a specific platform.  Note: the value is processed by
119	make and must be appropriately escaped.  example:
120	RUMP_SYM_NORENAME=HYPERVISOR_|block$$
121	will not rename "^HYPERVISOR_" or "^block$"
122
123
124================================================================================
125
126
127The rest of the options described in this file are not intended to be
128set by users, but by the package building rump kernels.
129
130
131    RUMP_KERNEL_IS_LIBC
132
133values:	defined / not defined
134effect: Iff defined, export normal system call symbols from libc.
135	For example, without this option rump_sys_open() is exported.
136	With this option, both open() and rump_sys_open() are exported.
137	This option is meant for building systems where a rump kernel
138	is the only operating system like component.
139
140
141    RUMP_LDSCRIPT
142
143values: no/GNU/sun/ctor
144defval: GNU
145effect: Select the linker script to be used for linking rump kernel shared
146	library components.
147	no	- do not use a linker script
148	GNU	- use a linker script for GNU ld 2.18 and later
149	sun	- use a linker script for the Solaris linker
150	ctor	- do not use a linker script, make the code
151		  generate __attribute__((constructor))
152