Cleanup
[barrelfish] / hake / HakeTypes.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, Universit√§tstasse 6, CH-8092 Zurich. Attn: Systems Group.
8 --
9 -- Basic Hake rule combinators
10 -- 
11 --------------------------------------------------------------------------
12
13 module HakeTypes where
14
15 import Data.Typeable
16
17 data TreeRef = SrcTree | BuildTree | InstallTree
18              deriving (Show,Eq,Ord)
19
20 data RuleToken = In     TreeRef String String -- Input to the computation
21                | Dep    TreeRef String String -- Extra (implicit) dependency
22                | NoDep  TreeRef String String -- File that's not a dependency
23                | PreDep TreeRef String String -- One-time dependency
24                | Out    String String         -- Output of the computation
25                | Target String String         -- Target that's not involved
26                | Str String                   -- String with trailing " "
27                | NStr String                  -- Just a string               
28                | ContStr Bool String String   -- Conditional string 
29                | ErrorMsg String              -- Error message: $(error x)
30                | NL                           -- New line
31                  deriving (Show,Eq,Ord)
32
33 data HRule = Rule [ RuleToken ]
34            | Include RuleToken
35            | Error String
36            | Phony String Bool [ RuleToken ]
37            | Rules [ HRule ]
38              deriving (Show,Typeable)
39
40 frArch :: RuleToken -> String
41 frArch (In _ a _ ) = a
42 frArch (Out a _ ) = a
43 frArch (Dep _ a _ ) = a
44 frArch (NoDep _ a _ ) = a
45 frArch (PreDep _ a _ ) = a
46 frArch (Target a _ ) = a
47 frArch t = ""
48
49 frPath :: RuleToken -> String
50 frPath (In _ _ p) = p
51 frPath (Out _ p) = p
52 frPath (Dep _ _ p) = p
53 frPath (NoDep _ _ p) = p
54 frPath (PreDep _ _ p) = p
55 frPath (Target _ p) = p
56 frPath t = ""
57
58 frTree :: RuleToken -> TreeRef
59 frTree (In t _ _) = t
60 frTree (Dep t _ _) = t
61 frTree (NoDep t _ _) = t
62 frTree (PreDep t _ _) = t
63 frTree t = BuildTree
64
65 isFileRef :: RuleToken -> Bool
66 isFileRef (Str _ ) = False
67 isFileRef (NStr _ ) = False
68 isFileRef (ErrorMsg _) = False
69 isFileRef NL = False
70 isFileRef _ = True
71
72 isDependency :: RuleToken -> Bool
73 isDependency (In _ _ _) = True
74 isDependency (Dep _ _ _) = True
75 isDependency _ = False
76
77 isPredependency :: RuleToken -> Bool
78 isPredependency (PreDep _ _ _) = True
79 isPredependency _ = False
80
81 isOutput :: RuleToken -> Bool
82 isOutput (Out _ _) = True
83 isOutput _ = False
84
85 formatToken :: RuleToken -> String
86 formatToken (In _ a f) = f ++ " "
87 formatToken (Out a f) = f ++ " "
88 formatToken (Dep _ a f) = f ++ " "
89 formatToken (NoDep _ a f) = f ++ " "
90 formatToken (PreDep _ a f) = f ++ " "
91 formatToken (Target a f) = f ++ " "
92 formatToken (Str s) = s ++ " "
93 formatToken (NStr s) = s 
94 formatToken (ErrorMsg s) = "$(error " ++ s ++ ")"
95 formatToken (NL) = "\n\t"
96
97 -------------------------------------------------------------------------
98 --
99 -- Data type for default options to compilers, assemblers, dependency
100 -- generators, and the like
101 --
102 -------------------------------------------------------------------------
103
104 data Options = Options {
105       optArch :: String,
106       optArchFamily :: String,
107       optFlags :: [RuleToken],
108       optCxxFlags :: [RuleToken],
109       optDefines :: [RuleToken],
110       optIncludes :: [RuleToken],
111       optDependencies :: [RuleToken],
112       optLdFlags :: [RuleToken],
113       optLdCxxFlags :: [RuleToken],
114       optLibs :: [RuleToken],
115       optCxxLibs :: [RuleToken],
116       optInterconnectDrivers :: [String],
117       optFlounderBackends :: [String],
118       extraFlags :: [String],
119       extraCxxFlags :: [String],
120       extraDefines :: [String],
121       extraIncludes :: [RuleToken],
122       extraDependencies :: [RuleToken],
123       extraLdFlags :: [RuleToken],
124       optSuffix :: String
125     }
126