summaryrefslogtreecommitdiffstats
path: root/coverity/do_coverity_rtems
blob: 4801ba03a3f7e8f6af9e592b09c3afe766374756 (plain) (blame)
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
#! /bin/sh
#
#  This script automates running Coverity on RTEMS and submitting
#  the results.
#
#       + Instructions: http://scan.coverity.com/self-build/
#       + Results:      http://scan2.coverity.com:9104/
#
#  You have to have an account to view the results
# 
# NOTE:
#    + You have to be joel to run and submit official results.
#    + build.raw is very important if something goes wrong
# 

#
# TODO:
#   + parse arguments for some of the hard-coded items.
#   + better instructions on setup. Where to download, etc.
#

RTEMS_BIN=/home/joel/rtems-work/tools/4.12/bin
COVERITY=${HOME}/coverity/cov-analysis-linux64-8.7.0/


#
#  Checks the status returned by executables and exits if it is non-zero.
#
check_fatal()
{
  if [ $1 -ne 0 ] ; then
    shift
    echo "ERROR: $*" >&2
    exit 1
  fi
}

echo $#
test $# -eq 2
check_fatal $? "Usage: TARGET BSP"

RTEMS_TARGET=$1
RTEMS_BSP=$2

case ${RTEMS_BSP} in
  erc32) SMP="" ;;
  leon3) SMP="--enable-smp" ;;
  *)  echo "How to run coverity on ${RTEMS_BSP}" ; exit 1
esac

type ${RTEMS_TARGET}-gcc
check_fatal $? "gcc not in path"

test -d ${COVERITY}
check_fatal $? "Coverity path not right"

test -d ${COVERITY}/bin
check_fatal $? "${COVERITY}/bin does not exist"

test ${LOGNAME} = "joel"
check_fatal $? "For now, Coverity must be run by joel"

# Prepend Coverity to our PATH
export PATH=${COVERITY}/bin:$PATH

# # Configure Coverity for this target compiler
rm -rf ${COVERITY}/config/coverity_config.xml
rm -rf ${COVERITY}/config/gcc-config-? ${COVERITY}/config/g++-config-?

cov-configure --gcc
check_fatal $? "could not coverity configure gcc"

cov-configure --comptype gcc --compiler ${RTEMS_TARGET}-gcc --template
check_fatal $? "could not coverity configure gcc"

# Clean build directory and start over
rm     -rf  b-coverity-${RTEMS_TARGET}
check_fatal $? "Could not remove build directory"
mkdir       b-coverity-${RTEMS_TARGET}
check_fatal $? "Could not cd into build directory"
cd          b-coverity-${RTEMS_TARGET}
check_fatal $? "Could not cd into build directory"

# Configure RTEMS
$r/configure --target=${RTEMS_TARGET} \
  ${SMP} --disable-networking --disable-tests \
  --enable-rtemsbsp=${RTEMS_BSP} >c.log 2>&1
check_fatal $? "could not configure RTEMS"

# Build RTEMS
cov-build --dir cov-int make >b.log 2>&1
check_fatal $? "could not make RTEMS"

# Did we have problems loading the Coverity dynamic library?
grep -i "ERROR: ld.so:.*" b.log >/dev/null
if [ $? -ne 1 ] ; then
  check_fatal 1 "Looks like you have dynamic library issues with Coverity."
fi

# Did Coverity report something bad?
# grep -i cata cov-int/build-log.txt >/dev/null
# if [ $? -ne 1 ] ; then
#   check_fatal 1 "Catastrophic failures reported by coverity."
# fi

# Did Coverity report that it had no results?
grep -i "No files were emitted" cov-int/build-log.txt >/dev/null
if [ $? -ne 1 ] ; then
  check_fatal 1 "No output from Coverity.  Something went wrong."
fi

# Now create the tar file that Coverity wants
tar czvf rtems-coverity.tar.gz cov-int
check_fatal $? "could not make project.tgz"

curl --form token=ce5hazuV \
  --form email=joel.sherrill@gmail.com \
  --form file=@rtems-coverity.tar.gz \
  --form version="4.11.99.0" \
  --form description="Master (${RTEMS_BSP})" \
  https://scan.coverity.com/builds?project=RTEMS

# Ran completed OK
exit 0