204 lines
7.7 KiB
Haskell
204 lines
7.7 KiB
Haskell
--------------------------------------------------------------------------
|
|
-- Copyright (c) 2015, ETH Zurich.
|
|
-- 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.
|
|
--
|
|
-- Architectural definitions for Barrelfish on ARMv8.
|
|
--
|
|
--------------------------------------------------------------------------
|
|
|
|
module ARMv8 where
|
|
|
|
import HakeTypes
|
|
import qualified Config
|
|
import qualified ArchDefaults
|
|
import Data.Char
|
|
|
|
-------------------------------------------------------------------------
|
|
--
|
|
-- Architecture specific definitions for ARM
|
|
--
|
|
-------------------------------------------------------------------------
|
|
|
|
arch = "armv8"
|
|
archFamily = "aarch64"
|
|
|
|
compiler = Config.aarch64_cc
|
|
objcopy = Config.aarch64_objcopy
|
|
objdump = Config.aarch64_objdump
|
|
ar = Config.aarch64_ar
|
|
ranlib = Config.aarch64_ranlib
|
|
cxxcompiler = Config.aarch64_cxx
|
|
|
|
ourCommonFlags = [ Str "-fno-unwind-tables",
|
|
Str "-Wno-packed-bitfield-compat",
|
|
Str "-fno-stack-protector",
|
|
Str "-mcpu=cortex-a57",
|
|
Str "-march=armv8-a",
|
|
Str "-mabi=lp64",
|
|
Str "-mstrict-align",
|
|
Str "-fPIE",
|
|
-- The dispatcher needs a scratch register on ARMv8.
|
|
-- We use r18, which is reserved as the 'platform register'
|
|
-- by the ARM-64 ABI.
|
|
Str "-ffixed-x18",
|
|
Str "-D__ARM_CORTEX__",
|
|
Str "-D__ARM_ARCH_8A__",
|
|
-- Str "-DPREFER_SIZE_OVER_SPEED",
|
|
Str "-Wno-unused-but-set-variable",
|
|
Str "-Wno-format"
|
|
]
|
|
|
|
cFlags = ArchDefaults.commonCFlags
|
|
++ ArchDefaults.commonFlags
|
|
++ ourCommonFlags
|
|
|
|
cxxFlags = ArchDefaults.commonCxxFlags
|
|
++ ArchDefaults.commonFlags
|
|
++ ourCommonFlags
|
|
++ [Str "-std=gnu++11"]
|
|
|
|
cDefines = ArchDefaults.cDefines options
|
|
|
|
ourLdFlags = [ Str "-Wl,--build-id=none", Str "-static" ]
|
|
|
|
ldFlags = ArchDefaults.ldFlags arch ++ ourLdFlags
|
|
ldCxxFlags = ArchDefaults.ldCxxFlags arch ++ ourLdFlags
|
|
|
|
stdLibs = ArchDefaults.stdLibs arch
|
|
|
|
options = (ArchDefaults.options arch archFamily) {
|
|
optFlags = cFlags,
|
|
optCxxFlags = cxxFlags,
|
|
optDefines = cDefines,
|
|
optDependencies =
|
|
[ PreDep InstallTree arch "/include/trace_definitions/trace_defs.h",
|
|
PreDep InstallTree arch "/include/errors/errno.h",
|
|
PreDep InstallTree arch "/include/barrelfish_kpi/capbits.h",
|
|
PreDep InstallTree arch "/include/asmoffsets.h"
|
|
],
|
|
optLdFlags = ldFlags,
|
|
optLdCxxFlags = ldCxxFlags,
|
|
optLibs = stdLibs,
|
|
optInterconnectDrivers = ["lmp", "ump", "multihop", "local"],
|
|
optFlounderBackends = ["lmp", "ump", "multihop", "local"]
|
|
}
|
|
|
|
--
|
|
-- Compilers
|
|
--
|
|
cCompiler = ArchDefaults.cCompiler arch compiler Config.cOptFlags
|
|
cxxCompiler = ArchDefaults.cxxCompiler arch cxxcompiler Config.cOptFlags
|
|
makeDepend = ArchDefaults.makeDepend arch compiler
|
|
makeCxxDepend = ArchDefaults.makeCxxDepend arch cxxcompiler
|
|
cToAssembler = ArchDefaults.cToAssembler arch compiler Config.cOptFlags
|
|
assembler = ArchDefaults.assembler arch compiler Config.cOptFlags
|
|
archive = ArchDefaults.archive arch
|
|
linker = ArchDefaults.linker arch compiler
|
|
ldtLinker = ArchDefaults.ldtLinker arch compiler
|
|
strip = ArchDefaults.strip arch objcopy
|
|
debug = ArchDefaults.debug arch objcopy
|
|
cxxlinker = ArchDefaults.cxxlinker arch cxxcompiler
|
|
ldtCxxlinker = ArchDefaults.ldtCxxlinker arch cxxcompiler
|
|
|
|
|
|
--
|
|
-- The kernel needs different flags
|
|
--
|
|
|
|
kernelCFlags = [ Str s | s <- [ "-fno-builtin",
|
|
"-fno-unwind-tables",
|
|
"-nostdinc",
|
|
"-std=c99",
|
|
"-mcpu=cortex-a57",
|
|
"-march=armv8-a+nofp",
|
|
"-mgeneral-regs-only",
|
|
"-mabi=lp64",
|
|
"-mstrict-align",
|
|
"-U__linux__",
|
|
"-Wall",
|
|
"-Wshadow",
|
|
"-Wstrict-prototypes",
|
|
"-Wold-style-definition",
|
|
"-Wmissing-prototypes",
|
|
"-Wmissing-declarations",
|
|
"-Wmissing-field-initializers",
|
|
"-Wredundant-decls",
|
|
"-Werror",
|
|
"-imacros deputy/nodeputy.h",
|
|
"-fno-stack-check",
|
|
"-ffreestanding",
|
|
"-fomit-frame-pointer",
|
|
"-Wmissing-noreturn",
|
|
"-D__ARM_CORTEX__",
|
|
"-D__ARM_ARCH_8A__",
|
|
"-DPREFER_SIZE_OVER_SPEED",
|
|
"-Wno-unused-but-set-variable",
|
|
"-Wno-format"
|
|
]]
|
|
|
|
kernelLdFlags = [ Str "-Wl,-N",
|
|
Str "-pie",
|
|
Str "-fno-builtin",
|
|
Str "-nostdlib",
|
|
Str "-Wl,--fatal-warnings",
|
|
Str "-Wl,--build-id=none"
|
|
]
|
|
|
|
|
|
--
|
|
-- Link the kernel (CPU Driver)
|
|
--
|
|
linkKernel :: Options -> [String] -> [String] -> String -> String -> HRule
|
|
linkKernel opts objs libs name driverType=
|
|
let linkscript = "/kernel/" ++ name ++ ".lds"
|
|
kernelmap = "/kernel/" ++ name ++ ".map"
|
|
kasmdump = "/kernel/" ++ name ++ ".asm"
|
|
kbinary = "/sbin/" ++ name
|
|
kdebug = kbinary ++ ".debug"
|
|
kfull = kbinary ++ ".full"
|
|
in
|
|
Rules ([ Rule ([ Str compiler ] ++
|
|
map Str Config.cOptFlags ++
|
|
[ NStr "-T", In BuildTree arch linkscript,
|
|
Str "-o",
|
|
Out arch kfull,
|
|
NStr "-Wl,-Map,", Out arch kernelmap
|
|
]
|
|
++ (optLdFlags opts)
|
|
++
|
|
[ In BuildTree arch o | o <- objs ]
|
|
++
|
|
[ In BuildTree arch l | l <- libs ]
|
|
++
|
|
(ArchDefaults.kernelLibs arch)
|
|
++
|
|
[ NL, NStr "bash -c \"echo -e '\\0002'\" | dd of=",
|
|
Out arch kfull,
|
|
Str "bs=1 seek=16 count=1 conv=notrunc status=noxfer"
|
|
]
|
|
),
|
|
Rule $ strip opts kfull kdebug kbinary,
|
|
Rule $ debug opts kfull kdebug,
|
|
-- Generate kernel assembly dump
|
|
Rule [ Str objdump,
|
|
Str "-d",
|
|
Str "-M reg-names-raw",
|
|
In BuildTree arch kbinary,
|
|
Str ">",
|
|
Out arch kasmdump ],
|
|
Rule [ Str "cpp",
|
|
NStr "-I", NoDep SrcTree "src" "/kernel/include/arch/armv8",
|
|
NStr "-I", NoDep SrcTree "src" "/kernel/include",
|
|
Str "-D__ASSEMBLER__",
|
|
Str "-P", In SrcTree "src"
|
|
("/kernel/arch/armv8/"++driverType++".lds.in"),
|
|
Out arch linkscript
|
|
]
|
|
] ++ [ Phony ((map toUpper arch) ++ "_All") False
|
|
[ Dep BuildTree arch kbinary]])
|