Quieted make a little.
[barrelfish] / hake / Config.hs.ubuntu
1 --------------------------------------------------------------------------
2 -- Copyright (c) 2007-2010, 2012, 2013, 2015 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 import System.FilePath
22
23 --
24 -- Toolchain definitions.  By default, these rely on $PATH 
25 --
26 findTool path prefix tool = path </> (prefix ++ tool)
27
28 -- ARM toolchain
29 arm_gnu_path = ""
30 arm_gnu_prefix = "arm-linux-gnueabi-"
31 arm_gnu_tool = findTool arm_gnu_path arm_gnu_prefix
32
33 arm_cc       = arm_gnu_tool "gcc"
34 arm_objcopy  = arm_gnu_tool "objcopy"
35 arm_objdump  = arm_gnu_tool "objdump"
36 arm_ar       = arm_gnu_tool "ar"
37 arm_ranlib   = arm_gnu_tool "ranlib"
38 arm_cxx      = arm_gnu_tool "g++"
39
40 -- ARM thumb (e.g. -M profile) toolchain
41 thumb_gnu_path = "/opt/gcc-arm-none-eabi-4_6-2012q4/bin"
42 thumb_gnu_prefix = "arm-none-eabi-"
43 thumb_gnu_tool = findTool thumb_gnu_path thumb_gnu_prefix
44
45 thumb_cc       = thumb_gnu_tool "gcc"
46 thumb_objcopy  = thumb_gnu_tool "objcopy"
47 thumb_objdump  = thumb_gnu_tool "objdump"
48 thumb_ar       = thumb_gnu_tool "ar"
49 thumb_ranlib   = thumb_gnu_tool "ranlib"
50 thumb_cxx      = thumb_gnu_tool "g++"
51
52 -- ARM big-endian (e.g. XScale) toolchain
53 armeb_gnu_path = "/opt/gcc-linaro-4.9-2015.02-3-x86_64_armeb-eabi/bin"
54 armeb_gnu_prefix = "armeb-eabi-"
55 armeb_gnu_tool = findTool armeb_gnu_path armeb_gnu_prefix
56
57 armeb_cc       = armeb_gnu_tool "gcc"
58 armeb_objcopy  = armeb_gnu_tool "objcopy"
59 armeb_objdump  = armeb_gnu_tool "objdump"
60 armeb_ar       = armeb_gnu_tool "ar"
61 armeb_ranlib   = armeb_gnu_tool "ranlib"
62 armeb_cxx      = armeb_gnu_tool "g++"
63
64 -- X86 (32/64) toolchain
65 x86_gnu_path = ""
66 x86_gnu_prefix = ""
67 x86_gnu_tool = findTool x86_gnu_path x86_gnu_prefix
68
69 x86_cc       = x86_gnu_tool "gcc"
70 x86_cxx      = x86_gnu_tool "g++"
71
72 -- Xeon Phi toolchain
73 k1om_gnu_path = ""
74 k1om_gnu_prefix = "k1om-mpss-linux-"
75 k1om_gnu_tool = findTool k1om_gnu_path k1om_gnu_prefix
76
77 k1om_cc      = k1om_gnu_tool "gcc"
78 k1om_objcopy = k1om_gnu_tool "objcopy"
79 k1om_objdump = k1om_gnu_tool "objdump"
80 k1om_ar      = k1om_gnu_tool "ar"
81 k1om_ranlib  = k1om_gnu_tool "ranlib"
82 k1om_cxx     = k1om_gnu_tool "g++"
83
84 gem5         = "gem5.fast"
85 runghc       = "runghc"    -- run GHC interactively
86 circo        = "circo"     -- from graphviz
87 dot          = "dot"       --   "    "
88 inkscape     = "inkscape"
89
90 -- path to source and install directories; these are automatically set by hake.sh at setup time 
91 source_dir :: String
92 -- source_dir = undefined -- (set by hake.sh, see end of file)
93
94 install_dir :: String
95 -- install_dir = undefined -- (set by hake.sh, see end of file)
96
97 -- Set of architectures for which to generate rules
98 architectures :: [String]
99 -- architectures = undefined -- (set by hake.sh, see end of file)
100
101 -- Optimisation flags (-Ox -g etc.) passed to compiler
102 cOptFlags :: [String]
103 cOptFlags = ["-g", "-O2"]
104
105 -- Selects which libc to compile with, "oldc" or "newlib"
106 libc :: String
107 --libc = "oldc"
108 libc = "newlib"
109
110 newlib_malloc :: String
111 --newlib_malloc = "sbrk"     -- use sbrk and newlib's malloc()
112 --newlib_malloc = "dlmalloc" -- use dlmalloc
113 newlib_malloc = "oldmalloc"
114
115 -- Configure pagesize for libbarrelfish's morecore implementation
116 -- x86_64 accepts "small", "large", and "huge" for 4kB, 2MB and 1GB pages
117 -- respectively. x86_32 accepts "small" and "large" for 4kB and 2MB/4MB pages
118 -- respectively. All other architectures default to their default page size.
119 morecore_pagesize :: String
120 morecore_pagesize = "small"
121
122 -- Use a frame pointer
123 use_fp :: Bool
124 use_fp = True
125
126 -- Default timeslice duration in milliseconds
127 timeslice :: Integer
128 timeslice = 80
129
130 -- Put kernel into microbenchmarks mode
131 microbenchmarks :: Bool
132 microbenchmarks = False
133
134 -- Enable tracing
135 trace :: Bool
136 trace = False
137
138 -- Enable QEMU networking. (ie. make network work in small memory)
139 support_qemu_networking :: Bool
140 support_qemu_networking  = False
141
142 -- armv7 platform to build for
143 -- Currently available: gem5, pandaboard
144 armv7_platform :: String
145 --armv7_platform = "gem5"
146 armv7_platform = "pandaboard"
147
148 -- on pandaboard, build a heterogenous image and let the cortex-A9 set up and start the
149 -- cortex-M3 processor (build targets "heteropanda_slave" and "heteropanda_master_image")
150 heteropanda :: Bool
151 heteropanda = False
152
153 -- enable network tracing
154 trace_network_subsystem :: Bool
155 trace_network_subsystem = False
156
157 -- May want to disable LRPC to improve trace visuals
158 trace_disable_lrpc :: Bool
159 trace_disable_lrpc = False
160
161 -- use Kaluga
162 use_kaluga_dvm :: Bool
163 use_kaluga_dvm = True
164
165 -- Domain and driver debugging
166 global_debug :: Bool
167 global_debug = False
168
169 e1000n_debug :: Bool
170 e1000n_debug = False
171
172 eMAC_debug :: Bool
173 eMAC_debug = False
174
175 rtl8029_debug :: Bool
176 rtl8029_debug = False
177
178 ahcid_debug :: Bool
179 ahcid_debug = False
180
181 libahci_debug :: Bool
182 libahci_debug = False
183
184 vfs_debug :: Bool
185 vfs_debug = False
186
187 ethersrv_debug :: Bool
188 ethersrv_debug = False
189
190 netd_debug :: Bool
191 netd_debug = False
192
193 libacpi_debug :: Bool 
194 libacpi_debug = False
195
196 acpi_interface_debug :: Bool
197 acpi_interface_debug = False
198
199 lpc_timer_debug :: Bool
200 lpc_timer_debug = False
201
202 lwip_debug :: Bool
203 lwip_debug = False
204
205 libpci_debug :: Bool
206 libpci_debug = False
207
208 usrpci_debug :: Bool
209 usrpci_debug = False
210
211 timer_debug :: Bool
212 timer_debug = False
213
214 eclipse_kernel_debug :: Bool
215 eclipse_kernel_debug = False
216
217 skb_debug :: Bool
218 skb_debug = False
219
220 skb_client_debug :: Bool
221 skb_client_debug = False
222
223 flounder_debug :: Bool
224 flounder_debug = False
225
226 flounder_failed_debug :: Bool
227 flounder_failed_debug = False
228
229 webserver_debug :: Bool
230 webserver_debug = False
231
232 sqlclient_debug :: Bool
233 sqlclient_debug = False
234
235 sqlite_debug :: Bool
236 sqlite_debug = False
237
238 sqlite_backend_debug :: Bool
239 sqlite_backend_debug = False
240
241 nfs_debug :: Bool
242 nfs_debug = False
243
244 rpc_debug :: Bool
245 rpc_debug = False
246
247 loopback_debug :: Bool
248 loopback_debug = False
249
250 octopus_debug :: Bool
251 octopus_debug = False
252
253 term_debug :: Bool
254 term_debug = False
255
256 serial_debug :: Bool
257 serial_debug = False
258
259 -- Deadlock debugging
260 debug_deadlocks :: Bool
261 debug_deadlocks = False
262
263 -- Partitioned memory server
264 memserv_percore :: Bool
265 memserv_percore = False
266
267 -- Lazy THC implementation (requires use_fp = True)
268 lazy_thc :: Bool
269 lazy_thc | elem "armv7" architectures   = False
270      | elem "armv5" architectures   = False
271      | elem "xscale" architectures  = False
272          | otherwise                    = True
273
274 -- Enable capability tracing debug facility
275 caps_trace :: Bool
276 caps_trace = False
277
278 -- Mapping Database configuration options (this affects lib/mdb/)
279 -- enable extensive tracing of mapping db implementation
280 mdb_trace :: Bool
281 mdb_trace = False
282
283 -- enable tracing of top level mdb_insert, mdb_remove calls
284 mdb_trace_no_recursive :: Bool
285 mdb_trace_no_recursive = False
286
287 -- fail on invariant violations
288 mdb_fail_invariants :: Bool
289 mdb_fail_invariants = True
290
291 -- check invariants before/after mdb_insert/mdb_remove.
292 mdb_check_invariants :: Bool
293 mdb_check_invariants = False
294
295 -- recheck invariants at each tracing point
296 mdb_recheck_invariants :: Bool
297 mdb_recheck_invariants = False
298
299 -- enable extensive tracing of mapping db implementation (userspace version)
300 mdb_trace_user :: Bool
301 mdb_trace_user = False
302
303 -- fail on invariant violations
304 mdb_fail_invariants_user :: Bool
305 mdb_fail_invariants_user = True
306
307 -- recheck invariants at each tracing point
308 mdb_recheck_invariants_user :: Bool
309 mdb_recheck_invariants_user = True
310
311 -- check invariants before/after mdb_insert/mdb_remove.
312 mdb_check_invariants_user :: Bool
313 mdb_check_invariants_user = True
314
315 -- Select scheduler
316 data Scheduler = RBED | RR deriving (Show,Eq)
317 scheduler :: Scheduler
318 scheduler = RBED
319
320 -- Physical Address Extensions (PAE)-enabled paging on x86-32
321 pae_paging :: Bool
322 pae_paging = False
323
324 -- Page Size Extensions (PSE)-enabled paging on x86-32
325 -- Always enabled when pae_paging == True, regardless of value
326 pse_paging :: Bool
327 pse_paging = False
328
329 -- No Execute Extensions (NXE)-enabled paging on x86-32
330 -- May not be True when pae_paging == False
331 nxe_paging :: Bool
332 nxe_paging = False
333
334 oneshot_timer :: Bool
335 oneshot_timer = False
336
337 -- Enable hardware VM support for AMD's Secure Virtual Machine (SVM)
338 -- If disabled, Intel's VMX hardware is supported instead
339 config_svm :: Bool
340 config_svm = True
341
342 -- Enable the use of only Arrakis domains (with arrakismon)
343 -- If disabled, use normal VM-guests (with vmkitmon)
344 config_arrakismon :: Bool
345 config_arrakismon = True
346
347 defines :: [RuleToken]
348 defines = [ Str ("-D" ++ d) | d <- [  
349              if microbenchmarks then "CONFIG_MICROBENCHMARKS" else "",
350              if trace then "CONFIG_TRACE" else "",
351              if support_qemu_networking then "CONFIG_QEMU_NETWORK" else "",
352              if trace_network_subsystem then "NETWORK_STACK_TRACE" else "",
353              if trace_disable_lrpc then "TRACE_DISABLE_LRPC" else "",
354              if global_debug then "GLOBAL_DEBUG" else "",
355              if e1000n_debug then "E1000N_SERVICE_DEBUG" else "",
356              if ahcid_debug then "AHCI_SERVICE_DEBUG" else "",
357              if libahci_debug then "AHCI_LIB_DEBUG" else "",
358              if vfs_debug then "VFS_DEBUG" else "",
359              if eMAC_debug then "EMAC_SERVICE_DEBUG" else "",
360              if rtl8029_debug then "RTL8029_SERVICE_DEBUG" else "",
361              if ethersrv_debug then "ETHERSRV_SERVICE_DEBUG" else "",
362              if netd_debug then "NETD_SERVICE_DEBUG" else "",
363              if libacpi_debug then "ACPI_DEBUG_OUTPUT" else "",
364              if acpi_interface_debug then "ACPI_BF_DEBUG" else "",
365              if lpc_timer_debug then "LPC_TIMER_DEBUG" else "",
366              if lwip_debug then "LWIP_BARRELFISH_DEBUG" else "",
367              if libpci_debug then "PCI_CLIENT_DEBUG" else "",
368              if usrpci_debug then "PCI_SERVICE_DEBUG" else "",
369              if timer_debug then "TIMER_CLIENT_DEBUG" else "",
370              if eclipse_kernel_debug then "ECLIPSE_KERNEL_DEBUG" else "",
371              if skb_debug then "SKB_SERVICE_DEBUG" else "",
372              if skb_client_debug then "SKB_CLIENT_DEBUG" else "",
373              if flounder_debug then "FLOUNDER_DEBUG" else "",
374              if flounder_failed_debug then "FLOUNDER_FAILED_DEBUG" else "",
375              if webserver_debug then "WEBSERVER_DEBUG" else "",
376              if sqlclient_debug then "SQL_CLIENT_DEBUG" else "",
377              if sqlite_debug then "SQL_SERVICE_DEBUG" else "",
378              if sqlite_backend_debug then "SQL_BACKEND_DEBUG" else "",
379              if nfs_debug then "NFS_CLIENT_DEBUG" else "",
380              if rpc_debug then "RPC_DEBUG" else "",
381              if loopback_debug then "LOOPBACK_DEBUG" else "",
382              if octopus_debug then "DIST_SERVICE_DEBUG" else "",
383              if term_debug then "TERMINAL_LIBRARY_DEBUG" else "",
384              if serial_debug then "SERIAL_DRIVER_DEBUG" else "",
385              if debug_deadlocks then "CONFIG_DEBUG_DEADLOCKS" else "",
386              if memserv_percore then "CONFIG_MEMSERV_PERCORE" else "",
387              if lazy_thc then "CONFIG_LAZY_THC" else "",
388              if pae_paging then "CONFIG_PAE" else "",
389              if pse_paging then "CONFIG_PSE" else "",
390              if nxe_paging then "CONFIG_NXE" else "",
391              if libc == "oldc" then "CONFIG_OLDC" else "CONFIG_NEWLIB",
392              if oneshot_timer then "CONFIG_ONESHOT_TIMER" else "",
393              if config_svm then "CONFIG_SVM" else "",
394              if config_arrakismon then "CONFIG_ARRAKISMON" else "",
395              if use_kaluga_dvm then "USE_KALUGA_DVM" else "",
396              if heteropanda then "HETEROPANDA" else "",
397              if caps_trace then "TRACE_PMEM_CAPS" else ""
398              ], d /= "" ]
399
400 -- Sets the include path for the libc
401 libcInc :: String
402 libcInc = if libc == "oldc" then "/include/oldc"
403           else "/lib/newlib/newlib/libc/include"
404
405 -- Sets the include path for lwIP
406 lwipInc :: String
407 lwipInc = "/lib/lwip/src/include"
408 lwipxxxInc :: String
409 lwipxxxInc = "/lib/lwip/src/include/ipv4"
410
411 -- some defines depend on the architecture/compile options
412 arch_defines :: Options -> [RuleToken]
413 arch_defines opts
414     -- enable config flags for interconnect drivers in use for this arch
415     = [ Str ("-D" ++ d)
416        | d <- ["CONFIG_INTERCONNECT_DRIVER_" ++ (map toUpper n)
417                | n <- optInterconnectDrivers opts]
418       ]
419     -- enable config flags for flounder backends in use for this arch
420     ++ [ Str ("-D" ++ d)
421        | d <- ["CONFIG_FLOUNDER_BACKEND_" ++ (map toUpper n)
422                | n <- optFlounderBackends opts]
423       ]
424
425 -- newlib common compile flags (maybe put these in a config.h file?)
426 newlibAddCFlags :: [String]
427 newlibAddCFlags = [ "-DPACKAGE_NAME=\"newlib\"" ,
428                     "-DPACKAGE_TARNAME=\"newlib\"",
429                     "-DPACKAGE_VERSION=\"1.19.0\"",
430                     "-DPACKAGE_BUGREPORT=\"\"",
431                     "-DPACKAGE_URL=\"\"",
432                     "-D_I386MACH_ALLOW_HW_INTERRUPTS",
433                     "-DMISSING_SYSCALL_NAMES",
434                     "-D_WANT_IO_C99_FORMATS",
435                     "-D_COMPILING_NEWLIB",
436                     "-D_WANT_IO_LONG_LONG",
437                     "-D_WANT_IO_LONG_DOUBLE",
438                     "-D_MB_CAPABLE",
439                     "-D__BSD_VISIBLE"]