Commit | Line | Data |
---|---|---|
7f918cf1 CE |
1 | #!/usr/bin/env bash |
2 | ||
3 | # This script calls MLton. | |
4 | ||
5 | set -e | |
6 | ||
7 | dir=`dirname "$0"` | |
8 | lib=`cd "$dir/../lib/mlton" && pwd` | |
9 | ||
10 | declare -a rargs | |
11 | case "$1" in | |
12 | @MLton) | |
13 | shift | |
14 | while [ "$#" -gt 0 -a "$1" != "--" ]; do | |
15 | rargs[${#rargs[@]}]="$1" | |
16 | shift | |
17 | done | |
18 | if [ "$#" -gt 0 -a "$1" == "--" ]; then | |
19 | shift | |
20 | else | |
21 | echo '@MLton missing --' | |
22 | exit 1 | |
23 | fi | |
24 | ;; | |
25 | esac | |
26 | ||
27 | EXE= | |
28 | ||
29 | doitMLton () { | |
30 | mlton_mlton="$lib/mlton-compile$EXE" | |
31 | if [ -x "$mlton_mlton" ]; then | |
32 | exec "$mlton_mlton" @MLton ram-slop 0.5 "${rargs[@]}" -- "$@" | |
33 | fi | |
34 | } | |
35 | doitSMLNJ () { | |
36 | smlnj='sml' | |
37 | if $smlnj -h >/dev/null 2>&1; then | |
38 | smlnj_heap_suffix=`echo 'TextIO.output (TextIO.stdErr, SMLofNJ.SysInfo.getHeapSuffix ());' | $smlnj 2>&1 1> /dev/null` | |
39 | mlton_smlnj_heap="$lib/mlton-smlnj.$smlnj_heap_suffix" | |
40 | if [ -s "$mlton_smlnj_heap" ]; then | |
41 | exec "$smlnj" @SMLload="$mlton_smlnj_heap" "$@" | |
42 | fi | |
43 | fi | |
44 | } | |
45 | doitPolyML () { | |
46 | mlton_polyml="$lib/mlton-polyml$EXE" | |
47 | if [ -x "$mlton_polyml" ]; then | |
48 | exec "$mlton_polyml" "$@" | |
49 | fi | |
50 | } | |
51 | ||
52 | doit () { | |
53 | doitMLton "$@" | |
54 | doitSMLNJ "$@" | |
55 | doitPolyML "$@" | |
56 | echo 'Unable to run MLton. Check that lib is set properly.' >&2 | |
57 | exit 1 | |
58 | } | |
59 | ||
60 | CC="gcc" | |
61 | ||
62 | # You may need to set 'GMP_INC_DIR' so the C compiler can find gmp.h. | |
63 | GMP_INC_DIR= | |
64 | if [ -n "$GMP_INC_DIR" ]; then | |
65 | gmpCCOpts="-cc-opt -I$GMP_INC_DIR" | |
66 | fi | |
67 | # You may need to set 'GMP_LIB_DIR' so the C compiler can find libgmp. | |
68 | GMP_LIB_DIR= | |
69 | if [ -n "$GMP_LIB_DIR" ]; then | |
70 | gmpLinkOpts="-link-opt -L$GMP_LIB_DIR -target-link-opt netbsd -Wl,-R$GMP_LIB_DIR" | |
71 | fi | |
72 | ||
73 | doit "$lib" \ | |
74 | -ar-script "$lib/static-library" \ | |
75 | -cc "$CC" \ | |
76 | -cc-opt '-std=gnu11 -fno-common' \ | |
77 | -cc-opt '-O1 -fomit-frame-pointer -fno-strict-aliasing' \ | |
78 | -cc-opt '-w' \ | |
79 | -cc-opt-quote "-I$lib/include" \ | |
80 | -link-opt '-lm -lgmp' \ | |
81 | $gmpCCOpts $gmpLinkOpts \ | |
82 | -llvm-llc-opt '-O2' \ | |
83 | -llvm-opt-opt '-mem2reg -O2' \ | |
84 | -mlb-path-var 'SML_LIB $(LIB_MLTON_DIR)/sml' \ | |
85 | -target-as-opt amd64 '-m64' \ | |
86 | -target-as-opt x86 '-m32' \ | |
87 | -target-cc-opt alpha \ | |
88 | '-mieee -mbwx -mtune=ev6 -mfp-rounding-mode=d' \ | |
89 | -target-cc-opt amd64 '-m64' \ | |
90 | -target-cc-opt aix '-maix64' \ | |
91 | -target-cc-opt ia64-hpux "-mlp64" \ | |
92 | -target-cc-opt ia64 "-mtune=itanium2" \ | |
93 | -target-cc-opt sparc '-m32 -mcpu=v8 -Wa,-xarch=v8plusa' \ | |
94 | -target-cc-opt x86 \ | |
95 | '-m32 | |
96 | -fno-strength-reduce | |
97 | -fschedule-insns | |
98 | -fschedule-insns2 | |
99 | -falign-functions=5 | |
100 | -falign-jumps=2 | |
101 | -falign-loops=2' \ | |
102 | -target-link-opt amd64 '-m64' \ | |
103 | -target-link-opt alpha \ | |
104 | '-mieee -mbwx -mtune=ev6 -mfp-rounding-mode=d' \ | |
105 | -target-link-opt aix '-maix64' \ | |
106 | -target-link-opt ia64-hpux "-mlp64" \ | |
107 | -target-link-opt linux '-Wl,-znoexecstack' \ | |
108 | -target-link-opt mingw \ | |
109 | '-lws2_32 -lkernel32 -lpsapi -lnetapi32 -lwinmm' \ | |
110 | -target-link-opt mingw '-Wl,--enable-stdcall-fixup' \ | |
111 | -target-link-opt solaris '-lnsl -lsocket -lrt' \ | |
112 | -target-link-opt x86 '-m32' \ | |
113 | -profile-exclude '\$\(SML_LIB\)' \ | |
114 | "$@" |