e8dc4dce105551eb090efe79d028b9fcd8d3aea4
[barrelfish] / hake / Config.hs.template
1 --------------------------------------------------------------------------
2 -- Copyright (c) 2007-2010, 2012, 2013, ETH Zurich.
3 -- Copyright (c) 2014, HP Labs.
4 -- All rights reserved.
5 --
6 -- This file is distributed under the terms in the attached LICENSE file.
7 -- If you do not find this file, copies can be found by writing to:
8 -- ETH Zurich D-INFK, CAB F.78, Universitaetstr. 6, CH-8092 Zurich,
9 -- Attn: Systems Group.
10 --
11 -- Configuration options for Hake
12 -- 
13 --------------------------------------------------------------------------
14
15 module Config where
16
17 import HakeTypes
18 import Data.Char
19 import qualified Args
20 import Data.List
21
22 -- path to source and install directories; these are automatically set by hake.sh at setup time 
23 source_dir :: String
24 -- source_dir = undefined -- (set by hake.sh, see end of file)
25
26 install_dir :: String
27 -- install_dir = undefined -- (set by hake.sh, see end of file)
28
29 -- Set of architectures for which to generate rules
30 architectures :: [String]
31 -- architectures = undefined -- (set by hake.sh, see end of file)
32
33 -- Optimisation flags (-Ox -g etc.) passed to compiler
34 cOptFlags :: String
35 cOptFlags = "-g -O2"
36
37 -- Selects which libc to compile with, "oldc" or "newlib"
38 libc :: String
39 --libc = "oldc"
40 libc = "newlib"
41
42 newlib_malloc :: String
43 --newlib_malloc = "sbrk"     -- use sbrk and newlib's malloc()
44 --newlib_malloc = "dlmalloc" -- use dlmalloc
45 newlib_malloc = "oldmalloc"
46
47 -- Configure pagesize for libbarrelfish's morecore implementation
48 -- x86_64 accepts "small", "large", and "huge" for 4kB, 2MB and 1GB pages
49 -- respectively. x86_32 accepts "small" and "large" for 4kB and 2MB/4MB pages
50 -- respectively. All other architectures default to their default page size.
51 morecore_pagesize :: String
52 morecore_pagesize = "large"
53
54 -- Use a frame pointer
55 use_fp :: Bool
56 use_fp = True
57
58 -- Default timeslice duration in milliseconds
59 timeslice :: Integer
60 timeslice = 80
61
62 -- Put kernel into microbenchmarks mode
63 microbenchmarks :: Bool
64 microbenchmarks = False
65
66 -- Enable tracing
67 trace :: Bool
68 trace = False
69
70 -- Enable QEMU networking. (ie. make network work in small memory)
71 support_qemu_networking :: Bool
72 support_qemu_networking  = False
73
74 -- armv7 platform to build for
75 -- Currently available: gem5, pandaboard
76 armv7_platform :: String
77 --armv7_platform = "gem5"
78 armv7_platform = "pandaboard"
79
80 -- on pandaboard, build a heterogenous image and let the cortex-A9 set up and start the
81 -- cortex-M3 processor (build targets "heteropanda_slave" and "heteropanda_master_image")
82 heteropanda :: Bool
83 heteropanda = False
84
85 -- enable network tracing
86 trace_network_subsystem :: Bool
87 trace_network_subsystem = False
88
89 -- May want to disable LRPC to improve trace visuals
90 trace_disable_lrpc :: Bool
91 trace_disable_lrpc = False
92
93 -- use Kaluga
94 use_kaluga_dvm :: Bool
95 use_kaluga_dvm = True
96
97 -- Domain and driver debugging
98 global_debug :: Bool
99 global_debug = False
100
101 e1000n_debug :: Bool
102 e1000n_debug = False
103
104 eMAC_debug :: Bool
105 eMAC_debug = False
106
107 rtl8029_debug :: Bool
108 rtl8029_debug = False
109
110 ahcid_debug :: Bool
111 ahcid_debug = False
112
113 libahci_debug :: Bool
114 libahci_debug = False
115
116 vfs_debug :: Bool
117 vfs_debug = False
118
119 ethersrv_debug :: Bool
120 ethersrv_debug = False
121
122 netd_debug :: Bool
123 netd_debug = False
124
125 libacpi_debug :: Bool 
126 libacpi_debug = False
127
128 acpi_interface_debug :: Bool
129 acpi_interface_debug = False
130
131 lpc_timer_debug :: Bool
132 lpc_timer_debug = False
133
134 lwip_debug :: Bool
135 lwip_debug = False
136
137 libpci_debug :: Bool
138 libpci_debug = False
139
140 usrpci_debug :: Bool
141 usrpci_debug = False
142
143 timer_debug :: Bool
144 timer_debug = False
145
146 eclipse_kernel_debug :: Bool
147 eclipse_kernel_debug = False
148
149 skb_debug :: Bool
150 skb_debug = False
151
152 skb_client_debug :: Bool
153 skb_client_debug = False
154
155 flounder_debug :: Bool
156 flounder_debug = False
157
158 flounder_failed_debug :: Bool
159 flounder_failed_debug = False
160
161 webserver_debug :: Bool
162 webserver_debug = False
163
164 sqlclient_debug :: Bool
165 sqlclient_debug = False
166
167 sqlite_debug :: Bool
168 sqlite_debug = False
169
170 sqlite_backend_debug :: Bool
171 sqlite_backend_debug = False
172
173 nfs_debug :: Bool
174 nfs_debug = False
175
176 rpc_debug :: Bool
177 rpc_debug = False
178
179 loopback_debug :: Bool
180 loopback_debug = False
181
182 octopus_debug :: Bool
183 octopus_debug = False
184
185 term_debug :: Bool
186 term_debug = False
187
188 serial_debug :: Bool
189 serial_debug = False
190
191 -- Deadlock debugging
192 debug_deadlocks :: Bool
193 debug_deadlocks = False
194
195 -- Partitioned memory server
196 memserv_percore :: Bool
197 memserv_percore = False
198
199 -- Lazy THC implementation (requires use_fp = True)
200 lazy_thc :: Bool
201 lazy_thc | elem "armv7" architectures   = False
202          | elem "armv5" architectures   = False
203          | elem "xscale" architectures  = False
204          | otherwise                    = True
205
206 -- Enable capability tracing debug facility
207 caps_trace :: Bool
208 caps_trace = False
209
210 -- Mapping Database configuration options (this affects lib/mdb/)
211 -- enable extensive tracing of mapping db implementation
212 mdb_trace :: Bool
213 mdb_trace = False
214
215 -- enable tracing of top level mdb_insert, mdb_remove calls
216 mdb_trace_no_recursive :: Bool
217 mdb_trace_no_recursive = False
218
219 -- fail on invariant violations
220 mdb_fail_invariants :: Bool
221 mdb_fail_invariants = True
222
223 -- check invariants before/after mdb_insert/mdb_remove.
224 mdb_check_invariants :: Bool
225 mdb_check_invariants = False
226
227 -- recheck invariants at each tracing point
228 mdb_recheck_invariants :: Bool
229 mdb_recheck_invariants = False
230
231 -- enable extensive tracing of mapping db implementation (userspace version)
232 mdb_trace_user :: Bool
233 mdb_trace_user = False
234
235 -- fail on invariant violations
236 mdb_fail_invariants_user :: Bool
237 mdb_fail_invariants_user = True
238
239 -- recheck invariants at each tracing point
240 mdb_recheck_invariants_user :: Bool
241 mdb_recheck_invariants_user = True
242
243 -- check invariants before/after mdb_insert/mdb_remove.
244 mdb_check_invariants_user :: Bool
245 mdb_check_invariants_user = True
246
247 -- Select scheduler
248 data Scheduler = RBED | RR deriving (Show,Eq)
249 scheduler :: Scheduler
250 scheduler = RBED
251
252 -- Physical Address Extensions (PAE)-enabled paging on x86-32
253 pae_paging :: Bool
254 pae_paging = False
255
256 -- Page Size Extensions (PSE)-enabled paging on x86-32
257 -- Always enabled when pae_paging == True, regardless of value
258 pse_paging :: Bool
259 pse_paging = False
260
261 -- No Execute Extensions (NXE)-enabled paging on x86-32
262 -- May not be True when pae_paging == False
263 nxe_paging :: Bool
264 nxe_paging = False
265
266 oneshot_timer :: Bool
267 oneshot_timer = False
268
269 defines :: [RuleToken]
270 defines = [ Str ("-D" ++ d) | d <- [  
271              if microbenchmarks then "CONFIG_MICROBENCHMARKS" else "",
272              if trace then "CONFIG_TRACE" else "",
273              if support_qemu_networking then "CONFIG_QEMU_NETWORK" else "",
274              if trace_network_subsystem then "NETWORK_STACK_TRACE" else "",
275              if trace_disable_lrpc then "TRACE_DISABLE_LRPC" else "",
276              if global_debug then "GLOBAL_DEBUG" else "",
277              if e1000n_debug then "E1000N_SERVICE_DEBUG" else "",
278              if ahcid_debug then "AHCI_SERVICE_DEBUG" else "",
279              if libahci_debug then "AHCI_LIB_DEBUG" else "",
280              if vfs_debug then "VFS_DEBUG" else "",
281              if eMAC_debug then "EMAC_SERVICE_DEBUG" else "",
282              if rtl8029_debug then "RTL8029_SERVICE_DEBUG" else "",
283              if ethersrv_debug then "ETHERSRV_SERVICE_DEBUG" else "",
284              if netd_debug then "NETD_SERVICE_DEBUG" else "",
285              if libacpi_debug then "ACPI_DEBUG_OUTPUT" else "",
286              if acpi_interface_debug then "ACPI_BF_DEBUG" else "",
287              if lpc_timer_debug then "LPC_TIMER_DEBUG" else "",
288              if lwip_debug then "LWIP_BARRELFISH_DEBUG" else "",
289              if libpci_debug then "PCI_CLIENT_DEBUG" else "",
290              if usrpci_debug then "PCI_SERVICE_DEBUG" else "",
291              if timer_debug then "TIMER_CLIENT_DEBUG" else "",
292              if eclipse_kernel_debug then "ECLIPSE_KERNEL_DEBUG" else "",
293              if skb_debug then "SKB_SERVICE_DEBUG" else "",
294              if skb_client_debug then "SKB_CLIENT_DEBUG" else "",
295              if flounder_debug then "FLOUNDER_DEBUG" else "",
296              if flounder_failed_debug then "FLOUNDER_FAILED_DEBUG" else "",
297              if webserver_debug then "WEBSERVER_DEBUG" else "",
298              if sqlclient_debug then "SQL_CLIENT_DEBUG" else "",
299              if sqlite_debug then "SQL_SERVICE_DEBUG" else "",
300              if sqlite_backend_debug then "SQL_BACKEND_DEBUG" else "",
301              if nfs_debug then "NFS_CLIENT_DEBUG" else "",
302              if rpc_debug then "RPC_DEBUG" else "",
303              if loopback_debug then "LOOPBACK_DEBUG" else "",
304              if octopus_debug then "DIST_SERVICE_DEBUG" else "",
305              if term_debug then "TERMINAL_LIBRARY_DEBUG" else "",
306              if serial_debug then "SERIAL_DRIVER_DEBUG" else "",
307              if debug_deadlocks then "CONFIG_DEBUG_DEADLOCKS" else "",
308              if memserv_percore then "CONFIG_MEMSERV_PERCORE" else "",
309              if lazy_thc then "CONFIG_LAZY_THC" else "",
310              if pae_paging then "CONFIG_PAE" else "",
311              if pse_paging then "CONFIG_PSE" else "",
312              if nxe_paging then "CONFIG_NXE" else "",
313              if libc == "oldc" then "CONFIG_OLDC" else "CONFIG_NEWLIB",
314              if oneshot_timer then "CONFIG_ONESHOT_TIMER" else "",
315              if use_kaluga_dvm then "USE_KALUGA_DVM" else "",
316              if heteropanda then "HETEROPANDA" else "",
317              if caps_trace then "TRACE_PMEM_CAPS" else ""
318              ], d /= "" ]
319
320 -- Sets the include path for the libc
321 libcInc :: String
322 libcInc = if libc == "oldc" then "/include/oldc"
323           else "/lib/newlib/newlib/libc/include"
324
325 -- Sets the include path for lwIP
326 lwipInc :: String
327 lwipInc = "/lib/lwip/src/include"
328 lwipxxxInc :: String
329 lwipxxxInc = "/lib/lwip/src/include/ipv4"
330
331 -- some defines depend on the architecture/compile options
332 arch_defines :: Options -> [RuleToken]
333 arch_defines opts
334     -- enable config flags for interconnect drivers in use for this arch
335     = [ Str ("-D" ++ d)
336        | d <- ["CONFIG_INTERCONNECT_DRIVER_" ++ (map toUpper n)
337                | n <- optInterconnectDrivers opts]
338       ]
339     -- enable config flags for flounder backends in use for this arch
340     ++ [ Str ("-D" ++ d)
341        | d <- ["CONFIG_FLOUNDER_BACKEND_" ++ (map toUpper n)
342                | n <- optFlounderBackends opts]
343       ]
344
345 -- newlib common compile flags (maybe put these in a config.h file?)
346 newlibAddCFlags :: [String]
347 newlibAddCFlags = [ "-DPACKAGE_NAME=\"newlib\"" ,
348                     "-DPACKAGE_TARNAME=\"newlib\"",
349                     "-DPACKAGE_VERSION=\"1.19.0\"",
350                     "-DPACKAGE_BUGREPORT=\"\"",
351                     "-DPACKAGE_URL=\"\"",
352                     "-D_I386MACH_ALLOW_HW_INTERRUPTS",
353                     "-DMISSING_SYSCALL_NAMES",
354                     "-D_WANT_IO_C99_FORMATS",
355                     "-D_COMPILING_NEWLIB",
356                     "-D_WANT_IO_LONG_LONG",
357                     "-D_WANT_IO_LONG_DOUBLE",
358                     "-D_MB_CAPABLE",
359                     "-D__BSD_VISIBLE"]