hake: Increase the stack size of the Haskell Runtime System from 8MB (default)
[barrelfish] / hake / hake.sh
1 #!/bin/bash
2
3 ##########################################################################
4 # Copyright (c) 2009, 2011, ETH Zurich.
5 # All rights reserved.
6 #
7 # This file is distributed under the terms in the attached LICENSE file.
8 # If you do not find this file, copies can be found by writing to:
9 # ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
10 ##########################################################################
11
12 DFLTARCHS="\"x86_64\""
13 RUN_HAKE="Yes"
14
15 usage() { 
16     echo "Usage: $0 <options>"
17     echo "   -s|--source-dir: path to source tree (required)"
18     echo "   -i|--install-dir: path to install directory (defaults to \`pwd\`)"
19     echo "   -a|--architecture: specify archtitecture to build for (can be"
20     echo "       given multiple times, default architectures are"
21     echo "       $DFLTARCHS"
22     echo "   -n|--no-hake: just rebuild hake itself, don't run it (only useful"
23     echo "       for debugging hake)"
24     echo ""
25     echo "  The way you use this script is to create a new directory for your"
26     echo "  build tree, cd into it, and run this script with the --source-dir"
27     echo "  argument specifying the top of the source tree."
28     exit 1;
29 }
30
31 #
32 # Legacy compatibility to avoid breaking the harness...
33 #
34 if [ $# -eq 1 ]; then
35     echo "WARNING: old usage of hake.sh (sole argument gives the source directory) is"
36     echo "deprecated: please use --source-dir instead."
37     SRCDIR="$1"
38     shift
39 fi
40
41 #
42 # Parse args
43 #
44 while [ $# -ne 0 ]; do
45     case $1 in
46         "-a"|"--architecture") 
47             if [ -z "$NEWARCHS" ] ; then
48                 NEWARCHS="\"$2\""
49             else
50                 NEWARCHS="$NEWARCHS, \"$2\""
51             fi
52             ;;
53         "-i"|"--install-dir")
54             INSTALLDIR="$2"
55             ;;
56         "-s"|"--source-dir")
57             SRCDIR="$2"
58             ;;
59         "-n"|"--no-hake")
60             RUN_HAKE="No"
61             ;;
62         *) 
63             usage
64             ;;
65     esac
66     shift 
67     shift
68 done
69
70 if [ -z "$INSTALLDIR" ] ; then
71     echo "Install directory defaulting to '.'"
72     INSTALLDIR="."
73 else
74     echo "Install directory is $INSTALLDIR"
75 fi
76 cd $INSTALLDIR
77
78 if [ -z "$SRCDIR" ] ; then
79     usage
80 fi
81
82 if [ ! -f "$SRCDIR"/hake/Main.hs ] ; then
83     echo "Can't find Hake in the source directory $SRCDIR."
84     echo "Did you specify the source directory correctly?"
85     usage
86 fi
87 echo "Source directory is $SRCDIR"
88
89 if [ ! -z "$NEWARCHS" ]; then
90     ARCHS="$NEWARCHS"
91 else 
92     ARCHS="$DFLTARCHS"
93 fi
94 echo "Architectures to build: $ARCHS"
95
96 if [ ! -d hake ] ; then
97     echo "Creating a local hake directory..."
98     mkdir -p hake
99     touch hake/.marker
100 fi
101
102 echo "Setting up hake build directory..."
103 if [ ! -f hake/Config.hs ]; then
104     cp $SRCDIR/hake/Config.hs.template hake/Config.hs
105     cat >> hake/Config.hs <<EOF
106
107 -- Automatically added by hake.sh. Do NOT copy these definitions to the defaults
108 source_dir = "$SRCDIR"
109 architectures = [ $ARCHS ]
110 install_dir = "$INSTALLDIR"
111 EOF
112 else
113     echo "You already have Config.hs, leaving it as-is."
114 fi
115
116 if [ ! -f ./symbolic_targets.mk ]; then
117     echo "Creating new symbolic_targets.mk file."
118     cp "$SRCDIR/hake/symbolic_targets.mk" . 
119 else
120     echo "You already have symbolic_targets.mk, leaving it as-is."
121 fi
122
123 # FIXME: do we really need this; doesn't ghc get the dependencies right? -AB
124 #rm -f hake/*.hi hake/*.o 
125
126 echo "Building hake..."
127 ghc -O --make -XDeriveDataTypeable \
128     -package ghc \
129     -package ghc-paths \
130     -o hake/hake \
131     -outputdir hake \
132     -i$SRCDIR/hake \
133     -ihake \
134     -rtsopts=all \
135     -with-rtsopts="-K32m" \
136     $SRCDIR/hake/Main.hs $LDFLAGS || exit 1
137
138 if [ "$RUN_HAKE" == "No" ] ; then
139     echo "Not running hake as per your request."
140     exit
141 fi
142
143 echo "Running hake..."
144 ./hake/hake --output-filename Makefile --source-dir "$SRCDIR" || exit
145 cat <<EOF
146
147 OK - Hake has bootstrapped.  You should now have a Makefile in this
148 directory, and you can type "make" to build a predefined target.
149
150 To change configuration options, edit the Config.hs file in the hake
151 subdirectory of this directory and run "make rehake".
152
153 To change the set of symbolic make targets available (for example, to
154 build a different set of modules or architectures for your boot image),
155 edit the local copy of the symbolic_targets.mk in this directory.
156 EOF