| 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 | "$@" |