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