1#!/bin/bash
2# Stop immediately if any executed command has exit status different from 0.
3set -e
4
5script_name="$(basename "$0")"
6
7fatal() {
8  echo "${script_name}: $*" >&2
9  exit 1
10}
11
12usage() {
13  fatal "Usage: ${script_name} <ARM64|X86_64>"
14}
15
16if [ $# -ne 1 ]; then
17  usage
18fi
19
20if [ "$1" = "X86_64" ]; then
21  export CROSS_COMPILE=
22  export XEN_TARGET_ARCH=x86_64
23elif [ "$1" = "ARM64" ]; then
24  export CROSS_COMPILE=aarch64-linux-gnu-
25  export XEN_TARGET_ARCH=arm64
26else
27  fatal "Unknown configuration: $1"
28fi
29
30if [[ -f /proc/cpuinfo ]]; then
31  PROCESSORS=$(grep -c ^processor /proc/cpuinfo)
32else
33  PROCESSORS=6
34fi
35
36# Variables driving the build
37CC=${CROSS_COMPILE}gcc-12
38CXX=${CROSS_COMPILE}g++-12
39
40runtime_failures_docs() {
41  doc="C-runtime-failures.rst"
42  builddir="automation/eclair_analysis"
43
44  cd "${builddir}"
45  printf "/*\n\n" >"${doc}.c"
46  sed -e 's|\*/|*//*|g' "../../docs/misra/${doc}" >>"${doc}.c"
47
48  # At least a dummy decl is needed to comply with the C standard.
49  printf "\n\n*/\ntypedef int dummy_typedef;\n" >>"${doc}.c"
50
51  # The C language standard applicable to Xen is C99 (with extensions),
52  # therefore even this dummy file needs to be compiled with -std=c99.
53  # Cannot redirect to /dev/null because it would be excluded from the analysis
54  "${CC}" -std=c99 -c "${doc}.c" -o "${doc}.o"
55  cd -
56}
57
58(
59  runtime_failures_docs
60
61  make "-j${PROCESSORS}" "-l${PROCESSORS}.0"    \
62       "CROSS_COMPILE=${CROSS_COMPILE}"         \
63       "CC=${CC}"                               \
64       "CXX=${CXX}"                             \
65       "XEN_TARGET_ARCH=${XEN_TARGET_ARCH}"     \
66       -C xen
67)
68