490 lines
15 KiB
Plaintext
490 lines
15 KiB
Plaintext
--------------------------------------------------------------------------
|
|
-- Copyright (c) 2007-2010, 2012, 2013, 2015 ETH Zurich.
|
|
-- Copyright (c) 2014, HP Labs.
|
|
-- All rights reserved.
|
|
--
|
|
-- This file is distributed under the terms in the attached LICENSE file.
|
|
-- If you do not find this file, copies can be found by writing to:
|
|
-- ETH Zurich D-INFK, CAB F.78, Universitaetstrasse 6, CH-8092 Zurich,
|
|
-- Attn: Systems Group.
|
|
--
|
|
-- Configuration options for Hake
|
|
--
|
|
--------------------------------------------------------------------------
|
|
|
|
module Config where
|
|
|
|
import HakeTypes
|
|
import Data.Char
|
|
import qualified Args
|
|
import Data.List
|
|
import Data.Maybe
|
|
import System.FilePath
|
|
import Tools (findTool, ToolDetails, toolPath, toolPrefix)
|
|
import qualified Tools
|
|
|
|
-- Set by hake.sh
|
|
toolroot :: Maybe FilePath
|
|
arm_toolspec :: Maybe (Maybe FilePath -> ToolDetails)
|
|
aarch64_toolspec :: Maybe (Maybe FilePath -> ToolDetails)
|
|
thumb_toolspec :: Maybe (Maybe FilePath -> ToolDetails)
|
|
armeb_toolspec :: Maybe (Maybe FilePath -> ToolDetails)
|
|
x86_toolspec :: Maybe (Maybe FilePath -> ToolDetails)
|
|
k1om_toolspec :: Maybe (Maybe FilePath -> ToolDetails)
|
|
|
|
-- Default toolchains
|
|
arm_tools = fromMaybe Tools.arm_system
|
|
arm_toolspec
|
|
toolroot
|
|
aarch64_tools = fromMaybe Tools.aarch64_system
|
|
aarch64_toolspec
|
|
toolroot
|
|
thumb_tools = fromMaybe Tools.arm_netos_arm_2015q2
|
|
thumb_toolspec
|
|
toolroot
|
|
armeb_tools = fromMaybe Tools.arm_netos_linaro_be_2015_02
|
|
armeb_toolspec
|
|
toolroot
|
|
x86_tools = fromMaybe Tools.x86_system
|
|
x86_toolspec
|
|
toolroot
|
|
k1om_tools = fromMaybe Tools.k1om_netos_mpss_3_7_1
|
|
k1om_toolspec
|
|
toolroot
|
|
|
|
-- ARM toolchain
|
|
arm_gnu_tool = findTool (toolPath arm_tools) (toolPrefix arm_tools)
|
|
arm_cc = arm_gnu_tool "gcc"
|
|
arm_objcopy = arm_gnu_tool "objcopy"
|
|
arm_objdump = arm_gnu_tool "objdump"
|
|
arm_ar = arm_gnu_tool "ar"
|
|
arm_ranlib = arm_gnu_tool "ranlib"
|
|
arm_cxx = arm_gnu_tool "g++"
|
|
|
|
-- ARM AArch64
|
|
aarch64_gnu_tool = findTool (toolPath aarch64_tools) (toolPrefix aarch64_tools)
|
|
aarch64_cc = aarch64_gnu_tool "gcc"
|
|
aarch64_objcopy = aarch64_gnu_tool "objcopy"
|
|
aarch64_objdump = aarch64_gnu_tool "objdump"
|
|
aarch64_ar = aarch64_gnu_tool "ar"
|
|
aarch64_ranlib = aarch64_gnu_tool "ranlib"
|
|
aarch64_cxx = aarch64_gnu_tool "g++"
|
|
|
|
-- ARM thumb (e.g. -M profile) toolchain
|
|
thumb_gnu_tool = findTool (toolPath thumb_tools) (toolPrefix thumb_tools)
|
|
thumb_cc = thumb_gnu_tool "gcc"
|
|
thumb_objcopy = thumb_gnu_tool "objcopy"
|
|
thumb_objdump = thumb_gnu_tool "objdump"
|
|
thumb_ar = thumb_gnu_tool "ar"
|
|
thumb_ranlib = thumb_gnu_tool "ranlib"
|
|
thumb_cxx = thumb_gnu_tool "g++"
|
|
|
|
-- ARM big-endian (e.g. XScale) toolchain
|
|
armeb_gnu_tool = findTool (toolPath armeb_tools) (toolPrefix armeb_tools)
|
|
armeb_cc = armeb_gnu_tool "gcc"
|
|
armeb_objcopy = armeb_gnu_tool "objcopy"
|
|
armeb_objdump = armeb_gnu_tool "objdump"
|
|
armeb_ar = armeb_gnu_tool "ar"
|
|
armeb_ranlib = armeb_gnu_tool "ranlib"
|
|
armeb_cxx = armeb_gnu_tool "g++"
|
|
|
|
-- X86_64 toolchain
|
|
x86_gnu_tool = findTool (toolPath x86_tools) (toolPrefix x86_tools)
|
|
x86_cc = x86_gnu_tool "gcc"
|
|
x86_objcopy = x86_gnu_tool "objcopy"
|
|
x86_objdump = x86_gnu_tool "objdump"
|
|
x86_ar = x86_gnu_tool "ar"
|
|
x86_ranlib = x86_gnu_tool "ranlib"
|
|
x86_cxx = x86_gnu_tool "g++"
|
|
|
|
-- Xeon Phi toolchain
|
|
k1om_gnu_tool = findTool (toolPath k1om_tools) (toolPrefix k1om_tools)
|
|
k1om_cc = k1om_gnu_tool "gcc"
|
|
k1om_objcopy = k1om_gnu_tool "objcopy"
|
|
k1om_objdump = k1om_gnu_tool "objdump"
|
|
k1om_ar = k1om_gnu_tool "ar"
|
|
k1om_ranlib = k1om_gnu_tool "ranlib"
|
|
k1om_cxx = k1om_gnu_tool "g++"
|
|
|
|
-- Miscellaneous tools
|
|
gem5 = "gem5.fast"
|
|
runghc = "runghc" -- run GHC interactively
|
|
circo = "circo" -- from graphviz
|
|
dot = "dot" -- " "
|
|
inkscape = "inkscape"
|
|
|
|
-- ARM Fast Models Simulator TODO: make this in
|
|
fastmodels_root = "/home/netos/tools/FastModels_11.6/FastModelsTools_11.6"
|
|
fastmodels_env = fastmodels_root </> "/source_all.sh"
|
|
fastmodels_simgen = fastmodels_root </> "bin/simgen"
|
|
|
|
|
|
-- path to source and install directories; these are automatically set by
|
|
-- hake.sh at setup time
|
|
source_dir :: String
|
|
-- source_dir = undefined -- (set by hake.sh, see end of file)
|
|
|
|
install_dir :: String
|
|
-- install_dir = undefined -- (set by hake.sh, see end of file)
|
|
|
|
cache_dir :: String
|
|
-- cache_dir = undefined -- (set by hake.sh, see end of file)
|
|
|
|
-- Set of architectures for which to generate rules
|
|
architectures :: [String]
|
|
-- architectures = undefined -- (set by hake.sh, see end of file)
|
|
|
|
-- Optimisation flags (-Ox -g etc.) passed to compiler
|
|
cOptFlags :: [String]
|
|
-- cOptFlags = undefined -- (set by hake.sh, see end of file)
|
|
|
|
|
|
newlib_malloc :: String
|
|
--newlib_malloc = "sbrk" -- use sbrk and newlib's malloc()
|
|
--newlib_malloc = "dlmalloc" -- use dlmalloc
|
|
newlib_malloc = "oldmalloc"
|
|
|
|
-- Print NYI mmap() flags for each call
|
|
libc_mmap_nyi_flags :: Bool
|
|
libc_mmap_nyi_flags = False
|
|
|
|
-- Configure pagesize for libbarrelfish's morecore implementation
|
|
-- x86_64 accepts "small", "large", and "huge" for 4kB, 2MB and 1GB pages
|
|
-- respectively. All other architectures default to their default page size.
|
|
morecore_pagesize :: String
|
|
morecore_pagesize = "small"
|
|
|
|
-- Use a frame pointer
|
|
use_fp :: Bool
|
|
use_fp = True
|
|
|
|
-- Default timeslice duration in milliseconds
|
|
timeslice :: Integer
|
|
timeslice = 80
|
|
|
|
-- Put kernel into microbenchmarks mode
|
|
microbenchmarks :: Bool
|
|
microbenchmarks = False
|
|
|
|
-- Enable tracing
|
|
trace :: Bool
|
|
trace = False
|
|
|
|
-- Enable QEMU networking. (ie. make network work in small memory)
|
|
support_qemu_networking :: Bool
|
|
support_qemu_networking = False
|
|
|
|
-- enable network tracing
|
|
trace_network_subsystem :: Bool
|
|
trace_network_subsystem = False
|
|
|
|
-- May want to disable LRPC to improve trace visuals
|
|
trace_disable_lrpc :: Bool
|
|
trace_disable_lrpc = False
|
|
|
|
-- use Kaluga
|
|
use_kaluga_dvm :: Bool
|
|
use_kaluga_dvm = True
|
|
|
|
-- Domain and driver debugging
|
|
global_debug :: Bool
|
|
global_debug = False
|
|
|
|
e1000n_debug :: Bool
|
|
e1000n_debug = False
|
|
|
|
eMAC_debug :: Bool
|
|
eMAC_debug = False
|
|
|
|
rtl8029_debug :: Bool
|
|
rtl8029_debug = False
|
|
|
|
ahcid_debug :: Bool
|
|
ahcid_debug = False
|
|
|
|
libahci_debug :: Bool
|
|
libahci_debug = False
|
|
|
|
vfs_debug :: Bool
|
|
vfs_debug = False
|
|
|
|
ethersrv_debug :: Bool
|
|
ethersrv_debug = False
|
|
|
|
netd_debug :: Bool
|
|
netd_debug = False
|
|
|
|
libacpi_debug :: Bool
|
|
libacpi_debug = False
|
|
|
|
acpi_interface_debug :: Bool
|
|
acpi_interface_debug = False
|
|
|
|
acpi_service_debug :: Bool
|
|
acpi_service_debug = False
|
|
|
|
acpi_server_debug :: Bool
|
|
acpi_server_debug = False
|
|
|
|
lpc_timer_debug :: Bool
|
|
lpc_timer_debug = False
|
|
|
|
lwip_debug :: Bool
|
|
lwip_debug = False
|
|
|
|
libpci_debug :: Bool
|
|
libpci_debug = False
|
|
|
|
usrpci_debug :: Bool
|
|
usrpci_debug = False
|
|
|
|
timer_debug :: Bool
|
|
timer_debug = False
|
|
|
|
eclipse_kernel_debug :: Bool
|
|
eclipse_kernel_debug = False
|
|
|
|
skb_debug :: Bool
|
|
skb_debug = False
|
|
|
|
skb_client_debug :: Bool
|
|
skb_client_debug = False
|
|
|
|
flounder_debug :: Bool
|
|
flounder_debug = False
|
|
|
|
flounder_failed_debug :: Bool
|
|
flounder_failed_debug = False
|
|
|
|
webserver_debug :: Bool
|
|
webserver_debug = False
|
|
|
|
sqlclient_debug :: Bool
|
|
sqlclient_debug = False
|
|
|
|
sqlite_debug :: Bool
|
|
sqlite_debug = False
|
|
|
|
sqlite_backend_debug :: Bool
|
|
sqlite_backend_debug = False
|
|
|
|
nfs_debug :: Bool
|
|
nfs_debug = False
|
|
|
|
rpc_debug :: Bool
|
|
rpc_debug = False
|
|
|
|
loopback_debug :: Bool
|
|
loopback_debug = False
|
|
|
|
octopus_debug :: Bool
|
|
octopus_debug = False
|
|
|
|
term_debug :: Bool
|
|
term_debug = False
|
|
|
|
serial_debug :: Bool
|
|
serial_debug = False
|
|
|
|
-- Deadlock debugging
|
|
debug_deadlocks :: Bool
|
|
debug_deadlocks = False
|
|
|
|
-- Partitioned memory server
|
|
memserv_percore :: Bool
|
|
memserv_percore = False
|
|
|
|
-- Lazy THC implementation (requires use_fp = True)
|
|
lazy_thc :: Bool
|
|
lazy_thc
|
|
| elem "armv7" architectures = False
|
|
| elem "armv8" architectures = False
|
|
| otherwise = True
|
|
|
|
-- Enable capability tracing debug facility
|
|
caps_trace :: Bool
|
|
caps_trace = False
|
|
|
|
-- Mapping Database configuration options (this affects lib/mdb/)
|
|
-- enable extensive tracing of mapping db implementation
|
|
mdb_trace :: Bool
|
|
mdb_trace = False
|
|
|
|
-- enable tracing of top level mdb_insert, mdb_remove calls
|
|
mdb_trace_no_recursive :: Bool
|
|
mdb_trace_no_recursive = False
|
|
|
|
-- fail on invariant violations
|
|
mdb_fail_invariants :: Bool
|
|
mdb_fail_invariants = True
|
|
|
|
-- check invariants before/after mdb_insert/mdb_remove.
|
|
mdb_check_invariants :: Bool
|
|
mdb_check_invariants = False
|
|
|
|
-- recheck invariants at each tracing point
|
|
mdb_recheck_invariants :: Bool
|
|
mdb_recheck_invariants = False
|
|
|
|
-- enable extensive tracing of mapping db implementation (userspace version)
|
|
mdb_trace_user :: Bool
|
|
mdb_trace_user = False
|
|
|
|
-- fail on invariant violations
|
|
mdb_fail_invariants_user :: Bool
|
|
mdb_fail_invariants_user = True
|
|
|
|
-- recheck invariants at each tracing point
|
|
mdb_recheck_invariants_user :: Bool
|
|
mdb_recheck_invariants_user = True
|
|
|
|
-- check invariants before/after mdb_insert/mdb_remove.
|
|
mdb_check_invariants_user :: Bool
|
|
mdb_check_invariants_user = True
|
|
|
|
-- Select scheduler
|
|
data Scheduler = RBED | RR deriving (Show,Eq)
|
|
scheduler :: Scheduler
|
|
scheduler = RBED
|
|
|
|
-- No Execute Extensions (NXE)-enabled paging on x86
|
|
nxe_paging :: Bool
|
|
nxe_paging = False
|
|
|
|
oneshot_timer :: Bool
|
|
oneshot_timer = False
|
|
|
|
-- Enable hardware VM support for AMD's Secure Virtual Machine (SVM)
|
|
-- If disabled, Intel's VMX hardware is supported instead
|
|
config_svm :: Bool
|
|
config_svm = True
|
|
|
|
-- Enable the use of only Arrakis domains (with arrakismon)
|
|
-- If disabled, use normal VM-guests (with vmkitmon)
|
|
config_arrakismon :: Bool
|
|
config_arrakismon = False
|
|
|
|
-- Registry of library OSes.
|
|
--
|
|
-- This is necessary so we can add the right compiler flags (#defines etc)
|
|
-- when an application wants to link against a particular library OS.
|
|
--
|
|
-- each libraryos option is an instance of (Maybe Args.Args) with the right
|
|
-- content and is used when generating make rules.
|
|
--
|
|
-- Applications and libraries use "libbarrelfish" when the libraryOs field in
|
|
-- their Args is not overwritten by the Hakefile.
|
|
--
|
|
-- Implementation notes:
|
|
-- * Unfortunately we need to have the list of available library OSes here,
|
|
-- because providing these flags and names in the library OS Hakefile is
|
|
-- non-trivial
|
|
-- * We need to name the library in these expressions so hake knows which .a
|
|
-- to include when linking.
|
|
-- * The library OS itself needs to use the matching Args from below as its
|
|
-- own Args.libraryOs, see lib/barrelfish/Hakefile for examples.
|
|
-- * All of these need to be instances of (Maybe Args).
|
|
-- * The library OS choices provided by the default tree are all variations of
|
|
-- the code in lib/barrelfish, gated by different preprocessor flags.
|
|
--
|
|
libbarrelfish_pmap_array :: Maybe Args.Args
|
|
libbarrelfish_pmap_array = Just Args.defaultArgs {
|
|
Args.target = "barrelfish_pmap_array",
|
|
Args.addCFlags = [ "-DPMAP_ARRAY" ]
|
|
}
|
|
libbarrelfish_pmap_list :: Maybe Args.Args
|
|
libbarrelfish_pmap_list = Just Args.defaultArgs {
|
|
Args.target = "barrelfish_pmap_ll",
|
|
Args.addCFlags = [ "-DPMAP_LL" ]
|
|
}
|
|
libarrakis :: Maybe Args.Args
|
|
libarrakis = Just Args.defaultArgs {
|
|
-- lib/barrelfish/Hakefile defines libarrakis to use PMAP_ARRAY but not
|
|
-- global mapping cnodes.
|
|
Args.target = "arrakis",
|
|
Args.addCFlags = [ "-DARRAKIS", "-DPMAP_ARRAY" ]
|
|
}
|
|
libbarrelfish_pmap_array_mcn :: Maybe Args.Args
|
|
libbarrelfish_pmap_array_mcn = Just Args.defaultArgs {
|
|
Args.target = "barrelfish_pmap_array_mcn",
|
|
Args.addCFlags = [ "-DGLOBAL_MCN", "-DPMAP_ARRAY" ]
|
|
}
|
|
libbarrelfish_pmap_list_mcn :: Maybe Args.Args
|
|
libbarrelfish_pmap_list_mcn = Just Args.defaultArgs {
|
|
Args.target = "barrelfish_pmap_ll_mcn",
|
|
Args.addCFlags = [ "-DGLOBAL_MCN", "-DPMAP_LL" ]
|
|
}
|
|
|
|
-- Select default library OS for applications that don't specify one
|
|
-- this is used as Config.libbarrelfish in the rest of the hake
|
|
-- implementation.
|
|
libbarrelfish :: String -> Maybe Args.Args
|
|
-- armv7 only supports pmap_ll!
|
|
libbarrelfish "armv7" = libbarrelfish_pmap_list
|
|
libbarrelfish _ = libbarrelfish_pmap_array
|
|
|
|
defines :: [RuleToken]
|
|
defines = [ Str ("-D" ++ d) | d <- [
|
|
if microbenchmarks then "CONFIG_MICROBENCHMARKS" else "",
|
|
if trace then "CONFIG_TRACE" else "",
|
|
if support_qemu_networking then "CONFIG_QEMU_NETWORK" else "",
|
|
if trace_network_subsystem then "NETWORK_STACK_TRACE" else "",
|
|
if trace_disable_lrpc then "TRACE_DISABLE_LRPC" else "",
|
|
if global_debug then "GLOBAL_DEBUG" else "",
|
|
if e1000n_debug then "E1000N_SERVICE_DEBUG" else "",
|
|
if ahcid_debug then "AHCI_SERVICE_DEBUG" else "",
|
|
if libahci_debug then "AHCI_LIB_DEBUG" else "",
|
|
if vfs_debug then "VFS_DEBUG" else "",
|
|
if eMAC_debug then "EMAC_SERVICE_DEBUG" else "",
|
|
if rtl8029_debug then "RTL8029_SERVICE_DEBUG" else "",
|
|
if ethersrv_debug then "ETHERSRV_SERVICE_DEBUG" else "",
|
|
if netd_debug then "NETD_SERVICE_DEBUG" else "",
|
|
if libacpi_debug then "ACPI_DEBUG_OUTPUT" else "",
|
|
if acpi_interface_debug then "ACPI_BF_DEBUG" else "",
|
|
if acpi_service_debug then "ACPI_SERVICE_DEBUG" else "",
|
|
if lpc_timer_debug then "LPC_TIMER_DEBUG" else "",
|
|
if lwip_debug then "LWIP_BARRELFISH_DEBUG" else "",
|
|
if libpci_debug then "PCI_LIB_DEBUG" else "",
|
|
if usrpci_debug then "PCI_SERVICE_DEBUG" else "",
|
|
if timer_debug then "TIMER_CLIENT_DEBUG" else "",
|
|
if eclipse_kernel_debug then "ECLIPSE_KERNEL_DEBUG" else "",
|
|
if skb_debug then "SKB_SERVICE_DEBUG" else "",
|
|
if skb_client_debug then "SKB_CLIENT_DEBUG" else "",
|
|
if flounder_debug then "FLOUNDER_DEBUG" else "",
|
|
if flounder_failed_debug then "FLOUNDER_FAILED_DEBUG" else "",
|
|
if webserver_debug then "WEBSERVER_DEBUG" else "",
|
|
if sqlclient_debug then "SQL_CLIENT_DEBUG" else "",
|
|
if sqlite_debug then "SQL_SERVICE_DEBUG" else "",
|
|
if sqlite_backend_debug then "SQL_BACKEND_DEBUG" else "",
|
|
if nfs_debug then "NFS_CLIENT_DEBUG" else "",
|
|
if rpc_debug then "RPC_DEBUG" else "",
|
|
if loopback_debug then "LOOPBACK_DEBUG" else "",
|
|
if octopus_debug then "DIST_SERVICE_DEBUG" else "",
|
|
if term_debug then "TERMINAL_LIBRARY_DEBUG" else "",
|
|
if serial_debug then "SERIAL_DRIVER_DEBUG" else "",
|
|
if debug_deadlocks then "CONFIG_DEBUG_DEADLOCKS" else "",
|
|
if memserv_percore then "CONFIG_MEMSERV_PERCORE" else "",
|
|
if lazy_thc then "CONFIG_LAZY_THC" else "",
|
|
if nxe_paging then "CONFIG_NXE" else "",
|
|
if oneshot_timer then "CONFIG_ONESHOT_TIMER" else "",
|
|
if config_svm then "CONFIG_SVM" else "",
|
|
if config_arrakismon then "CONFIG_ARRAKISMON" else "",
|
|
if use_kaluga_dvm then "USE_KALUGA_DVM" else "",
|
|
if caps_trace then "TRACE_PMEM_CAPS" else ""
|
|
], d /= "" ]
|
|
|
|
|
|
-- some defines depend on the architecture/compile options
|
|
arch_defines :: Options -> [RuleToken]
|
|
arch_defines opts
|
|
-- enable config flags for interconnect drivers in use for this arch
|
|
= [ Str ("-D" ++ d)
|
|
| d <- ["CONFIG_INTERCONNECT_DRIVER_" ++ (map toUpper n)
|
|
| n <- optInterconnectDrivers opts]
|
|
]
|
|
-- enable config flags for flounder backends in use for this arch
|
|
++ [ Str ("-D" ++ d)
|
|
| d <- ["CONFIG_FLOUNDER_BACKEND_" ++ (map toUpper n)
|
|
| n <- optFlounderBackends opts]
|
|
]
|