Blame view

tools/extras/travis_script.sh 2.89 KB
8dcb6dfcb   Yannick Estève   first commit
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
  #!/bin/bash
  
  # We take into account dependency pointers optionally set in the environment.
  # Typical usage shown below; any one can be safely left unset.
  #   INCDIRS="~/xroot/usr/include"
  #   LIBDIRS="~/xroot/usr/lib /usr/lib/openblas-base"
  #   CXX=clang++-3.8
  #   CFLAGS="-march=native -O2"
  #   LDFLAGS="-llapack"
  #
  # The CI_TARGETS variable is set in Travis environment and passed on as a list
  # of build targets to make (for making different things in separate jobs).
  
  # Maximum make parallelism. Travis VMs have 2 cores, so a value over 3 or 4
  # would probably only cause context switching overhead.
  MAXPAR=4
  
  # Directories with code that can be tested with Travis (space-separated).
  TESTABLE_DIRS="src/"
  
  # Run verbose (run and echo) and exit if failed.
  runvx() {
    local cmd=$(printf ' %q' "$@"); cmd=${cmd:1}
    echo "\$ $cmd"
    eval -- "$cmd" || exit 1
  }
  
  # $(addsw -L foo bar) => "-Lfoo -Lbar".
  addsw() {
    local v=() s=$1; shift;
    for d; do v+=("$s$d"); done
    echo ${v[@]};
  }
  
  # $(mtoken CXX "ccache gcc") => 'CXX=ccache gcc'; $(mtoken CXX ) => ''.
  mtoken() { echo ${2+$1=$2}; }
  
  # Print machine info and environment.
  runvx uname -a
  runvx env
  
  # Check for changes in interesting files, normally sources and CI glue
  # scripts, and report success right away if none.  However, do run tests
  # if TRAVIS_COMMIT_RANGE does not parse. This most likely means the branch
  # was reset by --force, and any file could have changed.
  if git rev-parse "${TRAVIS_COMMIT_RANGE}" >/dev/null 2>&1 && \
     ! git diff --name-only "${TRAVIS_COMMIT_RANGE}" -- ${TESTABLE_DIRS} \
     .travis.yml tools/extras/travis_*.sh | read REPLY
  then
    echo; echo "No changes outside ${TESTABLE_DIRS} in the commit" \
               "range ${TRAVIS_COMMIT_RANGE}; reporting success."
    exit 0;
  fi
  
  # Prepare environment variables.
  CF="$CFLAGS -g $(addsw -I $INCDIRS)"
  LDF="$LDFLAGS $(addsw -L $LIBDIRS)"
  CCC=$(mtoken CXX "$CXX")
  
  # TODO(kkm): Disabling single/double. If needed, use separate Travis jobs.
  # Randomly choose between single and double precision
  #if [[ $(( RANDOM % 2 )) == 1 ]] ; then
  #  DPF="--double-precision=yes"
  #else
    DPF="--double-precision=no"
  #fi
  
  echo "Building tools..." [Time: $(date)]
  runvx cd tools
  runvx make -j$MAXPAR openfst "$CCC" CXXFLAGS="$CF" \
        OPENFST_CONFIGURE="--disable-static --enable-shared --disable-bin --disable-dependency-tracking"
  runvx make -j$MAXPAR cub "$CCC" CXXFLAGS="$CF"
  cd ..
  
  runvx cd src
  runvx touch base/.depend.mk  # Fool make depend into skipping the dependency step.
  runvx touch .short_version   # Make version short, or else ccache will miss everything.
  runvx "$CCC" CXXFLAGS="$CF" LDFLAGS="$LDF" ./configure --shared --use-cuda=no "$DPF" --mathlib=OPENBLAS --openblas-root="$XROOT/usr"
  runvx make -j$MAXPAR $CI_TARGETS CI_NOLINKBINARIES=1
  
  # Travis has a 10k line log limit, so use smaller CI_TARGETS when logging.
  if [ -r "$CCACHE_LOGFILE" ]; then
      runvx cat "$CCACHE_LOGFILE"
  fi
  
  echo "Done." [Time: $(date)]