nacl 5.1 KB
Newer Older
J
jonas echterhoff 已提交
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 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
#!/bin/bash

set -o nounset
set -o errexit
set -o verbose

source ../common.sh

MONO_RUNTIME_BASE=${NACL_SDK_USR}
MONO_BASE=${NACL_SDK_USR}
CC=$NACLCC
AS=$NACLAS
MODE=nacl
COMPILE_AOT=0
AOT_OBJS=
CC_DEFINES=
MONO_SNAPSHOT=mono-normal-build
RELOCATE_RODATA="-Wl,--section-start=.rodata=0x10020000"

if [ $# -gt 0 ]; then
  while [ -n "$*" ]
  do
    if [ $1 == "normal" ]; then
      MONO_RUNTIME_BASE=../normal-mono
      MONO_BASE=../normal-mono
      CC=gcc
      AS=as
      MODE=normal
    elif [ $1 == "aot" ]; then
      COMPILE_AOT=1
      CC_DEFINES=-DAOT_VERSION
      #RELOCATE_RODATA=
    elif [ $1 == "regression" ]; then
      MODE=regression
    else
      echo "Unrecognized option '$1'"
      exit -1
    fi
    shift
  done
fi

MONO="${MONO_BASE}/bin/mono"
readonly MONO_NORMAL_BASE=../normal-mono
readonly NCVAL=ncval_x86_${TARGET_BITSIZE}

readonly IRT=${NACL_BIN_PATH}/../runtime/irt_core_x86_${TARGET_BITSIZE}.nexe

if [ $NACL_NEWLIB = "1" ]; then
  readonly SEL_LDR_ARGS=
  readonly LD_FLAGS="-static"
  if [ $COMPILE_AOT = "1" ]; then
    MONO="${MONO_BASE}/bin/nacl${TARGET_BIT_PREFIX}-mono"
  fi
else
  readonly SEL_LDR_ARGS="${NACL_BIN_PATH}/../x86_64-nacl/lib${TARGET_BITSIZE}/runnable-ld.so --library-path ${NACL_BIN_PATH}/../x86_64-nacl/lib${TARGET_BITSIZE}:${NACL_SDK_USR_LIB}"
  readonly LD_FLAGS="-ldl -lrt"
  RELOCATE_RODATA=
fi

# add nacl-gcc to path (from NaCl SDK)
export PATH=${NACL_BIN_PATH}:$PATH

# add normal mono/gmcs to path
export PATH=${MONO_NORMAL_BASE}/bin:$PATH

# echo version of nacl-gcc
$CC --version

echo $PATH
SEL_LDR=sel_ldr_x86_${TARGET_BITSIZE}
which ${SEL_LDR}

# echo version of gmcs 
which gmcs
${MONO_NORMAL_BASE}/bin/gmcs --version

# echo version of nacl-mono
if [ $COMPILE_AOT = "1" -o $MODE = "normal" ]; then
  ${MONO} --version
fi

# add MONO_PATH so mono can crank on local directory
#export MONO_PATH=$(pwd)
#echo ${MONO_PATH}

#-----
# enable the appropriate set of AOT options below.

readonly AOT_OPTIONS=full,static,nodebug,ntrampolines=4096
#-----

# make a temp copy of mscorlib.dll in this directory
cp ${MONO_NORMAL_BASE}/lib/mono/4.0/mscorlib.dll .

# compile c-sharp file with gmcs
../normal-mono/bin/gmcs -lib:. -warn:0 hw.cs

# convert .exe to .exe.o assembly files
# convert mscorlib to a .dll.o file
if [ $COMPILE_AOT = "1" ]; then
  MONO_PATH=. ${MONO} --aot=${AOT_OPTIONS} mscorlib.dll
  MONO_PATH=. ${MONO} --aot=${AOT_OPTIONS} hw.exe
  AOT_OBJS="hw.exe.o mscorlib.dll.o"
fi

# compile c and assembly into a.out, all statically linked
# different options for normal and nacl-mono
if [ $MODE = "normal" ]; then
  $CC -g -static my.c ${CC_DEFINES} ${AOT_OBJS} -o hw-test -lmono-2.0 -lpthread -lm -ldl -lrt -I${MONO_RUNTIME_BASE}/include -I${MONO_RUNTIME_BASE}/include/mono-2.0 -L${MONO_RUNTIME_BASE}/lib
elif [ $MODE = "nacl" ]; then
  $CC my.c ${CC_DEFINES} ${AOT_OBJS} -finstrument-for-thread-suspension -o hw-test.nexe -lmono-2.0 -lpthread -lm -lnacl_dyncode -lg -lnosys -I${MONO_RUNTIME_BASE}/include -I${MONO_RUNTIME_BASE}/include/mono-2.0 -L${MONO_RUNTIME_BASE}/lib ${RELOCATE_RODATA} ${LD_FLAGS}
fi

readonly fsatests="basic.exe basic-float.exe basic-long.exe basic-calls.exe objects.exe arrays.exe basic-math.exe exceptions.exe devirtualization.exe basic-simd.exe gc-test.exe generics.exe iltests.exe nacl.exe"
if [ $MODE = "regression" ]; then
  #rm -rf fsa-tmp
  mkdir -p fsa-tmp
  DIR=$(pwd)
  cd ../${MONO_SNAPSHOT}/mono/mini/
   make $fsatests generics-variant-types.dll TestDriver.dll
   cp $fsatests generics-variant-types.dll TestDriver.dll $DIR/fsa-tmp
  cd -
 
  CLASS=${MONO_NORMAL_BASE}/lib/mono/4.0
  cp $CLASS/System.Core.dll $CLASS/System.dll $CLASS/Mono.Posix.dll $CLASS/System.Configuration.dll $CLASS/System.Security.dll $CLASS/System.Xml.dll $CLASS/Mono.Security.dll $CLASS/Mono.Simd.dll fsa-tmp
  cp mscorlib.dll fsa-tmp

  AOT_OBJS=""
  if [ $COMPILE_AOT = "1" ]; then
    for t in $fsatests; do
      MONO_PATH=fsa-tmp ${MONO} --aot=${AOT_OPTIONS} fsa-tmp/$t
      AOT_OBJS="${AOT_OBJS} fsa-tmp/$t.o" 
    done
    for d in fsa-tmp/*.dll; do
      MONO_PATH=fsa-tmp ${MONO} --aot=${AOT_OPTIONS} $d
      AOT_OBJS="${AOT_OBJS} $d.o" 
    done  
  fi

  $CC -o fsa-tmp/fsacheck.nexe -finstrument-for-thread-suspension -g ../../mono/mini/fsacheck.c ${CC_DEFINES} ${AOT_OBJS} -lmono-2.0 -lpthread -lm -lnacl_dyncode -lg -lnosys -L${MONO_RUNTIME_BASE}/lib -I${MONO_RUNTIME_BASE}/include/mono-2.0  -I${MONO_RUNTIME_BASE}/include ${RELOCATE_RODATA} ${LD_FLAGS}
fi

if [ $MODE = "regression" ]; then
  cd fsa-tmp
  ${NCVAL} --local_cpuid fsacheck.nexe 2> validator_out || echo "fsacheck.nexe invalid: continuing anyway"
  ${NACL_CROSS_PREFIX_DASH}objdump -d fsacheck.nexe > fsacheck.disasm
  for t in $fsatests; do
    ${SEL_LDR} -S -a -B ${IRT} ${SEL_LDR_ARGS} ./fsacheck.nexe $t || true
  done
else
  export MONO_PATH=$(pwd)
  # run generated test(select one or more below)
  if [ $MODE = "normal" ]; then
    ./hw-test
  else
    ${NCVAL} --local_cpuid hw-test.nexe 2> validator_out || echo "hw-test.nexe invalid: continuing anyway"
    ${NACL_CROSS_PREFIX_DASH}objdump -d hw-test.nexe > hw-test.disasm
    ${SEL_LDR} -S -a -B ${IRT} ${SEL_LDR_ARGS} ./hw-test.nexe
  fi
fi

exit 0