17edbe041a72d9663d612abe1d9a978d3b9c66444Daniel Dunbar#!/usr/bin/env bash
27edbe041a72d9663d612abe1d9a978d3b9c66444Daniel Dunbar
37edbe041a72d9663d612abe1d9a978d3b9c66444Daniel DunbarARCHS='<host>'
4d47c2cfb86a7d9746f7665a73fa25a724c4ce354Nick KledzikREMOTE=0
57edbe041a72d9663d612abe1d9a978d3b9c66444Daniel Dunbarif test `uname` = "Darwin"; then
6d47c2cfb86a7d9746f7665a73fa25a724c4ce354Nick Kledzik  if test "$1" = "armv6"; then
7d47c2cfb86a7d9746f7665a73fa25a724c4ce354Nick Kledzik    ARCHS="armv6"
84467b65ff6e342ad4e8bef86f4e948f56e814bdfDaniel Dunbar    LIBS="-lSystem"
94467b65ff6e342ad4e8bef86f4e948f56e814bdfDaniel Dunbar    REMOTE=1
104467b65ff6e342ad4e8bef86f4e948f56e814bdfDaniel Dunbar    mkdir -p remote
11d47c2cfb86a7d9746f7665a73fa25a724c4ce354Nick Kledzik  else
12d47c2cfb86a7d9746f7665a73fa25a724c4ce354Nick Kledzik    ARCHS="i386 x86_64 ppc"
13d47c2cfb86a7d9746f7665a73fa25a724c4ce354Nick Kledzik    LIBS="-lSystem"
14d47c2cfb86a7d9746f7665a73fa25a724c4ce354Nick Kledzik  fi
15172e105cf58333a1a55468095c51d22868296a68Daniel Dunbarelse
16172e105cf58333a1a55468095c51d22868296a68Daniel Dunbar  LIBS="-lc -lm"
177edbe041a72d9663d612abe1d9a978d3b9c66444Daniel Dunbarfi
187edbe041a72d9663d612abe1d9a978d3b9c66444Daniel Dunbar
197edbe041a72d9663d612abe1d9a978d3b9c66444Daniel Dunbarfor ARCH in $ARCHS; do
204467b65ff6e342ad4e8bef86f4e948f56e814bdfDaniel Dunbar  CFLAGS="-Os -nodefaultlibs -I../../lib"
217edbe041a72d9663d612abe1d9a978d3b9c66444Daniel Dunbar  if test "$ARCH" != '<host>'; then
227edbe041a72d9663d612abe1d9a978d3b9c66444Daniel Dunbar    CFLAGS="-arch $ARCH $CFLAGS"
237edbe041a72d9663d612abe1d9a978d3b9c66444Daniel Dunbar  fi
24781a3b3ee6e90277eba14fb0cc4f0de88ffec0b6Daniel Dunbar  for FILE in $(ls *.c); do
25781a3b3ee6e90277eba14fb0cc4f0de88ffec0b6Daniel Dunbar    # Use -nodefaultlibs to avoid using libgcc.a
26781a3b3ee6e90277eba14fb0cc4f0de88ffec0b6Daniel Dunbar    # Use -lSystem to link with libSystem.dylb.
27781a3b3ee6e90277eba14fb0cc4f0de88ffec0b6Daniel Dunbar    # Note -lSystem is *after* libcompiler_rt.Optimized.a so that linker will 
28781a3b3ee6e90277eba14fb0cc4f0de88ffec0b6Daniel Dunbar    # prefer our implementation over the ones in libSystem.dylib
29781a3b3ee6e90277eba14fb0cc4f0de88ffec0b6Daniel Dunbar    EXTRA=
30781a3b3ee6e90277eba14fb0cc4f0de88ffec0b6Daniel Dunbar    if test $FILE = gcc_personality_test.c
31781a3b3ee6e90277eba14fb0cc4f0de88ffec0b6Daniel Dunbar    then
32781a3b3ee6e90277eba14fb0cc4f0de88ffec0b6Daniel Dunbar      # the gcc_personality_test.c requires a helper C++ program
33781a3b3ee6e90277eba14fb0cc4f0de88ffec0b6Daniel Dunbar      EXTRA="-fexceptions gcc_personality_test_helper.cxx -lstdc++ /usr/lib/libgcc_s.1.dylib"
34781a3b3ee6e90277eba14fb0cc4f0de88ffec0b6Daniel Dunbar      # the libgcc_s.1.dylib use at the end is a hack until libSystem contains _Unwind_Resume
35781a3b3ee6e90277eba14fb0cc4f0de88ffec0b6Daniel Dunbar    fi
36781a3b3ee6e90277eba14fb0cc4f0de88ffec0b6Daniel Dunbar    if test $FILE = trampoline_setup_test.c
37781a3b3ee6e90277eba14fb0cc4f0de88ffec0b6Daniel Dunbar    then
38781a3b3ee6e90277eba14fb0cc4f0de88ffec0b6Daniel Dunbar      # this test requires an extra compiler option
39781a3b3ee6e90277eba14fb0cc4f0de88ffec0b6Daniel Dunbar      EXTRA="-fnested-functions"
40781a3b3ee6e90277eba14fb0cc4f0de88ffec0b6Daniel Dunbar    fi
414467b65ff6e342ad4e8bef86f4e948f56e814bdfDaniel Dunbar    if test "$REMOTE" = "1"
424467b65ff6e342ad4e8bef86f4e948f56e814bdfDaniel Dunbar    then 
4348464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar      if gcc $CFLAGS $FILE ../../darwin_fat/Release/libcompiler_rt.a $LIBS $EXTRA -o ./remote/$FILE.exe
44781a3b3ee6e90277eba14fb0cc4f0de88ffec0b6Daniel Dunbar      then
45d47c2cfb86a7d9746f7665a73fa25a724c4ce354Nick Kledzik        echo "Built $FILE.exe for $ARCH"
464467b65ff6e342ad4e8bef86f4e948f56e814bdfDaniel Dunbar      else
47d47c2cfb86a7d9746f7665a73fa25a724c4ce354Nick Kledzik        echo "$FILE failed to compile"
484467b65ff6e342ad4e8bef86f4e948f56e814bdfDaniel Dunbar      fi
494467b65ff6e342ad4e8bef86f4e948f56e814bdfDaniel Dunbar    else
5048464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar      if gcc $CFLAGS $FILE ../../darwin_fat/Release/libcompiler_rt.a $LIBS $EXTRA
51d47c2cfb86a7d9746f7665a73fa25a724c4ce354Nick Kledzik      then
52d47c2cfb86a7d9746f7665a73fa25a724c4ce354Nick Kledzik        echo "Testing $FILE for $ARCH"
53d47c2cfb86a7d9746f7665a73fa25a724c4ce354Nick Kledzik        if ./a.out
54d47c2cfb86a7d9746f7665a73fa25a724c4ce354Nick Kledzik        then
55d47c2cfb86a7d9746f7665a73fa25a724c4ce354Nick Kledzik          rm ./a.out
56d47c2cfb86a7d9746f7665a73fa25a724c4ce354Nick Kledzik        else
57d47c2cfb86a7d9746f7665a73fa25a724c4ce354Nick Kledzik          echo "fail"
58d47c2cfb86a7d9746f7665a73fa25a724c4ce354Nick Kledzik          exit 1
59d47c2cfb86a7d9746f7665a73fa25a724c4ce354Nick Kledzik        fi
60781a3b3ee6e90277eba14fb0cc4f0de88ffec0b6Daniel Dunbar      else
61d47c2cfb86a7d9746f7665a73fa25a724c4ce354Nick Kledzik        echo "$FILE failed to compile"
62781a3b3ee6e90277eba14fb0cc4f0de88ffec0b6Daniel Dunbar        exit 1
63781a3b3ee6e90277eba14fb0cc4f0de88ffec0b6Daniel Dunbar      fi
644467b65ff6e342ad4e8bef86f4e948f56e814bdfDaniel Dunbar    fi
65781a3b3ee6e90277eba14fb0cc4f0de88ffec0b6Daniel Dunbar  done
66b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbardone
67b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbarecho "pass"
68b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbarexit
69