equal
deleted
inserted
replaced
|
1 #!/usr/bin/env bash |
|
2 # |
|
3 # Multi-platform build script for Poly/ML |
|
4 |
|
5 THIS="$(cd "$(dirname "$0")"; pwd)" |
|
6 PRG="$(basename "$0")" |
|
7 |
|
8 |
|
9 # diagnostics |
|
10 |
|
11 function usage() |
|
12 { |
|
13 echo |
|
14 echo "Usage: $PRG SOURCE TARGET [OPTIONS]" |
|
15 echo |
|
16 echo " Build Poly/ML in SOURCE directory for given platform in TARGET" |
|
17 echo " which is identified as follows:" |
|
18 echo |
|
19 echo " x86-linux x86_64-linux" |
|
20 echo " x86-darwin x86_64-darwin" |
|
21 echo " x86-cygwin" |
|
22 echo |
|
23 echo " Additional options for ./configure may be given, e.g. --with-gmp" |
|
24 echo |
|
25 exit 1 |
|
26 } |
|
27 |
|
28 function fail() |
|
29 { |
|
30 echo "$1" >&2 |
|
31 exit 2 |
|
32 } |
|
33 |
|
34 |
|
35 # command line args |
|
36 |
|
37 [ "$#" -eq 0 ] && usage |
|
38 SOURCE="$1"; shift |
|
39 |
|
40 [ "$#" -eq 0 ] && usage |
|
41 TARGET="$1"; shift |
|
42 |
|
43 USER_OPTIONS=("$@") |
|
44 |
|
45 |
|
46 # main |
|
47 |
|
48 [ -d "$SOURCE" ] || fail "Bad source directory: \"$SOURCE\"" |
|
49 |
|
50 case "$TARGET" in |
|
51 x86-linux) |
|
52 OPTIONS=() |
|
53 ;; |
|
54 x86_64-linux) |
|
55 OPTIONS=() |
|
56 ;; |
|
57 x86-darwin) |
|
58 OPTIONS=(--build=i686-darwin CFLAGS='-arch i686 -O3' |
|
59 CXXFLAGS='-arch i686 -O3' CCASFLAGS='-arch i686 -O3') |
|
60 ;; |
|
61 x86_64-darwin) |
|
62 OPTIONS=(--build=x86_64-darwin CFLAGS='-arch x86_64 -O3' |
|
63 CXXFLAGS='-arch x86_64 -O3' CCASFLAGS='-arch x86_64') |
|
64 ;; |
|
65 x86-cygwin) |
|
66 OPTIONS=() |
|
67 ;; |
|
68 *) |
|
69 fail "Bad platform identifier: \"$TARGET\"" |
|
70 ;; |
|
71 esac |
|
72 |
|
73 ( |
|
74 cd "$SOURCE" |
|
75 make distclean |
|
76 |
|
77 { ./configure --prefix="$PWD/$TARGET" "${OPTIONS[@]}" "${USER_OPTIONS[@]}" && \ |
|
78 make compiler && \ |
|
79 make install; } || fail "Build failed" |
|
80 ) |
|
81 |
|
82 mkdir -p "$TARGET" |
|
83 mv "$SOURCE/$TARGET/bin/"* "$TARGET/" |
|
84 mv "$SOURCE/$TARGET/lib/"* "$TARGET/" |
|
85 rmdir "$SOURCE/$TARGET/bin" "$SOURCE/$TARGET/lib" |
|
86 rm -rf "$SOURCE/$TARGET/share" |