1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
|
#!/usr/bin/env bash
# This script calls MLton.
set -e
dir=`dirname $0`
lib=`cd $dir/../lib && pwd`
eval `$lib/platform`
gcc='gcc'
case "$HOST_OS" in
mingw)
exe='.exe'
;;
*)
exe=''
;;
esac
mlton="$lib/mlton-compile$exe"
world="$lib/world.mlton"
nj='sml'
# Try to use the SML/NJ .arch-n-opsys
if .arch-n-opsys >/dev/null 2>&1; then
eval `.arch-n-opsys`
njHeap="$lib/mlton.$HEAP_SUFFIX"
unset `.arch-n-opsys | sed 's#=[^ ]*##g'`
else
njHeap="$lib/mlton.$HOST_ARCH-$HOST_OS"
fi
rargs=""
case "$1" in
@MLton)
shift
while [ "$#" -gt 0 -a "$1" != "--" ]; do
rargs="$rargs $1"
shift
done
if [ "$#" -gt 0 -a "$1" == "--" ]; then
shift
else
echo '@MLton missing --'
exit 1
fi
;;
esac
# If $mlton is executable and $world exists and is not older than
# $njHeap (which exists), then use MLton, otherwise use SML/NJ.
doit () {
if [ -x "$mlton" -a -s "$world" -a ! "$njHeap" -nt "$world" ]; then
exec "$mlton" @MLton load-world "$world" ram-slop 0.5 $rargs -- "$@"
elif [ -s "$njHeap" ]; then
exec "$nj" @SMLload="$njHeap" "$@"
fi
echo 'Unable to run MLton. Check that lib is set properly.' >&2
exit 1
}
# For align-{functions,jumps,loops}, we use -m for now instead of
# -f because old gcc's will barf on -f, while newer ones only warn
# about -m. Someday, when we think we won't run into older gcc's,
# these should be changed to -f.
# You may need to add a line with -cc-opt 'I/path/to/gmp.h' so the
# C compiler can find gmp.h
# You may need to add a line with -link-opt '-L/path/to/libgmp' so
# that the linker can find libgmp.
if [ -d '/sw/lib' ]; then
darwinLinkOpts='-L/sw/lib'
fi
doit "$lib" \
-cc "$gcc" \
-cc-opt "-I$lib/include" \
-cc-opt '-O1' \
-cc-opt '-fno-strict-aliasing -fomit-frame-pointer -w' \
-mlb-path-map "$lib/mlb-path-map" \
-target-as-opt amd64 \
'-m32
-mtune=opteron' \
-target-cc-opt amd64 \
'-m32
-mtune=opteron' \
-target-cc-opt darwin '-I/sw/include' \
-target-cc-opt freebsd '-I/usr/local/include' \
-target-cc-opt solaris \
'-Wa,-xarch=v8plusa
-mcpu=ultrasparc' \
-target-cc-opt sparc '-mcpu=v8 -m32' \
-target-cc-opt x86 \
'-fno-strength-reduce
-fschedule-insns
-fschedule-insns2
-malign-functions=5
-malign-jumps=2
-malign-loops=2' \
-target-link-opt aix '-lgmp' \
-target-link-opt amd64 '-m32' \
-target-link-opt cygwin '-lgmp' \
-target-link-opt darwin "$darwinLinkOpts -lgmp" \
-target-link-opt freebsd '-L/usr/local/lib/ -lgmp' \
-target-link-opt hpux '-lgmp' \
-target-link-opt linux '-lgmp' \
-target-link-opt mingw \
'-lgmp -lws2_32 -lkernel32 -lpsapi -lnetapi32' \
-target-link-opt netbsd \
'-Wl,-R/usr/pkg/lib -L/usr/local/lib/ -lgmp' \
-target-link-opt openbsd '-L/usr/local/lib/ -lgmp' \
-target-link-opt solaris '-lgmp -lnsl -lsocket -lrt' \
-link-opt '-lgdtoa -lm' \
-profile-exclude '<basis>' \
"$@"
|