fe90f86b90eef4816580225190ff8322e99b8a06
[barrelfish] / hake / Hakefile
1 ----------------------------------------------------------------------
2 -- Copyright (c) 2009, 2011, 2012, 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 CAB F.78, Universitaetstr 6, CH-8092 Zurich. 
8 -- Attn: Systems Group.
9 --
10 -- Hakefile for /hake
11 --
12 ----------------------------------------------------------------------
13
14 let
15   hsInDir af tf dir = inDir af tf dir ".hs"
16   hakesrc = find hsInDir "."
17   hake_rtsopts = "-H128M -A4M -N4"
18 in
19 [ Rule ([ Str "ghc -O --make",
20           Str "-XDeriveDataTypeable",
21           Str "-XStandaloneDeriving",
22           Str "-XScopedTypeVariables",
23           Str "-package ghc",
24           Str "-package ghc-mtl",
25           Str "-package ghc-paths",
26           Str "-package bytestring-trie",
27           Str "-o", Out "hake" "/hake",
28           Str "-outputdir", NoDep BuildTree "root" "/hake",
29           NStr "-i", NoDep SrcTree "src" "",
30           NStr "-i", NoDep BuildTree "hake" "/",
31           Str "-rtsopts=all",
32           Str ("-with-rtsopts=\"" ++ hake_rtsopts ++ "\""),
33           Str "-threaded",
34           In SrcTree "src" "Main.hs",
35           Dep InstallTree "" "Config.hs",
36           Str "$(LDFLAGS)"
37         ] 
38         ++ [Dep SrcTree "src" f | f <- hakesrc]),
39
40   -- Copy files required for interpreting Hakefiles
41   includeFile [
42     "ArchDefaults.hs",
43     "Args.hs",
44     "HakeTypes.hs",
45     "RuleDefs.hs",
46     "Tools.hs",
47     "TreeDB.hs",
48     "ARMv7.hs",
49     "ARMv8.hs",
50     "K1om.hs",
51     "X86_32.hs",
52     "X86_64.hs"
53   ],
54   Phony "help" False $ concat [ [Str "@echo", Str ("\"" ++ x ++ "\""), NL] | x <- [
55      "------------------------------------------------------------------"
56     ,"This is the 'help' target for the Barrelfish Makefile.  This Makefile"
57     ,"has been generated by hake in the top-level directory of your build tree."
58     ,"See the Hake documentation for more information."
59     ,""
60     ,"This Makefile contains build targets for the following architectures:"
61     ,""
62     , (Data.List.intercalate ", " Config.architectures)
63     ,""
64     ,"To change configuration options, edit the Config.hs file in the hake"
65     ,"subdirectory of this directory and run 'make Makefile'."
66     ,""
67     ,"Useful make targets:"
68     ," - <file>:           any file which can be built in the Barrelfish tree"
69     ," - 'help':           show this help text"
70     ," - 'help-platforms': show the platforms (file collections) which can be built"
71     ," - 'help-boot':      show the boot sequences which can be initiated"
72     ," - 'clean':          remove most generated files"
73     ," - 'realclean':      remove all generated files (clears the build tree)"
74     ," - 'Makefile':       attempt to re-run hake"
75     ,""
76   ] ],
77   Phony "help-platforms-header" False $ concat [ [Str "@echo", Str ("\"" ++ x ++ "\""), NL] | x <- [
78      "------------------------------------------------------------------"
79     ,"Platforms supported by this Makefile.  Use 'make <platform name>':"
80     ," (these are the platforms available with your architecture choices)"
81   ] ],
82   Phony "help-boot-header" False $ concat [ [Str "@echo", Str ("\"" ++ x ++ "\""), NL] | x <- [
83      "------------------------------------------------------------------"
84     ,"Boot instructions supported by this Makefile.  Use 'make <boot name>':"
85     ," (these are the targets available with your architecture choices)"
86     ,""
87   ] ],
88   Phony "clean" False (
89     [ Str "$(RM)", Str "-r", Str "tools", Str "docs" ] ++
90     (map Str Config.architectures) ++
91     [ Dep BuildTree "root" "/clean-platform" ]),
92   -- Legacy target for scalebench to install modules
93   Phony "install" False ([
94     Dep BuildTree "root" "/$(MODULES)",
95     Str "@echo \"\";",
96     Str "echo \"Installing modules...\" ;",   
97     Str "if [ $${#MODULES[@]} -eq 0 ]; then",
98     Str "    echo \"   > Modules is empty, did you mean install_X86_64_Basic? \" ;",
99     Str "    exit 0;",
100     Str "fi;",
101     Str "for m in ${MODULES}; do",
102     Str "  if [ ! -f ${INSTALL_PREFIX}/$$m ] ||",
103     Str "      [ $$(stat -c%Y $$m) -ne $$(stat -c%Y ${INSTALL_PREFIX}/$$m) ]; then",
104     Str "         do_update=1;",
105     Str "         echo \"  > Installing $$m\" ;",
106     Str "         mkdir -p ${INSTALL_PREFIX}/$$(dirname $$m);",
107     Str "         install -p $$m ${INSTALL_PREFIX}/$$m;",
108     Str "  fi;",
109     Str "done;",
110     Str "if [ ! $$do_update ]; then",
111     Str "    echo \"  > All up to date\" ;",
112     Str "fi;",
113     Str "echo \"\";",
114     Str "echo \"done.\" ;"
115   ]),
116   Rule ([
117     Str "sed -r",
118     Str "'s#@CMAKE_SOURCE_DIR@#${SRCDIR}#g'",
119     In SrcTree "root" "/doc/Doxyfile.cmake",
120     Str ">",
121     Out "root" "/Doxyfile"
122   ]),
123   Phony "doxygen" False ([
124     Str "doxygen",
125     In BuildTree "root" "/Doxyfile"
126   ])
127 ]