summaryrefslogtreecommitdiffstats
path: root/src/build/citest/build-script
blob: 7198ed5b24e5c1ce4d74ce0a9e60378aa3f1e7f5 (plain)
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
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
#!/bin/sh
# IBM_PROLOG_BEGIN_TAG
# This is an automatically generated prolog.
#
# $Source: src/build/citest/build-script $
#
# OpenPOWER HostBoot Project
#
# Contributors Listed Below - COPYRIGHT 2014,2019
# [+] International Business Machines Corp.
#
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied. See the License for the specific language governing
# permissions and limitations under the License.
#
# IBM_PROLOG_END_TAG

usage="
$(basename "$0") [-h|--help] [--skipCxxTests] [--skipCopyrightCheck]

Description:
    The original use of this script was for the Hostboot standalone CI job,
    so by default it will run a copyright check, then compile hostboot and
    populate an ODE sandbox and run the CXX test suite in standalone simics.

    Flags have been added to skip the copyright checks and the cxx tests
    for cases where we only want to get a populated sandbox.

Expectations:
    This script is expected to be ran from the top level of the
    hostboot directory. (ie src/build/citest/build-script <params>). It will
    look at env variables PROJECT_ROOT, WORKSPACE, SANDBOXNAME, SANDBOXROOT,
    CHIP, PNOR, CONFIG_FILE, and HOSTBOOT_PROFILE.

Optional Flags:
    -h|--help             shows this help text
    --skipCxxTests        skips the execution of the cxx test suite
    --skipCopyrightCheck  skips the execution of the copyright check
"

if [ -z $PROJECT_ROOT ]; then
    source "$WORKSPACE/env.bash"
fi

while [[ $# -gt 0 ]]
do
key="$1"

case $key in
    --skipCopyrightCheck)
    SKIP_CR_CHECK=1
    shift # past argument
    ;;
    --skipCxxTests)
    SKIP_CXX_TESTS=1
    shift # past argument
    ;;
    -h|--help)
    echo "$usage"
    exit 0
    ;;
    *)
    echo "
!!! Invalid argument \"$1\" passed into ${0} !!!!"
    echo "$usage"
    exit 22
    ;;
esac
done

echo "SKIP_CR_CHECK  = ${SKIP_CR_CHECK}"
echo "SKIP_CXX_TESTS  = ${SKIP_CXX_TESTS}"

source "$PROJECT_ROOT/src/build/citest/setup-env"
echo "#--------------------------------"
echo "SANDBOXROOT=$SANDBOXROOT"
echo "SANDBOXNAME=$SANDBOXNAME"
echo "CHIP=$CHIP"
echo "PNOR=$PNOR"
echo "CONFIG_FILE=$CONFIG_FILE"
echo "#--------------------------------"
#export HOSTBOOT_DEBUG=1    #-- Ensure printkd / tracd is compiled in.

# Force simics into Secure Mode
export SECURITY_HW_POLICY="1"

if [ -z "$SKIP_CR_CHECK" ]; then
    # Check copyright.
    check-copyright > copyright.log 2>&1
    if [ $? -eq 0 ]; then
        echo "----Copyright check succeeded."
        cat copyright.log
    else
        echo "----Copyright check failed."
        cat copyright.log
        exit -1
    fi
fi

# Create simics sandbox.
create-sandbox > create-sandbox.log 2>&1 &
CREATESANDBOX_PID=$!

# normal build is empty quotes
build_opt=""
# code coverage
if [[ ! -z "${HOSTBOOT_PROFILE}" ]]; then
    build_opt="gcov"
# static analysis
elif [[ ! -z "${HOSTBOOT_CPPCHECK}" ]]; then
    build_opt="cppcheck"
    COMPILE_ONLY=1
fi
# Build Hostboot
start_time=$(date)
echo "#--------------------------------"
printf "\n\n$(date): STARTED running \"make -j32 $build_opt\"\n\n"
echo "#--------------------------------"
make -j32 $build_opt || exit -1
make_rc=$?
echo "#--------------------------------"
printf "\n\nrc=$make_rc: $(date): FINISHED running (\"make -j32 $build_opt\" was started at $start_time)\n\n"
echo "#--------------------------------"

if [[ ! -z "${COMPILE_ONLY}" ]]; then
    echo "Compile only"
    exit $make_rc
fi

# Check sandbox create completion.
wait $CREATESANDBOX_PID
if [ $? -eq 0 ]; then
    echo "----Sandbox creation succeeded, here is the log."
    cat create-sandbox.log
else
    echo "----Sandbox creation failed."
    cat create-sandbox.log
    exit -1
fi

# Add Hostboot files to simics sandbox.
start_time=$(date)
echo "#--------------------------------"
printf "\n\n$start_time: STARTED running populate-sandbox....\n\n"
echo "#--------------------------------"
populate-sandbox || exit -1
echo "#--------------------------------"
printf "\n\nrc=$?: $(date): FINISHED running (\"populate-sandbox\" was started at $start_time)\n\n"
echo "#--------------------------------"

if [ -z "$SKIP_CXX_TESTS" ]; then

    if [ "$CHIP" == "FSPBUILD" ]; then
            # Start errl parser building.
            start_time=$(date)
            printf "\n\n$start_time: STARTED running \"build-errl-parsers\"\n\n"
            build-errl-parsers > errl-parsers.log 2>&1 &
            ERRLPARSERS_PID=$!

            # Check errl parser completion.
            wait $ERRLPARSERS_PID
            if [ $? -ne 0 ]; then
                echo "----Error parsers failed."
                cat errl-parsers.log
                exit -1
            else
                printf "\n\n$(date): FINISHED running (\"build-errl-parsers\" was started at $start_time)\n\n"
            fi


    else
            printf "2) CHIP=$CHIP"
            echo "CHIP3=$CHIP"

            # Start CxxTest Simics execution.
            start_time=$(date)
            echo "#--------------------------------"
            printf "\n\n$start_time: STARTED running cxxtest-start.sh....\n\n"
            echo "#--------------------------------"
            cxxtest-start.sh || exit -1
            echo "#--------------------------------"
            printf "\n\nrc=$?: $(date): FINISHED running (\"cxxtest-start.sh\" was started at  $start_time)\n\n"
            echo "#--------------------------------"

    fi

fi

if [[ ! -z "${HOSTBOOT_PROFILE}" ]]; then
    # Generate the code coverage report. Located obj/gcov_report
    # Jenkins will artifact and can display html report
    start_time=$(date)
    echo "#--------------------------------"
    printf "\n\n$start_time: STARTED running \"make lcov\"\n\n"
    echo "#--------------------------------"
    make lcov || exit -1
    echo "#--------------------------------"
    printf "\n\nrc=$?: $(date): FINISHED running (\"make lcov\" was started at  $start_time)\n\n"
    echo "#--------------------------------"
fi
OpenPOWER on IntegriCloud