Changes for nameservice. Use RPC client for NS functionality.
[barrelfish] / hake / ArchDefaults.hs
1 --------------------------------------------------------------------------
2 -- Copyright (c) 2007-2010, ETH Zurich.
3 -- All rights reserved.
4 --
5 -- This file is distributed under the terms in the attached LICENSE file.
6 -- If you do not find this file, copies can be found by writing to:
7 -- ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
8 --
9 -- Default architecture-specific definitions for Barrelfish
10 -- 
11 --------------------------------------------------------------------------
12
13 module ArchDefaults where
14
15 import List
16 import HakeTypes
17 import Path
18 import qualified Config
19
20 commonFlags = [ Str s | s <- [ "-fno-builtin",
21                                 "-nostdinc",
22                                 "-U__linux__",
23                                 "-Ulinux",
24                                 "-Wall",
25                                 "-Wshadow",
26                                 "-Wmissing-declarations",
27                                 "-Wmissing-field-initializers",
28                                 "-Wredundant-decls",
29                                 "-Werror",
30                                 "-imacros" ] ]
31          ++ [ NoDep SrcTree "src" "/include/deputy/nodeputy.h" ]
32
33 commonCFlags = [ Str s | s <- [ "-std=c99",
34                                 "-Wstrict-prototypes",
35                                 "-Wold-style-definition",
36                                 "-Wmissing-prototypes" ] ]
37                  ++ [ ContStr Config.use_fp "-fno-omit-frame-pointer" ""]
38
39 commonCxxFlags = [ Str s | s <- [ "-nostdinc++",
40                                   "-std=c++0x",
41                                   "-fno-exceptions",
42                                   "-I" ] ]
43                  ++ [ NoDep SrcTree "src" "/include/cxx" ]
44                  ++ [ ContStr Config.use_fp "-fno-omit-frame-pointer" ""]
45
46 cFlags = [ Str s | s <- [ "-Wno-packed-bitfield-compat" ] ]
47        ++ commonCFlags
48
49 cxxFlags = [ Str s | s <- [ "-Wno-packed-bitfield-compat" ] ]
50        ++ commonCxxFlags
51
52 cDefines options = [ Str ("-D"++s) | s <- [ "BARRELFISH" ]]
53                    ++ Config.defines
54                    ++ Config.arch_defines options
55
56 cStdIncs arch archFamily = 
57     [ NoDep SrcTree "src" "/include",
58       NoDep SrcTree "src" ("/include/arch" ./. archFamily),
59       NoDep SrcTree "src" ("/include/target" ./. archFamily),
60       NoDep SrcTree "src" "/include/ipv4", -- XXX
61       NoDep InstallTree arch "/include",
62       NoDep InstallTree arch "/include/dev",
63       NoDep SrcTree "src" ".",
64       NoDep BuildTree arch "." ]
65                       
66 ldFlags arch = 
67     [ Str Config.cOptFlags,
68       In InstallTree arch "/lib/crt0.o",
69       In InstallTree arch "/lib/crtbegin.o",
70       Str "-fno-builtin",
71       Str "-nostdlib" ]
72           
73 ldCxxFlags arch = 
74     [ Str Config.cOptFlags,
75       In InstallTree arch "/lib/crt0.o",
76       In InstallTree arch "/lib/crtbegin.o",
77       Str "-fno-builtin",
78       Str "-nostdlib" ]
79
80 stdLibs arch = 
81     [ In InstallTree arch "/lib/libbarrelfish.a",
82       In InstallTree arch "/lib/libdist_parser.a", -- dist_read() in nameservice_client.c
83       In InstallTree arch "/errors/errno.o",
84       In InstallTree arch "/lib/libc.a",
85       In InstallTree arch "/lib/crtend.o" ,
86       In InstallTree arch "/lib/libcollections.a"]
87
88 stdCxxLibs arch = 
89     [ In InstallTree arch "/lib/libcxx.a",
90       Str "./libsupc++.a" ]
91     ++ stdLibs arch 
92
93 options arch archFamily = Options { 
94             optArch = arch,
95             optArchFamily = archFamily,
96             optFlags = cFlags,
97             optCxxFlags = cxxFlags,
98             optDefines = [ Str "-DBARRELFISH" ] ++ Config.defines,
99             optIncludes = cStdIncs arch archFamily,
100             optDependencies = 
101                 [ PreDep InstallTree arch "/include/errors/errno.h",
102                   PreDep InstallTree arch "/include/barrelfish_kpi/capbits.h",
103                   PreDep InstallTree arch "/include/asmoffsets.h" ],
104             optLdFlags = ldFlags arch,
105             optLdCxxFlags = ldCxxFlags arch,
106             optLibs = stdLibs arch,
107             optCxxLibs = stdCxxLibs arch,
108             optInterconnectDrivers = ["lmp", "ump", "multihop"],
109             optFlounderBackends = ["lmp", "ump", "multihop"],
110             extraFlags = [],
111             extraDefines = [],
112             extraIncludes = [],
113             extraDependencies = [],
114             extraLdFlags = [],
115             optSuffix = []
116           }
117
118 ------------------------------------------------------------------------
119 --
120 -- Now, commands to actually do something
121 --
122 ------------------------------------------------------------------------
123
124 --
125 -- C compiler
126 --
127 cCompiler arch compiler opts phase src obj = 
128     let incls = (optIncludes opts) ++ (extraIncludes opts)
129         flags = (optFlags opts) 
130                 ++ (optDefines opts)
131                 ++ [ Str f | f <- extraFlags opts ]
132                 ++ [ Str f | f <- extraDefines opts ]
133         deps = (optDependencies opts) ++ (extraDependencies opts)
134     in
135       [ Str compiler ] ++ flags ++ [ Str Config.cOptFlags ]
136       ++ concat [ [ NStr "-I", i ] | i <- incls ] 
137       ++ [ Str "-o", Out arch obj,
138            Str "-c", In (if phase == "src" then SrcTree else BuildTree) phase src ]
139       ++ deps
140 --
141 -- the C preprocessor, like C compiler but with -E
142 --
143 cPreprocessor arch compiler opts phase src obj = 
144     let incls = (optIncludes opts) ++ (extraIncludes opts)
145         flags = (optFlags opts) 
146                 ++ (optDefines opts)
147                 ++ [ Str f | f <- extraFlags opts ]
148                 ++ [ Str f | f <- extraDefines opts ]
149         deps = (optDependencies opts) ++ (extraDependencies opts)
150         cOptFlags = unwords ((words Config.cOptFlags) \\ ["-g"])
151     in
152       [ Str compiler ] ++ flags ++ [ Str cOptFlags ]
153       ++ concat [ [ NStr "-I", i ] | i <- incls ] 
154       ++ [ Str "-o", Out arch obj,
155            Str "-E", In (if phase == "src" then SrcTree else BuildTree) phase src ]
156       ++ deps
157
158 --
159 -- C++ compiler
160 --
161 cxxCompiler arch cxxcompiler opts phase src obj = 
162     let incls = (optIncludes opts) ++ (extraIncludes opts)
163         flags = (optCxxFlags opts) 
164                 ++ (optDefines opts)
165                 ++ [ Str f | f <- extraFlags opts ]
166                 ++ [ Str f | f <- extraDefines opts ]
167         deps = (optDependencies opts) ++ (extraDependencies opts)
168     in
169       [ Str cxxcompiler ] ++ flags ++ [ Str Config.cOptFlags ]
170       ++ concat [ [ NStr "-I", i ] | i <- incls ] 
171       ++ [ Str "-o", Out arch obj,
172            Str "-c", In (if phase == "src" then SrcTree else BuildTree) phase src ]
173       ++ deps
174
175 --
176 -- Create C file dependencies
177 --
178 makeDepend arch compiler opts phase src obj depfile =
179     let incls = (optIncludes opts) ++ (extraIncludes opts)
180         flags = (optFlags opts) 
181                 ++ (optDefines opts)
182                 ++ [ Str f | f <- extraFlags opts ]
183                 ++ [ Str f | f <- extraDefines opts ]
184     in
185       [ Str ('@':compiler) ] ++ flags 
186       ++ concat [ [ NStr "-I", i ] | i <- incls ] 
187       ++ (optDependencies opts) ++ (extraDependencies opts)
188       ++ [ Str "-M -MF", 
189            Out arch depfile,
190            Str "-MQ", NoDep BuildTree arch obj, 
191            Str "-MQ", NoDep BuildTree arch depfile,
192            Str "-c", In (if phase == "src" then SrcTree else BuildTree) phase src
193          ] 
194
195 --
196 -- Create C++ file dependencies
197 --
198 makeCxxDepend arch cxxcompiler opts phase src obj depfile =
199     let incls = (optIncludes opts) ++ (extraIncludes opts)
200         flags = (optCxxFlags opts) 
201                 ++ (optDefines opts)
202                 ++ [ Str f | f <- extraFlags opts ]
203                 ++ [ Str f | f <- extraDefines opts ]
204     in
205       [ Str ('@':cxxcompiler) ] ++ flags 
206       ++ concat [ [ NStr "-I", i ] | i <- incls ] 
207       ++ (optDependencies opts) ++ (extraDependencies opts)
208       ++ [ Str "-M -MF", 
209            Out arch depfile,
210            Str "-MQ", NoDep BuildTree arch obj, 
211            Str "-MQ", NoDep BuildTree arch depfile,
212            Str "-c", In (if phase == "src" then SrcTree else BuildTree) phase src
213          ] 
214
215 --
216 -- Compile a C program to assembler
217 --
218 cToAssembler :: String -> String -> Options -> String -> String -> String -> String -> [ RuleToken ]
219 cToAssembler arch compiler  opts phase src afile objdepfile =
220     let incls = (optIncludes opts) ++ (extraIncludes opts)
221         flags = (optFlags opts) 
222                 ++ (optDefines opts)
223                 ++ [ Str f | f <- extraFlags opts ]
224                 ++ [ Str f | f <- extraDefines opts ]
225         deps = [ Dep BuildTree arch objdepfile ] ++ (optDependencies opts) ++ (extraDependencies opts)
226     in
227       [ Str compiler ] ++ flags ++ [ Str Config.cOptFlags ]
228       ++ concat [ [ NStr "-I", i ] | i <- incls ] 
229       ++ [ Str "-o ", Out arch afile, 
230            Str "-S ", In (if phase == "src" then SrcTree else BuildTree) phase src ]
231       ++ deps
232
233 --
234 -- Assemble an assembly language file
235 --
236 assembler :: String -> String -> Options -> String -> String -> [ RuleToken ]
237 assembler arch compiler opts src obj = 
238     let incls = (optIncludes opts) ++ (extraIncludes opts)
239         flags = (optFlags opts) 
240                 ++ (optDefines opts)
241                 ++ [ Str f | f <- extraFlags opts ]
242                 ++ [ Str f | f <- extraDefines opts ]
243         deps = (optDependencies opts) ++ (extraDependencies opts)
244     in
245       [ Str compiler ] ++ flags ++ [ Str Config.cOptFlags ]
246       ++ concat [ [ NStr "-I", i ] | i <- incls ] 
247       ++ [ Str "-o ", Out arch obj, Str "-c ", In SrcTree "src" src ]
248       ++ deps
249
250 --
251 -- Create a library from a set of object files
252 --
253 archive :: String -> Options -> [String] -> String -> [ RuleToken ]
254 archive arch opts objs libname =
255     [ Str "rm -f ", Out arch libname ]
256     ++ 
257     [ NL, Str "ar cr ", Out arch libname ] 
258     ++ 
259     [ In BuildTree arch o | o <- objs ]
260     ++ 
261     [ NL, Str "ranlib ", Out arch libname ]
262
263 --
264 -- Link an executable
265 -- 
266 linker :: String -> String -> Options -> [String] -> [String] -> String -> [RuleToken]
267 linker arch compiler opts objs libs bin =
268     [ Str compiler ] 
269     ++ (optLdFlags opts) 
270     ++ 
271     (extraLdFlags opts) 
272     ++ 
273     [ Str "-o", Out arch bin ] 
274     ++ 
275     [ In BuildTree arch o | o <- objs ]
276     ++
277     [ In BuildTree arch l | l <- libs ]
278     ++ 
279     (optLibs opts)
280
281 --
282 -- Link an executable
283 -- 
284 cxxlinker :: String -> String -> Options -> [String] -> [String] -> String -> [RuleToken]
285 cxxlinker arch cxxcompiler opts objs libs bin =
286     [ Str cxxcompiler ] 
287     ++ (optLdCxxFlags opts) 
288     ++ 
289     (extraLdFlags opts) 
290     ++ 
291     [ Str "-o", Out arch bin ] 
292     ++ 
293     [ In BuildTree arch o | o <- objs ]
294     ++
295     [ In BuildTree arch l | l <- libs ]
296     ++ 
297     (optCxxLibs opts)