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 " using the usual Isabelle platform identifiers." |
|
18 echo |
|
19 echo " Additional options for ./configure may be given, e.g. --with-gmp" |
|
20 echo |
|
21 exit 1 |
|
22 } |
|
23 |
|
24 function fail() |
|
25 { |
|
26 echo "$1" >&2 |
|
27 exit 2 |
|
28 } |
|
29 |
|
30 |
|
31 # command line args |
|
32 |
|
33 [ "$#" -eq 0 ] && usage |
|
34 SOURCE="$1"; shift |
|
35 |
|
36 [ "$#" -eq 0 ] && usage |
|
37 TARGET="$1"; shift |
|
38 |
|
39 USER_OPTIONS=("$@") |
|
40 |
|
41 |
|
42 # main |
|
43 |
|
44 [ -d "$SOURCE" ] || fail "Bad source directory: \"$SOURCE\"" |
|
45 |
|
46 case "$TARGET" in |
|
47 x86-linux) |
|
48 OPTIONS=() |
|
49 ;; |
|
50 x86_64-linux) |
|
51 OPTIONS=() |
|
52 ;; |
|
53 x86-darwin) |
|
54 OPTIONS=(--build=i686-darwin CFLAGS='-arch i686 -O3 -I../libffi/include' |
|
55 CXXFLAGS='-arch i686 -O3 -I../libffi/include' CCASFLAGS='-arch i686 -O3' |
|
56 LDFLAGS='-segprot POLY rwx rwx') |
|
57 ;; |
|
58 x86_64-darwin) |
|
59 OPTIONS=(--build=x86_64-darwin CFLAGS='-arch x86_64 -O3 -I../libffi/include' |
|
60 CXXFLAGS='-arch x86_64 -O3 -I../libffi/include' CCASFLAGS='-arch x86_64' |
|
61 LDFLAGS='-segprot POLY rwx rwx') |
|
62 ;; |
|
63 x86-cygwin) |
|
64 OPTIONS=() |
|
65 ;; |
|
66 x86-windows) |
|
67 OPTIONS=(--host=i686-w32-mingw32 CPPFLAGS='-I/mingw32/include' --disable-windows-gui) |
|
68 PATH="/mingw32/bin:$PATH" |
|
69 ;; |
|
70 x86_64-windows) |
|
71 OPTIONS=(--host=x86_64-w64-mingw32 CPPFLAGS='-I/mingw64/include' --disable-windows-gui) |
|
72 PATH="/mingw64/bin:$PATH" |
|
73 ;; |
|
74 *) |
|
75 fail "Bad platform identifier: \"$TARGET\"" |
|
76 ;; |
|
77 esac |
|
78 |
|
79 ( |
|
80 cd "$SOURCE" |
|
81 make distclean |
|
82 |
|
83 { ./configure --prefix="$PWD/$TARGET" "${OPTIONS[@]}" --enable-intinf-as-int "${USER_OPTIONS[@]}" && \ |
|
84 make compiler && \ |
|
85 make compiler && \ |
|
86 make install; } || fail "Build failed" |
|
87 ) |
|
88 |
|
89 mkdir -p "$TARGET" |
|
90 for X in "$TARGET"/* |
|
91 do |
|
92 [ -d "$X" ] && rm -rf "$X" |
|
93 done |
|
94 rm -rf "$TARGET/polyml" |
|
95 cp -a "$THIS/polyi" "$TARGET/" |
|
96 mv "$SOURCE/$TARGET/bin/"* "$TARGET/" |
|
97 mv "$SOURCE/$TARGET/lib/"* "$TARGET/" |
|
98 rmdir "$SOURCE/$TARGET/bin" "$SOURCE/$TARGET/lib" |
|
99 rm -rf "$SOURCE/$TARGET/share" |
|
100 |
|
101 case "$TARGET" in |
|
102 x86-cygwin) |
|
103 peflags -x8192000 -z500 "$TARGET/poly.exe" |
|
104 ;; |
|
105 x86-windows) |
|
106 for X in libgcc_s_dw2-1.dll libgmp-10.dll libstdc++-6.dll |
|
107 do |
|
108 cp "/mingw32/bin/$X" "$TARGET/." |
|
109 done |
|
110 ;; |
|
111 x86_64-windows) |
|
112 for X in libgcc_s_seh-1.dll libgmp-10.dll libstdc++-6.dll |
|
113 do |
|
114 cp "/mingw64/bin/$X" "$TARGET/." |
|
115 done |
|
116 ;; |
|
117 esac |
|