1#!/usr/bin/env bash
2
3ARCHS='<host>'
4REMOTE=0
5if test `uname` = "Darwin"; then
6  if test "$1" = "armv6"; then
7    ARCHS="armv6"
8    LIBS="-lSystem"
9    REMOTE=1
10    mkdir -p remote
11  else
12    ARCHS="i386 x86_64 ppc"
13    LIBS="-lSystem"
14  fi
15else
16  LIBS="-lc -lm"
17fi
18
19for ARCH in $ARCHS; do
20  CFLAGS="-Os -nodefaultlibs -I../../lib"
21  if test "$ARCH" != '<host>'; then
22    CFLAGS="-arch $ARCH $CFLAGS"
23  fi
24  for FILE in $(ls *.c); do
25    # Use -nodefaultlibs to avoid using libgcc.a
26    # Use -lSystem to link with libSystem.dylb.
27    # Note -lSystem is *after* libcompiler_rt.Optimized.a so that linker will 
28    # prefer our implementation over the ones in libSystem.dylib
29    EXTRA=
30    if test $FILE = gcc_personality_test.c
31    then
32      # the gcc_personality_test.c requires a helper C++ program
33      EXTRA="-fexceptions gcc_personality_test_helper.cxx -lstdc++ /usr/lib/libgcc_s.1.dylib"
34      # the libgcc_s.1.dylib use at the end is a hack until libSystem contains _Unwind_Resume
35    fi
36    if test $FILE = trampoline_setup_test.c
37    then
38      # this test requires an extra compiler option
39      EXTRA="-fnested-functions"
40    fi
41    if test "$REMOTE" = "1"
42    then 
43      if gcc $CFLAGS $FILE ../../darwin_fat/Release/libcompiler_rt.a $LIBS $EXTRA -o ./remote/$FILE.exe
44      then
45        echo "Built $FILE.exe for $ARCH"
46      else
47        echo "$FILE failed to compile"
48      fi
49    else
50      if gcc $CFLAGS $FILE ../../darwin_fat/Release/libcompiler_rt.a $LIBS $EXTRA
51      then
52        echo "Testing $FILE for $ARCH"
53        if ./a.out
54        then
55          rm ./a.out
56        else
57          echo "fail"
58          exit 1
59        fi
60      else
61        echo "$FILE failed to compile"
62        exit 1
63      fi
64    fi
65  done
66done
67echo "pass"
68exit
69